Todos los productos
Search
Centro de documentos

E-MapReduce:Conector Iceberg

Última actualización: Sep 17, 2026

Iceberg es un formato de tabla abierto para data lakes. El conector Iceberg le permite consultar archivos de datos en este formato.

Contexto

Para obtener más información sobre Iceberg, consulte Iceberg.

El conector Iceberg de Alibaba Cloud E-MapReduce (EMR) es compatible con las funciones que ofrece el conector Iceberg de la comunidad de código abierto. Además, gracias a una optimización profunda, el conector Iceberg de EMR proporciona las siguientes características:

  • Filtrado dinámico

  • Operaciones de lectura en tablas Iceberg V2

  • Pushdown de filtros de Iceberg

En este tema se describe la siguiente información sobre el conector Iceberg:

Requisitos previos

Cree un clúster de Hadoop con el servicio Presto desplegado o bien un clúster de Presto. Para obtener más información, consulte Create a cluster.

Límites

Solo los clústeres de Hadoop o Presto de EMR V3.38.0 y versiones posteriores admiten el conector Iceberg.

Configurar el conector Iceberg

Modifique la configuración del conector Iceberg. Para obtener más información, consulte Configure connectors.

Configuración predeterminada

En la consola de EMR, vaya a la Configure página del servicio Presto. En la sección Service Configuration, haga clic en la pestaña iceberg.properties. Busque el parámetro hive.metastore.uri, que especifica el URI para conectarse a Hive Metastore mediante el protocolo Thrift. Modifique el valor del parámetro según sus necesidades reales. El formato predeterminado es thrift://emr-header-1.cluster-24****:9083.

Parámetros

En la consola de EMR, vaya a la página del servicio Presto y haga clic en la pestaña Configure. En la sección Service Configuration, haga clic en la pestaña iceberg.properties y luego en Custom Configuration. A continuación puede agregar los siguientes elementos de configuración.

Elemento de configuraciónDescripción
iceberg.file-format Formato de archivo en el que se almacenan los datos de las tablas Iceberg. Valores válidos:
  • ORC. Este es el valor predeterminado.
  • PARQUET.
iceberg.compression-codecFormato de compresión que se utiliza al escribir archivos. Valores válidos:
  • GZIP. Este es el valor predeterminado.
  • ZSTD.
  • LZ4.
  • SNAPPY.
  • NONE.
iceberg.max-partitions-per-writerNúmero máximo de particiones cuyos datos puede procesar cada escritor. Valor predeterminado: 100.

Ejemplo: consultar datos en una tabla Iceberg

Utilice la sintaxis SQL básica de Presto para consultar datos en una tabla Iceberg.

  1. Inicie sesión en el nodo maestro de su clúster mediante SSH. Para obtener más información, consulte Log on to a cluster.

  2. Ejecute el siguiente comando para conectarse al cliente de Presto:

    presto --server emr-header-1:9090 --catalog iceberg --schema default

    Si se devuelve la siguiente información, la conexión con el cliente de Presto se estableció correctamente:

    presto:default>
  3. Ejecute el siguiente comando para crear una tabla llamada iceberg_test:

    create table iceberg_test(id int);
  4. Ejecute el siguiente comando para insertar datos en la tabla iceberg_test:

    insert into iceberg_test values(1),(2);
  5. Ejecute el siguiente comando para consultar los datos de la tabla iceberg_test:

    select * from iceberg_test;

    Se devuelve la siguiente información:

     id
    ----
     1
     2

Sentencias SQL

El conector Iceberg permite leer y escribir datos en una tabla Iceberg, así como leer y escribir metadatos de la tabla. Además de las sentencias SQL básicas, este conector admite las sentencias que se describen en la siguiente tabla.

Sentencia SQL

Descripción

INSERT

Para obtener más información, consulte INSERT en la documentación oficial de Presto.

DELETE

Consulte la sección Delete data by partition de este tema.

Para obtener más información, consulte DELETE en la documentación oficial de Presto.

Gestión de esquemas y tablas

Consulte la sección Partition a table de este tema.

Para obtener más información, consulte Schema and table management en la documentación oficial de Presto.

Gestión de vistas materializadas

Consulte la sección Manage materialized views de este tema.

Para obtener más información, consulte Materialized views management en la documentación oficial de Presto.

Gestión de vistas

Para obtener más información, consulte Views management en la documentación oficial de Presto.

Particionar una tabla

El conector Iceberg utiliza las funciones descritas en la siguiente tabla para particionar una tabla.

Función

Descripción

year(ts)

Particiona una tabla por año. Devuelve la diferencia en años entre el valor de ts y el 1 de enero de 1970.

month(ts)

Particiona una tabla por mes. Devuelve la diferencia en meses entre el valor de ts y el 1 de enero de 1970.

day(ts)

Particiona una tabla por día. Devuelve la diferencia en días entre el valor de ts y el 1 de enero de 1970.

hour(ts)

Particiona una tabla por hora. Devuelve una marca de tiempo basada en el valor de ts e ignora los minutos y segundos de dicho valor.

bucket(x, nbuckets)

Aplica un particionamiento por hash a los datos y los distribuye en un número específico de buckets. Devuelve el valor hash entero de x, el cual se encuentra dentro del rango [0, nbuckets - 1).

truncate(s, nchars)

Devuelve los primeros nchars caracteres de s.

Ejemplo: particione una tabla llamada customer_orders con base en el mes incluido en el valor de order_date, el valor hash de account_number (cantidad de buckets: 10) y country.

CREATE TABLE iceberg.testdb.customer_orders (
    order_id BIGINT,
    order_date DATE,
    account_number BIGINT,
    customer VARCHAR,
    country VARCHAR)
WITH (partitioning = ARRAY['month(order_date)', 'bucket(account_number, 10)', 'country'])

Eliminar datos por partición

Si incluye una cláusula WHERE en una sentencia DELETE para filtrar particiones de una tabla particionada, el conector Iceberg elimina las particiones que cumplen las condiciones de filtro. Por ejemplo, ejecute la siguiente sentencia para eliminar de la tabla customer_orders todas las particiones que cumplan la condición de filtro country=US:

DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US'

El conector Iceberg solo permite eliminar datos por partición. Por ejemplo, la ejecución de la siguiente sentencia falla porque la cláusula WHERE filtra filas específicas dentro de las particiones:

DELETE FROM iceberg.testdb.customer_orders
WHERE country = 'US' AND customer = 'Freds Foods'

Revertir a una instantánea

Las tablas Iceberg admiten instantáneas.

El conector Iceberg proporciona una tabla de instantáneas del sistema para cada tabla Iceberg. Las instantáneas de cada tabla se identifican mediante ID de instantánea del tipo de datos BIGINT. Por ejemplo, ejecute la siguiente sentencia para consultar los ID de instantánea más recientes de la tabla customer_orders:

SELECT snapshot_id FROM iceberg.testdb."customer_orders$snapshots" ORDER BY committed_at DESC LIMIT 1

Ejecute la siguiente sentencia para revertir el estado de la tabla a una instantánea específica mediante su ID:

CALL iceberg.system.rollback_to_snapshot('testdb', 'customer_orders', 895459706749342****)

Consultar particiones de una tabla del sistema

El conector Iceberg permite consultar las particiones de una tabla del sistema. Por ejemplo, ejecute la siguiente sentencia para consultar las particiones de la tabla customer_orders. La información de las particiones incluye el valor máximo y mínimo de cada columna de clave de partición.

SELECT * FROM iceberg.testdb."customer_orders$partitions"

Propiedades de las tablas Iceberg

En la siguiente tabla se describen las propiedades de las tablas Iceberg.

PropiedadDescripción
formatEspecifica el formato de archivo en el que se almacenan los datos de las tablas Iceberg. Valores válidos:
  • ORC. Este es el valor predeterminado.
  • PARQUET.
partitioningEspecifica las columnas de clave de partición.

Por ejemplo, si una tabla contiene las columnas de clave de partición c1 y c2, esta propiedad se establece en ARRAY['c1', 'c2'].

locationEspecifica el URI del sistema de archivos que almacena las tablas.

En la siguiente sentencia de ejemplo, la propiedad format se establece en PARQUET, partitioning en ARRAY['c1', 'c2'] y location en

/var/my_tables/test_table

:

CREATE TABLE test_table (
    c1 integer,
    c2 date,
    c3 double)
WITH (
    format = 'PARQUET',
    partitioning = ARRAY['c1', 'c2'],
    location = '/var/my_tables/test_table')

Gestionar vistas materializadas

El conector Iceberg admite vistas materializadas. Cada vista materializada consta de una definición de vista y una tabla Iceberg. El nombre de la tabla se almacena como una propiedad de la vista materializada y los datos se guardan en dicha tabla Iceberg.

En la siguiente tabla se describen las sentencias que se pueden ejecutar en las vistas materializadas.

SentenciaDescripción
CREATE MATERIALIZED VIEWCrea una vista materializada.
Utilice las propiedades de la tabla Iceberg para definir su formato de almacenamiento. Por ejemplo, establezca format en ORC y partitioning en ARRAY['event_date'] dentro de la cláusula WITH para almacenar los datos de la tabla Iceberg en archivos ORC y particionarla por día.
WITH ( format = 'ORC', partitioning = ARRAY['event_date'] )
REFRESH MATERIALIZED VIEWActualiza los datos de una vista materializada.
Después de ejecutar la sentencia, se eliminan los datos de la tabla Iceberg. Luego se insertan en la vista materializada los resultados de la consulta definida por esta misma.
Importante Existe una ventana de tiempo breve entre las operaciones de eliminación e inserción. Si la operación de inserción falla mientras la vista materializada está vacía, esta permanecerá sin datos.

También puede ejecutar esta sentencia para eliminar la definición y la tabla Iceberg de una vista materializada.