Parquet 映射

当引入源文件采用 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"
  )