Delen via


bag_unpack-invoegtoepassing

Van toepassing op: ✅Microsoft FabricAzure Data Explorer-

Met de bag_unpack-invoegtoepassing wordt één kolom van het type dynamicuitgepakt door elke eigenschapstas op het hoogste niveau als kolom te behandelen. De invoegtoepassing wordt aangeroepen met de operator evaluate.

Syntaxis

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

Meer informatie over syntaxisconventies.

Parameterwaarden

Naam Typologie Vereist Beschrijving
T- string ✔️ De tabellaire invoer waarvan de kolom Kolom moet worden uitgepakt.
kolom dynamic ✔️ De kolom van T- die u wilt uitpakken.
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 wordt vervangen
keep_source - Bronkolom wordt bewaard
ignoredProperties- dynamic Een optionele set zakeigenschappen die moeten worden genegeerd. }
OutputSchema- Geef de kolomnamen en -typen op voor de uitvoer van de bag_unpack invoegtoepassing. Zie De syntaxis van het uitvoerschema en voor meer informatie over de gevolgen. Zie Prestatieoverwegingen voor meer informatie over de syntaxis.

Syntaxis van het uitvoerschema

( ColumnName:ColumnType [, ...] )

Gebruik als volgt een jokerteken * als eerste parameter om alle kolommen van de brontabel in de uitvoer op te nemen:

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

Prestatie-overwegingen

Het gebruik van de invoegtoepassing zonder Een OutputSchema kan ernstige gevolgen hebben voor de prestaties van grote gegevenssets en moet worden vermeden.

Door een OutputSchema op te geven, kan de query-engine de uitvoering van de query optimaliseren, omdat het uitvoerschema kan worden bepaald zonder dat de invoergegevens hoeven te worden geparseerd en geanalyseerd. Dit is handig wanneer de invoergegevens groot of complex zijn. Zie de voorbeelden met gevolgen voor de prestaties van het gebruik van de invoegtoepassing met en zonder een gedefinieerd OutputSchema.

Retourneert

De bag_unpack-invoegtoepassing retourneert een tabel met zoveel records als de tabellaire invoer (T). Het schema van de tabel is hetzelfde als het schema van de invoer in tabelvorm met de volgende wijzigingen:

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

Notitie

  • Als u het OutputSchema niet opgeeft, varieert het uitvoerschema van de invoegtoepassing op basis van de invoergegevenswaarden. Meerdere uitvoeringen van de invoegtoepassing met verschillende gegevensinvoer kunnen verschillende uitvoerschema's produceren.
  • Als een OutputSchema is opgegeven, retourneert de invoegtoepassing alleen de kolommen die zijn gedefinieerd in de syntaxis van het uitvoerschema, tenzij een jokerteken * wordt gebruikt.
  • Als u alle kolommen van de invoergegevens wilt retourneren en de kolommen die zijn gedefinieerd in het OutputSchema, gebruikt u een jokerteken * in het OutputSchema.

Tabellaire schemaregels zijn van toepassing op de invoergegevens. In het bijzonder:

  • Een 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). Anders bevat de uitvoer twee kolommen met dezelfde naam.
  • Alle sitenamen, wanneer deze worden voorafgegaan door OutputColumnPrefix, moeten geldige entiteitsnamen zijn en de naamgevingsregels voor id'svolgen.

De invoegtoepassing negeert null-waarden.

Voorbeelden

In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.

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 Naam
20 John
40 Dave
30 Jasmijn

Vouw een zak uit en gebruik de OutputColumnPrefix optie om kolomnamen te produceren met een voorvoegsel:

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 John
40 Dave
30 Jasmijn

Vouw een zak uit en gebruik de columnsConflict optie om een kolomconflict tussen de dynamische kolom en de bestaande kolom op te lossen:

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 Naam
20 John
40 Dave
30 Jasmijn
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 Naam
20 Old_name
40 Old_name
30 Old_name

Vouw een zak uit en gebruik de ignoredProperties optie om 2 van de eigenschappen in de eigenschappentas 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

Naam
John
Dave
Jasmijn

Vouw een zak uit en gebruik de optie 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)

uitvoer

Naam Leeftijd
John 20
Dave 40
Jasmijn 30

Vouw een tas uit met een OutputSchema en gebruik de optie jokertekens*:

Deze query retourneert de oorspronkelijke sitebeschrijving en de kolommen die zijn gedefinieerd in het OutputSchema.

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)

uitvoer

Beschrijving Naam Leeftijd
Student John 20
Leraar Dave 40
Student Jasmijn 30

Voorbeelden met gevolgen voor prestaties

Vouw een zak uit met en zonder een gedefinieerd OutputSchema om de gevolgen voor de prestaties te vergelijken:

In dit voorbeeld wordt een openbaar beschikbare tabel in het Help-cluster gebruikt. In de ContosoSales-database bevindt zich een tabel met de naam SalesDynamic. De tabel bevat verkoopgegevens en bevat een dynamische kolom met de naam Customer_Properties.

Schermopname van de tabel SalesDynamic met de kolom Klanteigenschappen gemarkeerd.

  • Voorbeeld zonder uitvoerschema: De eerste query definieert geen OutputSchema. De query duurt 5,84 seconden CPU en scant 36,39 MB aan gegevens.

    SalesDynamic
    | evaluate bag_unpack(Customer_Properties) 
    | summarize Sales=sum(SalesAmount) by Country, State
    
  • Voorbeeld met uitvoerschema: De tweede query biedt een OutputSchema. De query duurt 0,45 seconden CPU en scant 19,31 MB aan gegevens. De query hoeft de invoertabel niet te analyseren, waardoor de verwerkingstijd wordt bespaard.

    SalesDynamic
    | evaluate bag_unpack(Customer_Properties) :  (*, Country:string, State:string, City:string)
    | summarize Sales=sum(SalesAmount) by Country, State
    

uitvoer

De uitvoer is hetzelfde voor beide query's. De eerste 10 rijen van de uitvoer worden hieronder weergegeven.

Canada Brits-Columbia 56,101,083
Verenigd Koninkrijk Engeland 77,288,747
Australië Victoria 31,242,423
Australië Queensland 27,617,822
Australië Zuid-Australië 8,530,537
Australië Nieuw Zuid-Wales 54,765,786
Australië Tasmanië 3,704,648
Canada Alberta 375,061
Canada Ontario 38,282
Verenigde Staten Washington 80,544,870
... ... ...