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
encolumn_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. - Variantkolommen hebben beperkingen voor sommige bewerkingen. Zie Beperkingen.
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 NULL opslaat. 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 |
pos Uitvoer, key en value kolommen. Bij het uitploten van een matrix is de uitvoersleutel altijd null. |
variant_explode_outer | explode_outer |
pos Uitvoer, key en value kolommen. Bij het uitploten van een matrix is de uitvoersleutel altijd null. |
Varianten verwerken casten en NULL
verschillen van JSON-tekenreeksen. Zie Cast-regels voor varianttypen en null-regels voor varianten.