Partilhar via


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 e column_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 NULLarquivo . 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, keye value colunas. Ao explodir uma matriz, a chave de saída é sempre nula.
variant_explode_outer explode_outer Saídas pos, keye value colunas. Ao explodir uma matriz, a chave de saída é sempre nula.

As variantes lidam com a transmissão e NULLs de forma diferente das cadeias de caracteres JSON. Consulte Regras de transmissão de tipo de variante e Regras nulas de variante.