Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a szintaxis és a szemantika viselkedésének változásait és különbségeit ismerteti a variáns adattípus használatakor. Ez a cikk feltételezi, hogy ismeri a JSON-karakterláncadatok kezelését az Azure Databricksben. Az Azure Databricks új felhasználói számára jSON-sztringeken keresztüli változatot kell használnia, amikor olyan félig strukturált adatokat tárol, amelyek rugalmasságot igényelnek a változó vagy ismeretlen sémákhoz. Lásd a modell félig strukturált adatait.
A Databricks Runtime 15.3-at vagy újabb verzióját használva a variáns adattípussal kódolhatja és lekérdezheti a félig strukturált adatokat. A Databricks a variant használatát javasolja a részben strukturált adatok JSON-sztringek használatával történő tárolására. A változat jobb olvasási és írási teljesítménye lehetővé teszi a natív Spark-összetett típusok, például a szerkezetek és tömbök cseréjét bizonyos használati esetekben.
Hogyan kérdezhetők le a variánsadatok?
A variánsadatok ugyanazokat az operátorokat használják mezők, almezők és tömbelemek lekérdezéséhez.
Mező lekérdezéséhez használja :a következőt: . Például: column_name:field_name.
Almező lekérdezéséhez használja a(z) . elemet. Például: column_name:field_name.subfield_name.
Tömbelem lekérdezéséhez használja [n]n az elem egész számindexének értékét. Például egy tömb column_name:array_name[0]első értékének lekérdezéséhez.
A JSON-sztringekről a variánsokra való frissítéskor a következő különbségek szakíthatják meg a meglévő lekérdezéseket:
- Az összes variáns elérési útelem kis- és nagybetűkre érzékeny módon van egyeztetve. A JSON-sztringek nem érzékenyek a kis- és nagybetűkre. Ez azt jelenti, hogy a variant esetében
column_name:FIELD_NAMEéscolumn_name:field_namekülönböző mezőket keres a tárolt adatokban. - A
[*]szintaxis nem támogatja a tömb összes elemének azonosítását vagy kicsomagolását. - A Variant másként kódolja az értékeket
NULL, mint a JSON-sztringek. Lásd a nullváltozatokra vonatkozó szabályokat. - A variánsoszlopok bizonyos műveletekre korlátozások vonatkoznak. Lásd korlátozások.
JSON-karakterláncok átalakítása Variant típusra és vissza
A Databricks Runtime 15.3-as és újabb verzióiban a to_json függvény további funkcióval bővült, amely lehetővé teszi a VARIANT típusok JSON-sztringekké alakítását. A JSON-sztringre való konvertáláskor a rendszer figyelmen kívül hagyja a VARIANT beállításokat. Lásd: to_json.
A parse_json függvény (SQL vagy Python) egy JSON-sztringet alakít át VARIANT típusra. Míg parse_json(json_string_column) a logikai inverze to_json(variant_column), a következő konverziós szabályok azt írják le, hogy miért nem a pontos inverz:
- A szabad tér nem teljesen megőrződött.
- A kulcsok sorrendje tetszőleges.
- A számok záró nullái csonkolódhatnak.
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()
A parse_json függvény hibát ad vissza, ha a JSON-sztring hibás, túllépi a variánsméretkorlátot, vagy érvénytelen.
try_parse_json A függvény (SQL vagy Python) használatával ehelyett egy elemzési hiba esetén ad vissza egy NULL hibát.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Python
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
Mik az SQL-függvények a változatok kezeléséhez?
A Databricks Runtime 15.3-ban és újabb verziókban elérhető Apache Spark SQL-függvények metódusokat biztosítanak a variánsadatok kezeléséhez. Az alábbi táblázat tartalmazza az új függvényt, a megfelelő JSON-sztringfüggvényt, valamint a viselkedésbeli különbségek megjegyzéseit.
A variánsok másképp kezelik a típuskonverziót és a NULL-eket, mint a JSON-sztringek. Lásd: Variant type casting rules és Variant null rules.
Megjegyzés
Ha ezeket a függvényeket PySpark DataFrame-ekkel szeretné használni, importálja őket a rendszerből pyspark.sql.functions.
| Variáns függvény | JSON-sztringfüggvény | Jegyzetek |
|---|---|---|
| variant_get | cast és get_json_object | Egy kifejezést, egy elérési utat és egy típust fogad. A variánsok elérési útjaira, az öntésre és a null értékekre vonatkozó összes szabályt követi. |
| try_variant_get | try_cast és get_json_object | Egy kifejezést, egy elérési utat és egy típust fogad. A variánsok elérési útjaira, az öntésre és a null értékekre vonatkozó összes szabályt követi. |
| is_variant_null | null | Ellenőrzi, hogy a kifejezés egy VARIANT kódolású NULL-t tárol-e. A is null használatával ellenőrizheti, hogy a bemeneti kifejezés NULL. |
| schema_of_variant | schema_of_json | Egy ARRAY<elementType> sémájának meghatározásakor a(z) elementType értéke VARIANT lehet, ha az adatokban egymásnak ellentmondó típusok találhatók. |
| schema_of_variant_agg | schema_of_json_agg | Ha a legkevésbé gyakori típus nincs azonosítva, a típus a következőképpen lesz származtatva VARIANT: . |
| variant_explode | felrobbanni | A(z) pos, key és value oszlopokat adja vissza. Tömb felrobbantásakor a kimeneti kulcs mindig null értékű. |
| variant_explode_outer | explode_outer | A(z) pos, key és value oszlopokat adja vissza. Tömb felrobbantásakor a kimeneti kulcs mindig null értékű. |