Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 varianty se porovnávají s rozlišením velkých a malých písmen. Řetězce JSON nerozlišují malá a velká písmena. To znamená, že u varianty
column_name:FIELD_NAMEacolumn_name:field_namehledají v uložených datech různá pole. - Syntaxe
[*]nepodporuje identifikaci ani rozbalení všech prvků v poli. - Varianta kóduje hodnoty
NULLodlišně než řetězce JSON. Viz pravidla pro null varianty. - U některých operací mají sloupce variant omezení. Viz Omezení.
Převod řetězců JSON na variantu a z varianty
V Databricks Runtime 15.3 a novějších verzích má funkce to_json další možnosti pro převod typů VARIANT na řetězce JSON. Možnosti jsou při převodu VARIANT na řetězec JSON ignorovány. Viz to_json.
Funkce parse_json (SQL nebo Python) 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.
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()
Funkce parse_json vrátí chybu, pokud je řetězec JSON poškozený, překročí limit velikosti varianty nebo je neplatný. Použijte funkci try_parse_json (SQL nebo Python) k vrácení NULL, pokud dojde k chybě při analýze.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Python
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
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í.
Varianty zpracovávají přetypování a NULLs odlišným způsobem než řetězce JSON. Viz pravidla přetypování pro typ Variant a pravidla pro hodnotu null typu Variant.
Poznámka:
Pokud chcete tyto funkce použít s datovými rámci PySpark, naimportujte je z pyspark.sql.functions.
| Variantní funkce | Funkce řetězce JSON | Poznámky |
|---|---|---|
| variant_get | 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. |
| 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. Pomocí is null zkontrolujete, zda je vstupní výraz NULL. |
| 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 klíč výstupu vždy null. |
| variant_explode_outer | explode_outer | Výstupy sloupce pos, keya value. Při rozbalení pole je výstupní klíč vždy null. |