Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer
Das bag_unpack Plug-In entpackt eine einzelne Spalte vom Typ dynamic, indem jeder Eigenschaftenbehälter auf oberster Ebene als Spalte behandelt wird. Das Plug-In wird mit dem evaluate Operator aufgerufen.
Syntax
T|evaluatebag_unpack( Column [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| T | string |
✔️ | Die tabellarische Eingabe, deren Spaltenspalte entpackt werden soll. |
| Spalte | dynamic |
✔️ | Die Spalte von T , die entpackt werden soll. |
| OutputColumnPrefix | string |
Ein allgemeines Präfix, das allen Spalten hinzugefügt werden soll, die vom Plug-In erstellt werden. | |
| columnsConflict | string |
Die Richtung für die Konfliktauflösung der Spalte. Gültige Werte: error - Abfrage erzeugt einen Fehler (Standard)replace_source - Quellspalte wird ersetztkeep_source - Quellspalte wird beibehalten |
|
| ignoredProperties | dynamic |
Ein optionaler Satz von Bag-Eigenschaften, die ignoriert werden sollen. } | |
| OutputSchema | Geben Sie die Spaltennamen und -typen für die bag_unpack Plug-In-Ausgabe an. Informationen zur Syntax finden Sie unter Ausgabeschemasyntax und um die Auswirkungen zu verstehen, siehe Leistungsüberlegungen. |
Ausgabeschemasyntax
(
ColumnName:ColumnType [, ...])
Verwenden Sie einen Wildcard * als ersten Parameter, um alle Spalten der Quelltabelle in die Ausgabe einzuschließen:
(
*
,
ColumnName:ColumnType [, ...])
Leistungsüberlegungen
Die Verwendung des Plug-Ins ohne OutputSchema kann schwerwiegende Leistungsauswirkungen in großen Datasets haben und sollte vermieden werden.
Wenn Sie ein OutputSchema bereitstellen, kann das Abfragemodul die Abfrageausführung optimieren, da es das Ausgabeschema bestimmen kann, ohne die Eingabedaten analysieren und analysieren zu müssen. OutputSchema ist von Vorteil, wenn die Eingabedaten groß oder komplex sind. Sehen Sie sich die Beispiele mit Leistungsauswirkungen der Verwendung des Plug-Ins mit und ohne ein definiertes OutputSchema an.
Gibt zurück
Das bag_unpack Plug-In gibt eine Tabelle mit so vielen Datensätzen wie die tabellarische Eingabe (T) zurück. Das Schema der Tabelle entspricht dem Schema der tabellarischen Eingabe mit den folgenden Änderungen:
- Die angegebene Eingabespalte (Spalte) wird entfernt.
- Der Name jeder Spalte entspricht dem Namen jedes Steckplatzes, optional präfix von OutputColumnPrefix.
- Der Typ jeder Spalte ist entweder der Typ des Steckplatzes, wenn alle Werte desselben Steckplatzes denselben Typ aufweisen, oder
dynamic, wenn sich die Werte in Typ unterscheiden. - Das Schema wird um so viele Spalten erweitert, wie es unterschiedliche Steckplätze in den Werten des Eigenschaftenbehälters der obersten Ebene von T gibt.
Hinweis
- Wenn Sie das OutputSchema nicht angeben, variiert das Plug-In-Ausgabeschema basierend auf den Eingabedatenwerten. Mehrere Ausführungen des Plug-Ins mit unterschiedlichen Dateneingaben können unterschiedliche Ausgabeschemas erzeugen.
- Wenn ein OutputSchema angegeben wird, gibt das Plug-In nur die spalten zurück, die in der Ausgabeschemasyntax definiert sind, es sei denn, ein Wildcard
*wird verwendet. - Um alle Spalten der Eingabedaten zurückzugeben, und die spalten, die im OutputSchema definiert sind, verwenden Sie einen Wildcard
*im OutputSchema.
Tabellarische Schemaregeln gelten für die Eingabedaten. Dies gilt insbesondere für:
- Ein Ausgabespaltenname kann nicht mit einer vorhandenen Spalte in der tabellarischen Eingabe T identisch sein, es sei denn, es handelt sich um die Spalte zum Entpacken (Spalte). Andernfalls enthält die Ausgabe zwei Spalten mit demselben Namen.
- Alle Slotnamen müssen bei präfix "OutputColumnPrefix" gültige Entitätsnamen sein und den Benennungsregeln für Bezeichner entsprechen.
Das Plug-In ignoriert NULL-Werte.
Beispiele
Die Beispiele in diesem Abschnitt zeigen, wie Sie die Syntax verwenden, um Ihnen den Einstieg zu erleichtern.
Erweitern einer Tasche:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Ausgabe
Age |
Name |
|---|---|
| 20 | John |
| 40 | David |
| 30 | Jasmin |
Erweitern Sie eine Tasche, und verwenden Sie die OutputColumnPrefix Option, um Spaltennamen mit einem Präfix zu erstellen:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({"Name": "Dave", "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')
Ausgabe
Property_Age |
Property_Name |
|---|---|
| 20 | John |
| 40 | David |
| 30 | Jasmin |
Erweitern Sie einen Beutel, und verwenden Sie die columnsConflict Option, um einen Spaltenkonflikt zwischen der dynamischen Spalte und der vorhandenen Spalte zu lösen:
datatable(Name:string, d:dynamic)
[
'James', dynamic({"Name": "John", "Age":20}),
'David', dynamic({ "Age":40}),
'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Replace old column Name by new column
Ausgabe
Name |
Age |
|---|---|
| John | 20 |
| 40 | |
| Jasmin | 30 |
datatable(Name:string, d:dynamic)
[
'James', dynamic({"Name": "John", "Age":20}),
'David', dynamic({"Name": "Dave", "Age":40}),
'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old column Name
Ausgabe
Name |
Age |
|---|---|
| James | 20 |
| David | 40 |
| Emily | 30 |
Erweitern Sie eine Tasche, und verwenden Sie die ignoredProperties Option, 2 der Eigenschaften im Eigenschaftenbehälter zu ignorieren:
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']))
Ausgabe
Name |
|---|
| John |
| David |
| Jasmin |
Erweitern Sie einen Beutel, und verwenden Sie die Option OutputSchema:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({ "Name": "Dave", "Height": 170, "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Ausgabe
Age |
Height |
Name |
|---|---|---|
| 20 | John | |
| 40 | 170 | David |
| 30 | Jasmin |
Erweitern Sie einen Beutel mit einem OutputSchema , und verwenden Sie die Option "Wildcard * ":
Diese Abfrage gibt die ursprüngliche Platzbeschreibung und die spalten zurück, die im OutputSchema definiert sind.
datatable(d:dynamic, Description: string)
[
dynamic({"Name": "John", "Age":20, "height":180}), "Student",
dynamic({"Name": "Dave", "Age":40, "height":160}), "Teacher",
dynamic({"Name": "Jasmine", "Age":30, "height":172}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)
Ausgabe
| Beschreibung | Name |
Age |
|---|---|---|
| Kursteilnehmer | John | 20 |
| Lehrkraft | David | 40 |
| Kursteilnehmer | Jasmin | 30 |
Beispiele mit Leistungsauswirkungen
Erweitern Sie einen Beutel mit und ohne ein definiertes OutputSchema , um Leistungsauswirkungen zu vergleichen:
In diesem Beispiel wird eine öffentlich verfügbare Tabelle im Hilfecluster verwendet. In der ContosoSales-Datenbank gibt es eine Tabelle namens "SalesDynamic". Die Tabelle enthält Umsatzdaten und enthält eine dynamische Spalte mit dem Namen Customer_Properties.
Beispiel ohne Ausgabeschema: Die erste Abfrage definiert kein OutputSchema. Die Abfrage benötigt 5,84 Sekunden CPU und scannt 36,39 MB Daten.
SalesDynamic | evaluate bag_unpack(Customer_Properties) | summarize Sales=sum(SalesAmount) by Country, StateBeispiel mit Ausgabeschema: Die zweite Abfrage stellt ein OutputSchema bereit. Die Abfrage benötigt 0,45 Sekunden CPU und scannt 19,31 MB Daten. Die Abfrage muss die Eingabetabelle nicht analysieren, was die Verarbeitungszeit spart.
SalesDynamic | evaluate bag_unpack(Customer_Properties) : (*, Country:string, State:string, City:string) | summarize Sales=sum(SalesAmount) by Country, State
Ausgabe
Die Ausgabe ist für beide Abfragen identisch. Die ersten 10 Zeilen der Ausgabe werden unten angezeigt.
Country/Region |
State |
Sales |
|---|---|---|
| Kanada | British Columbia | 56,101,083 |
| Vereinigtes Königreich | England | 77,288,747 |
| Australien | Victoria | 31,242,423 |
| Australien | Queensland | 27,617,822 |
| Australien | Australien, Süden | 8,530,537 |
| Australien | New South Wales | 54,765,786 |
| Australien | Tasmanien | 3,704,648 |
| Kanada | Alberta | 375,061 |
| Kanada | Ontario | 38,282 |
| USA | Washington | 80,544,870 |
| ... | ... | ... |