Parquet マッピング
取り込みソース ファイルが Parquet 形式の場合は、Parquet マッピングを使用して、受信データをテーブル内の列にマップします。
マッピング リスト内の各要素は、特定の列のマッピングを定義します。 これらの要素は、 column
、 datatype
、 properties
の 3 つのプロパティから構成されます。 詳細については、 データ マッピングの概要を参照してください。
各 Parquet マッピング要素には、次のいずれかの省略可能なプロパティが含まれている必要があります。
プロパティ | タイプ | 説明 |
---|---|---|
フィールド | string |
Parquet レコード内のフィールドの名前。 |
Path | string |
値が $ で始まる場合は、テーブル内の列の内容となる Parquet ドキュメント内のフィールドへのパスとして解釈されます。 Parquet レコード全体を示すパスが $ 。 値が $ で始まらない場合は、定数値として解釈されます。 特殊文字を含むパスは、['Property Name'] としてエスケープする必要があります。 詳しくは、「JSONPath 構文」を参照してください。 |
ConstValue | string |
Parquet ファイル内の値ではなく、列に使用する定数値。 |
変換 | string |
マッピング変換を使用してコンテンツに適用する必要がある変換。 |
Note
フィールドとパスは相互に排他的です。
次の代替手段は同等です。
[
{"Column": "event_name", "Properties": {"Path": "$.EventName"}}
]
[
{"Column": "event_name", "Properties": {"Field": "EventName"}}
]
重要
キューに入ったインジェストの場合:
- マッピングで参照されているテーブルがデータベースに存在しない場合は、すべての列に有効なデータ型が指定されているため、自動的に作成されます。
- マッピングで参照されている列がテーブルに存在しない場合、列に対して有効なデータ型が指定されている場合、その列に対して最初にデータが取り込まれると、その列が最後の列としてテーブルに自動的に追加されます。 マッピングに新しい列を追加するには、 .alter インジェスト マッピング コマンドを使用します。
- データは、インジェスト プロパティを使用してバッチ処理されます。 異なる ConstValue 値など、使用されるインジェスト マッピング プロパティが異なるほど、インジェストの断片化が増え、パフォーマンスが低下する可能性があります。
Parquet 型の変換
Parquet ソースからデータを取り込んだりクエリを実行したりするときに、データ型を変換するための包括的なサポートが提供されます。
次の表は、Parquet フィールド型のマッピングと、変換可能なテーブル列の型を示しています。 最初の列には Parquet 型が一覧表示され、他の列には変換可能なテーブル列の型が表示されます。
Note
パルケスト DECIMAL 型の場合、物理タイプは次のようにかっこで囲んで指定します。
- I32: INT32 (32 ビット整数)
- I64: INT64 (64 ビット整数)
- FLBA: 固定長バイト配列
- BA: バイト配列
Parquet 型 | [bool] | int | long | real | decimal | 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"
)
ID のマッピング
マッピング スキーマを定義せずにインジェスト中に Parquet マッピングを使用します ( 識別マッピングを参照)。
.ingest into Table123 (@"source1", @"source2")
with
(
format="parquet"
)