能否在KQL中基于动态列名列表批量解压数据?
解决方案
要实现按每行指定的列动态解压数据,可以利用Kusto的动态对象(dynamic bag)和mv-apply操作来处理,具体查询如下:
input_table | extend row_bag = pack_all() // 将当前行的所有列打包成一个动态键值对对象 | mv-apply cols_to_decompress = parse_json(compressed_properties) on ( // 对每个需要解压的列,更新动态对象中的值为解压后结果 extend row_bag = bag_set(row_bag, cols_to_decompress, gzip_base64_decompress(tostring(row_bag[cols_to_decompress]))) ) // 将处理后的动态对象重新展开为原始列结构 | evaluate bag_unpack(row_bag) // 可选:保持原表列顺序 | project compressed_properties, foo, bar
代码说明
pack_all():把当前行所有列转为动态键值对对象,支持后续动态修改指定列的值。mv-apply cols_to_decompress = parse_json(compressed_properties):将每行的压缩列名数组拆分为单个元素,逐个处理。bag_set(...):在动态对象中,将指定列名对应的值替换为gzip_base64_decompress解压后的结果。evaluate bag_unpack(row_bag):把修改后的动态对象还原为表的列结构。project:可选步骤,用于指定输出列的顺序,和原表保持一致。
结果验证
针对你提供的输入表,执行上述查询后会得到预期输出:
| compressed_properties | foo | bar |
|---|---|---|
| ["foo", "bar"] | "decompressedData1" | "decompressedData2" |
| ["foo"] | "decompressedData3" | "Not compressed" |
内容的提问来源于stack exchange,提问作者Grog
相关产品推荐
相关产品推荐

