Condividi tramite


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 poscolonne , keye value . Quando si esplode una matrice, la chiave di output è sempre Null.
variant_explode_outer explode_outer Restituisce le poscolonne , keye value . Quando si esplode una matrice, la chiave di output è sempre Null.

Le varianti gestiscono il cast e NULLsono diverse dalle stringhe JSON. Vedere Regole di cast dei tipi varianti e Regole Variant null.