Parquet 對應
適用於: ✅Microsoft網狀架構✅Azure 數據總管
當您擷取來源檔案為 Parquet 格式時,使用 Parquet 對應將傳入數據對應至數據表內的數據行。
對應清單中的每個元素都會定義特定數據行的對應。 這些元素是從三個屬性建構的: column
、 datatype
和 properties
。 深入了解 數據對應概觀。
每個 Parquet 對應項目都必須包含下列任一選擇性屬性:
屬性 | 類型 | 描述 |
---|---|---|
欄位 | string |
Parquet 記錄中的功能變數名稱。 |
路徑 | string |
如果值以它開頭 $ ,它會解譯為 Parquet 檔中欄位的路徑,而該欄位將成為表格中數據行的內容。 表示整個 Parquet 紀錄的路徑為 $ 。 如果值不是以 $ 該值開頭,則會解譯為常數值。 包含特殊字元的路徑應該逸出為 ['Property Name']。 如需詳細資訊,請參閱 JSONPath 語法。 |
ConstValue | string |
要用於數據行的常數值,而不是 Parquet 檔案中的某些值。 |
轉換 | string |
應該套用到具有 對應轉換之內容上的轉換。 |
注意
欄位和路徑互斥。
下列替代方式是相等的:
[
{"Column": "event_name", "Properties": {"Path": "$.EventName"}}
]
[
{"Column": "event_name", "Properties": {"Field": "EventName"}}
]
重要
針對佇列擷取:
- 如果對應中所參考的數據表不存在於資料庫中,就會自動建立該數據表,因為會針對所有數據行指定有效的數據類型。
- 如果對應中所參考的數據行不存在於數據表中,它會在第一次為該數據行內嵌數據時自動加入數據表,因為數據行指定了有效的數據類型。 若要將新的數據行新增至對應,請使用 .alter 擷取對應命令。
- 數據會使用擷取屬性進行批處理。 使用愈不同的擷取對應屬性,例如不同的 ConstValue 值,擷取會變成越分散,這可能會導致效能降低。
Parquet 類型轉換
當您從 Parquet 來源擷取或查詢資料時,提供轉換數據類型的完整支援。
下表提供 Parquet 字段類型的對應,以及可轉換成的數據表數據行類型。 第一個數據行會列出 Parquet 類型,而其他數據行則顯示可以轉換成的數據表數據行類型。
注意
針對 Parquest DECIMAL 類型,實體類型會在括弧中指定,如下所示:
- I32: INT32 (32 位整數)
- I64: INT64 (64 位整數)
- FLBA:固定長度位元組陣列
- BA:位元組陣列
Parquet 類型 | bool | int | long | real | decimal | Datetime | 時間範圍 | 字串 | guid | dynamic |
---|---|---|---|---|---|---|---|---|---|---|
INT8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
INT16 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
INT32 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
INT64 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
UINT8 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
UINT16 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
UINT32 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
UINT64 | ✔️ | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
FLOAT32 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
FLOAT64 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
BOOLEAN | ✔️ | ❌ | ❌ | ❌ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
十進位 (I32) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
十進位 (I64) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
十進位 (FLBA) | ❌ | ❌ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ❌ |
十進位 (BA) | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ✔️ |
timestamp | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
日期 | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ | ✔️ | ❌ | ❌ |
字串 | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ❌ | ✔️ |
UUID | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ✔️ | ❌ |
JSON | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | ❌ | ✔️ |
清單 | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ |
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"
)