bag_unpack プラグイン
プラグインは、各プロパティ* バッグのトップ レベル* スロット*を列*として処理し、bag_unpack
1つの型*の列*をアンパックしますdynamic
。 このプラグインは、evaluate
演算子を使用して呼び出されます。
構文
T |
evaluate
bag_unpack(
Column [,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
構文規則について詳しく知る。
パラメーター
件名 | タイプ | Required | 説明 |
---|---|---|---|
T | string |
✔️ | 列 Column をアンパックする表形式の入力。 |
列 | dynamic |
✔️ | アンパックする T の列。 |
OutputColumnPrefix | string |
プラグインによって生成される、すべての列に追加する共通のプレフィックス。 | |
columnsConflict | string |
列の競合解決の方向。 有効な値: error - クエリ*でエラー*が発生する (既定値*)replace_source - ソース列*が置き換えられるkeep_source - ソース列*が保持される |
|
ignoredProperties | dynamic |
省略可能な一連のバッグ プロパティを無視します。 } | |
OutputSchema | bag_unpack プラグイン出力の予想される列の名前と型。 予想されるスキーマを指定すると、最初に実際のクエリを実行してスキーマを探索することなく、クエリの実行が最適化されます。 構文については、「 出力スキーマの構文」を参照してください。 |
出力スキーマの構文
(
ColumnName :
ColumnType [,
...])
入力テーブルのすべての列をプラグイン出力に追加するには、次のように、最初のパラメーターとしてワイルドカード *
を使用します。
(
*
,
ColumnName :
ColumnType [,
...])
返品
bag_unpack
プラグインは、表形式入力* (T) と同じ数のレコード*を含むテーブル*を返します (T)。 テーブル*のスキーマ*は、表形式入力*と同じスキーマ*に次の変更を加えたものです:
- 指定された入力*列* (Column) が削除*されます。
- スキーマ*は、T のトップ レベル*のプロパティ* バッグ値にある個別のスロット*と同じ数の列*で拡張されます。各列*名は、各スロット*名に対応し、必要に応じて OutputColumnPrefix というプレフィックスが付きます。 その型*は、スロット*が同じ値すべてに同じ型*を持つ場合はスロット*の型*、値の型*が異なる場合は
dynamic
のいずれかとなります。
Note
OutputSchema が指定されていない場合、プラグインの出力スキーマは入力データ値によって異なります。 したがって、異なるデータ入力によってプラグインを複数回実行すると、異なる出力スキーマが生成される場合があります。
プラグインへの入力*データ*は、出力*スキーマ*が表形式スキーマ*に関するすべての規則に従う必要があります。 特に次の点に違いがあります。
出力列*名は、アンパックする列* (Column) を指定したことで同じ名前の列*が 2つ生成されない限り、表形式入力* T の既存の列*と同じ名前にすることはできません。
先頭に OutputColumnPrefix が付くスロット*名はすべて、有効な*エンティティ*名となり、識別子*の名前付けルール*に従っている必要があります。
NULL 値は無視されます。
例
バッグの展開
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
出力
年齢 | Name |
---|---|
20 | John |
40 | Dave |
30 | ジャスミン |
OutputColumnPrefix を使用してバッグを展開する*
バッグを展開したら、OutputColumnPrefix
のオプション を使用して、プレフィックス『Property_』で始まる列*名を生成します。
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')
出力
Property_Age | Property_Name |
---|---|
20 | John |
40 | Dave |
30 | ジャスミン |
columnsConflict を含むバッグを展開する*
バッグを展開したら、columnsConflict
のオプションを使用して、bag_unpack()
演算子*によって生成された既存の列*と列*の間にある競合*を解決します。
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Use new name
出力
年齢 | Name |
---|---|
20 | John |
40 | Dave |
30 | ジャスミン |
datatable(Name:string, d:dynamic)
[
'Old_name', dynamic({"Name": "John", "Age":20}),
'Old_name', dynamic({"Name": "Dave", "Age":40}),
'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old name
出力
年齢 | Name |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
ignoredProperties を使用してバッグを展開する*
バッグを展開したら、ignoredProperties
のオプションを使用して、プロパティ* バッグ内の特定のプロパティ*を無視します。
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20, "Address": "Address-1" }),
dynamic({"Name": "Dave", "Age":40, "Address": "Address-2"}),
dynamic({"Name": "Jasmine", "Age":30, "Address": "Address-3"}),
]
// Ignore 'Age' and 'Address' properties
| evaluate bag_unpack(d, ignoredProperties=dynamic(['Address', 'Age']))
出力
Name |
---|
John |
Dave |
ジャスミン |
クエリ定義の OutputSchema を使用してバッグを展開する
バッグを展開し、OutputSchema
オプションを使用して、実際のクエリを実行する前にさまざまな最適化を評価できるようにします。
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d) : (Name:string, Age:long)
出力
Name | Age |
---|---|
John | 20 |
Dave | 40 |
ジャスミン | 30 |
バッグを展開し、OutputSchema
オプションを使用して、実際のクエリを実行する前にさまざまな最適化を評価できるようにします。 入力テーブルのすべての列を返すには、ワイルドカード *
を使用します。
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20}), "Student",
dynamic({"Name": "Dave", "Age":40}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
出力
説明 | Name | Age |
---|---|---|
Student | John | 20 |
教師 | Dave | 40 |
Student | ジャスミン | 30 |