Share via


bag_unpack プラグイン

プラグインは、各プロパティ* バッグのトップ レベル* スロット*を列*として処理し、bag_unpack1つの型*の列*をアンパックしますdynamic。 このプラグインは、evaluate演算子*を使用して呼び出し*ます。

構文

T|evaluatebag_unpack( [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]

構文規則について詳しく知る。

パラメーター

名前 必須 説明
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 が指定されていない場合、プラグインの出力スキーマは入力データ値によって異なります。 したがって、異なるデータ入力によってプラグインを複数回実行すると、異なる出力スキーマが生成される場合があります。

Note

プラグインへの入力*データ*は、出力*スキーマ*が表形式スキーマ*に関するすべての規則に従う必要があります。 特に次の点に違いがあります。

  • 出力列*名は、アンパックする列* (Column) を指定したことで同じ名前の列*が 2つ生成されない限り、表形式入力* T の既存の列*と同じ名前にすることはできません。

  • 先頭に OutputColumnPrefix が付くスロット*名はすべて、有効な*エンティティ*名となり、識別子*の名前付けルール*に従っている必要があります。

バッグの展開

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)

出力

Age 名前
20 John
40 Dave
30 Jasmine

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 Jasmine

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

出力

Age 名前
20 John
40 Dave
30 Jasmine
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

出力

Age 名前
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']))

出力

名前
John
Dave
Jasmine

クエリ定義の 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)

出力

名前 Age
John 20
Dave 40
Jasmine 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)

出力

説明 名前 Age
学生 John 20
教師 Dave 40
学生 Jasmine 30