描述
PARTITIONED BY 子句用于在建表时定义表的分区策略。TCI 基于 Iceberg 的隐藏分区(Hidden Partitioning)机制,支持通过变换表达式对数据进行分区。语法
CREATE TABLE table_name ( columns )USING tciPARTITIONED BY ( partition_expression [ , ... ] )
TCI 支持的分区变换
变换 | 语法 | 说明 |
Identity(恒等变换) | column_name | 按列的原始值进行分区 |
Bucket(哈希分桶) | bucket(N, column_name) | 按列值的哈希模 N 分为 N 个桶 |
注意:
TCI 目前仅支持
bucket 和 identity 两种分区变换。不支持
year()、month()、day()、hour()、date_hour()、truncate() 等时间/截断类变换。注意事项
分区字段不需要出现在 SELECT 查询中,Iceberg 会在读写时自动处理分区变换。
添加或删除分区字段是元数据操作,不会改变已有数据。
分区策略可以通过
ALTER TABLE ... ADD/DROP PARTITION FIELD 动态调整。不支持
EXTERNAL 和 LOCATION 子句。示例
Identity 分区
CREATE TABLE tci_part_identity (id BIGINT,category STRING,data STRING) USING tciPARTITIONED BY (category);
Bucket 分区
CREATE TABLE tci_part_bucket (id BIGINT,name STRING,ts TIMESTAMP) USING tciPARTITIONED BY (bucket(16, id));
混合分区
CREATE TABLE tci_part_mixed (id BIGINT,region STRING,category STRING) USING tciPARTITIONED BY (region, bucket(8, id));
多个 Bucket 分区列
CREATE TABLE tci_part_multi_bucket (user_id BIGINT,order_id BIGINT,amount DOUBLE) USING tciPARTITIONED BY (bucket(32, user_id), bucket(16, order_id));
写入查询验证
INSERT INTO tci_part_identityVALUES (1, 'A', 'data_a'), (2, 'B', 'data_b'), (3, 'A', 'data_c');SELECT * FROM tci_part_identity;SELECT category, count(*) FROM tci_part_identity GROUP BY category;
分区信息验证(DESCRIBE / SHOW PARTITIONS)
DESCRIBE tci_part_identity;SHOW PARTITIONS tci_part_identity;