Delen via


Hoe verschilt variant dan JSON-tekenreeksen?

Belangrijk

Deze functie is beschikbaar als openbare preview.

In dit artikel worden de gedragswijzigingen en verschillen in syntaxis en semantiek beschreven bij het werken met het gegevenstype variant. In dit artikel wordt ervan uitgegaan dat u bekend bent met het werken met JSON-tekenreeksgegevens in Azure Databricks. Voor gebruikers die niet bekend zijn met Azure Databricks, moet u variant op JSON-tekenreeksen gebruiken wanneer semi-gestructureerde gegevens worden opgeslagen waarvoor flexibiliteit is vereist voor het wijzigen of onbekende schema. Zie Semi-gestructureerde modelgegevens.

In Databricks Runtime 15.3 en hoger kunt u het gegevenstype variant gebruiken om semi-gestructureerde gegevens te coderen en op te vragen. Databricks raadt varianten aan als vervanging voor het opslaan van semi-gestructureerde gegevens met behulp van JSON-tekenreeksen. Dankzij de verbeterde lees- en schrijfprestaties voor varianten kan het systeemeigen Spark-complexe typen, zoals structs en matrices, in sommige gebruiksscenario's vervangen.

Hoe voert u query's uit op variantgegevens?

Variantgegevens gebruiken dezelfde operators om query's uit te voeren op velden, subvelden en matrixelementen.

Als u een query wilt uitvoeren op een veld, gebruikt u :. Bijvoorbeeld: column_name:field_name.

Als u een query wilt uitvoeren op een subveld, gebruikt u .. Bijvoorbeeld: column_name:field_name.subfield_name.

Als u een query wilt uitvoeren op een matrixelement, gebruikt [n] u waar n de indexwaarde voor gehele getallen van het element is. Als u bijvoorbeeld een query wilt uitvoeren op de eerste waarde in een matrix, column_name:array_name[0].

De volgende verschillen kunnen bestaande query's verbreken bij het upgraden van JSON-tekenreeksen naar variant:

  • Alle variantpadelementen worden op een hoofdlettergevoelige manier vergeleken. JSON-tekenreeksen zijn hoofdlettergevoelig. Dit betekent dat voor variant column_name:FIELD_NAME en column_name:field_name zoek naar verschillende velden in de opgeslagen gegevens.
  • De [*] syntaxis biedt geen ondersteuning voor het identificeren of uitpakken van alle elementen in een matrix.
  • Variant codeert NULL waarden anders dan JSON-tekenreeksen. Zie Null-regels voor varianten.

JSON-tekenreeksen converteren naar en van variant

In Databricks Runtime 15.3 en hoger heeft de to_json functie extra functionaliteit om typen naar JSON-tekenreeksen te casten VARIANT . Opties worden genegeerd bij het VARIANT converteren naar JSON-tekenreeks. Zie to_json.

De parse_json functie transformeert een JSON-tekenreeks die moet worden VARIANT getypt. Hoewel parse_json(json_string_column) dit de logische inverse is to_json(variant_column), beschrijven de volgende conversieregels waarom dit niet de exacte inverse is:

  • Witruimte is niet perfect bewaard.
  • Volgorde van sleutels is willekeurig.
  • Volgnullen in getallen worden mogelijk afgekapt.

De parse_json functie retourneert een fout als de JSON-tekenreeks ongeldig is of de limiet voor de variantgrootte overschrijdt. Gebruik de try_parse_json functie om in plaats daarvan een NULL fout bij parseren te retourneren.

Wat zijn de SQL-functies voor het werken met varianten?

Apache Spark SQL-functies die beschikbaar zijn in Databricks Runtime 15.3 en hoger bieden methoden voor interactie met variantgegevens. De volgende tabel bevat de nieuwe functie, de bijbehorende JSON-tekenreeksfunctie en notities over verschillen in gedrag.

Notitie

Als u deze functies wilt gebruiken met PySpark DataFrames, importeert u ze uit pyspark.sql.functions. variant_explode en variant_explode_outer worden niet ondersteund in PySpark.

Variant, functie JSON-tekenreeksfunctie Opmerkingen
variant_get cast en get_json_object Neemt een expressie, pad en type. Volgt alle regels voor variantenpaden, cast-conversie en null-waarden.
try_variant_get try_cast en get_json_object Neemt een expressie, pad en type. Volgt alle regels voor variantenpaden, cast-conversie en null-waarden.
is_variant_null is null Hiermee wordt gecontroleerd of de expressie een VARIANT gecodeerde NULLopslaat. Gebruik is null dit om te controleren of de invoerexpressie is NULL.
schema_of_variant schema_of_json Bij het bepalen van het schema voor een ARRAY<elementType>, kan dit elementType worden afgeleid alsof VARIANT er conflicterende typen in de gegevens zijn gevonden.
schema_of_variant_agg schema_of_json_agg Wanneer niet het minst gangbare type wordt geïdentificeerd, wordt het type afgeleid als VARIANT.
variant_explode ontploffen posUitvoer, keyen value kolommen. Bij het uitploten van een matrix is de uitvoersleutel altijd null.
variant_explode_outer explode_outer posUitvoer, keyen value kolommen. Bij het uitploten van een matrix is de uitvoersleutel altijd null.

Varianten verwerken casten en NULLverschillen van JSON-tekenreeksen. Zie Cast-regels voor varianttypen en null-regels voor varianten.