Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer-
Met de bag_unpack
-invoegtoepassing wordt één kolom van het type dynamic
uitgepakt door elke eigenschapstas op het hoogste niveau als kolom te behandelen. De invoegtoepassing wordt aangeroepen met de operator evaluate
.
Syntaxis
T|
evaluate
bag_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 vervangenkeep_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
dynamic
als 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.
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 |
... | ... | ... |