Udostępnij za pośrednictwem


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 i column_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 NULLvalues 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.functionselementu . 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 VARIANTNULLelement . 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, keyi valuecolumns. Podczas eksplodowania tablicy klucz wyjściowy zawsze ma wartość null.
variant_explode_outer explode_outer Dane wyjściowe pos, keyi valuecolumns. Podczas eksplodowania tablicy klucz wyjściowy zawsze ma wartość null.

Warianty obsługują rzutowanie i NULLróżnią się od ciągów JSON. Zobacz Reguły rzutywania typów wariantów i Reguły wartości null wariantu.