In che modo la variante è diversa dalle stringhe JSON?
Importante
Questa funzionalità è disponibile in anteprima pubblica.
Questo articolo descrive le modifiche del comportamento e le differenze nella sintassi e nella semantica quando si usa il tipo di dati variant. Questo articolo presuppone che si abbia familiarità con l'uso dei dati stringa JSON in Azure Databricks. Per gli utenti nuovi di Azure Databricks, è consigliabile usare varianti su stringhe JSON ogni volta che archiviano dati semistrutturati che richiedono flessibilità per la modifica o lo schema sconosciuto. Vedere Modello di dati semistrutturati.
In Databricks Runtime 15.3 e versioni successive è possibile usare il tipo di dati variant per codificare ed eseguire query su dati semistrutturati. Databricks consiglia variant come sostituzione per l'archiviazione di dati semistrutturati usando stringhe JSON. Le prestazioni di lettura e scrittura migliorate per variant consentono di sostituire tipi complessi Spark nativi, ad esempio struct e matrici in alcuni casi d'uso.
Come si eseguono query sui dati varianti?
I dati varianti usano gli stessi operatori per eseguire query su campi, sottocampi ed elementi di matrice.
Per eseguire una query su un campo, usare :
. Ad esempio: column_name:field_name
.
Per eseguire una query su un sottocampo, usare .
. Ad esempio: column_name:field_name.subfield_name
.
Per eseguire una query su un elemento di matrice, usare [n]
dove n
è il valore di indice integer dell'elemento. Ad esempio, per eseguire una query sul primo valore in una matrice, column_name:array_name[0]
.
Le differenze seguenti potrebbero interrompere le query esistenti durante l'aggiornamento da stringhe JSON a variant:
- Tutti gli elementi di percorso varianti vengono confrontati in modo con distinzione tra maiuscole e minuscole. Le stringhe JSON non fanno distinzione tra maiuscole e minuscole. Ciò significa che per variant e
column_name:FIELD_NAME
column_name:field_name
cercare campi diversi nei dati archiviati. - La
[*]
sintassi non è supportata per identificare o decomprimere tutti gli elementi in una matrice. - Variant codifica valori
NULL
in modo diverso rispetto alle stringhe JSON. Vedere Regole Variant null.
Convertire stringhe JSON in e da variant
In Databricks Runtime 15.3 e versioni successive la funzione ha funzionalità aggiuntive per eseguire il to_json
cast VARIANT
dei tipi in stringhe JSON. Le opzioni vengono ignorate durante la VARIANT
conversione in stringa JSON. Vedere to_json.
La parse_json
funzione trasforma una stringa JSON in VARIANT
un tipo. Mentre parse_json(json_string_column)
è l'inverso logico di , le regole di to_json(variant_column)
conversione seguenti descrivono perché non è l'esatto inverso:
- Gli spazi vuoti non sono perfettamente conservati.
- L'ordinamento delle chiavi è arbitrario.
- Gli zeri finali in numeri potrebbero essere troncati.
La parse_json
funzione restituisce un errore se la stringa JSON non è valida o supera il limite di dimensioni varianti. Usare la try_parse_json
funzione per restituire invece un oggetto NULL
quando si verifica un errore nell'analisi.
Quali sono le funzioni SQL per l'uso delle varianti?
Le funzioni SQL di Apache Spark disponibili in Databricks Runtime 15.3 e versioni successive forniscono metodi per interagire con i dati varianti. La tabella seguente include la nuova funzione, la funzione stringa JSON corrispondente e le note sulle differenze di comportamento.
Nota
Per usare queste funzioni con i dataframe PySpark, importarli da pyspark.sql.functions
. variant_explode
e variant_explode_outer
non sono supportati in PySpark.
Funzione Variant | Funzione stringa JSON | Note |
---|---|---|
variant_get | cast e get_json_object | Accetta un'espressione, un percorso e un tipo. Segue tutte le regole per i percorsi delle varianti, il cast e i valori Null. |
try_variant_get | try_cast e get_json_object | Accetta un'espressione, un percorso e un tipo. Segue tutte le regole per i percorsi delle varianti, il cast e i valori Null. |
is_variant_null | is null | Verifica se l'espressione archivia un oggetto VARIANT codificato NULL . Usare is null per verificare se l'espressione di input è NULL . |
schema_of_variant | schema_of_json | Quando si determina lo schema per un oggetto ARRAY<elementType> , è possibile dedurre come elementType VARIANT se nei dati siano presenti tipi in conflitto. |
schema_of_variant_agg | schema_of_json_agg | Quando non viene identificato alcun tipo meno comune, il tipo viene derivato come VARIANT . |
variant_explode | esplodere | Restituisce le pos colonne , key e value . Quando si esplode una matrice, la chiave di output è sempre Null. |
variant_explode_outer | explode_outer | Restituisce le pos colonne , key e value . Quando si esplode una matrice, la chiave di output è sempre Null. |
Le varianti gestiscono il cast e NULL
sono diverse dalle stringhe JSON. Vedere Regole di cast dei tipi varianti e Regole Variant null.