Compartir vía


Función from_json

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Devuelve un valor de estructura con jsonStr y schema.

Sintaxis

from_json(jsonStr, schema [, options])

Argumentos

  • jsonStr: expresión STRING que especifica un documento json.
  • schema: expresión STRING o invocación de schema_of_json función.
  • options: un literal MAP<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 predeterminado false): deduce todos los valores primitivos como un tipo de cadena.
  • prefersDecimal (valor predeterminado false): 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 predeterminado false): omite el comentario de estilo Java y C++ en los registros JSON.
  • allowUnquotedFieldNames (valor predeterminado false): permite nombres de campo JSON sin comillas.
  • allowSingleQuotes (valor predeterminado true): permite comillas simples además de comillas dobles.
  • allowNumericLeadingZeros (valor predeterminado false): permite ceros iniciales en números (por ejemplo, 00012).
  • allowBackslashEscapingAnyCharacter (valor predeterminado false): permite aceptar comillas en todos los caracteres mediante el mecanismo de barra diagonal inversa.
  • allowUnquotedControlChars (valor predeterminado false): 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 predeterminado PERMISSIVE): 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 por columnNameOfCorruptRecord y establece en NULL los campos con formato incorrecto. Para mantener los registros dañados, puede establecer un campo de tipo cadena denominado columnNameOfCorruptRecord 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 campo columnNameOfCorruptRecord en un esquema de salida.
    • FAILFAST: inicia una excepción cuando detecta registros dañados.
  • columnNameOfCorruptRecord (el valor predeterminado es el especificado en spark.sql.columnNameOfCorruptRecord): permite cambiar el nombre del nuevo campo con una cadena con formato incorrecto creada por el modo PERMISSIVE. Esto invalida spark.sql.columnNameOfCorruptRecord.
  • dateFormat (valor predeterminado yyyy-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 (valor yyyy-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 predeterminado false): 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 y multiLine se establece en true, 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 predeterminado false): 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 es en-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 predeterminado true): 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 y Infinity.
    • -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 predeterminado true): especifica el comportamiento de distinción entre mayúsculas y minúsculas cuando se habilita rescuedDataColumn. 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}