Compartir a través de


¿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 y column_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.