Invoegtoepassing voor bag_unpack

De bag_unpack invoegtoepassing pakt één kolom van het type dynamicuit door elke eigenschappenverzameling op het hoogste niveau als een kolom te behandelen. De invoegtoepassing wordt aangeroepen met de evaluate operator.

Syntax

T|evaluatebag_unpack(Column [,OutputColumnPrefix ] [,columnsConflict ] [,ignoredProperties ] ) [:OutputSchema]

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
T string ✔️ De tabellaire invoer waarvan kolom Kolom moet worden uitgepakt.
Kolom dynamic ✔️ De kolom van T die moet worden uitgepakt.
OutputColumnPrefix string Een gemeenschappelijk voorvoegsel dat moet worden toegevoegd aan alle kolommen die door de invoegtoepassing worden geproduceerd.
columnsConflict string De richting voor het oplossen van kolomconflicten. Geldige waarden:
error - Query produceert een fout (standaard)
replace_source - Bronkolom is vervangen
keep_source - Bronkolom wordt bewaard
ignoredProperties dynamic Een optionele set bag-eigenschappen die moeten worden genegeerd. }
OutputSchema De namen en typen voor de verwachte kolommen van de uitvoer van de bag_unpack invoegtoepassing. Als u het verwachte schema opgeeft, wordt de uitvoering van de query geoptimaliseerd omdat u niet eerst de werkelijke query hoeft uit te voeren om het schema te verkennen. Zie De syntaxis van het uitvoerschema voor informatie over de syntaxis.

Syntaxis van uitvoerschema

(Kolomnaam:ColumnType [, ...] )

Als u alle kolommen van de invoertabel wilt toevoegen aan de uitvoer van de invoegtoepassing, gebruikt u als volgt een jokerteken * als de eerste parameter:

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

Retouren

De bag_unpack invoegtoepassing retourneert een tabel met evenveel records als de tabellaire invoer (T). Het schema van de tabel is hetzelfde als het schema van de tabelinvoer, met de volgende wijzigingen:

  • De opgegeven invoerkolom (Kolom) wordt verwijderd.
  • Het schema wordt uitgebreid met zoveel kolommen als er afzonderlijke sleuven zijn in de waarden van de eigenschappenverzameling op het hoogste niveau van T. De naam van elke kolom komt overeen met de naam van elke site, optioneel voorafgegaan door OutputColumnPrefix. Het type is het type van de site, als alle waarden van dezelfde site hetzelfde type hebben, of dynamic, als de waarden in type verschillen.

Notitie

Als het OutputSchema niet is opgegeven, varieert het uitvoerschema van de invoegtoepassing op basis van de invoergegevenswaarden. Daarom kunnen meerdere uitvoeringen van de invoegtoepassing met verschillende gegevensinvoer een ander uitvoerschema produceren.

Notitie

De invoergegevens voor de invoegtoepassing moeten zodanig zijn dat het uitvoerschema alle regels voor een tabellair schema volgt. Met name:

  • De naam van een uitvoerkolom kan niet hetzelfde zijn als een bestaande kolom in de tabellaire invoer T, tenzij het de kolom is die moet worden uitgepakt (Kolom), omdat dit twee kolommen met dezelfde naam oplevert.

  • Alle sitenamen, indien voorafgegaan door OutputColumnPrefix, moeten geldige entiteitsnamen zijn en voldoen aan de naamgevingsregels voor id's.

Voorbeelden

Een tas uitvouwen

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)

Uitvoer

Leeftijd Name
20 Jan
40 Dave
30 Jasmine

Een zak uitvouwen met OutputColumnPrefix

Vouw een zak uit en gebruik de OutputColumnPrefix optie om kolomnamen te maken die beginnen met het voorvoegsel 'Property_'.

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')

Uitvoer

Property_Age Property_Name
20 Jan
40 Dave
30 Jasmine

Een zak uitvouwen met kolommenConflict

Vouw een bag uit en gebruik de columnsConflict optie om conflicten op te lossen tussen bestaande kolommen en kolommen die door de bag_unpack() operator zijn geproduceerd.

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

Uitvoer

Leeftijd Name
20 Jan
40 Dave
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

Uitvoer

Leeftijd Name
20 Old_name
40 Old_name
30 Old_name

Een zak uitvouwen met ignoredProperties

Vouw een bag uit en gebruik de ignoredProperties optie om bepaalde eigenschappen in de eigenschappenverzameling te negeren.

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']))

Uitvoer

Name
Jan
Dave
Jasmine

Een bag uitbreiden met een querygedefinieerde OutputSchema

Vouw een bag uit en gebruik de OutputSchema optie om toe te staan dat verschillende optimalisaties worden geëvalueerd voordat de werkelijke query wordt uitgevoerd.

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)

Uitvoer

Name Leeftijd
Jan 20
Dave 40
Jasmine 30

Vouw een bag uit en gebruik de OutputSchema optie om toe te staan dat verschillende optimalisaties worden geëvalueerd voordat de werkelijke query wordt uitgevoerd. Gebruik een jokerteken * om alle kolommen van de invoertabel te retourneren.

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)

Uitvoer

Beschrijving Name Leeftijd
Student Jan 20
Leraar Dave 40
Student Jasmine 30