PARTITIONED BY 子句

最近更新时间:2026-05-20 14:11:21

我的收藏

描述

PARTITIONED BY 子句用于在建表时定义表的分区策略。TCI 基于 Iceberg 的隐藏分区(Hidden Partitioning)机制,支持通过变换表达式对数据进行分区。

语法

CREATE TABLE table_name ( columns )
USING tci
PARTITIONED BY ( partition_expression [ , ... ] )

TCI 支持的分区变换

变换
语法
说明
Identity(恒等变换)
column_name
按列的原始值进行分区
Bucket(哈希分桶)
bucket(N, column_name)
按列值的哈希模 N 分为 N 个桶
注意:
TCI 目前仅支持 bucketidentity 两种分区变换。
不支持 year()month()day()hour()date_hour()truncate() 等时间/截断类变换。

注意事项

分区字段不需要出现在 SELECT 查询中,Iceberg 会在读写时自动处理分区变换。
添加或删除分区字段是元数据操作,不会改变已有数据。
分区策略可以通过 ALTER TABLE ... ADD/DROP PARTITION FIELD 动态调整。
不支持 EXTERNALLOCATION 子句。

示例

Identity 分区

CREATE TABLE tci_part_identity (
id BIGINT,
category STRING,
data STRING
) USING tci
PARTITIONED BY (category);

Bucket 分区

CREATE TABLE tci_part_bucket (
id BIGINT,
name STRING,
ts TIMESTAMP
) USING tci
PARTITIONED BY (bucket(16, id));

混合分区

CREATE TABLE tci_part_mixed (
id BIGINT,
region STRING,
category STRING
) USING tci
PARTITIONED BY (region, bucket(8, id));

多个 Bucket 分区列

CREATE TABLE tci_part_multi_bucket (
user_id BIGINT,
order_id BIGINT,
amount DOUBLE
) USING tci
PARTITIONED BY (bucket(32, user_id), bucket(16, order_id));

写入查询验证

INSERT INTO tci_part_identity
VALUES (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;