引入映射

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息。
适用于:✅ Azure Data Explorer

引入映射在引入过程中使用,将传入数据映射到表中的列。

Data Explorer支持不同类型的映射,包括面向行的映射(CSV、JSON、AVRO 和W3CLOGFILE),以及面向列的映射(Parquet 和 ORC)。

可以在引入命令中定义引入映射,也可以 预先创建 并使用 ingestionMappingReference 参数从引入命令引用。 无需指定映射即可进行引入。 有关详细信息,请参阅标识映射。

映射列表中的每个元素都由以下三个字段构成:

properties 必选 说明
列 ✔️ 表中的目标列名称。
数据类型 当表中不存在映射列时,用于创建该列的数据类型。
属性 属性包,包含特定于每个映射的属性,如每个特定映射类型页面所述。

重要

对于排队引入:

  • 如果映射中引用的表不存在于数据库中,则会自动创建该表,前提是为所有列指定了有效的数据类型。
  • 如果映射中引用的某个列在表中不存在,则在首次为该列引入数据时,会自动将该列添加为表中的最后一列,前提是为该列指定了有效的数据类型。 若要向映射添加新列,请使用 .alter ingestion mapping 命令。
  • 使用引入属性对数据进行批处理。 使用的引入映射属性越不同(例如不同的 ConstValue 值),引入就越分散,这可能会导致性能下降。

支持的映射类型

下表定义了在引入或查询特定格式的外部数据时要使用的映射类型。

数据格式 映射类型
CSV CSV 映射
TSV CSV 映射
TSVe CSV 映射
PSV CSV 映射
SCSV CSV 映射
SOHsv CSV 映射
TXT 格式 CSV 映射
生 CSV 映射
JSON JSON 映射
AVRO AVRO 映射
APACHEAVRO AVRO 映射
Parquet Parquet 映射
ORC(光学字符识别) ORC 映射
W3CLOGFILE W3CLOGFILE 映射

引入映射示例

以下示例使用以下架构的 RawEvents 表:

.create table RawEvents (timestamp: datetime, deviceId: guid, messageId: guid, temperature: decimal, humidity: decimal) 

简单映射

下面的示例演示了引入,其中映射是在引入命令中定义的。 该命令将 JSON 文件从 URL 引入到 RawEvents 表中。 映射指定 JSON 文件中每个字段的路径。

.ingest into table RawEvents ('https://kustosamplefiles.blob.core.chinacloudapi.cn/jsonsamplefiles/simple.json') 
    with (
            format = "json",
            ingestionMapping =
            ```
            [ 
              {"column":"timestamp","Properties":{"path":"$.timestamp"}},
              {"column":"deviceId","Properties":{"path":"$.deviceId"}},
              {"column":"messageId","Properties":{"path":"$.messageId"}},
              {"column":"temperature","Properties":{"path":"$.temperature"}},
              {"column":"humidity","Properties":{"path":"$.humidity"}}
            ]
            ```
          )

使用 ingestionMappingReference 进行映射

若要使用预创建映射映射相同的 JSON 文件,请使用以下命令创建 RawEventMapping 引入映射引用:

.create table RawEvents ingestion json mapping 'RawEventMapping' 
  ```
  [ 
    {"column":"timestamp","Properties":{"path":"$.timestamp"}},
    {"column":"deviceId","Properties":{"path":"$.deviceId"}},
    {"column":"messageId","Properties":{"path":"$.messageId"}},
    {"column":"temperature","Properties":{"path":"$.temperature"}},
    {"column":"humidity","Properties":{"path":"$.humidity"}}
  ]
  ```

使用以下命令使用 RawEventMapping 引入映射引用引入 JSON 文件:

.ingest into table RawEvents ('https://kustosamplefiles.blob.core.chinacloudapi.cn/jsonsamplefiles/simple.json') 
  with (
          format="json",
          ingestionMappingReference="RawEventMapping"
        )

标识映射

无需指定 ingestionMapping 或 ingestionMappingReference 属性即可进行引入。 数据可使用从表的架构派生的标识数据映射进行映射。 表架构保持不变。 应指定 format 属性。 请参阅引入格式。

格式类型 格式 映射逻辑
具有已定义列顺序的表格数据格式,如分隔符分隔或单行格式。 CSV、TSV、TSVe、PSV、SCSV、Txt、SOHsv、Raw 所有表列都按其各自的顺序映射到数据列,并按它们在数据源中的显示顺序映射。 列数据类型取自表架构。
具有命名列或具有命名字段的记录的格式。 JSON、Parquet、Avro、ApacheAvro、Orc、W3CLOGFILE 所有表列都映射到具有相同名称(区分大小写)的数据列或记录字段。 列数据类型取自表架构。

警告

表架构与数据结构(如列或字段数据类型、列或字段名称或数据编号)之间的任何不匹配都可能会导致数据被为空或不正确。

映射转换

部分数据格式映射(Parquet、JSON 和 AVRO)支持简单有用的引入时间转换。 如果在引入时需要进行更复杂的处理,可使用更新策略,该策略允许使用 KQL 表达式定义轻型处理。

路径依赖转换 说明 条件
PropertyBagArrayToDictionary 将属性的 JSON 数组(例如 {events:[{"n1":"v1"},{"n2":"v2"}]})转换为字典,并将其序列化为有效的 JSON 文档(例如 {"n1":"v1","n2":"v2"})。 适用于 JSON、Parquet、AVRO 和 ORC 映射类型。
SourceLocation 提供数据、类型字符串(例如 blob 的“BaseUri”字段)的storage项目的名称。 适用于 CSV、JSON、Parquet、AVRO、ORC 和 W3CLOGFILE 映射类型。
SourceLineNumber 相对于该storage项目的偏移量,键入 long(从“1”开始,每条新记录递增)。 适用于 CSV、JSON、Parquet、AVRO、ORC 和 W3CLOGFILE 映射类型。
DateTimeFromUnixSeconds 将表示 unix 时间的数字(从 1970-01-01 开始的秒数)转换为 UTC 日期/时间字符串。 适用于 CSV、JSON、Parquet、AVRO 和 ORC 映射类型。
DateTimeFromUnixMilliseconds 将表示 unix 时间的数字(从 1970-01-01 开始的毫秒数)转换为 UTC 日期/时间字符串。 适用于 CSV、JSON、Parquet、AVRO 和 ORC 映射类型。
DateTimeFromUnixMicroseconds 将表示 unix 时间的数字(从 1970-01-01 开始的微秒数)转换为 UTC 日期/时间字符串。 适用于 CSV、JSON、Parquet、AVRO 和 ORC 映射类型。
DateTimeFromUnixNanoseconds 将表示 unix 时间的数字(从 1970-01-01 开始的纳秒数)转换为 UTC 日期/时间字符串。 适用于 CSV、JSON、Parquet、AVRO 和 ORC 映射类型。
DropMappedFields 将 JSON 文档中的对象映射到列,并删除已被其他列映射引用的任何嵌套字段。 适用于 JSON、Parquet、AVRO 和 ORC 映射类型。
BytesAsBase64 将数据视为字节数组,并将其转换为 base64 编码的字符串。 适用于 AVRO 映射类型。 对于 ApacheAvro 格式,已映射数据字段的架构类型应为 bytes 或 fixed Avro 类型。 对于 Avro 格式,字段应为包含 [0-255] 范围内的字节值的数组。 如果数据不代表有效的字节数组,则引入 null。

映射转换示例

DropMappedFields 转换:

给定以下 JSON 内容:

{
    "Time": "2012-01-15T10:45",
    "Props": {
        "EventName": "CustomEvent",
        "Revenue": 0.456
    }
}

以下数据映射将整个 Props 对象映射到动态列 Props,同时排除已映射的列(Props.EventName 已映射到列 EventName,因此被排除)。

[
    { "Column": "Time", "Properties": { "Path": "$.Time" } },
    { "Column": "EventName", "Properties": { "Path": "$.Props.EventName" } },
    { "Column": "Props", "Properties": { "Path": "$.Props", "Transform":"DropMappedFields" } },
]

引入的数据如下所示:

时间 事件名称 属性
2012-01-15T10:45 CustomEvent {"Revenue": 0.456}

BytesAsBase64 转换

给定以下 AVRO 文件内容:

{
    "Time": "2012-01-15T10:45",
    "Props": {
        "id": [227,131,34,92,28,91,65,72,134,138,9,133,51,45,104,52]
    }
}

以下数据映射将 ID 列映射两次,不管是否进行转换。

[
    { "Column": "ID", "Properties": { "Path": "$.props.id" } },
    { "Column": "Base64EncodedId", "Properties": { "Path": "$.props.id", "Transform":"BytesAsBase64" } },
]

引入的数据如下所示:

ID Base64EncodedId
[227,131,34,92,28,91,65,72,134,138,9,133,51,45,104,52] 44MiXBxbQUiGigmFMy1oNA==