¿En qué se diferencia el tipo variante de las cadenas JSON?
Importante
Esta característica está en versión preliminar pública.
En este artículo se describen los cambios de comportamiento, las diferencias en la sintaxis y la semántica al trabajar con el tipo de datos variante. En este artículo se da por supuesto que tiene conocimiento del trabajo con datos de cadena JSON en Azure Databricks. Los usuarios nuevos en Azure Databricks, deben usar el tipo variante en lugar de cadenas JSON siempre que almacene datos semiestructurados que requieran flexibilidad para cambiar o un esquema desconocido. Consulte Modelos de datos semiestructurados.
En Databricks Runtime 15.3 y versiones posteriores, puede usar el tipo de datos variante para codificar y consultar datos semiestructurados. Databricks recomienda el tipo variante como reemplazo para almacenar datos semiestructurados mediante cadenas JSON. El rendimiento mejorado de lectura y escritura para el tipo variante permite reemplazar tipos complejos nativos de Spark, como estructuras y matrices en algunos casos de uso.
¿Cómo se consultan los datos variantes?
Los datos variantes usan los mismos operadores para consultar campos, subcampos y elementos de matriz.
Para consultar un campo, use :
. Por ejemplo, column_name:field_name
.
Para consultar un subcampo, use .
. Por ejemplo, column_name:field_name.subfield_name
.
Para consultar un elemento de matriz, use [n]
donde n
es el valor de índice entero del elemento. Por ejemplo, para consultar el primer valor de una matriz, column_name:array_name[0]
.
Las siguientes diferencias pueden interrumpir las consultas existentes al actualizar desde cadenas JSON al variante:
- Todos los elementos de la ruta de acceso variantes coinciden de una manera que distingue mayúsculas de minúsculas. Las cadenas de JSON no distinguen mayúsculas de minúsculas. Esto significa que para el tipo variante
column_name:FIELD_NAME
ycolumn_name:field_name
buscan campos diferentes en los datos almacenados. - La sintaxis
[*]
no es compatible para identificar o desempaquetar todos los elementos de una matriz. - El tipo variante codifica los valores
NULL
de forma diferente a las cadenas JSON. Consulte Reglas para variante null .
Conversión de cadenas JSON a y desde el tipo variante
En Databricks Runtime 15.3 y versiones posteriores, la función to_json
tiene una funcionalidad adicional para convertir los tipos VARIANT
en cadenas JSON. Las opciones se omiten al convertir VARIANT
en cadena JSON. Consulte to_json.
La función parse_json
transforma una cadena JSON en el tipo VARIANT
. Aunque parse_json(json_string_column)
es el inverso lógico de to_json(variant_column)
, las siguientes reglas de conversión describen por qué no es el inverso exacto:
- El espacio en blanco no se conserva perfectamente.
- El orden de las claves es arbitrario.
- Es posible que se trunquen ceros finales de números.
La función parse_json
devuelve un error si la cadena JSON tiene un formato incorrecto o supera el límite de tamaño del tipo variante. Use la función try_parse_json
para devolver un NULL
en su lugar cuando se produce un error en el análisis.
¿Cuáles son las funciones SQL para trabajar con variantes?
Las funciones SQL de Apache Spark disponibles en Databricks Runtime 15.3 y versiones posteriores proporcionan métodos para interactuar con datos del tipo variante. En la tabla siguiente se incluye la nueva función, la función de cadena JSON correspondiente y notas sobre las diferencias en el comportamiento.
Nota:
Para usar estas funciones con DataFrames de PySpark, impórtelas desde pyspark.sql.functions
. variant_explode
y variant_explode_outer
no se admiten en PySpark.
Función variante | Función de cadena JSON | Notas |
---|---|---|
variant_get | conversión y get_json_object | Toma una expresión, una ruta de acceso y un tipo. Sigue todas las reglas para las rutas de acceso de variantes, la conversión y los valores null. |
try_variant_get | try_cast y get_json_object | Toma una expresión, una ruta de acceso y un tipo. Sigue todas las reglas para las rutas de acceso de variantes, la conversión y los valores null. |
is_variant_null | is null | Comprueba si la expresión almacena una VARIANT codificada NULL . Use is null para comprobar si la expresión de entrada es NULL . |
schema_of_variant | schema_of_json | Al determinar el esquema de un ARRAY<elementType> , elementType puede deducirse como VARIANT si hubiera tipos en conflicto encontrados en los datos. |
schema_of_variant_agg | schema_of_json_agg | Cuando no se identifica ningún tipo como el menos común, el tipo se deriva como VARIANT . |
variant_explode | explode | Genera columnas pos , key y value . Al explotar una matriz, la clave generada siempre es null. |
variant_explode_outer | explode_outer | Genera columnas pos , key y value . Al explotar una matriz, la clave generada siempre es null. |
Los variantes controlan la conversión y los NULL
en forma diferente de las cadenas JSON. Consulte Reglas de conversión del tipo variante y Reglas para variante null.