Compartilhar via


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 e column_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 NULLs de forma diferente das cadeias de caracteres JSON. Consulte regras de conversão de tipo variante e regras nulas variante.