我在两个不同的ADX/Kusto集群中有完全相同的表——数据/架构是相同的,但如果我为1天的数据计算ExtentSize,两者之间的差异是巨大的。集群上的表有10TB,而另一个集群上的表格有15TB。这是一个很大的区别。当我检查这两个表上的编码策略时,有一点不同。第一个集群上的表具有以下编码策略:-
"ColumnIndexRangeGranularity": 0,
"ShardFieldCompressionCodec": "DEFAULT",
而另一个集群上的表有以下内容:-
"ColumnIndexRangeGranularity": 32,
"ShardFieldCompressionCodec": "LZ4",
我的目标是将其他表的大小降低到与第一个表相同的大小,这样我就可以使用更少的缓存策略。所以理想情况下,我想更改这两个参数。但当我触发以下命令时,它对表的编码策略没有影响:-
.alter table MyTable policy encoding @'{ "ShardFieldCompressionCodec": "Default" }'
也没有错误。
所以我有两个问题。
- 每当我们试图更改的编码策略时,ADX是否会忽略桌子?当创建的表默认情况下由集群分配
- 这是否意味着,如果我们在两个不同的文件夹中有相同的表使用相同的模式/表--它们的数据块大小总是变化(因为基础表压缩不同(
可以在不同的实体上设置编码策略:
- 列-仅影响策略更改后摄入到列中的数据
- 表-仅影响在策略更改后将添加到表中的列
- 数据库–仅影响在策略更改后将在数据库中创建的表
您感兴趣的似乎是更改列级别策略,而不是表级策略。不过,您应该明白,这不会改变已经摄入的数据的编码。
万一有人正在搜索如何更改列编码的基本语法:下面是一个示例
.show column eventlog.event_text policy encoding
.alter column mytable.mytextcolumn policy encoding @'{"MinTermLength": 8,
"MinSubstringLength": 8}'
在更改这些值之前,请先阅读Kusto文档。