Dela via


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 och column_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 NULLvalues 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, keyoch valuecolumns. När en matris exploderar är utdatanyckeln alltid null.
variant_explode_outer explode_outer Visar pos, keyoch valuecolumns. När en matris exploderar är utdatanyckeln alltid null.

Varianter hanterar gjutning och NULLskiljer sig från JSON-strängar. Se Regler för varianttypsgjutning och Variant null-regler.