JSON マッピング
インジェスト ソース ファイルが JSON 形式の場合は、JSON マッピングを使用して、受信データをテーブル内の列にマップします。
マッピング リスト内の各要素は、特定の列のマッピングを定義します。 これらの要素は、 column
、 datatype
、 properties
の 3 つのプロパティから構成されます。 詳細については、 データ マッピングの概要を参照してください。
各 JSON マッピング要素には、次のいずれかの省略可能なプロパティが含まれている必要があります。
プロパティ | タイプ | 説明 |
---|---|---|
パス | string |
値が $ で始まる場合、JSON ドキュメント内のフィールドへの JSON パスとして解釈され、テーブル内の列の内容になります。 ドキュメント全体を示す JSON パスが $ 。 値が $ で始まらない場合は、定数値として解釈されます。 特殊文字を含む JSON パスは、['プロパティ名'] の形式でエスケープする必要があります。 詳しくは、「JSONPath 構文」を参照してください。 |
ConstValue | string |
JSON ファイル内の値ではなく、列に使用する定数値。 |
変換 | string |
マッピング変換を使用してコンテンツに適用する必要がある変換。 |
重要
キューに入ったインジェストの場合:
- マッピングで参照されているテーブルがデータベースに存在しない場合は、すべての列に有効なデータ型が指定されているため、自動的に作成されます。
- マッピングで参照されている列がテーブルに存在しない場合、列に対して有効なデータ型が指定されている場合、その列に対して最初にデータが取り込まれると、その列が最後の列としてテーブルに自動的に追加されます。 マッピングに新しい列を追加するには、 .alter インジェスト マッピング コマンドを使用します。
- データは、インジェスト プロパティを使用してバッチ処理されます。 異なる ConstValue 値など、使用されるインジェスト マッピング プロパティが異なるほど、インジェストの断片化が増え、パフォーマンスが低下する可能性があります。
例
[
{"Column": "event_timestamp", "Properties": {"Path": "$.Timestamp"}},
{"Column": "event_name", "Properties": {"Path": "$.Event.Name"}},
{"Column": "event_type", "Properties": {"Path": "$.Event.Type"}},
{"Column": "source_uri", "Properties": {"Transform": "SourceLocation"}},
{"Column": "source_line", "Properties": {"Transform": "SourceLineNumber"}},
{"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 = "json",
ingestionMapping =
```
[
{"Column": "column_a", "Properties": {"Path": "$.Obj.Property"}},
{"Column": "column_b", "Properties": {"Path": "$.Property"}},
{"Column": "custom_column", "Properties": {"Path": "$.[\'Property name with space\']"}}
]
```
)
事前に作成されたマッピング
マッピングが作成されたら.ingest
管理コマンドで名前でマッピングを参照します。
.ingest into Table123 (@"source1", @"source2")
with
(
format="json",
ingestionMappingReference = "Mapping_Name"
)
ID のマッピング
マッピング スキーマを定義せずに、インジェスト中に JSON マッピングを使用します ( 識別マッピングを参照)。
.ingest into Table123 (@"source1", @"source2")
with
(
format="json"
)
JSON マッピングのコピー
次の手順により、既存のテーブルの JSON マッピングをコピーし、同じマッピングを持つ新しいテーブルを作成できます。
マッピングをコピーするテーブルで、次のコマンドを実行します。
.show table TABLENAME ingestion json mappings | extend formatted_mapping = strcat("'",replace_string(Mapping, "'", "\\'"),"'") | project formatted_mapping
上記のコマンドの出力を使用して、同じマッピングを持つ新しいテーブルを作成します。
.create table TABLENAME ingestion json mapping "TABLENAME_Mapping" RESULT_OF_ABOVE_CMD