Plug-In „bag_unpack“

Das bag_unpack Plug-In entpackt eine einzelne Spalte des Typs 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 Spalte Spalte entpackt werden soll.
Spalte dynamic ✔️ Die Spalte von T , die entpackt werden soll.
OutputColumnPrefix string Ein allgemeines Präfix zum Hinzufügen zu allen Spalten, die vom Plug-In erstellt werden.
columnsConflict string Die Richtung für die Spaltenkonfliktlösung. 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 Beuteleigenschaften, die ignoriert werden sollen. }
OutputSchema Die Namen und Typen für die erwarteten Spalten der bag_unpack Plug-In-Ausgabe. Wenn Sie das erwartete Schema angeben, wird die Abfrageausführung optimiert, da die eigentliche Abfrage nicht zuerst ausgeführt werden muss, um das Schema zu untersuchen. Syntaxinformationen finden Sie unter Ausgabeschemasyntax.

Ausgabeschemasyntax

(Columnname:ColumnType [, ...] )

Um der Plug-In-Ausgabe alle Spalten der Eingabetabelle hinzuzufügen, verwenden Sie wie folgt einen Feldhalter * als ersten Parameter:

(*,Columnname:ColumnType [, ...] )

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.
  • Das Schema wird um so viele Spalten erweitert, wie es unterschiedliche Slots in den Werten des Obersten Eigenschaftenbehälters von T gibt. Der Name jeder Spalte entspricht dem Namen der einzelnen Steckplätze, optional mit dem Präfix OutputColumnPrefix. Sein Typ ist entweder der Typ des Slot, wenn alle Werte desselben Slot denselben Typ haben, oder dynamic, wenn sich die Werte im Typ unterscheiden.

Hinweis

Wenn das OutputSchema nicht angegeben wird, variiert das Ausgabeschema des Plug-Ins je nach den Eingabedatenwerten. Daher können mehrere Ausführungen des Plug-Ins mit unterschiedlichen Dateneingaben ein anderes Ausgabeschema erzeugen.

Hinweis

Die Eingabedaten für das Plug-In müssen so sein, dass das Ausgabeschema allen Regeln für ein tabellarisches Schema folgt. 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, die entpackt werden soll (Spalte), da dadurch zwei Spalten mit demselben Namen erzeugt werden.

  • Alle Slotnamen müssen gültige Entitätsnamen sein und den Benennungsregeln für Bezeichner entsprechen, wenn sie mit OutputColumnPrefix vorangestellt werden.

Beispiele

Erweitern eines Beutels

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 Jasmine

Erweitern eines Beutels mit OutputColumnPrefix

Erweitern Sie einen Beutel, und verwenden Sie die OutputColumnPrefix Option, um Spaltennamen zu erstellen, die mit dem Präfix "Property_" beginnen.

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 Jasmine

Erweitern eines Beutels mit SpaltenConflict

Erweitern Sie einen Beutel, und verwenden Sie die columnsConflict Option, um Konflikte zwischen vorhandenen Spalten und Spalten zu beheben, die bag_unpack() vom Operator erzeugt werden.

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

Ausgabe

Age Name
20 John
40 David
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

Ausgabe

Age Name
20 Old_name
40 Old_name
30 Old_name

Erweitern einer Tasche mit ignoredProperties

Erweitern Sie einen Beutel, und verwenden Sie die ignoredProperties Option, um bestimmte 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
Jasmine

Erweitern eines Beutels mit einem abfragedefiniertem OutputSchema

Erweitern Sie einen Beutel, und verwenden Sie die OutputSchema Option, um die Auswertung verschiedener Optimierungen zu ermöglichen, bevor die eigentliche Abfrage ausgeführt wird.

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)

Ausgabe

Name Age
John 20
David 40
Jasmine 30

Erweitern Sie einen Beutel, und verwenden Sie die OutputSchema Option, um die Auswertung verschiedener Optimierungen zu ermöglichen, bevor die eigentliche Abfrage ausgeführt wird. Verwenden Sie einen Wildcard * , um alle Spalten der Eingabetabelle zurückzugeben.

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)

Ausgabe

BESCHREIBUNG Name Age
Kursteilnehmer John 20
Lehrer David 40
Kursteilnehmer Jasmine 30