Apache Flink 支持直接创建 Iceberg 表,无需在 Flink SQL 中创建显式 Flink 目录。这意味着我们可以通过在 Flink SQL 中指定 ‘connector’=‘iceberg’ 表选项来创建一个 Iceberg 表,与 Flink 官方文档中的用法类似。
在 Flink 中,SQL CREATE TABLE 测试 (…)WITH (‘connector’=‘iceberg’, …) 会在当前 Flink 目录中创建一个 Flink 表(默认使用 GenericInMemoryCatalog),它只是映射到底层的 Iceberg表而不是直接在当前 Flink 目录中维护 Iceberg 表。
为了在 Flink SQL 中使用 SQL 语法 CREATE TABLE test (…)WITH (‘connector’=‘iceberg’, …) 创建表,Flink Iceberg Connector 提供了以下表属性:
在执行以下SQL之前,请确保您已经按照快速入门文档正确配置了Flink SQL客户端。
以下SQL将在当前Flink目录中创建一个Flink表,该表映射到iceberg目录中管理的iceberg表default_database.flink_table。
CREATE TABLE flink_table (
id BIGINT,
data STRING
) WITH (
'connector'='iceberg',
'catalog-name'='hive_prod',
'uri'='thrift://localhost:9083',
'warehouse'='hdfs://nn:8020/path/to/warehouse'
);
如果您想创建一个Flink表映射到Hive目录中管理的不同iceberg表(例如Hive中的hive_db.hive_iceberg_table),那么您可以按如下方式创建Flink表:
CREATE TABLE flink_table (
id BIGINT,
data STRING
) WITH (
'connector'='iceberg',
'catalog-name'='hive_prod',
'catalog-database'='hive_db',
'catalog-table'='hive_iceberg_table',
'uri'='thrift://localhost:9083',
'warehouse'='hdfs://nn:8020/path/to/warehouse'
);
向 Flink 表写入记录时,如果底层目录数据库(上例中的 hive_db)不存在,则会自动创建。
以下 SQL 将在当前 Flink 目录中创建一个 Flink 表,该表映射到 com.my.custom.CatalogImpl 类型的自定义目录中管理的iceberg表 default_database.flink_table。
CREATE TABLE flink_table (
id BIGINT,
data STRING
) WITH (
'connector'='iceberg',
'catalog-name'='custom_prod',
'catalog-impl'='com.my.custom.CatalogImpl',
-- More table properties for the customized catalog
'my-additional-catalog-config'='my-value',
...
);
以Hive目录为例:
CREATE TABLE flink_table (
id BIGINT,
data STRING
) WITH (
'connector'='iceberg',
'catalog-name'='hive_prod',
'uri'='thrift://localhost:9083',
'warehouse'='file:///path/to/warehouse'
);
INSERT INTO flink_table VALUES (1, 'AAA'), (2, 'BBB'), (3, 'CCC');
SET execution.result-mode=tableau;
SELECT * FROM flink_table;
+----+------+
| id | data |
+----+------+
| 1 | AAA |
| 2 | BBB |
| 3 | CCC |
+----+------+
3 rows in set