Parquet 映射

适用于:✅Azure 数据资源管理器

当引入源文件采用 Parquet 格式时,请使用 Parquet 映射将传入数据映射到表内的列。

映射列表中的每个元素定义特定列的映射。 这些元素通过这三个属性进行构造:columndatatypeproperties。 有关详细信息,请参阅数据映射概述

每个 Parquet 映射元素都必须包含以下可选属性之一:

属性 类型​​ 说明
字段 string Parquet 记录中字段的名称。
路径 string 如果值以 $ 开头,它将被解释为 Parquet 文档中将成为表中列内容的字段的路径。 表示整个 Parquet 记录的路径为 $。 如果值不以 $ 开头,则它将被解释为常量值。 包含特殊字符的路径应当以 ['属性名称'] 格式进行转义。 有关详细信息,请参阅 JSONPath 语法
ConstValue string 要用于列而非 Parquet 文件内某个值的常数值。
转换 string 应通过映射转换应用于内容的转换。

注意

Field 和 Path 互斥。

以下替代方法等效:

[
  {"Column": "event_name", "Properties": {"Path": "$.EventName"}}
]
[
  {"Column": "event_name", "Properties": {"Field": "EventName"}}
]

重要

对于排队引入:

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

Parquet 类型转换

在从 Parquet 源引入或查询数据时,提供全面的数据类型转换支持。

下表提供 Parquet 字段类型的映射以及这些类型可以转换为的表列类型。 第一列列出了 Parquet 类型,其他列显示可转换为的表列类型。

注意

对于 Parquest DECIMAL 类型,物理类型在括号中指定,如下所示:

  • I32:INT32(32 位整数)
  • I64:INT64(64 位整数)
  • FLBA:固定长度字节数组
  • BA:字节数组
Parquet 类型 布尔 int long real 十进制 datetime timespan string guid 动态
INT8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
INT16 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
INT32 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
INT64 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT16 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT32 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT64 ✔️ ✔️ ✔️ ✔️ ✔️
FLOAT32 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
FLOAT64 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
BOOLEAN ✔️ ✔️ ✔️
DECIMAL (I32) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
DECIMAL (I64) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
DECIMAL (FLBA) ✔️ ✔️ ✔️ ✔️
DECIMAL (BA) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
TIMESTAMP ✔️ ✔️
DATE ✔️ ✔️
STRING ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UUID ✔️ ✔️
JSON ✔️ ✔️
LIST ✔️
MAP ✔️
STRUCT ✔️

示例

[
  {"Column": "event_timestamp", "Properties": {"Path": "$.Timestamp"}},
  {"Column": "event_name",      "Properties": {"Path": "$.Event.Name"}},
  {"Column": "event_type",      "Properties": {"Path": "$.Event.Type"}},
  {"Column": "event_time",      "Properties": {"Path": "$.Timestamp", "Transform": "DateTimeFromUnixMilliseconds"}},
  {"Column": "ingestion_time",  "Properties": {"ConstValue": "2021-01-01T10:32:00"}},
  {"Column": "full_record",     "Properties": {"Path": "$"}}
]

当上述映射作为 .ingest 管理命令的一部分提供时,它将被序列化为 JSON 字符串。

.ingest into Table123 (@"source1", @"source2")
  with
  (
    format = "parquet",
    ingestionMapping =
    ```
    [
      {"Column": "column_a", "Properties": {"Path": "$.Field1.Subfield"}},
      {"Column": "column_b", "Properties": {"Path": "$.[\'Field name with space\']"}},
    ]
    ```
  )

预先创建的映射

预先创建映射后,请在 .ingest 管理命令中按名称引用映射。

.ingest into Table123 (@"source1", @"source2")
  with
  (
      format="parquet",
      ingestionMappingReference = "Mapping_Name"
  )

标识映射

在引入期间使用 Parquet 映射而不定义映射架构(请参阅标识映射)。

.ingest into Table123 (@"source1", @"source2")
  with
  (
    format="parquet"
  )