关于ADX表数据分区及基于ingestionTime创建分区策略的咨询
Azure Data Explorer分区策略疑问解答
文档两段表述的含义
先看文档里的两段原文翻译:
默认情况下,数据分片(extents)按创建时间(摄入时间)进行分区,大多数情况下无需设置数据分区策略。
默认情况下,表的数据分区策略为null,此时表中的数据在摄入后不会被重新分区。
这两段讲的是ADX两个不同环节的行为:
- 第一段是数据摄入阶段的默认处理:当数据被导入ADX时,系统会自动按数据的摄入时间把数据拆分到不同的分片里,这个是内置的默认行为,不需要额外配置。
- 第二段是分区策略的默认状态:新建表的分区策略默认是null,这个策略管的是数据摄入完成后是否会被重新分区。如果策略为null,已经生成的分片就不会被系统调整分区;如果设置了策略,系统会定期按照规则对现有分片做重新分区操作。
简单说:摄入时自动按时间分片,但默认不会事后重新调整分区——这就是两段表述的核心逻辑。
你的业务场景问题解答
你需要基于ingestionTime做均匀范围分区,以下是具体解答:
1. 创建分区策略的方法
用ADX的.alter table命令来创建,示例代码如下(替换你的表名):
.alter table YourTableName policy partitioning @' { "PartitionKeys": [ { "ColumnName": "$IngestionTime", "Kind": "UniformRange", "Properties": { "Reference": "2020-01-01T00:00:00", // 分区起始参考时间 "RangeSize": "1.00:00:00" // 每个分区的时间范围,比如1小时,可按需调整 } } ] } '
注意:
$IngestionTime是ADX内置的隐藏列,直接用这个名称即可,不用提前创建RangeSize支持多种时间格式,比如7.00:00:00代表7天一个分区,00:30:00代表30分钟一个分区- 执行该命令需要你有表的管理员权限
2. 摄入时间vs业务时间戳的选择
核心看你的查询习惯:
- 如果你的查询大多是按数据进入系统的时间过滤(比如“查今天导入的所有数据”),选
$IngestionTime分区最匹配,查询能快速定位到对应分片,性能更好。 - 如果查询主要按业务事件发生的时间过滤(比如“查昨天产生的用户行为数据”),且业务时间戳(比如
timestamp)和摄入时间差很多,那才需要按业务时间戳分区。
你的场景明确要求基于ingestionTime,所以直接选$IngestionTime做均匀范围分区就可以。
内容的提问来源于stack exchange,提问作者Saurav Likhar
相关产品推荐
相关产品推荐

