Como a variante é diferente das cadeias de caracteres JSON?
Importante
Esse recurso está em uma versão prévia.
Este artigo descreve as alterações de comportamento e as diferenças na sintaxe e semântica ao trabalhar com o tipo de dados variante. Este artigo pressupõe que você esteja familiarizado com o trabalho com dados de cadeia de caracteres JSON no Azure Databricks. Para usuários novos no Azure Databricks, você deve usar variante em cadeias de caracteres JSON sempre que armazenar dados semiestruturados que exijam flexibilidade para alterar ou esquema desconhecido. Consulte dados semiestruturados do Modelo.
No Databricks Runtime 15.3 e superior, você pode usar o tipo de dados variante para codificar e consultar dados semiestruturados. O Databricks recomenda a variante como uma substituição para armazenar dados semiestruturados usando cadeias de caracteres JSON. O desempenho de leitura e gravação aprimorado para variante permite substituir tipos complexos do Spark nativos, como structs e matrizes, em alguns casos de uso.
Como consultar dados variantes?
Os dados variantes usam os mesmos operadores para consultar campos, subcampos e elementos de matriz.
Para consultar um campo, use :
. Por exemplo, column_name:field_name
.
Para consultar um subcampo, use .
. Por exemplo, column_name:field_name.subfield_name
.
Para consultar um elemento de matriz, use [n]
onde n
é o valor de índice inteiro do elemento. Por exemplo, para consultar o primeiro valor em uma matriz, column_name:array_name[0]
.
As seguintes diferenças podem interromper as consultas existentes ao atualizar de cadeias de caracteres JSON para variante:
- Todos os elementos de caminho variante são correspondidos de forma diferenciada por maiúsculas de minúsculas. As cadeias de caracteres JSON não diferenciam maiúsculas de minúsculas. Isso significa que, para variante,
column_name:FIELD_NAME
ecolumn_name:field_name
procuram campos diferentes nos dados armazenados. - A sintaxe
[*]
não é compatível para identificar ou desempacotar todos os elementos em uma matriz. - A variante codifica valores
NULL
de forma diferente das cadeias de caracteres JSON. Consulte regras nulas de variante.
Converter cadeias de caracteres JSON de e para variante
No Databricks Runtime 15.3 e posteriores, a função to_json
tem funcionalidade adicional para converter tipos VARIANT
em cadeias de caracteres JSON. As opções são ignoradas ao converter VARIANT
em cadeia de caracteres JSON. Veja to_json.
A função parse_json
transforma uma cadeia de caracteres JSON para o tipo VARIANT
. Embora parse_json(json_string_column)
seja o inverso lógico de to_json(variant_column)
, as seguintes regras de conversão descrevem por que não é o inverso exato:
- O espaço em branco não é perfeitamente preservado.
- A ordenação de chaves é arbitrária.
- Zeros à direita em números podem ser truncados.
A função parse_json
retornará um erro se a cadeia de caracteres JSON estiver malformada ou exceder o limite de tamanho de variante. Use a função try_parse_json
para, em vez disso, retornar um NULL
quando ocorrer um erro na análise.
Quais são as funções SQL para trabalhar com variantes?
As funções SQL do Apache Spark disponíveis no Databricks Runtime 15.3 e superior fornecem métodos para interagir com dados variantes. A tabela a seguir inclui a nova função, a função de cadeia de caracteres JSON correspondente e anotações sobre as diferenças de comportamento.
Observação
Para usar essas funções com DataFrames do PySpark, importe-as de pyspark.sql.functions
. Não há suporte paravariant_explode
e variant_explode_outer
no PySpark.
Função Variant | Função de cadeia de caracteres JSON | Observações |
---|---|---|
variant_get | cast e get_json_object | Usa uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, conversão e nulos. |
try_variant_get | try_cast e get_json_object | Usa uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, conversão e nulos. |
is_variant_null | é null | Verifica se a expressão está armazenando um VARIANT codificado como NULL . Use is null para verificar se a expressão de entrada é NULL . |
schema_of_variant | schema_of_json | Ao determinar o esquema de um ARRAY<elementType> , o elementType pode ser inferido como VARIANT se houvesse tipos conflitantes encontrados nos dados. |
schema_of_variant_agg | schema_of_json_agg | Quando nenhum tipo menos comum é identificado, o tipo é derivado como VARIANT . |
variant_explode | explode | Saídas pos , key e colunas value . Ao explodir uma matriz, a chave de saída é sempre nula. |
variant_explode_outer | explode_outer | Saídas pos , key e colunas value . Ao explodir uma matriz, a chave de saída é sempre nula. |
As variantes lidam com a conversão e NULL
s de forma diferente das cadeias de caracteres JSON. Consulte regras de conversão de tipo variante e regras nulas variante.