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.
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 icolumn_name:field_nameposzukaj różnych pól w przechowywanych danych. - Składnia
[*]nie obsługuje identyfikowania ani rozpakowywania wszystkich elementów w tablicy. - Wariant koduje
NULLwartoś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. |