You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure Data Explorer时能否在ingestion mapping中转换数据?

结论

Kusto(Azure Data Explorer)的原生JSON ingestion mapping 不支持在映射配置中直接执行函数类转换逻辑,你写的两种拆分写法都无法生效。

现有配置的问题
  • ConstantValue属性仅用于注入静态固定值,不会解析执行其中的表达式,你写入的$.split(Name, "_")[1]会被当作普通字符串直接存入Name1列,不会做拆分运算。
  • Path属性仅支持指定JSON源中已存在的节点路径,不支持嵌入函数逻辑,你写的$[' split(Name, "_")[1]']会被识别为「查找键名等于 split(Name, "_")[1]的JSON节点」,根本取不到拆分后的值。
标准实现方案

生产环境下这类入库时的字段转换,统一用**更新策略(Update Policy)**实现,步骤如下:

  1. 新建一张临时落地表(staging表),字段和原始JSON结构完全对齐,只保留源数据里存在的字段,去掉你要拆分生成的Name1~Name8列,给这张表配置修正后的JSON ingestion mapping。
  2. 新建最终业务查询用的目标表,包含所有原始字段+你要生成的Name1~Name8拆分列。
  3. 给目标表绑定更新策略,指定数据从staging表流入时自动执行拆分逻辑,转换后写入目标表。

参考实现代码:

// 1. 创建临时落地表
.create table example_staging (
    timestamp: datetime,
    rawValue: dynamic,
    Name: string,
    RelevantData: dynamic
)

// 2. 给落地表配置正确的JSON映射(删除所有无效的拆分字段配置)
.create table example_staging ingestion json mapping "example_staging_mapping"
    '['
        '{"column":"timestamp", "Properties": {"Path":"$.timestamp"}},'
        '{"column":"rawValue", "Properties":{"Path":"$.rawValue"}},'
        '{"column":"Name", "Properties":{"Path":"$.Name"}},'
        '{"column":"RelevantData", "Properties":{"Path":"$.RelevantData"}}'
    ']'

// 3. 创建最终目标表
.create table example (
    timestamp: datetime,
    rawValue: dynamic,
    Name: string,
    Name1: string,
    Name2: string,
    Name3: string,
    Name4: string,
    Name5: string,
    Name6: string,
    Name7: string,
    Name8: string,
    RelevantData: dynamic
)

// 4. 配置更新策略,自动拆分Name字段
.alter table example policy update
@'[{
    "IsEnabled": true,
    "Source": "example_staging",
    "Query": """
        example_staging
        | extend NameParts = split(Name, "_")
        | extend 
            Name1 = tostring(NameParts[0]),
            Name2 = tostring(NameParts[1]),
            Name3 = tostring(NameParts[2]),
            Name4 = tostring(NameParts[3]),
            Name5 = tostring(NameParts[4]),
            Name6 = tostring(NameParts[5]),
            Name7 = tostring(NameParts[6]),
            Name8 = tostring(NameParts[7])
        | project-away NameParts
    """,
    "IsTransactional": true,
    "PropagateIngestionProperties": true
}]'

// 可选:配置落地表短保留期,避免冗余存储占用
.alter table example_staging policy retention 
@'{"SoftDeletePeriod": "1.00:00:00", "Recoverability": "Disabled"}'
注意事项
  • split()函数返回的数组索引从0开始,示例中是取拆分后的第1到第8个分段,如果你实际需要跳过第一个分段,自行调整数组索引即可。
  • 如果Name字段按_拆分后的段数不足8段,对应位置的NameN列会自动存为空值,无需额外处理。
  • 如果你是单次临时入库,也可以在执行入库命令时直接带KQL查询做拆分,但不适合持续的自动化接入场景。

内容的提问来源于stack exchange,提问作者Diego7Perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:57:23