bag_unpack 外掛程式
適用於: ✅Microsoft網狀架構✅Azure 數據總管
外掛程式會將 bag_unpack
每個屬性包最上層位置視為數據行,以解除封裝類型的 dynamic
單一數據行。 外掛程式是使用運算子叫 evaluate
用的。
語法
T bag_unpack(
evaluate
|
數據行 [ ,
OutputColumnPrefix ] [ columnsConflict ] [ ,
ignoredProperties ] )
[:
,
OutputSchema]
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
T | string |
✔️ | 要解除封裝數據行之數據行的表格式輸入。 |
資料行 | dynamic |
✔️ | 要解壓縮的 T 資料行。 |
OutputColumnPrefix | string |
要加入外掛程式所產生的所有數據行的通用前置詞。 | |
columnsConflict | string |
數據行衝突解決的方向。 有效值:error - 查詢會產生錯誤(預設值)replace_source - 已取代源數據行keep_source - 保留源數據行 |
|
ignoredProperties | dynamic |
要忽略的一組選擇性包屬性。 } | |
OutputSchema | 外掛程式輸出之預期 bag_unpack 數據行的名稱和類型。 指定預期的架構,不需要先執行實際的查詢來探索架構,即可優化查詢執行。 如需語法資訊,請參閱 輸出架構語法。 |
輸出架構語法
(
ColumnName :
ColumnType [,
...])
若要將輸入數據表的所有數據行新增至外掛程式輸出,請使用通配符 *
作為第一個參數,如下所示:
(
*
,
ColumnName :
ColumnType [,
...])
傳回
外掛程式會bag_unpack
傳回數據表,其表格式輸入 (T) 會傳回記錄數目一樣多的數據表。 資料表的架構與其表格式輸入的架構相同,但修改如下:
- 已移除指定的輸入數據列 (Column)。
- 架構會隨著 T 的最上層屬性值中有相異的位置數目而擴充。每個數據行的名稱會對應至每個位置的名稱,選擇性地加上 OutputColumnPrefix。 如果相同位置的所有值具有相同類型,則其類型為位置的類型,
dynamic
如果類型不同,則為 。
注意
如果未指定 OutputSchema,外掛程式的輸出架構會根據輸入數據值而有所不同。 因此,使用不同數據輸入的外掛程式多次執行,可能會產生不同的輸出架構。
外掛程式的輸入數據必須讓輸出架構遵循表格式架構的所有規則。 特別是:
輸出數據行名稱不能與表格式輸入 T 中的現有數據行相同,除非它是要解壓縮的數據行(Column),因為這會產生兩個具有相同名稱的數據行。
所有位置名稱在 OutputColumnPrefix 前面加上時,都必須是有效的實體名稱,並遵循標識符命名規則。
會忽略 Null 值。
範例
展開包
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
輸出
年齡 | 名稱 |
---|---|
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
輸出
年齡 | 名稱 |
---|---|
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
輸出
年齡 | 名稱 |
---|---|
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 |
茉莉花 |
使用查詢定義的 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)
輸出
名稱 | 年齡 |
---|---|
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)
輸出
描述 | 名稱 | 年齡 |
---|---|---|
學生 | John | 20 |
Teacher | Dave | 40 |
學生 | 茉莉花 | 30 |