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

Kusto(ADX)摄入TXT文件时无法按分隔符拆分列如何解决

解决方案

你遇到的问题核心原因是:ADX默认未指定摄入格式时,会将TXT文件识别为纯文本格式,每行完整内容只会写入目标表的第一列,即便配置了CSV映射也不会生效,因为映射需要和指定的摄入格式匹配才能触发。

方法1:摄入时直接指定格式与分隔符(推荐)

直接在摄入命令的with参数块中声明格式、分隔符等规则,无需提前创建映射也可正常拆分字段,示例命令如下:

.ingest into table MyLogs (
h'...对应TXT文件的SAS地址...'
) with (
    format = 'csv',
    delimiter = ',', // 替换为你实际使用的分隔符,制表符为'\t',空格为' '
    firstRowIsHeader = false, // 如果TXT第一行是字段表头则改为true
    quoteChar = '"' // 如果字段内容包含分隔符且用引号包裹时添加该参数
)

如果已经提前创建了CSV摄入映射,补充映射参数即可:

.ingest into table MyLogs (
h'...对应TXT文件的SAS地址...'
) with (
    format = 'csv',
    delimiter = ',',
    ingestionMappingReference = '你创建的映射名称',
    ingestionMappingKind = 'CSV'
)

方法2:已摄入数据的拆分方案

如果数据已经全部写入Level列,无需重新摄入,可通过split函数直接拆分字段生成目标结构:

MyLogs
// 替换函数第二个参数为实际分隔符
| extend SplittedFields = split(Level, ',')
| project
    Level = tostring(SplittedFields[0]),
    Timestamp = todatetime(SplittedFields[1]),
    UserId = tostring(SplittedFields[2]),
    TraceId = tostring(SplittedFields[3]),
    Message = tostring(SplittedFields[4]),
    ProcessId = toint(SplittedFields[5])

如果需要永久修正表中数据,可将上述查询结果通过.set-or-replace命令覆盖原表,或配置更新政策自动处理后续摄入的数据。

常见注意事项

  • 分隔符需和文件实际使用的分隔符完全一致,注意特殊字符的转义规则
  • 若行内字段数和表结构字段数不匹配,会导致后续字段为空,摄入前可先抽样检查TXT文件的每行字段数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:24:03