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 | bag_unpack( evaluate Column [, OutputColumnPrefix ] [, columnsConflict ] [, ignoredProperties ] ) [: OutputSchema]

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

Parametry

Nazwisko Type 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 Nazwy i typy oczekiwanych kolumn danych wyjściowych bag_unpack wtyczki. Określenie oczekiwanego schematu optymalizuje wykonywanie zapytań, nie trzeba najpierw uruchamiać rzeczywistego zapytania w celu eksplorowania schematu. Aby uzyskać informacje o składni, zobacz Składnia schematu wyjściowego.

Składnia schematu wyjściowego

(Nazwakolumny : ColumnType [, ...])

Aby dodać wszystkie kolumny tabeli wejściowej do danych wyjściowych wtyczki, użyj symbolu wieloznakowego * jako pierwszego parametru w następujący sposób:

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

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.
  • Schemat jest rozszerzony o dowolną liczbę kolumn, ponieważ istnieją różne gniazda w wartościach torby właściwości najwyższego poziomu T. Nazwa każdej kolumny odpowiada nazwie każdego miejsca, opcjonalnie poprzedzonego prefiksem OutputColumnPrefix. Jego typ jest typem miejsca, jeśli wszystkie wartości tego samego miejsca mają ten sam typ lub dynamic, jeśli wartości różnią się typem.

Uwaga

  • Jeśli parametr OutputSchema nie jest określony, schemat wyjściowy wtyczki różni się w zależności od wartości danych wejściowych. W związku z tym wiele wykonań wtyczki przy użyciu różnych danych wejściowych może spowodować wygenerowanie innego schematu wyjściowego.

  • Dane wejściowe do wtyczki muszą być takie, że schemat wyjściowy jest zgodny ze wszystkimi regułami schematu tabelarycznego. 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 kolumna ma być rozpakowana (kolumna), ponieważ spowoduje to utworzenie dwóch kolumn 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.

  • Wartości null są ignorowane.

Przykłady

Rozwijanie torby

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

Rozwijanie torby za pomocą elementu OutputColumnPrefix

Rozwiń torbę i użyj OutputColumnPrefix opcji , aby utworzyć nazwy kolumn rozpoczynające się od prefiksu "Property_".

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

Rozwijanie torby z kolumnamiConflict

Rozwiń torbę i użyj columnsConflict opcji , aby rozwiązać konflikty między istniejącymi kolumnami i kolumnami utworzonymi przez bag_unpack() operatora.

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

Rozwijanie torby z ignorowanymi właściwościami

Rozwiń torbę i użyj ignoredProperties opcji , aby zignorować niektóre 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

Rozwijanie torby za pomocą zdefiniowanej przez zapytanie outputSchema

Rozwiń torbę i użyj OutputSchema opcji , aby umożliwić ocenę różnych optymalizacji przed uruchomieniem rzeczywistego zapytania.

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ę i użyj OutputSchema opcji , aby umożliwić ocenę różnych optymalizacji przed uruchomieniem rzeczywistego zapytania. Użyj symbolu wieloznakowego * , aby zwrócić wszystkie kolumny tabeli wejściowej.

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)

Wyjście

opis Nazwa/nazwisko Wiek
Uczeń Michał 20
Teacher Dave 40
Uczeń Jaśmin 30