Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 interrogano i dati delle 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 del percorso variante vengono confrontati in modo sensibile alle maiuscole e alle minuscole. Le stringhe JSON non fanno distinzione tra maiuscole e minuscole. Ciò significa che variant,
column_name:FIELD_NAMEecolumn_name:field_namecercano campi diversi nei dati archiviati. - La
[*]sintassi non è supportata per identificare o decomprimere tutti gli elementi in una matrice. - Variant codifica valori
NULLin modo diverso rispetto alle stringhe JSON. Vedere regole null della variante. - Le colonne varianti presentano limitazioni per alcune operazioni. Vedere Limitazioni.
Converti stringhe JSON da e verso variant
In Databricks Runtime 15.3 e versioni successive, la funzione to_json offre funzionalità aggiuntive per convertire i tipi VARIANT in stringhe JSON. Le opzioni vengono ignorate durante la VARIANT conversione in stringa JSON. Vedi to_json.
La parse_json funzione (SQL o Python) trasforma una stringa JSON nel tipo VARIANT. Mentre parse_json(json_string_column) è l'inverso logico di to_json(variant_column), le seguenti regole di conversione descrivono perché non è l'inverso esatto:
- Gli spazi vuoti non sono perfettamente conservati.
- L'ordinamento delle chiavi è arbitrario.
- Gli zeri finali nei numeri potrebbero essere troncati.
SQL
SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');
Pitone
spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()
La parse_json funzione restituisce un errore se la stringa JSON non è valida, supera il limite di dimensioni della variante o non è valida. Usare la try_parse_json funzione (SQL o Python) per restituire invece un oggetto NULL quando si verifica un errore nell'analisi.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Pitone
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
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.
Le varianti gestiscono il cast e gli elementi NULL in modo diverso rispetto alle stringhe JSON. Vedere le regole di conversione del tipo Variant e le regole sui valori null del tipo Variant.
Nota
Per usare queste funzioni con i dataframe PySpark, importarli da pyspark.sql.functions.
| Funzione variante | Funzione stringa JSON | Note |
|---|---|---|
| variant_get | cast e get_json_object | Accetta un'espressione, un percorso e un tipo. Rispetta tutte le regole relative ai percorsi delle varianti, al casting e ai valori null. |
| try_variant_get | try_cast e get_json_object | Accetta un'espressione, un percorso e un tipo. Rispetta tutte le regole relative ai percorsi delle varianti, al casting e ai valori null. |
| is_variant_null | è 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 ARRAY<elementType>, il elementType potrebbe essere inferito come VARIANT se nei dati sono 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 colonne pos, key e value. Quando si esplode una matrice, la chiave di output è sempre Null. |
| variant_explode_outer | explode_outer | Restituisce le colonne pos, key e value. Quando si esplode una matrice, la chiave di output è sempre Null. |