【发布时间】:2023-01-19 03:04:25
【问题描述】:
我输入了一组已知的列(比如空调) 和可变数量的附加列。我想将其提取到包含列的表中空调加一栏其余的部分.所以从输入一种进入一种,乙进入乙等等,如果丁存在于它将去的记录中其余的部分作为“D”:“D的价值”.对于包含的另一条记录X和是它会变成A, B, C, theRest=["X":"valueofX", "Y":"valueofY"]
我正在尝试一些类似的东西
T | project A, B, C, theRest = bag_remove_keys(pack_all(), dynamic(["A","B","C"]))
这基本上做了我想要的,除了(当然)我的情况有点复杂,而不是手工编码dynamic(["A","B","C","D","E"],我想为dynamic(<expression>)创建一些东西,其中<expression>是表格中的列名数组表达式T。表达式 T 具有不同数量的列,因此 bag_remove_keys() 删除的列也不同。
在@David 的第一个回答后编辑: 我的例子可能太简单了。 这是我的代码,除了格式化其余的部分.
let T= datatable (data: dynamic)
[
dynamic([{"A":1,"B":2,"C":3}]),
dynamic([{"X":4,"A":1,"B":5,"C":3,"Y":2}]),
dynamic([{"A":3,"G":7,"B":2,"C":1}]),
];
let X = datatable(A:int, B:int, C:int, data:dynamic) [];
let T_base_cols = toscalar(X | getschema | summarize make_list(ColumnName));
T | mv-expand Results = data
| project A=toint(Results['A']),
B=toint(Results['B']),
C=toint(Results['C']),
theRest = bag_remove_keys(pack_all(), T_base_cols)
这给出了这样的输出
A B C theRest
1 2 3 {"Results":{"A":1,"B":2,"C":3}}
1 5 3 {"Results":{"X":4,"A":1,"B":5,"C":3,"Y":2}}
3 2 1 {"Results":{"A":3,"G":7,"B":2,"C":1}}
我期待着
A B C theRest
1 2 3
1 5 3 {"X":4,"Y":2}
3 2 1 {"G":7}
或最后一列中没有花括号的类似格式。
【问题讨论】:
-
您确定您的源数据 (T) 是由数组构建的吗?
-
你确定你的源数据(T)是由数组构建的(它没有太大变化,只需要一个额外的 mv-expand 操作)?
标签: azure-data-explorer kql data-ingestion