Función from_json
Se aplica a: Databricks SQL Databricks Runtime
Devuelve un valor de estructura con jsonStr
y schema
.
Sintaxis
from_json(jsonStr, schema [, options])
Argumentos
jsonStr
: expresiónSTRING
que especifica un documento json.schema
: expresiónSTRING
o invocación de schema_of_json función.options
: un literalMAP<STRING,STRING>
opcional que especifica directivas.
jsonStr
debe tener un formato correcto con respecto a schema
y options
.
schema
debe definirse como nombres de columna separados por comas y pares de tipos de datos, de forma similar al formato usado en CREATE TABLE
.
Antes de Databricks Runtime 12.2 schema
debía ser un literal.
Nota:
Los nombres de columna y campo en schema
distinguen mayúsculas de minúsculas y deben coincidir exactamente con los nombres jsonStr
.
Para asignar campos JSON que solo difieren en el caso, puede convertir la estructura resultante en nombres de campo distintos.
Consulte Ejemplos para obtener más detalles.
options
, si se proporciona, puede ser cualquiera de los valores siguientes:
primitivesAsString
(valor predeterminadofalse
): deduce todos los valores primitivos como un tipo de cadena.prefersDecimal
(valor predeterminadofalse
): deduce todos los valores de punto flotante como un tipo decimal. Si los valores no caben en decimales, los deduce como tipos double.allowComments
(valor predeterminadofalse
): omite el comentario de estilo Java y C++ en los registros JSON.allowUnquotedFieldNames
(valor predeterminadofalse
): permite nombres de campo JSON sin comillas.allowSingleQuotes
(valor predeterminadotrue
): permite comillas simples además de comillas dobles.allowNumericLeadingZeros
(valor predeterminadofalse
): permite ceros iniciales en números (por ejemplo,00012
).allowBackslashEscapingAnyCharacter
(valor predeterminadofalse
): permite aceptar comillas en todos los caracteres mediante el mecanismo de barra diagonal inversa.allowUnquotedControlChars
(valor predeterminadofalse
): permite que las cadenas JSON contengan caracteres de control sin comillas (caracteres ASCII con un valor inferior a 32, incluidos los de tabulación y avance de línea) o no.mode
(valor predeterminadoPERMISSIVE
): permite un modo para controlar los registros dañados durante el análisis.PERMISSIVE
: cuando detecta un registro dañado, coloca la cadena con formato incorrecto en un campo configurado porcolumnNameOfCorruptRecord
y establece en NULL los campos con formato incorrecto. Para mantener los registros dañados, puede establecer un campo de tipo cadena denominadocolumnNameOfCorruptRecord
en un esquema definido por el usuario. Si un esquema no tiene el campo, quita los registros dañados durante el análisis. Al deducir un esquema, agrega implícitamente un campocolumnNameOfCorruptRecord
en un esquema de salida.FAILFAST
: inicia una excepción cuando detecta registros dañados.
columnNameOfCorruptRecord
(el valor predeterminado es el especificado enspark.sql.columnNameOfCorruptRecord
): permite cambiar el nombre del nuevo campo con una cadena con formato incorrecto creada por el modoPERMISSIVE
. Esto invalidaspark.sql.columnNameOfCorruptRecord
.dateFormat
(valor predeterminadoyyyy-MM-dd
): establece la cadena que indica un formato de fecha. Los formatos de fecha personalizados siguen los formatos de Patrones de fecha y hora. Esto se aplica al tipo de fecha.timestampFormat
(valoryyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
predeterminado): establece la cadena que indica un formato de marca de tiempo. Los formatos de fecha personalizados siguen los formatos de Patrones de fecha y hora. Esto se aplica al tipo timestamp.multiLine
(valor predeterminadofalse
): analiza un registro, que puede abarcar varias líneas, por archivo.encoding
(de forma predeterminada no se establece): permite establecer de manera forzada una de las codificaciones básicas o extendidas estándar para los archivos JSON. Por ejemplo, UTF-16BE, UTF-32LE. Si no se especifica la codificación ymultiLine
se establece entrue
, se detecta automáticamente.lineSep
(el valor predeterminado abarca\r
,\r\n
y\n
): define el separador de líneas que se debe usar para el análisis.samplingRatio
(valor predeterminado 1.0): define la fracción de objetos JSON de entrada que se usan para la inferencia de esquemas.dropFieldIfAllNull
(valor predeterminadofalse
): si se omite la columna de todos los valores NULL o la matriz o estructura vacías durante la inferencia del esquema.locale
(el valor predeterminado esen-US
):sets
una configuración regional como etiqueta de idioma en formato IETF BCP 47. Por ejemplo, esto se usa al analizar fechas y marcas de tiempo.allowNonNumericNumbers
(valor predeterminadotrue
): permite que el analizador JSON reconozca el conjunto de tokens que no son un número (NaN
) como valores de número flotantes correctos:+INF
para infinito positivo, así como alias de+Infinity
yInfinity
.-INF
para infinito negativo), alias de-Infinity
.NaN
para otros valores que no son un número, como el resultado de la división por cero.
readerCaseSensitive
(valor predeterminadotrue
): especifica el comportamiento de distinción entre mayúsculas y minúsculas cuando se habilitarescuedDataColumn
. Si es true, rescate las columnas de datos cuyos nombres difieren entre mayúsculas y minúsculas del esquema; de lo contrario, lea los datos de una manera sin distinción entre mayúsculas y minúsculas. Disponible en Databricks SQL y Databricks Runtime 13.3 LTS y versiones posteriores.
Devoluciones
Una estructura con nombres de campo y tipos que coinciden con la definición de esquema.
Ejemplos
> SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
{"a":1,"b":0.8}
-- The column name must to match the case of the JSON field
> SELECT from_json('{"a":1}', 'A INT');
{"A":null}
> SELECT from_json('{"datetime":"26/08/2015"}', 'datetime Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{"datetime":2015-08-26 00:00:00}
-- Disambiguate field names with different cases
> SELECT cast(from_json('{"a":1, "A":0.8}', 'a INT, A DOUBLE') AS STRUCT<a: INT, b: DOUBLE>);
{"a":1, "b":0.8}