请说明在 Apache Iceberg 中创建表的具体操作,通常使用的建表语句或方式有哪些?
考察说明
考查对 Iceberg 建表基础语法和常用方式的掌握程度。
回答思路
- 【回答框架 1】Apache Iceberg 建表本质是通过 Spark、Flink 等引擎执行 CREATE TABLE 语句,表元数据由 Iceberg 的 Catalog 管理,数据文件存储在指定的文件系统或对象存储中。
- 【回答框架 2】常用语法包括:使用 Spark SQL,如 CREATE TABLE db.tbl (id INT, name STRING) USING iceberg,其中 USING iceberg 指定表格式;使用 Flink SQL 时,需先创建 Catalog 并声明表,语法与 Spark 类似。
- 【回答框架 3】还可通过 Spark DataFrame API 或 Flink DataStream 方式,将 DataStream 注册为临时视图后执行建表 SQL,或使用 Catalog 的 createTable 方法编程式建表。
- 【回答框架 4】建表时需注意表位置(可选)、分区规范(如 PARTITIONED BY (dt))、主键(可指定)等,Iceberg 会记录表 Schema 和分区信息到元数据文件中。
- 【回答框架 5】对于已有数据,可通过 CREATE TABLE ... AS SELECT 或 INSERT INTO 创建并填充表。
- 【关键点 1】Iceberg 建表通过 SQL 的 USING iceberg 声明表格式,或编程 API 实现。
- 【关键点 2】语法需依附于具体查询引擎(Spark、Flink、Trino 等)。
- 【关键点 3】可通过 CREATE TABLE AS SELECT 从查询结果直接建表。
- 【关键点 4】建表时可指定分区、主键等表属性,元数据管理由 Catalog 负责。
- 【易错点 1】不能脱离具体引擎说统一语法,Spark 与 Flink 的建表语句细节存在差异。
- 【易错点 2】建表时若不指定存储位置,将使用 Catalog 默认路径,需注意存储权限和路径规划。
- 【易错点 3】主键约束并非强制,且语义与关系型数据库不同,仅用于 upsert 等场景,不能当作唯一约束。