Qual é a diferença entre variante e cadeias de caracteres JSON?
Importante
Esta funcionalidade está em Pré-visualização Pública.
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 variantes sobre cadeias de caracteres JSON sempre que armazenar dados semiestruturados que exijam flexibilidade para alterar ou esquema desconhecido. Consulte Modelo de dados semiestruturados.
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 um substituto para armazenar dados semiestruturados usando cadeias de caracteres JSON. O melhor desempenho de leitura e gravação para a variante permite que ela substitua tipos complexos nativos do Spark, como structs e arrays, em alguns casos de uso.
Como consultar dados de variantes?
Os dados de variante 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 quebrar consultas existentes ao atualizar de cadeias de caracteres JSON para variantes:
- Todos os elementos de caminho de variante são combinados de forma a diferenciar 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
procure campos diferentes nos dados armazenados. - A
[*]
sintaxe não é suporte para identificar ou descompactar todos os elementos em uma matriz. - Variant codifica
NULL
valores de forma diferente das cadeias de caracteres JSON. Consulte Regras nulas variantes.
Converter cadeias de caracteres JSON de e para variante
No Databricks Runtime 15.3 e superior, a to_json
função tem funcionalidade adicional para converter VARIANT
tipos para cadeias de caracteres JSON. As opções são ignoradas ao converter VARIANT
em cadeia de caracteres JSON. Ver to_json.
A parse_json
função transforma uma cadeia de caracteres JSON em VARIANT
tipo. Embora parse_json(json_string_column)
seja o inverso lógico do , as seguintes regras de to_json(variant_column)
conversão descrevem por que não é o inverso exato:
- O espaço em branco não está perfeitamente preservado.
- A ordenação das chaves é arbitrária.
- Os zeros à direita em números podem ser truncados.
A parse_json
função retorna um erro se a cadeia de caracteres JSON estiver malformada ou exceder o limite de tamanho da variante. Use a try_parse_json
função para retornar um NULL
quando ocorrer um erro na análise.
Quais são as funções SQL para trabalhar com variantes?
As funções Apache Spark SQL 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 notas sobre diferenças de comportamento.
Nota
Para usar essas funções com o PySpark DataFrames, importe-as do pyspark.sql.functions
. variant_explode
e variant_explode_outer
não são suportados no PySpark.
Função variante | Função de cadeia de caracteres JSON | Notas |
---|---|---|
variant_get | elenco e get_json_object | Usa uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, transmissã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, transmissão e nulos. |
is_variant_null | é nulo | Verifica se a expressão está armazenando um VARIANT NULL arquivo . Use is null para verificar se a expressão de entrada é NULL . |
schema_of_variant | schema_of_json | Ao determinar o esquema para um ARRAY<elementType> , o pode ser inferido elementType 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 | explodir | Saídas pos , key e value colunas. Ao explodir uma matriz, a chave de saída é sempre nula. |
variant_explode_outer | explode_outer | Saídas pos , key e value colunas. Ao explodir uma matriz, a chave de saída é sempre nula. |
As variantes lidam com a transmissão e NULL
s de forma diferente das cadeias de caracteres JSON. Consulte Regras de transmissão de tipo de variante e Regras nulas de variante.