Uso de tablas de Apache Hudi en Athena para Spark - Amazon Athena

Uso de tablas de Apache Hudi en Athena para Spark

Apache Hudi es un marco de administración de datos de código abierto que simplifica el procesamiento incremental de datos. Las acciones de inserción, actualización, modificación y eliminación a nivel de registro se procesan con mayor precisión, lo que reduce la sobrecarga.

Para usar las tablas de Apache Hudi en Athena para Spark, configure las siguientes propiedades de Spark. Estas propiedades se configuran de forma predeterminada en la consola Athena para Spark cuando elige Apache Hudi como formato de tabla. Para ver los pasos, consulte Paso 4: editar los detalles de la sesión o Paso 7: crear su propio cuaderno.

"spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.serializer": "org.apache.spark.serializer.KryoSerializer", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension"

En el siguiente procedimiento, se muestra cómo utilizar una tabla de Apache Hudi en un cuaderno de Athena para Spark. Ejecute cada paso en una nueva celda del cuaderno.

Para usar una tabla de Apache Hudi en Athena para Spark
  1. Defina las constantes que se utilizarán en el cuaderno.

    DB_NAME = "NEW_DB_NAME" TABLE_NAME = "NEW_TABLE_NAME" TABLE_S3_LOCATION = "s3://amzn-s3-demo-bucket"
  2. Cree un DataFrame de Apache Spark.

    columns = ["language","users_count"] data = [("Golang", 3000)] df = spark.createDataFrame(data, columns)
  3. Cree una base de datos.

    spark.sql("CREATE DATABASE {} LOCATION '{}'".format(DB_NAME, TABLE_S3_LOCATION))
  4. Cree una tabla de Apache Hudi vacía.

    spark.sql(""" CREATE TABLE {}.{} ( language string, users_count int ) USING HUDI TBLPROPERTIES ( primaryKey = 'language', type = 'mor' ); """.format(DB_NAME, TABLE_NAME))
  5. Inserte una fila de datos en la tabla.

    spark.sql("""INSERT INTO {}.{} VALUES ('Golang', 3000)""".format(DB_NAME,TABLE_NAME))
  6. Confirme que puede consultar la nueva tabla.

    spark.sql("SELECT * FROM {}.{}".format(DB_NAME, TABLE_NAME)).show()