Sdílet prostřednictvím


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 a column_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 NULLvstupní 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, keya value. Při rozbalení pole je výstupní klíč vždy null.
variant_explode_outer explode_outer Výstupy pos, keya value sloupců. Při rozbalení pole je výstupní klíč vždy null.

Varianty zpracovávají přetypování a NULLs odlišným způsobem než řetězce JSON. Viz pravidla přetypování typu Variant a pravidla null varianty.