如何在KQL表列插入字符串数组?内联摄入遇截断问题
解决KQL内联摄入JSON数组到Dynamic列的问题
问题根源
你当前操作中,.ingest inline默认采用CSV格式解析,导致["AAA", "BBB", "CCC"]被逗号拆分为三个独立字段,但表仅定义了第一个列,因此只有["AAA"被存入,后续内容被丢弃。此外初始表的Data列类型为string,也不符合存储动态JSON数组的需求。
解决方案
1. 修正表结构(若未正确定义)
将Data列改为dynamic类型,同时保留其他可能为NULL的列:
// 新建表(若未创建) .create table DynamicTable (Data: dynamic, OtherNullableColumn: string) // 若已创建表,修改列类型 .alter table DynamicTable alter column Data dynamic
2. 正确摄入数据的三种方法
方法一:指定MultilineJSON格式(推荐)
直接将整个JSON数组作为单行JSON摄入,KQL会自动解析为dynamic类型,其他列自动填充为NULL:
.ingest inline into table DynamicTable with (format=multilinejson) <| ["AAA", "BBB", "CCC"]
方法二:用CSV格式并正确引用数组
将数组用双引号包裹(注意转义内部双引号),指定CSV解析时识别引号包裹的内容,同时为其他列留空(表示NULL):
.ingest inline into table DynamicTable with (format=csv, quoting=all) <| "[""AAA"", ""BBB"", ""CCC""]",
方法三:使用JSON摄入映射
创建映射规则,将整个JSON数组映射到Data列,其他列设置默认NULL:
// 创建映射 .create table DynamicTable ingestion json mapping "DynamicArrayMapping" '[{"column":"Data","path":"$"},{"column":"OtherNullableColumn","path":"$.unused","defaultValue":null}]' // 摄入时指定映射 .ingest inline into table DynamicTable with (format=json, ingestionMappingReference="DynamicArrayMapping") <| ["AAA", "BBB", "CCC"]
验证结果
执行摄入后,查询表验证数据:
DynamicTable | project Data, OtherNullableColumn
会返回一行数据:Data列是完整的["AAA", "BBB", "CCC"]数组,OtherNullableColumn为NULL。
内容的提问来源于stack exchange,提问作者Sachin
相关产品推荐
相关产品推荐

