Buildschema()(聚合函数)

生成允许 DynamicExpr 所有值的最小架构。

注意

此函数与 summarize 运算符结合使用。

语法

buildschema(DynamicExpr)

详细了解语法约定

参数

客户 类型​​ 必需 说明
DynamicExpr dynamic 用于聚合计算的表达式。

返回

返回允许“DynamicExpr”所有值的最小架构。

提示

如果输入是 JSON 字符串,请使用 parse_json() 函数将 JSON 转换为动态值。 否则,可能会出错。

示例

以下示例基于以下内容生成架构:

  • {"x":1, "y":3.5}
  • {"x":"somevalue", "z":[1, 2, 3]}
  • {"y":{"w":"zzz"}, "t":["aa", "bb"], "z":["foo"]}
datatable(value: dynamic) [
    dynamic({"x":1, "y":3.5}),
    dynamic({"x":"somevalue", "z":[1, 2, 3]}),
    dynamic({"y":{"w":"zzz"}, "t":["aa", "bb"], "z":["foo"]})
]
| summarize buildschema(value)

结果

schema_value
{"x":["long","string"],"y":["double",{"w":"string"}],"z":{"indexer":["long","string"]},"t":{"indexer":"string"}}

生成的架构表示:

  • 根对象是具有四个属性(名为 x、y、z 和 t)的容器。
  • 名为 x 的属性的类型为 long 或 string。
  • 名为 y ii 的属性属于 double 类型,或者另一个容器名为 w 的属性属于 string 类型。
  • indexer 关键字指示 zt 是数组。
  • 数组 z 中的每一项均为“long”类型或“string”类型。
  • t 是一个字符串数组。
  • 每个属性均为隐式可选,并且任何数组均可能为空。

架构模型

返回架构的语法是:

Container ::= '{' Named-type* '}'; Named-type: := (name | '"indexer"') ':' Type; Type ::= Primitive-type | Union-type | Container; Union-type ::= '[' Type* ']'; Primitive-type ::= "long" | "string" | ...;

这些值等效于 TypeScript 类型批注的子集,作为 Kusto 动态值编码。 在 Typescript 中,示例架构应为:

var someobject:
{
    x?: (number | string),
    y?: (number | { w?: string}),
    z?: { [n:number] : (long | string)},
    t?: { [n:number]: string }
}