W jaki sposób wariant różni się od ciągów JSON?
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
W tym artykule opisano zmiany zachowania i różnice w składni i semantyce podczas pracy z typem danych wariantu. W tym artykule założono, że wiesz już, jak pracować z danymi ciągu JSON w usłudze Azure Databricks. Dla nowych użytkowników Azure Databricks, należy używać wariantu zamiast ciągów JSON, gdy dane półustrukturyzowane wymagają elastyczności dla zmian lub nieznanych elementów schema. Zobacz Modelowanie częściowo ustrukturyzowanych danych.
W środowisku Databricks Runtime 15.3 lub nowszym można użyć typu danych wariantu do kodowania i wykonywania zapytań względem danych częściowo ustrukturyzowanych. Usługa Databricks zaleca wariant jako zamiennik przechowywania częściowo ustrukturyzowanych danych przy użyciu ciągów JSON. Ulepszona wydajność odczytu i zapisu dla wariantu umożliwia zastąpienie natywnych typów złożonych platformy Spark, takich jak struktury i tablice w niektórych przypadkach użycia.
Jak wykonywać zapytania dotyczące danych wariantów?
Dane wariantu używają tych samych operatorów do wykonywania zapytań dotyczących pól, pól podrzędnych i elementów tablicy.
Aby wysłać zapytanie do pola, użyj polecenia :
. Na przykład column_name:field_name
.
Aby wysłać zapytanie do pola podrzędnego, użyj polecenia .
. Na przykład column_name:field_name.subfield_name
.
Aby wysłać zapytanie do elementu tablicy, użyj [n]
wheren
jest wartością indeksu całkowitego elementu. Aby na przykład wysłać zapytanie do pierwszej wartości w tablicy, column_name:array_name[0]
.
Następujące różnice mogą spowodować przerwanie istniejących zapytań podczas uaktualniania z ciągów JSON do wariantu:
- Wszystkie elementy ścieżki wariantu są dopasowywane w sposób uwzględniający wielkość liter. Ciągi JSON są bez uwzględniania wielkości liter. Oznacza to,
column_name:FIELD_NAME
że w przypadku wariantu icolumn_name:field_name
poszukaj różnych pól w przechowywanych danych. - Składnia
[*]
nie obsługuje identyfikowania ani rozpakowywania wszystkich elementów w tablicy. - Wariant koduje
NULL
values inaczej niż ciągi JSON. Zobacz Temat Variant null rules (Reguły wartości null wariantu). - Wariant columns ma ograniczenia dotyczące niektórych operacji. Zobacz Ograniczenia.
Konwertowanie ciągów JSON na i z wariantu
W środowisku Databricks Runtime 15.3 lub nowszym to_json
funkcja ma dodatkowe funkcje rzutowania typów na VARIANT
ciągi JSON. Opcje są ignorowane podczas konwertowania VARIANT
na ciąg JSON. Zobacz to_json.
Funkcja parse_json
przekształca ciąg JSON na VARIANT
typ. Chociaż parse_json(json_string_column)
jest logicznym odwrotnością to_json(variant_column)
metody , następujące reguły konwersji opisują, dlaczego nie jest to dokładnie odwrotne:
- Biały znak nie jest całkowicie zachowany.
- Kolejność kluczy jest dowolna.
- Końcowe zera w liczbach mogą być obcięte.
Funkcja parse_json
zwraca błąd, jeśli ciąg JSON jest źle sformułowany lub przekracza rozmiar wariantu limit. Użyj funkcji , try_parse_json
aby zamiast tego zwrócić NULL
błąd podczas analizowania.
Jakie są funkcje SQL do pracy z wariantami?
Funkcje apache Spark SQL dostępne w środowisku Databricks Runtime 15.3 lub nowszym udostępniają metody interakcji z danymi wariantów. Poniższe table zawiera nową funkcję, odpowiednią funkcję ciągu JSON i uwagi dotyczące różnic w zachowaniu.
Uwaga
Aby użyć tych funkcji z ramkami danych PySpark, zaimportuj je z pyspark.sql.functions
elementu .
variant_explode
i variant_explode_outer
nie są obsługiwane w PySpark.
Variant, funkcja | Funkcja ciągu JSON | Uwagi |
---|---|---|
variant_get | rzutowanie i get_json_object | Przyjmuje wyrażenie, ścieżkę i typ. Przestrzega wszystkich reguł dla ścieżek wariantów, rzutów i wartości null. |
try_variant_get | try_cast i get_json_object | Przyjmuje wyrażenie, ścieżkę i typ. Przestrzega wszystkich reguł dla ścieżek wariantów, rzutów i wartości null. |
is_variant_null | ma wartość null | Sprawdza, czy wyrażenie przechowuje zakodowany VARIANT NULL element . Użyj is null polecenia , aby sprawdzić, czy wyrażenie wejściowe to NULL . |
schema_of_variant | schema_of_json | Podczas określania schema dla ARRAY<elementType> , elementType mogą być uznane za VARIANT , jeśli w danych występują sprzeczne typy. |
schema_of_variant_agg | schema_of_json_agg | Jeśli nie zostanie zidentyfikowany najmniej wspólny typ, typ jest określany jako VARIANT . |
variant_explode | wybuchnąć | Dane wyjściowe pos , key i value columns. Podczas eksplodowania tablicy klucz wyjściowy zawsze ma wartość null. |
variant_explode_outer | explode_outer | Dane wyjściowe pos , key i value columns. Podczas eksplodowania tablicy klucz wyjściowy zawsze ma wartość null. |
Warianty obsługują rzutowanie i NULL
różnią się od ciągów JSON. Zobacz Reguły rzutywania typów wariantów i Reguły wartości null wariantu.