Miben különbözik a változat a JSON-sztringekétól?

Fontos

Ez a funkció a nyilvános előzetes verzióban érhető el.

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 jártas az Azure Databricks JSON-sztringadatainak használatához. 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 következőt .: . 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, column_name:FIELD_NAME hogy a variánsok esetében és column_name:field_name a tárolt adatok különböző mezőinek keresése.
  • 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: Variant null szabályok.
  • A variánsoszlopok bizonyos műveletekre korlátozások vonatkoznak. Lásd korlátozások.

JSON-sztringek konvertálása változatra és változatról

A Databricks Runtime 15.3-ban és újabb verziókban a to_json függvény további funkciókkal rendelkezik a típusok JSON-sztringekre való leadásához VARIANT . 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 a JSON-sztringeknél eltérő módon kezelik az öntvényeket NULL. Lásd: Variant type casting rules and Variant null rules.

Feljegyzés

Ha ezeket a függvényeket PySpark DataFrame-ekkel szeretné használni, importálja őket a rendszerből pyspark.sql.functions.

Variant függvény JSON-sztringfüggvény Jegyzetek
variant_get öntött és get_json_object Kifejezést, elérési utat és típust vesz fel. 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 Kifejezést, elérési utat és típust vesz fel. 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 értékű Ellenőrzi, hogy a kifejezés VARIANT kódolt-e NULL. A beviteli kifejezés értékének is nullellenőrzésére használhatóNULL.
schema_of_variant schema_of_json Egy séma ARRAY<elementType>meghatározásakor a elementType rendszer arra következtethet, hogy VARIANT ütköző típusok találhatók az adatokban.
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 felrobban Kimenetek posés keyvalue oszlopok. Tömb felrobbantásakor a kimeneti kulcs mindig null értékű.
variant_explode_outer explode_outer Kimenetek posés keyvalue oszlopok. Tömb felrobbantásakor a kimeneti kulcs mindig null értékű.