Função from_json
Aplica-se a: SQL do Databricks Runtime do Databricks
Retorna um valor de struct com jsonStr
e schema
.
Sintaxe
from_json(jsonStr, schema [, options])
Argumentos
jsonStr
: UmaSTRING
expressão que especifica um documento json.schema
: UmaSTRING
expressão ou invocação de schema_of_json função.options
: umaMAP<STRING,STRING>
literal opcional especificando diretivas.
jsonStr
deve ser bem formado com relação a schema
e options
.
schema
devem ser definidos como nomes de coluna separados por vírgulas e pares de tipos de dados, semelhantes ao formato usado no CREATE TABLE
.
Antes do Databricks Runtime 12.2 schema
, deve ser um literal.
Observação
Os nomes de coluna e campo diferenciam schema
maiúsculas de minúsculas e devem corresponder exatamente aos nomes jsonStr
.
Para mapear campos JSON que diferem apenas em maiúsculas e minúsculas, você pode converter a estrutura resultante em nomes de campo distintos.
Consulte Exemplos para obter mais detalhes.
options
, se fornecido, pode ser um dos seguintes:
primitivesAsString
(padrãofalse
): infere todos os valores primitivos como um tipo de cadeia de caracteres.prefersDecimal
(padrãofalse
): 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ãofalse
): ignora o comentário de estilo Java e C++ em registros JSON.allowUnquotedFieldNames
(padrãofalse
): permite nomes de campos JSON sem aspas.allowSingleQuotes
(padrãotrue
): permite aspas simples além de aspas duplas.allowNumericLeadingZeros
(padrãofalse
): permite zeros à esquerda em números (por exemplo,00012
).allowBackslashEscapingAnyCharacter
(padrãofalse
): permite aceitar aspas de todos os caracteres usando o mecanismo de aspas de barra invertida.allowUnquotedControlChars
(padrãofalse
): permite que as cadeias de caracteres JSON contenham caracteres de controle sem aspas (caracteres ASCII com um valor inferior a 32, incluindo caracteres de tabulação e de feed de linha) ou não.mode
(padrãoPERMISSIVE
): 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 porcolumnNameOfCorruptRecord
e define os campos malformados como nulos. Para manter os registros corrompidos, você pode definir um campo de tipo de cadeia de caracteres chamadocolumnNameOfCorruptRecord
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 campocolumnNameOfCorruptRecord
a um esquema de saída.FAILFAST
: gera uma exceção quando encontra registros corrompidos.
columnNameOfCorruptRecord
(o padrão é o valor especificado emspark.sql.columnNameOfCorruptRecord
): permite renomear o novo campo que tem uma cadeia de caracteres malformada criada pelo modoPERMISSIVE
. Isso substituispark.sql.columnNameOfCorruptRecord
.dateFormat
(padrãoyyyy-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ãoyyyy-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 padrões de datetime. Isso se aplica ao tipo de carimbo de data/hora.multiLine
(padrãofalse
): 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 emultiLine
for definida comotrue
, 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ãofalse
): indica se a coluna de todos os valores nulos ou matriz/struct vazio deve ser ignorada durante a inferência de esquema.locale
(padrão éen-US
):sets
uma localidade como uma marca de idioma no formato IETF BCP 47. Por exemplo, isso é usado durante a análise de datas e de carimbos de data/hora.allowNonNumericNumbers
(padrãotrue
): 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
eInfinity
.-INF
para infinito negativo, alias-Infinity
.NaN
para outros itens não numéricos, como o resultado da divisão por zero.
readerCaseSensitive
(padrãotrue
): especifica o comportamento de confidencialidade de maiúsculas e minúsculas quandorescuedDataColumn
é habilitado. Se for verdadeiro, salve as colunas de dados cujos nomes diferem por caso do esquema; caso contrário, leia os dados de maneira que não diferencia 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 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}