bag_unpack, wtyczka

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 za pomocą evaluate operatora .

Składnia

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

Dowiedz się więcej o konwencjach składniowych.

Parametry

Nazwa Typ Wymagane 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, który ma zostać dodany do wszystkich kolumn utworzonych 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, które mają być ignorowane. }
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

(Columnname: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 jako dane wejściowe tabelaryczne (T). Schemat tabeli jest taki sam jak schemat danych wejściowych tabelarycznych z następującymi modyfikacjami:

  • Określona kolumna wejściowa (kolumna) zostanie usunięta.
  • 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 poprzedzonej prefiksem OutputColumnPrefix. Jego typ to typ gniazda, 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 generować różne schematy wyjściowe.

Uwaga

Dane wejściowe w 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 zostać rozpakowana (kolumna), ponieważ spowoduje to utworzenie dwóch kolumn o tej samej nazwie.

  • Wszystkie nazwy miejsc, gdy są poprzedzone prefiksem OutputColumnPrefix, muszą być prawidłowymi nazwami jednostek i postępować zgodnie z regułami nazewnictwa identyfikatorów.

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)

Dane wyjściowe

Wiek Nazwa
20 Michał
40 Dave
30 Jasmine

Rozwijanie torby przy użyciu 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_')

Dane wyjściowe

Property_Age Property_name
20 Michał
40 Dave
30 Jasmine

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

Dane wyjściowe

Wiek Nazwa
20 Michał
40 Dave
30 Jasmine
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

Dane wyjściowe

Wiek Nazwa
20 Old_name
40 Old_name
30 Old_name

Rozszerzanie torby z ignorowanymiwł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']))

Dane wyjściowe

Nazwa
Michał
Dave
Jasmine

Rozszerzanie torby przy użyciu zdefiniowanej przez zapytanie danych 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)

Dane wyjściowe

Nazwa Wiek
Michał 20
Dave 40
Jasmine 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)

Dane wyjściowe

Opis Nazwa Wiek
Uczeń Michał 20
Nauczyciel Dave 40
Uczeń Jasmine 30