Compartilhar via


Função from_json

Aplica-se a:com marcação de verificação sim Databricks SQL verificação marcada como sim Databricks Runtime

Retorna um valor de struct com jsonStr e schema.

Sintaxe

from_json(jsonStr, schema [, options])

Argumentos

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

jsonStr deve ser bem formado com relação a schema e options.

Deve schema ser definido como nomes de coluna separados por vírgulas e pares de tipo de dados, semelhante ao formato usado em CREATE TABLE. Antes do Databricks Runtime 12.2, schema deve ser literal.

Como alternativa, você pode usar from_json com o Lakeflow Spark Declarative Pipelines para inferir e evoluir automaticamente o esquema definindo schema como NULL e especificando um schemaLocationKey. Para obter exemplos, consulte Infer e evolua o esquema usando from_json em pipelines.

Observação

Os nomes de colunas e campos entre schema diferenciam maiúsculas de minúsculas e devem corresponder exatamente aos nomes entre jsonStr. Para mapear campos JSON que diferem apenas em maiúsculas e minúsculas, você pode converter a estrutura resultante para nomes de campos distintos. Consulte Exemplos para obter mais detalhes.

options, se fornecido, pode ser 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 ponto flutuante como um tipo decimal. Se os valores não couberem em decimal, ele vai inferi-los 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 sem aspas.
  • allowSingleQuotes (padrão true): permite aspas simples além de aspas duplas.
  • allowNumericLeadingZeros (padrão false): permite zeros à esquerda em números (por exemplo,00012).
  • allowBackslashEscapingAnyCharacter (padrão false): permite aceitar aspas de todos os caracteres usando o mecanismo de aspas com barra invertida.
  • allowUnquotedControlChars (padrão false): permite que cadeias de caracteres JSON contenham caracteres de controle não cotados (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 encontra um registro corrompido, coloca a cadeia de caracteres malformada em um campo configurado por columnNameOfCorruptRecord e define os campos malformados como nulos. Para manter os registros corrompidos, você pode definir um campo de tipo de cadeia de caracteres chamado columnNameOfCorruptRecord em um esquema definido pelo usuário. Se o esquema não tiver o campo, ele removerá os registros corrompidos durante a análise. Ao inferir um esquema, ele adiciona implicitamente um campo columnNameOfCorruptRecord a um esquema de saída.
    • FAILFAST: gera uma exceção quando encontra registros corrompidos.
  • columnNameOfCorruptRecord (o padrão é o valor especificado em spark.sql.columnNameOfCorruptRecord): permite renomear o novo campo que tem uma cadeia de caracteres malformada criada pelo modo PERMISSIVE. Isso substitui 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 padrões de datetime. Isso se aplica ao tipo de data.
  • timestampFormat (padrão yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): define a cadeia que indica um formato de carimbo de data/hora. Os formatos de data personalizados seguem os formatos dos padrões de datetime. Isso se aplica ao tipo de carimbo de data/hora.
  • multiLine (padrão false): analisa um registro, que pode abranger várias linhas, por arquivo.
  • encoding (por padrão, ele não é definido): permite forçar a definição de uma codificação básica ou estendida padrão para os arquivos JSON. Por exemplo, UTF-16BE, UTF-32LE. Se a codificação não for especificada e multiLine for definida como true, ela será detectada automaticamente.
  • lineSep (o padrão abrange todos: \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 dos objetos JSON de entrada usados para inferir o esquema.
  • dropFieldIfAllNull (padrão false): se deve ignorar a coluna com todos os valores nulos ou matrizes/structs vazios durante a inferência de esquema.
  • locale (padrão é en-US): sets uma localidade como rótulo de idioma no formato IETF BCP 47. Por exemplo, isso é usado ao analisar datas e registros de data e hora.
  • allowNonNumericNumbers (padrão true): permite que o analisador JSON reconheça o conjunto de tokens não numéricos (NaN) como valores numéricos flutuantes válidos:
    • +INF para infinito positivo, bem como o alias de +Infinity e Infinity.
    • -INF para infinito negativo, alias -Infinity.
    • NaN para outros itens não numéricos, como o resultado da divisão por zero.
  • readerCaseSensitive (padrão true): especifica o comportamento de sensibilidade de maiúsculas e minúsculas quando rescuedDataColumn é habilitado. Se verdadeiro, resgatar as colunas de dados cujos nomes diferem por caso do esquema; caso contrário, ler os dados sem diferenciar maiúsculas de minúsculas. Disponível em Databricks SQL e Databricks Runtime 13.3 LTS e superior.

Retornos

Uma struct com nomes de campos e tipos que correspondem à definição do 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}