Udostępnij za pośrednictwem


bag_unpack, wtyczka

Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer

Wtyczka bag_unpack rozpakuje pojedynczą kolumnę typu dynamic, traktując każde gniazdo najwyższego poziomu właściwości jako kolumnę. Wtyczka jest wywoływana z operatorem evaluate .

Składnia

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

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Typ Wymagania opis
T string ✔️ Dane wejściowe tabelaryczne, których kolumna Kolumna ma zostać rozpakowana.
Kolumna dynamic ✔️ Kolumna T do rozpakowania.
OutputColumnPrefix string Wspólny prefiks do dodania do wszystkich kolumn generowanych przez wtyczkę.
columnsConflict string Kierunek rozwiązywania konfliktów kolumn. Prawidłowe wartości:
error — Zapytanie generuje błąd (wartość domyślna)
replace_source — Kolumna źródłowa jest zastępowana
keep_source - Kolumna źródłowa jest przechowywana
ignorowanewłaściwości dynamic Opcjonalny zestaw właściwości torby do zignorowania. }
OutputSchema Określ nazwy i typy kolumn dla danych wyjściowych bag_unpack wtyczki. Aby uzyskać informacje o składni, zobacz Składnia schematu danych wyjściowych i aby zrozumieć implikacje, zobacz Zagadnienia dotyczące wydajności.

Składnia schematu wyjściowego

( Nazwakolumny:ColumnType [, ...])

Użyj symbolu wieloznakowego * jako pierwszego parametru, aby uwzględnić wszystkie kolumny tabeli źródłowej w danych wyjściowych w następujący sposób:

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

Zagadnienia dotyczące wydajności

Korzystanie z wtyczki bez elementu OutputSchema może mieć poważne konsekwencje dla wydajności w dużych zestawach danych i należy go unikać.

Udostępnienie modułu OutputSchema umożliwia aparatowi zapytań optymalizowanie wykonywania zapytań, ponieważ może określić schemat wyjściowy bez konieczności analizowania i analizowania danych wejściowych. Jest to korzystne, gdy dane wejściowe są duże lub złożone. Zapoznaj się z przykładami z wpływem na wydajność korzystania z wtyczki z elementem OutputSchema i bez zdefiniowanego elementu OutputSchema.

Zwraca

Wtyczka bag_unpack zwraca tabelę z dowolną liczbą rekordów w postaci danych wejściowych tabelarycznych (T). Schemat tabeli jest taki sam jak schemat danych wejściowych tabelarycznych z następującymi modyfikacjami:

  • Określona kolumna wejściowa (kolumna) jest usuwana.
  • Nazwa każdej kolumny odpowiada nazwie każdego miejsca, opcjonalnie poprzedzonego prefiksem OutputColumnPrefix.
  • Typ każdej kolumny jest typem gniazda, jeśli wszystkie wartości tego samego miejsca mają ten sam typ lub dynamic, jeśli wartości różnią się typem.
  • Schemat jest rozszerzony o dowolną liczbę kolumn, ponieważ istnieją różne gniazda w wartościach torby właściwości najwyższego poziomu T.

Uwaga

  • Jeśli nie określisz parametru OutputSchema, schemat wyjściowy wtyczki będzie się różnić w zależności od wartości danych wejściowych. Wiele wykonań wtyczki z różnymi danymi wejściowymi może generować różne schematy wyjściowe.
  • Jeśli określono parametr OutputSchema , wtyczka zwraca tylko kolumny zdefiniowane w składni schematu danych wyjściowych, chyba że zostanie użyta symbol wieloznaczny * .
  • Aby zwrócić wszystkie kolumny danych wejściowych i kolumn zdefiniowanych w parametrze OutputSchema, użyj symbolu wieloznakowego * w elemacie OutputSchema.

Reguły schematu tabelarycznego mają zastosowanie do danych wejściowych. W szczególności:

  • Nazwa kolumny wyjściowej nie może być taka sama jak istniejąca kolumna w tabelarycznych danych wejściowych T, chyba że jest to kolumna do rozpakowania (kolumna). W przeciwnym razie dane wyjściowe zawierają dwie kolumny o tej samej nazwie.
  • Wszystkie nazwy miejsc, jeśli są poprzedzone prefiksem OutputColumnPrefix, muszą być prawidłowe nazwy jednostek i postępować zgodnie z regułami nazewnictwa identyfikatorów.

Wtyczka ignoruje wartości null.

Przykłady

W przykładach w tej sekcji pokazano, jak używać składni, aby ułatwić rozpoczęcie pracy.

Rozwiń torbę:

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

Wyjście

Wiek Nazwisko
20 Michał
40 Dave
30 Jaśmin

Rozwiń torbę i użyj OutputColumnPrefix opcji , aby utworzyć nazwy kolumn z prefiksem:

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

Wyjście

Property_Age Property_Name
20 Michał
40 Dave
30 Jaśmin

Rozwiń torbę i użyj columnsConflict opcji , aby rozwiązać konflikt kolumny między kolumną dynamiczną a istniejącą kolumną:

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

Wyjście

Wiek Nazwisko
20 Michał
40 Dave
30 Jaśmin
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

Wyjście

Wiek Nazwisko
20 Old_name
40 Old_name
30 Old_name

Rozwiń torbę i użyj ignoredProperties opcji , aby zignorować 2 właściwości w torbie właściwości:

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

Wyjście

Nazwisko
Michał
Dave
Jaśmin

Rozwiń torbę i użyj opcji 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)

Wyjście

Nazwisko Wiek
Michał 20
Dave 40
Jaśmin 30

Rozwiń torbę za pomocą elementu OutputSchema i użyj opcji symboli wieloznacznych*:

To zapytanie zwraca oryginalny opis miejsca i kolumny zdefiniowane w 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)

Wyjście

opis Nazwisko Wiek
uczniowie Michał 20
Nauczyciel Dave 40
uczniowie Jaśmin 30

Przykłady z implikacjami wydajności

Rozwiń torbę i bez zdefiniowanej wartości OutputSchema , aby porównać implikacje dotyczące wydajności:

W tym przykładzie użyto publicznie dostępnej tabeli w klastrze pomocy. W bazie danych ContosoSales istnieje tabela o nazwie SalesDynamic. Tabela zawiera dane sprzedaży i zawiera kolumnę dynamiczną o nazwie Customer_Properties.

Zrzut ekranu przedstawiający tabelę SalesDynamic z wyróżnioną kolumną właściwości klienta.

  • Przykład bez schematu wyjściowego: pierwsze zapytanie nie definiuje elementu OutputSchema. Zapytanie trwa 5,84 sekundy procesora CPU i skanuje 36,39 MB danych.

    SalesDynamic
    | evaluate bag_unpack(Customer_Properties) 
    | summarize Sales=sum(SalesAmount) by Country, State
    
  • Przykład ze schematem danych wyjściowych: drugie zapytanie udostępnia parametr OutputSchema. Zapytanie trwa 0,45 sekund procesora CPU i skanuje 19,31 MB danych. Zapytanie nie musi analizować tabeli wejściowej, co pozwala zaoszczędzić czas przetwarzania.

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

Wyjście

Dane wyjściowe są takie same dla obu zapytań. Poniżej przedstawiono pierwsze 10 wierszy danych wyjściowych.

Kanada Kolumbia Brytyjska 56,101,083
Wielka Brytania Anglia 77,288,747
Australia Wiktoria 31,242,423
Australia Queensland 27,617,822
Australia Australia Południowa 8,530,537
Australia Nowa Południowa Walia 54,765,786
Australia Tasmania 3,704,648
Kanada Alberta 375,061
Kanada Ontario 38,282
Stany Zjednoczone Waszyngton 80,544,870
...\ ...\ ...\