es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Ejemplo para CREAR TABLA en TRINO usando HUDI

Estoy utilizando Spark Structured Streaming (3.1.1) para leer datos de Kafka y utilizar HUDI (0.8.0) como sistema de almacenamiento en S3, particionando los datos por fecha. (no hay problemas con esta sección)

Estoy buscando utilizar Trino (355) para poder consultar esos datos. Como requisito previo, ya he colocado el archivo hudi-presto-bundle-0.8.0.jar en /data/trino/hive/

He creado una tabla con el siguiente esquema
CREATE TABLE table_new (
columns, dt
) WITH (
partitioned_by = ARRAY['dt'],
external_location = 's3a://bucket/location/',
format = 'parquet'
);

Incluso después de llamar a la siguiente función, trino no puede descubrir ninguna partición
CALL system.sync_partition_metadata('schema', 'table_new', 'ALL')

Mi evaluación es que no puedo crear una tabla en Trino usando HUDI en gran parte debido al hecho de que no puedo pasar los valores correctos en las Opciones WITH.
Tampoco puedo encontrar un ejemplo de creación de tabla en la documentación de HUDI.

Realmente apreciaría si alguien puede darme un ejemplo de eso, o señalarme en la dirección correcta, en caso de que haya pasado por alto algo.

Aprecio realmente la ayuda.


Actualización pequeña:
Intenté agregar
connector = 'hudi'
pero esto arroja el error:
Catalog 'hive' no admite la propiedad de tabla 'connector'

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Según el mensaje de error, la opción “connector” no es compatible con el catálogo “hive”. Esto sugiere que necesitas utilizar un catálogo diferente que admita el conector “hudi”. Una opción es utilizar el catálogo “hudi” en sí mismo, el cual debería proporcionar las opciones necesarias para crear una tabla respaldada por “hudi”.

    Aquí tienes un ejemplo de cómo puedes crear una tabla en Trino utilizando el catálogo “hudi” y el conector “hudi”:

    CREATE TABLE table_new (
      columns, dt
    )
    WITH (
      partitioned_by = ARRAY['dt'], 
      format = 'parquet',
      hudi = 'true',
      hudi_storage_type = 'COPY_ON_WRITE',
      hudi_precombine_key = 'columns',
      hudi_partition_fields = 'dt',
      hudi_table_type = 'MERGE_ON_READ',
      hudi_record_key = 'columns',
      hudi_nullable_fields = '',
      hudi_keygen_class = 'org.apache.hudi.keygen.NonpartitionedKeyGenerator',
      external_location = 's3a://bucket/location/'
    );
    

    En el ejemplo anterior, estamos creando una tabla con el mismo esquema que antes, pero con opciones adicionales específicas del conector “hudi”.

    La opción “hudi” se establece en “true” para indicar que esta tabla está respaldada por “hudi”.

    La opción “hudi_storage_type” se utiliza para especificar el tipo de almacenamiento utilizado por “hudi”. En este caso, estamos utilizando el tipo de almacenamiento “Copy on Write”.

    La opción “hudi_precombine_key” se utiliza para especificar el campo utilizado para la precombinación de registros durante la operación de actualización.

    La opción “hudi_partition_fields” se utiliza para especificar el campo utilizado para particionar los datos en “hudi”.

    La opción “hudi_table_type” se utiliza para especificar el tipo de tabla utilizado por “hudi”. En este caso, estamos utilizando el tipo de tabla “Merge on Read”.

    La opción “hudi_record_key” se utiliza para especificar el campo utilizado como clave de registro por “hudi”.

    La opción “hudi_nullable_fields” se utiliza para especificar los campos que pueden ser nulos en la tabla.

    La opción “hudi_keygen_class” se utiliza para especificar la función de generación de claves utilizada por “hudi”.

    Por último, la opción “external_location” especifica la ruta en S3 donde se almacenan los datos.

    Una vez que hayas creado la tabla utilizando la sintaxis anterior, deberías poder descubrir las particiones utilizando la función “sync_partition_metadata”.

Comments are closed.