Udostępnij przez


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. W przypadku użytkowników nowych w usłudze Azure Databricks należy używać wariantu dla ciągów JSON za każdym razem, gdy dane częściowo ustrukturyzowane wymagają elastyczności w zakresie zmiany lub nieznanego schematu. 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 odpytać element tablicy, użyj [n], gdzie n jest całkowitą wartością indeksu 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 NULL wartości inaczej niż ciągi JSON. Zobacz Temat Variant null rules (Reguły wartości null wariantu).
  • Kolumny wariantów mają 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 (SQL lub Python) 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.

SQL

SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');

Python

spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()

Funkcja parse_json zwraca błąd, jeśli ciąg JSON jest źle sformułowany, przekracza limit rozmiaru wariantu lub jest nieprawidłowy. Użyj funkcji try_parse_json (SQL lub Python), aby zwrócić NULL w przypadku wystąpienia błędu podczas analizowania.

SQL

SELECT try_parse_json('{"a" : invalid, "b" : 2}');

Python

spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()

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ższa tabela zawiera nową funkcję, odpowiednią funkcję ciągu JSON i uwagi dotyczące różnic w zachowaniu.

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.

Uwaga

Aby użyć tych funkcji z ramkami danych PySpark, zaimportuj je z pyspark.sql.functionselementu .

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 schematu dla ARRAY<elementType>, elementType może być wywnioskowany jako VARIANT, jeśli w danych wystąpią konflikty typów.
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ąć Wyświetla kolumny pos, key i value. Podczas eksplodowania tablicy klucz wyjściowy zawsze ma wartość null.
variant_explode_outer explode_outer Wyświetla kolumny pos, key i value. Podczas eksplodowania tablicy klucz wyjściowy zawsze ma wartość null.