如何在Azure Data Explorer中按数据类型应用自定义保留策略?
Azure Data Explorer行级条件数据自动删除方案
原生的ADX保留策略仅支持表或数据库级别,无法直接按单行的条件(如数据类型+对应保留天数)自动删除数据,因此原生方式无法满足你的需求。以下是几种可行的替代方案:
方案1:分区表+针对性保留策略
这是性能最优的方案,利用ADX的分区和表级保留策略实现自动过期删除:
- 按数据类型拆分独立表,比如为每种数据类型创建单独的表(如
Data_TypeA、Data_TypeB)。 - 为每个表设置对应保留天数的软删除策略,ADX会自动后台清理过期数据。
- ASP.NET Core应用导入数据时,将对应类型的数据写入到匹配的表中。
示例Kusto命令(设置表保留策略):
.alter table Data_TypeA policy retention softdelete = 7d .alter table Data_TypeB policy retention softdelete = 30d
如果不想拆分表,也可以基于DataType字段结合时间字段创建表分区,再为不同分区配置保留策略,但拆分表的实现更简单直观。
方案2:周期性批量删除作业
通过定时任务执行Kusto删除命令,手动清理符合条件的过期数据:
- 编写Kusto删除语句,根据数据类型和时间字段过滤过期数据:
.delete from YourMainTable where DataType == 'TypeA' and ingestion_time() < ago(7d) .delete from YourMainTable where DataType == 'TypeB' and ingestion_time() < ago(30d)
- 使用Azure Functions、Logic Apps或ADX自动化规则创建定时触发器(比如每日凌晨执行),调用ADX API执行上述命令。
- 确保执行作业的身份拥有ADX数据库的
delete权限。
注意:批量删除会消耗集群资源,建议避开业务高峰期,数据量较大时分批执行。
方案3:物化视图过滤保留数据
创建物化视图仅保留未过期的数据,应用查询时直接访问视图而非原始表:
- 创建物化视图,过滤出符合保留条件的数据:
.create materialized view with (backfill=true) RetainedValidData on table YourMainTable { * where (DataType == 'TypeA' and ingestion_time() >= ago(7d)) or (DataType == 'TypeB' and ingestion_time() >= ago(30d)) }
- 调整ASP.NET Core应用的查询逻辑,使用
RetainedValidData视图获取有效数据。 - 原始表可设置较长保留策略,或配置归档策略将过期数据移至低成本冷存储,降低存储成本。
内容的提问来源于stack exchange,提问作者Mahsa
相关产品推荐
相关产品推荐

