Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Conector de Apache Iceberg

Última actualización: Sep 03, 2026

Este tema describe cómo utilizar el conector de Apache Iceberg.

Contexto

Apache Iceberg es un formato de tabla de data lake abierto. Puede usar Apache Iceberg para crear rápidamente su propio servicio de almacenamiento de data lake en HDFS o en OSS en la nube, y utilizar motores de cómputo del ecosistema de big data de código abierto, como Flink, Spark, Hive y Presto, para realizar análisis de data lake.

Categoría

Descripción

Tipos compatibles

Tabla de origen, tabla de destino y destino de ingesta de datos

Modos de ejecución

Modo por lotes y modo streaming

Formato de datos

No aplica

Métricas específicas

Ninguna

Tipos de API

SQL, trabajo YAML de ingesta de datos

Admite actualización o eliminación de datos en tablas de destino

Sí

Funciones

El conector de Apache Iceberg ofrece las siguientes funciones:

  • Crea un servicio de almacenamiento de data lake ligero y de bajo costo basado en HDFS o object storage.

  • Proporciona semántica ACID completa.

  • Admite consultas de viaje en el tiempo para acceder a versiones históricas de los datos.

  • Permite un filtrado eficiente de datos.

  • Admite la evolución de esquemas.

  • Admite la evolución de particiones.

Nota

Utilice las capacidades de tolerancia a fallos y procesamiento de flujos de Flink para importar grandes volúmenes de datos de registros a un data lake de Apache Iceberg en tiempo real. Posteriormente, puede usar Flink u otros motores de análisis para extraer valor de los datos.

Límites

  • El conector de Apache Iceberg solo es compatible con Realtime Compute for Apache Flink que utiliza Ververica Runtime (VVR) 4.0.8 o posterior. El conector de Apache Iceberg debe usarse con un catálogo de Data Lake Formation (DLF). Para obtener más información, consulte Manage DLF-Legacy catalogs.

  • El conector de Apache Iceberg admite los formatos de tabla v1 y v2 de Apache Iceberg. Para obtener más información, consulte la Especificación de tabla de Iceberg.

    Nota

    Solo Realtime Compute for Apache Flink con VVR 8.0.7 o posterior admite el formato de tabla v2.

  • En el modo de lectura streaming, solo puede usar tablas de Iceberg de tipo append-only como tablas de origen.

Sintaxis

CREATE TABLE iceberg_table (
  id    BIGINT,
  data  STRING
  PRIMARY KEY(`id`) NOT ENFORCED
)
 PARTITIONED BY (data)
 WITH (
 'connector' = 'iceberg',
  ...
);

Opciones WITH

Opciones comunes

Parámetro

Descripción

Tipo

Obligatorio

Predeterminado

Observaciones

connector

El tipo de conector.

String

Sí

Ninguna

El valor debe sericeberg.

catalog-name

El nombre del catálogo.

String

Sí

Ninguna

Introduzca un nombre personalizado en inglés.

catalog-database

El nombre de la base de datos.

String

Sí

default

El nombre de su base de datos en Data Lake Formation (DLF), por ejemplo, dlf_db.

Nota

Si no cuenta con una base de datos de Data Lake Formation (DLF), cree una primero.

io-impl

La clase de implementación para el sistema de archivos distribuido.

String

Sí

Ninguna

El valor debe serorg.apache.iceberg.aliyun.oss.OSSFileIO.

oss.endpoint

El endpoint de Object Storage Service (OSS) de Alibaba Cloud.

String

No

Ninguna

Para obtener más información, consulte Regions and Endpoints.

Nota
  • Se recomienda establecer el parámetro oss.endpoint en el endpoint de VPC para OSS. Por ejemplo, si selecciona la región China (Hangzhou), configure el parámetro oss.endpoint como oss-cn-hangzhou-internal.aliyuncs.com.

  • Si necesita acceder a OSS a través de varias VPC, consulte How do I access other services across VPCs?

  • access.key.id: para VVR 8.0.6 y anteriores

  • access-key-id: para VVR 8.0.7 y posteriores

El ID de AccessKey de su cuenta de Alibaba Cloud.

String

Sí

Ninguna

Para obtener más información, consulte How do I view the AccessKey ID and AccessKey secret?

Importante

Para evitar que su información de AccessKey se filtre, se recomienda utilizar variables para especificar los valores de AccessKey. Para obtener más información, consulte Project variables.

  • access.key.secret: para VVR 8.0.6 y anteriores

  • access-key-secret: para VVR 8.0.7 y posteriores

El secreto de AccessKey de su cuenta de Alibaba Cloud.

String

Sí

Ninguna

catalog-impl

El nombre de la clase del catálogo.

String

Sí

Ninguna

El valor debe serorg.apache.iceberg.aliyun.dlf.DlfCatalog.

warehouse

La ruta de OSS para almacenar los datos de la tabla.

String

Sí

Ninguna

Ninguna

dlf.catalog-id

El ID de su cuenta de Alibaba Cloud.

String

Sí

Ninguna

Puede obtener el ID de la cuenta en la página User Information.

dlf.endpoint

El endpoint de Data Lake Formation (DLF).

String

Sí

Ninguna

.

Nota
  • Se recomienda establecer el parámetro dlf.endpoint en el endpoint de VPC de DLF. Por ejemplo, si selecciona la región China (Hangzhou), configure el parámetro dlf.endpoint como dlf-vpc.cn-hangzhou.aliyuncs.com.

  • Si necesita acceder a DLF a través de varias VPC, consulte Workspace management and operations

dlf.region-id

La región de Data Lake Formation (DLF).

String

Sí

Ninguna

.

Nota

Asegúrese de que la región coincida con la región especificada en el parámetro dlf.endpoint.

Opciones exclusivas de destino

Parámetro

Descripción

Tipo

Obligatorio

Predeterminado

Observaciones

write.operation

El modo de operación de escritura.

String

No

upsert

  • upsert (predeterminado): Actualiza datos.

  • insert: Agrega datos.

  • bulk_insert: Realiza una inserción masiva sin actualizar los datos existentes.

hive_sync.enable

Especifica si se deben sincronizar los metadatos con Hive.

Boolean

No

false

Valores válidos:

  • true: Habilita la sincronización.

  • false (predeterminado): Deshabilita la sincronización.

hive_sync.mode

El modo de sincronización de metadatos de Hive.

String

No

hms

  • hms (predeterminado): Establezca este valor si utiliza un catálogo DLF.

  • jdbc: Establezca este valor si utiliza un catálogo JDBC.

hive_sync.db

El nombre de la base de datos de Hive con la que se sincronizan los datos.

String

No

El nombre de la base de datos de la tabla actual en el catálogo.

Ninguna

hive_sync.table

El nombre de la tabla de Hive con la que se sincronizan los datos.

String

No

El nombre de la tabla actual.

Ninguna

dlf.catalog.region

La región de Data Lake Formation (DLF).

String

No

Ninguna

.

Nota
  • El parámetro dlf.catalog.region solo surte efecto cuando el parámetro hive_sync.mode está configurado comohms.

  • Asegúrese de que la región coincida con la región especificada en el parámetro dlf.catalog.endpoint.

dlf.catalog.endpoint

El endpoint de Data Lake Formation (DLF).

String

No

Ninguna

.

Nota
  • El parámetro dlf.catalog.endpoint solo surte efecto cuando el parámetro hive_sync.mode está configurado como hms.

  • Se recomienda establecer el parámetro dlf.catalog.endpoint en el endpoint de VPC de DLF. Por ejemplo, si selecciona la región China (Hangzhou), configure el parámetro dlf.catalog.endpoint como dlf-vpc.cn-hangzhou.aliyuncs.com.

  • Si necesita acceder a DLF a través de varias VPC, consulte Workspace management and operations

Mapeo de tipos de datos

Tipo de Iceberg

Tipo de Flink

BOOLEAN

BOOLEAN

INT

INT

LONG

BIGINT

FLOAT

FLOAT

DOUBLE

DOUBLE

DECIMAL(P,S)

DECIMAL(P,S)

DATE

DATE

TIME

TIME

Nota

Las marcas de tiempo de Iceberg tienen precisión de microsegundos, mientras que las de Flink tienen precisión de milisegundos. Cuando usa Flink para leer datos de Iceberg, Flink convierte la precisión temporal a milisegundos.

TIMESTAMP

TIMESTAMP

TIMESTAMPTZ

TIMESTAMP_LTZ

STRING

STRING

FIXED(L)

BYTES

BINARY

VARBINARY

STRUCT<...>

ROW

LIST<E>

LIST

MAP<K,V>

MAP

Ejemplos

Asegúrese de contar con un bucket de OSS y una base de datos de Data Lake Formation (DLF). Para obtener más información, consulte Create a bucket y Databases, tables, and functions.

Nota

Cuando especifique una path para su base de datos de Data Lake Formation (DLF), se recomienda seguir el formato ${warehouse}/${database_name}.db. Por ejemplo, si la dirección del almacén es oss://iceberg-test/warehouse y el nombre de la base de datos es dlf_db, establezca la ruta de OSS de dlf_db como oss://iceberg-test/warehouse/dlf_db.db.

Ejemplo de tabla de destino

Este ejemplo utiliza el conector Datagen para generar datos streaming aleatorios y escribirlos en una tabla de Iceberg.

CREATE TEMPORARY TABLE datagen(
  id    BIGINT,
  data  STRING
) WITH (
  'connector' = 'datagen'
);

CREATE TEMPORARY TABLE dlf_iceberg (
  id    BIGINT,
  data  STRING
) WITH (
  'connector' = 'iceberg',
  'catalog-name' = '<yourCatalogName>',
  'catalog-database' = '<yourDatabaseName>',
  'io-impl' = 'org.apache.iceberg.aliyun.oss.OSSFileIO',
  'oss.endpoint' = '<yourOSSEndpoint>',  
  'access.key.id' = '${secret_values.ak_id}',
  'access.key.secret' = '${secret_values.ak_secret}',
  'catalog-impl' = 'org.apache.iceberg.aliyun.dlf.DlfCatalog',
  'warehouse' = '<yourOSSWarehousePath>',
  'dlf.catalog-id' = '<yourCatalogId>',
  'dlf.endpoint' = '<yourDLFEndpoint>',  
  'dlf.region-id' = '<yourDLFRegionId>'
);

INSERT INTO dlf_iceberg SELECT * FROM datagen;

Ejemplos de tablas de origen

  • Use un catálogo DLF para escribir datos desde una tabla de origen de Iceberg hacia una tabla de destino de Iceberg.

    CREATE TEMPORARY TABLE src_iceberg (
      id    BIGINT,
      data  STRING
    ) WITH (
      'connector' = 'iceberg',
      'catalog-name' = '<yourCatalogName>',
      'catalog-database' = '<yourDatabaseName>',
      'io-impl' = 'org.apache.iceberg.aliyun.oss.OSSFileIO',
      'oss.endpoint' = '<yourOSSEndpoint>',  
      'access.key.id' = '${secret_values.ak_id}',
      'access.key.secret' = '${secret_values.ak_secret}',
      'catalog-impl' = 'org.apache.iceberg.aliyun.dlf.DlfCatalog',
      'warehouse' = '<yourOSSWarehousePath>',
      'dlf.catalog-id' = '<yourCatalogId>',
      'dlf.endpoint' = '<yourDLFEndpoint>',  
      'dlf.region-id' = '<yourDLFRegionId>'
    );
    
    CREATE TEMPORARY TABLE dst_iceberg (
      id    BIGINT,
      data  STRING
    ) WITH (
      'connector' = 'iceberg',
      'catalog-name' = '<yourCatalogName>',
      'catalog-database' = '<yourDatabaseName>',
      'io-impl' = 'org.apache.iceberg.aliyun.oss.OSSFileIO',
      'oss.endpoint' = '<yourOSSEndpoint>',  
      'access.key.id' = '${secret_values.ak_id}',
      'access.key.secret' = '${secret_values.ak_secret}',
      'catalog-impl' = 'org.apache.iceberg.aliyun.dlf.DlfCatalog',
      'warehouse' = '<yourOSSWarehousePath>',
      'dlf.catalog-id' = '<yourCatalogId>',
      'dlf.endpoint' = '<yourDLFEndpoint>',  
      'dlf.region-id' = '<yourDLFRegionId>'
    );
    
    BEGIN STATEMENT SET;
    
    INSERT INTO src_iceberg VALUES (1, 'AAA'), (2, 'BBB'), (3, 'CCC'), (4, 'DDD'), (5, 'EEE');
    INSERT INTO dst_iceberg SELECT * FROM src_iceberg;
    
    END;

Ingesta de datos

Puede utilizar el conector de Apache Iceberg como destino en un trabajo YAML para la ingesta de datos.

Sintaxis

sink:
  type: iceberg
  name: Iceberg Sink
  catalog.properties.rest.signing-region: cn-beijing
  catalog.properties.uri: http://cn-beijing-vpc.dlf.aliyuncs.com/iceberg
  catalog.properties.warehouse: flink_iceberg
  catalog.properties.type: rest
  catalog.properties.io-impl: org.apache.iceberg.rest.DlfFileIO

Parámetros

Parámetro

Descripción

Obligatorio

Tipo

Predeterminado

Observaciones

type

El tipo de conector.

Sí

STRING

Ninguna

El valor fijo es iceberg.

name

El nombre del destino.

No

STRING

Ninguna

El nombre del destino.

catalog.properties.rest.signing-region

El ID de región de DLF. Para obtener más información, consulte Service endpoints.

Sí

STRING

Ninguna

Ninguna

catalog.properties.uri

La URI utilizada para acceder al catálogo REST de DLF. Para obtener más información, consulte Iceberg REST.

Sí

STRING

Ninguna

Ninguna

catalog.properties.warehouse

El directorio raíz para el almacenamiento de archivos.

Sí

STRING

Ninguna

Ninguna

catalog.properties.warehouse

El directorio raíz para el almacenamiento de archivos.

No

STRING

Ninguna

Ninguna

catalog.properties.type

El tipo de catálogo. El valor debe ser rest.

Sí

STRING

rest

Ninguna

catalog.properties.io-impl

El valor debe ser org.apache.iceberg.rest.DlfFileIO.

Sí

STRING

org.apache.iceberg.rest.DlfFileIO

Ninguna

partition.key

La clave de partición para cada tabla particionada.

No

STRING

Ninguna

Puede configurar claves de partición para varias tablas. Separe las definiciones de tabla con punto y coma (;) y las claves de partición con coma (,). Por ejemplo, puede especificar testdb.table1:id1,id2;testdb.table2:name para establecer las claves de partición de la tabla testdb.table1 como id1 e id2, y la clave de partición de la tabla testdb.table2 como name.

Para las particiones que requieren transformaciones implícitas, agregue la función de transformación directamente al campo de partición. Ejemplo: testdb.table1:truncate[10](id);testdb.table2:hour(create_time);testdb.table3:day(create_time);testdb.table4:month(create_time);testdb.table5:year(create_time);testdb.table6:bucket[10](create_time).

table.properties.*

Los parámetros para crear una tabla de Iceberg.

No

String

Ninguna

Para obtener más información, consulte Opciones de tabla de Iceberg.

Reutilizar un catálogo existente

A partir de VVR 11.5, puede hacer referencia directa a un catálogo integrado de Iceberg creado en la página Data Management dentro de un trabajo de ingesta de datos de Flink CDC. Esto simplifica su configuración al reducir la cantidad de propiedades de conexión obligatorias.

sink:
  type: iceberg
  using.built-in-catalog: iceberg_catalog

Los trabajos de ingesta de datos pueden reutilizar automáticamente todos los parámetros del catálogo de Iceberg. Esto equivale a configurar manualmente los parámetros con el prefijo catalog.properties. en su trabajo YAML.

Si desea anular los parámetros reutilizados, puede especificar explícitamente los parámetros YAML correspondientes. Estos parámetros tendrán prioridad.

Ejemplo

A continuación se muestra un ejemplo de cómo usar un catálogo DLF como catálogo de Iceberg y escribir datos en Data Lake Formation (DLF):

  • Para obtener información sobre los parámetros con el prefijo catalog.properties, consulte Create an Iceberg DLF catalog.

    source:
      type: mysql
      name: MySQL Source
      hostname: ${secret_values.mysql.hostname}
      port: ${mysql.port}
      username: ${secret_values.mysql.username}
      password: ${secret_values.mysql.password}
      tables: ${mysql.source.table}
      server-id: 8601-8604
    
    sink:
      type: iceberg
      name: Iceberg Sink
      catalog.properties.rest.signing-region: cn-beijing
      catalog.properties.uri: http://cn-beijing-vpc.dlf.aliyuncs.com/iceberg
      catalog.properties.warehouse: flink_iceberg
      catalog.properties.type: rest
      catalog.properties.io-impl: org.apache.iceberg.rest.DlfFileIO

Cambios de esquema

Cuando se utiliza como destino de ingesta de datos, el conector de Apache Iceberg admite los siguientes cambios de esquema:

  • CREATE TABLE

  • ADD COLUMN

  • ALTER COLUMN TYPE (No se admite la modificación del tipo de una columna de clave principal).

  • RENAME COLUMN

  • DROP COLUMN

  • TRUNCATE TABLE

  • DROP TABLE

Nota

Si la tabla de Iceberg descendente ya existe, el trabajo utiliza el esquema de la tabla existente para las escrituras y no vuelve a crear la tabla.

Documentación relacionada

Para obtener más información sobre los conectores compatibles con Flink, consulte Supported connectors.