Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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ępowanakeep_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. Dane wyjścioweSchema są 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
Age |
Name |
|---|---|
| 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)
[
'James', dynamic({"Name": "John", "Age":20}),
'David', dynamic({ "Age":40}),
'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Replace old column Name by new column
Wyjście
Name |
Age |
|---|---|
| Michał | 20 |
| 40 | |
| Jaśmin | 30 |
datatable(Name:string, d:dynamic)
[
'James', dynamic({"Name": "John", "Age":20}),
'David', dynamic({"Name": "Dave", "Age":40}),
'Emily', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old column Name
Wyjście
Name |
Age |
|---|---|
| James | 20 |
| Dawid | 40 |
| Emily | 30 |
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
Name |
|---|
| Michał |
| Dave |
| Jaśmin |
Rozwiń torbę i użyj opcji OutputSchema:
datatable(d:dynamic)
[
dynamic({"Name": "John", "Age":20}),
dynamic({ "Name": "Dave", "Height": 170, "Age":40}),
dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)
Wyjście
Age |
Height |
Name |
|---|---|---|
| 20 | Michał | |
| 40 | 170 | Dave |
| 30 | Jaśmin |
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 | Name |
Age |
|---|---|---|
| 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.
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, StatePrzykł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.
Country/Region |
State |
Sales |
|---|---|---|
| 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 |
| ...\ | ...\ | ...\ |
Powiązana zawartość
- parse_json funkcji
- operator mv-expand
- pack-all, funkcja