在 Flink SQL 中,直接为表的字段添加注释并不是内置的功能。然而,您可以在表创建之后,通过外部文档系统或者注释管理工具来维护这些字段的注释。如果您希望在 SQL 语句中保留这些注释以便于阅读和理解,您可以将它们作为 SQL 语句中的注释包含进去,尽管这些注释不会被 Flink 作为元数据存储。
以下是一个示例,展示了如何在 SQL 语句中添加字段注释,作为 SQL 注释的一部分:
sql复制代码
CREATE TABLE IF NOT EXISTS iceberg_catalog.iceberg_database.test_table2 ( | |
`batch_id` STRING NOT NULL COMMENT '批次ID,不允许为空', -- 字段注释 | |
`tenant_id` BIGINT NOT NULL COMMENT '租户ID,不允许为空', -- 字段注释 | |
`channel` STRING NOT NULL COMMENT '渠道,不允许为空', -- 字段注释 | |
`channel_app_id` STRING NOT NULL COMMENT '渠道应用ID,不允许为空', -- 字段注释 | |
`source_id_str` STRING NOT NULL COMMENT '源ID(字符串类型),不允许为空', -- 字段注释 | |
`source_id_num` BIGINT COMMENT '源ID(数字类型),允许为空', -- 字段注释 | |
`source_from_id` STRING COMMENT '源来自ID,允许为空', -- 字段注释 | |
`dest_id_str` STRING COMMENT '目标ID(字符串类型),允许为空', -- 字段注释 | |
`dest_id_num` BIGINT COMMENT '目标ID(数字类型),允许为空', -- 字段注释 | |
`dest_from_id` STRING COMMENT '目标来自ID,允许为空', -- 字段注释 | |
`dest_from_type` STRING COMMENT '目标来自类型,允许为空' -- 字段注释 | |
) PARTITIONED BY ( | |
`tenant_id`, `channel` -- 使用 tenant_id 和 channel 作为分区键 | |
) WITH ( | |
'format-version' = '2', -- 表格式版本为 2 | |
'read.parquet.vectorization.enabled' = 'true', -- 启用 Parquet 向量化读取 | |
'write.distribution-mode' = 'hash', -- 写入分布模式为哈希 | |
'write.metadata.previous-versions-max' = '20', -- 保留的最大旧元数据版本数为 20 | |
'write.metadata.delete-after-commit.enabled' = 'true', -- 提交后删除旧元数据 | |
'history.expire.max-snapshot-age-ms' = '432000000' -- 历史快照的最大过期时间为 432000000 毫秒(即 5 天) | |
); |
请注意,上述 SQL 语句中的 COMMENT
关键字用于在字段定义后面添加注释。然而,这些 COMMENT
关键字并不会被 Flink SQL 解析器识别为元数据注释。它们仅作为 SQL 语句中的普通注释存在,用于提高代码的可读性。
如果您需要在 Flink 之外的系统(如 Hive、MySQL 或其他支持字段注释的数据库)中创建表并为字段添加注释,您应该使用该系统支持的语法来添加注释。如果您需要将表同步到这些系统,您可能需要在同步过程中转换 Flink SQL 语法以包含这些系统的字段注释语法。
在 Iceberg 中,字段注释不是表元数据的一部分,因此无法在 Iceberg 表的定义中直接包含。您可以在 Iceberg 表的外部文档中记录字段注释,或者依赖于其他支持字段注释的存储系统(如果表是同步到这些系统的)。