次の方法で共有


bag_unpack プラグイン

適用対象: ✅Microsoft FabricAzure データ エクスプローラー

プラグインは、各プロパティ* バッグのトップ レベル* スロット*を列*として処理し、bag_unpack1つの型*の列*をアンパックします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