Partilhar via


from_json Função

Aplica-se a:seleção marcada sim Databricks SQL seleção marcada sim Databricks Runtime

Retorna um valor struct com o jsonStr e schema.

Sintaxe

from_json(jsonStr, schema [, options])

Argumentos

  • jsonStr: Uma STRING expressão que especifica um documento json.
  • schema: Uma STRING expressão ou invocação de schema_of_json função.
  • options: Um literal opcional MAP<STRING,STRING> que especifica diretivas.

jsonStr deverá estar bem formado no que diz respeito a schema e options.

Os schema devem ser definidos como nomes de colunas separados por vírgulas e pares de tipos de dados, semelhante ao formato usado em CREATE TABLE. Antes da Databricks Runtime 12.2, schema deve ser um literal.

Como alternativa, pode-se usar from_json com Lakeflow Spark Declarative Pipelines para inferir e evoluir automaticamente o esquema, ao definir schema para NULL e especificar schemaLocationKey. Para obter exemplos, consulte Como inferir e evoluir o esquema usando from_json em pipelines.

Nota

Os nomes das colunas e dos campos em schema são sensíveis a maiúsculas e minúsculas e devem corresponder exatamente aos nomes em jsonStr. Para mapear campos JSON que diferem apenas em maiúsculas e minúsculas, você pode converter a struct resultante para nomes de campo distintos. Consulte Exemplos para obter mais detalhes.

options, se fornecido, pode ser qualquer um dos seguintes:

  • primitivesAsString (padrão false): infere todos os valores primitivos como um tipo de cadeia de caracteres.
  • prefersDecimal (padrão false): infere todos os valores de vírgula flutuante como um tipo decimal. Se os valores não se encaixam em decimais, então infere-os como duplos.
  • allowComments (padrão false): ignora comentários no estilo Java e C++ em registros JSON.
  • allowUnquotedFieldNames (padrão false): permite nomes de campos JSON não citados.
  • allowSingleQuotes (padrão true): permite aspas simples, além de aspas duplas.
  • allowNumericLeadingZeros (predefinição false): permite zeros à esquerda em números (por exemplo, 00012).
  • allowBackslashEscapingAnyCharacter (padrão false): permite aceitar a citação de todos os caracteres usando o mecanismo de barra invertida.
  • allowUnquotedControlChars (padrão false): permite que Strings JSON contenham caracteres de controle sem aspas (caracteres ASCII com valor inferior a 32, incluindo caracteres de tabulação e alimentação de linha) ou não.
  • mode (padrão PERMISSIVE): permite um modo para lidar com registros corrompidos durante a análise.
    • PERMISSIVE: quando ele atende a um registro corrompido, coloca a cadeia de caracteres malformada em um campo configurado por columnNameOfCorruptRecord, e define campos malformados como nulos. Para manter registros corrompidos, você pode definir um campo de tipo de cadeia de caracteres nomeado columnNameOfCorruptRecord em um esquema definido pelo usuário. Se um esquema não tiver o campo, ele descartará registros corrompidos durante a análise. Ao inferir um esquema, ele adiciona implicitamente um columnNameOfCorruptRecord campo em um esquema de saída.
    • FAILFAST: lança uma exceção quando encontra registos corrompidos.
  • columnNameOfCorruptRecord (padrão é o valor especificado em spark.sql.columnNameOfCorruptRecord): permite renomear o novo campo com a string malformada criada pelo modo PERMISSIVE. Isso substitui o spark.sql.columnNameOfCorruptRecord.
  • dateFormat (padrão yyyy-MM-dd): define a cadeia de caracteres que indica um formato de data. Os formatos de data personalizados seguem os formatos dos Datetime patterns. Isto aplica-se ao tipo de data.
  • timestampFormat (padrão yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): define a cadeia de caracteres que indica um formato de carimbo de data/hora. Os formatos de data personalizados seguem os formatos dos Datetime patterns. Isso aplica-se ao tipo de timestamp.
  • multiLine (padrão false): analisa um registro, que pode abranger várias linhas, por arquivo.
  • encoding (por padrão, não está definido): permite definir à força uma das codificações básicas ou estendidas padrão para os arquivos JSON. Por exemplo, UTF-16BE, UTF-32LE. Se a codificação não for especificada e multiLine estiver definida como true, ela será detetada automaticamente.
  • lineSep (padrão abrange todos os \r, \r\n e \n): define o separador de linha que deve ser usado para análise.
  • samplingRatio (padrão 1.0): define a fração de objetos JSON de entrada usados para inferir esquema.
  • dropFieldIfAllNull (padrão false): se deve ignorar a coluna de todos os valores nulos ou a matriz/estrutura vazia durante a inferência do esquema.
  • locale (o padrão é en-US): sets uma localidade como etiqueta de idioma no formato IETF BCP 47. Por exemplo, isso é usado ao analisar datas e timestamps.
  • allowNonNumericNumbers (padrão true): permite que o analisador JSON reconheça o conjunto de tokens não-a-número (NaN) como valores de número flutuante legal:
    • +INF para o infinito positivo, bem como alias de +Infinity e Infinity.
    • -INF para infinito negativo), alias -Infinity.
    • NaN para outros não-números, como resultado da divisão por zero.
  • readerCaseSensitive (padrão true): especifica o comportamento de sensibilidade a maiúsculas e minúsculas quando rescuedDataColumn está habilitado. Se verdadeiro, recupere as colunas de dados cujos nomes diferem por caso do esquema; caso contrário, leia os dados de uma forma que não diferencie entre maiúsculas e minúsculas. Disponível em Databricks SQL e Databricks Runtime 13.3 LTS e superior.

Devoluções

Uma estrutura com nomes de campo e tipos correspondentes à definição de esquema.

Exemplos

> 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}