Hur skiljer sig varianten från JSON-strängar?
Viktigt!
Den här funktionen finns som allmänt tillgänglig förhandsversion.
Den här artikeln beskriver beteendeändringar och skillnader i syntax och semantik när du arbetar med variantdatatypen. Den här artikeln förutsätter att du är bekant med att arbeta med JSON-strängdata i Azure Databricks. För användare som är nya i Azure Databricks bör de använda variant istället för JSON-strängar när de lagrar halvstrukturerade data som kräver flexibilitet för förändringar eller okända schema. Se Modellera halvstrukturerade data.
I Databricks Runtime 15.3 och senare kan du använda variantdatatypen för att koda och fråga halvstrukturerade data. Databricks rekommenderar variant som ersättning för lagring av halvstrukturerade data med hjälp av JSON-strängar. Den förbättrade läs- och skrivprestandan för varianten gör att den kan ersätta inbyggda Spark-komplexa typer som structs och matriser i vissa användningsfall.
Hur kör du frågor mot variantdata?
Variantdata använder samma operatorer för att fråga efter fält, underfält och matriselement.
Om du vill köra frågor mot ett fält använder du :
. Exempel: column_name:field_name
Om du vill köra frågor mot ett underfält använder du .
. Exempel: column_name:field_name.subfield_name
Om du vill köra frågor mot ett matriselement använder du [n]
wheren
är heltalsindexvärdet för elementet. Om du till exempel vill köra frågor mot det första värdet i en matris, column_name:array_name[0]
.
Följande skillnader kan bryta befintliga frågor när du uppgraderar från JSON-strängar till variant:
- Alla variantsökvägselement matchas på ett skiftlägeskänsligt sätt. JSON-strängar är skiftlägeskänsliga. Det innebär att för variant
column_name:FIELD_NAME
ochcolumn_name:field_name
leta efter olika fält i lagrade data. - Syntaxen
[*]
har inte stöd för att identifiera eller packa upp alla element i en matris. - Variantkodar
NULL
values annorlunda än JSON-strängar. Se Variant null rules (Variant null rules). - Variant columns har begränsningar för vissa åtgärder. Se begränsningar.
Konvertera JSON-strängar till och från variant
I Databricks Runtime 15.3 och senare to_json
har funktionen ytterligare funktioner för att casta VARIANT
typer till JSON-strängar. Alternativ ignoreras när du konverterar VARIANT
till JSON-sträng. Se to_json.
Funktionen parse_json
transformerar en JSON-sträng som ska VARIANT
skrivas. Även om parse_json(json_string_column)
är den logiska inverteringen av to_json(variant_column)
beskriver följande konverteringsregler varför det inte är den exakta inverteringen:
- Tomt utrymme är inte perfekt bevarat.
- Ordningen på nycklar är godtycklig.
- Avslutande nollor i tal kan trunkeras.
Funktionen parse_json
returnerar ett fel om JSON-strängen är felaktigt formaterad eller överskrider variantstorleken limit.
try_parse_json
Använd funktionen för att i stället returnera en NULL
när ett fel i parsningen inträffar.
Vilka SQL-funktioner används för att arbeta med varianter?
Apache Spark SQL-funktioner som är tillgängliga i Databricks Runtime 15.3 och senare tillhandahåller metoder för att interagera med variantdata. Följande table innehåller den nya funktionen, motsvarande JSON-strängfunktion och anteckningar om skillnader i beteende.
Kommentar
Om du vill använda dessa funktioner med PySpark DataFrames importerar du dem från pyspark.sql.functions
.
variant_explode
och variant_explode_outer
stöds inte i PySpark.
Variantfunktion | JSON-strängfunktion | Kommentar |
---|---|---|
variant_get | gjutna och get_json_object | Tar ett uttryck, en sökväg och en typ. Följer alla regler för varianter av sökvägar, gjutning och nullvärden. |
try_variant_get | try_cast och get_json_object | Tar ett uttryck, en sökväg och en typ. Följer alla regler för varianter av sökvägar, gjutning och nullvärden. |
is_variant_null | är null | Kontrollerar om uttrycket lagrar en VARIANT kodad NULL . Använd is null för att kontrollera om indatauttrycket är NULL . |
schema_of_variant | schema_of_json | När du fastställer schema för en ARRAY<elementType> kan elementType härledas som VARIANT om det finns motstridiga typer i data. |
schema_of_variant_agg | schema_of_json_agg | När ingen minsta vanlig typ identifieras härleds typen som VARIANT . |
variant_explode | explodera | Utdata pos , key och value columns. När en matris exploderar är utdatanyckeln alltid null. |
variant_explode_outer | explode_outer | Visar pos , key och value columns. När en matris exploderar är utdatanyckeln alltid null. |
Varianter hanterar gjutning och NULL
skiljer sig från JSON-strängar. Se Regler för varianttypsgjutning och Variant null-regler.