跳到主要内容

BUCKET

将支持的数据映射到固定数量的哈希桶之一。BUCKET() 返回 0bucket_count - 1 范围内的确定性 UInt32 值,主要用于 PARTITION BYCLUSTER BY 表达式。

语法

BUCKET(<bucket_count>, <value>)

参数

参数说明
bucket_count14294967295 范围内的整数。在 PARTITION BYCLUSTER BY 表达式中,它必须是常量字面量。
value要进行哈希计算的 Integer、String、Date 或 Timestamp 值。

任一参数为 NULL 时,函数返回 NULL

备注

同一数据类型的相同值会得到稳定的桶编号,但使用不同数据类型表示的同一个逻辑值可能映射到不同的桶。请避免修改分桶键的数据类型。

示例

-- 返回 0 至 15 范围内的整数。
SELECT BUCKET(16, 'customer-123');

使用固定桶数量对高基数键进行分区:

CREATE TABLE customer_events (
customer_id BIGINT,
event_time TIMESTAMP,
payload VARIANT
)
PARTITION BY (BUCKET(32, customer_id));

对于分布式导入,可以将计算后分区值相同的行路由到同一个 Writer:

CREATE TABLE customer_events_distributed (
customer_id BIGINT,
event_time TIMESTAMP
)
PARTITION BY (BUCKET(32, customer_id))
WRITE_DISTRIBUTION_MODE = 'hash';

WRITE_DISTRIBUTION_MODE = 'hash' 必须与 PARTITION BY 一同使用。

欢迎体验 Databend Cloud

基于 Rust + 对象存储构建的新一代多模态数仓,一个平台即可进行 BI、向量、全文检索及地理空间分析。

支持标准 SQL,自动弹性伸缩,助您快速构建现代化数据平台。

注册即领 ¥200 代金券。

注册体验