Jak se varianta liší od řetězců JSON?
Důležité
Tato funkce je ve verzi Public Preview.
Tento článek popisuje změny chování a rozdíly v syntaxi a sémantice při práci s datovým typem varianty. Tento článek předpokládá, že znáte práci s řetězcovými daty JSON v Azure Databricks. Pro uživatele, kteří s Azure Databricks začínají, byste měli používat variantu místo řetězců JSON, jakmile ukládáte částečně strukturovaná data, která vyžadují flexibilitu, když se schéma mění nebo je neznámé. Viz Částečně strukturovaná data modelu.
Ve službě Databricks Runtime 15.3 a vyšší můžete k kódování a dotazování částečně strukturovaných dat použít datový typ varianty. Databricks doporučuje variantu jako náhradu za ukládání částečně strukturovaných dat pomocí řetězců JSON. Vylepšený výkon čtení a zápisu pro variantu umožňuje nahradit nativní komplexní typy Sparku, jako jsou struktury a pole v některých případech použití.
Jak se dotazujete na variantní data?
Data variant používají stejné operátory k dotazování polí, dílčích polí a prvků pole.
K dotazování na pole použijte :
. Například column_name:field_name
.
Pokud chcete zadat dotaz na dílčí pole, použijte .
. Například column_name:field_name.subfield_name
.
Chcete-li dotazovat prvek pole, použijte [n]
, kde n
je celočíselná hodnota indexu prvku. Pokud chcete například zadat dotaz na první hodnotu v poli, column_name:array_name[0]
.
Následující rozdíly můžou při upgradu z řetězců JSON na variantu přerušit stávající dotazy:
- Všechny prvky cesty variant se shodují způsobem, který rozlišují malá a velká písmena. Řetězce JSON nerozlišují malá a velká písmena. To znamená,
column_name:FIELD_NAME
že pro variantu acolumn_name:field_name
hledejte různá pole v uložených datech. - Syntaxe
[*]
nepodporuje identifikaci ani rozbalení všech prvků v poli. - Varianta kóduje hodnoty
NULL
odlišně než řetězce JSON. Viz pravidla variant null. - U některých operací mají sloupce variant omezení. Viz Omezení.
Převod řetězců JSON na variantu a z varianty
Ve službě Databricks Runtime 15.3 a vyšší to_json
má funkce další funkce pro přetypování VARIANT
typů na řetězce JSON. Možnosti se při převodu na řetězec JSON ignorují VARIANT
. Viz to_json.
Funkce parse_json
transformuje řetězec JSON na VARIANT
typ. Zatímco parse_json(json_string_column)
je logická inverzní funkce to_json(variant_column)
, následující pravidla převodu popisují, proč to není přesná inverzní funkce:
- Prázdné znaky nejsou dokonale zachovány.
- Řazení klíčů je libovolné.
- Koncové nuly v číslech mohou být zkráceny.
Funkce parse_json
vrátí chybu, pokud je řetězec JSON poškozený nebo překročí limit velikosti varianty.
try_parse_json
Funkce slouží k vrácení NULL
chyby při analýze.
Jaké jsou funkce SQL pro práci s variantami?
Funkce Apache Spark SQL dostupné ve službě Databricks Runtime 15.3 a vyšší poskytují metody pro interakci s variantovými daty. Následující tabulka obsahuje novou funkci, odpovídající řetězcovou funkci JSON a poznámky k rozdílům v chování.
Poznámka:
Pokud chcete tyto funkce použít s datovými rámci PySpark, naimportujte je z pyspark.sql.functions
.
variant_explode
a variant_explode_outer
nejsou podporovány v PySparku.
Variantní funkce | Funkce řetězce JSON | Notes |
---|---|---|
variant_get | přetypování a get_json_object | Přebírá výraz, cestu a typ. Dodržuje všechna pravidla pro cesty variant, přetypování a hodnoty null. |
try_variant_get | try_cast a get_json_object | Přebírá výraz, cestu a typ. Dodržuje všechna pravidla pro cesty variant, přetypování a hodnoty null. |
is_variant_null | má hodnotu null. | Zkontroluje, zda výraz ukládá VARIANT kódovaný NULL . Slouží is null ke kontrole, zda je NULL vstupní výraz . |
schema_of_variant | schema_of_json | Při určování schématu pro ARRAY<elementType> může být elementType odvozeno jako VARIANT , pokud jsou v datech nalezeny konfliktní typy. |
schema_of_variant_agg | schema_of_json_agg | Pokud není identifikován nejmenší společný typ, je typ odvozen jako VARIANT . |
variant_explode | explodovat | Výstupy sloupce pos , key a value . Při rozbalení pole je výstupní klíč vždy null. |
variant_explode_outer | explode_outer | Výstupy pos , key a value sloupců. Při rozbalení pole je výstupní klíč vždy null. |
Varianty zpracovávají přetypování a NULL
s odlišným způsobem než řetězce JSON. Viz pravidla přetypování typu Variant a pravidla null varianty.