Freigeben über


Plug-In „bag_unpack“

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 ersetzt
keep_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.

Screenshot der Tabelle

  • 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, State
    
  • Beispiel 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
... ... ...