Dela via


bag_unpack-plugin-program

Plugin-programmet bag_unpack packar upp en enda kolumn av typen dynamicgenom att behandla varje egenskapsuppsättning på översta nivån som en kolumn. Plugin-programmet anropas med operatorn evaluate .

Syntax

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

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
T string ✔️ Tabellindata vars kolumnkolumn ska packas upp.
Kolumn dynamic ✔️ Kolumnen i T som ska packas upp.
OutputColumnPrefix string Ett vanligt prefix att lägga till i alla kolumner som skapas av plugin-programmet.
columnsConflict string Riktningen för konfliktlösning för kolumner. Giltiga värden:
error – Frågan genererar ett fel (standard)
replace_source – Källkolumnen ersätts
keep_source – Källkolumnen behålls
ignoredProperties dynamic En valfri uppsättning bag-egenskaper som ska ignoreras. }
OutputSchema Namn och typer för de förväntade kolumnerna i plugin-programmets bag_unpack utdata. Om du anger det förväntade schemat optimeras frågekörningen genom att du inte först behöver köra den faktiska frågan för att utforska schemat. Syntaxinformation finns i Schemasyntax för utdata.

Schemasyntax för utdata

(Columnname:ColumnType [, ...] )

Om du vill lägga till alla kolumner i indatatabellen i plugin-programmets utdata använder du ett jokertecken * som den första parametern enligt följande:

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

Returer

Plugin-programmet bag_unpack returnerar en tabell med så många poster som dess tabellindata (T). Schemat för tabellen är samma som schemat för dess tabellindata med följande ändringar:

  • Den angivna indatakolumnen (kolumn) tas bort.
  • Schemat utökas med så många kolumner som det finns distinkta platser i egenskapsuppsättningsvärdena på den översta nivån för T. Namnet på varje kolumn motsvarar namnet på varje fack, eventuellt prefixet outputColumnPrefix. Dess typ är antingen platsens typ, om alla värden för samma fack har samma typ, eller dynamic, om värdena skiljer sig åt i typ.

Anteckning

Om OutputSchema inte anges varierar plugin-programmets utdataschema beroende på indatavärdena. Därför kan flera körningar av plugin-programmet med olika indata generera olika utdatascheman.

Anteckning

Indata till plugin-programmet måste vara sådana att utdataschemat följer alla regler för ett tabellschema. Framför allt:

  • Ett kolumnnamn för utdata får inte vara samma som en befintlig kolumn i tabellindata T, såvida det inte är kolumnen som ska packas upp (Kolumn), eftersom det ger två kolumner med samma namn.

  • Alla facknamn, som föregås av OutputColumnPrefix, måste vara giltiga entitetsnamn och följa namngivningsreglerna för identifierare.

Exempel

Expandera en påse

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

Resultat

Ålder Name
20 John
40 Dave
30 Jasmin

Expandera en påse med OutputColumnPrefix

Expandera en påse och använd OutputColumnPrefix alternativet för att skapa kolumnnamn som börjar med prefixet "Property_".

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

Resultat

Property_Age Property_Name
20 John
40 Dave
30 Jasmin

Expandera en påse med columnsConflict

Expandera en påse och använd columnsConflict alternativet för att lösa konflikter mellan befintliga kolumner och kolumner som genereras av operatorn bag_unpack() .

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

Resultat

Ålder Name
20 John
40 Dave
30 Jasmin
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

Resultat

Ålder Name
20 Old_name
40 Old_name
30 Old_name

Expandera en påse med ignoredProperties

Expandera en påse och använd ignoredProperties alternativet för att ignorera vissa egenskaper i egenskapsuppsättningen.

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

Resultat

Name
John
Dave
Jasmin

Expandera en påse med ett frågedefinierat OutputSchema

Expandera en påse och använd OutputSchema alternativet för att tillåta att olika optimeringar utvärderas innan du kör den faktiska frågan.

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)

Resultat

Name Ålder
John 20
Dave 40
Jasmin 30

Expandera en påse och använd OutputSchema alternativet för att tillåta att olika optimeringar utvärderas innan du kör den faktiska frågan. Använd ett jokertecken * för att returnera alla kolumner i indatatabellen.

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)

Resultat

Beskrivning Name Ålder
Student John 20
Lärare Dave 40
Student Jasmin 30