Поделиться через


Сопоставление Parquet

Область применения: ✅Microsoft Fabric✅Azure Data Explorer

Используйте сопоставление Parquet, чтобы сопоставить входящие данные со столбцами в таблицах, когда исходный файл приема находится в формате Parquet.

Каждый элемент в списке сопоставлений определяет сопоставление для определенного столбца. Эти элементы создаются из трех свойств: column, datatypeи properties. Дополнительные сведения см. в обзоре сопоставлений данных.

Каждый элемент сопоставления Parquet должен содержать любой из следующих необязательных свойств:

Свойство Type Описание
Поле string Имя поля в записи Parquet.
Путь string Если значение начинается с $ его интерпретации как путь к полю в документе Parquet, который станет содержимым столбца в таблице. Путь, обозначающий всю запись Parquet, — это $. Если значение не начинается с его интерпретации как $ константное значение. Пути, содержащие специальные символы, должны быть экранированы как ['Имя свойства']. Дополнительные сведения см. в статье Синтаксис JSONPath.
ConstValue string Константное значение, используемое для столбца, а не некоторое значение внутри файла Parquet.
Преобразование string Преобразование, которое должно применяться к содержимому с преобразованиями сопоставления.

Примечание.

Поле и путь являются взаимоисключающими.

Ниже приведены эквивалентные варианты.

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

Внимание

Для приема в очереди:

  • Если таблица, указанная в сопоставлении, не существует в базе данных, она создается автоматически, учитывая, что допустимые типы данных указаны для всех столбцов.
  • Если столбец, на который ссылается сопоставление, не существует в таблице, он автоматически добавляется в таблицу в качестве последнего столбца при первом приеме данных для этого столбца, если для этого столбца указан допустимый тип данных. Чтобы добавить новые столбцы в сопоставление, используйте команду сопоставления .alter ingestion.
  • Данные пакетируются с помощью свойств приема. Чем больше уникальных свойств сопоставления приема, таких как различные значения ConstValue, тем больше фрагментировано прием становится, что может привести к снижению производительности.

Преобразования типов Parquet

Полная поддержка предоставляется для преобразования типов данных при приеме или запросе данных из источника Parquet.

В следующей таблице представлено сопоставление типов полей Parquet и типов столбцов таблицы, в которые их можно преобразовать. Первый столбец содержит тип Parquet, а другие — типы столбцов таблицы, в которые их можно преобразовать.

Примечание.

Для типов Parquest DECIMAL физический тип указывается в скобках следующим образом:

  • I32: INT32 (32-разрядное целое число)
  • I64: INT64 (64-разрядное целое число)
  • FLBA: массив байтов фиксированной длины
  • BA: массив байтов
Тип Parquet bool INT длинный real десятичное datetime timespan строка guid по строкам
INT8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
INT16 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
INT32 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
INT64 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT8 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT16 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT32 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
UINT64 ✔️ ✔️ ✔️ ✔️ ✔️
FLOAT32 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
FLOAT64 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
BOOLEAN ✔️ ✔️ ✔️
ДЕСЯТИЧНЫЙ (I32) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
DECIMAL (I64) ✔️ ✔️ ✔️ ✔️ ✔️ ✔️
ДЕСЯТИЧНЫЙ (FLBA) ✔️ ✔️ ✔️ ✔️
ДЕСЯТИЧНЫЙ (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": "$"}}
]

Приведенное выше сопоставление сериализуется как строка JSON, когда она предоставляется в рамках .ingest команды управления.

.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"
  )