Pular para o conteúdo principal

Qual é a diferença entre a variante e o site JSON strings?

info

Visualização

Esse recurso está em Public Preview.

Este artigo descreve as alterações de comportamento e as diferenças de sintaxe e semântica ao trabalhar com o tipo de dados variante. Este artigo pressupõe que o senhor esteja familiarizado com o trabalho com os dados das cadeias de caracteres JSON em Databricks. Para os usuários que não conhecem o site Databricks, é recomendável usar a variante em vez de JSON strings sempre que armazenar dados semiestruturados que exijam flexibilidade para alterar ou desconhecer o esquema. Consulte Modelo de dados semiestruturados.

Em Databricks Runtime 15.3 e acima, o senhor pode usar o tipo de dados variante para codificar e consultar dados semiestruturados. Databricks recomenda a variante como um substituto para o armazenamento de dados semiestruturados JSON strings. O desempenho aprimorado de leitura e gravação da variante permite que ela substitua os tipos complexos nativos do Spark, como structs e arrays, em alguns casos de uso.

Como você consulta dados de variantes?

Variante uso de dados 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] em que n é o valor do índice inteiro do elemento. Por exemplo, para consultar o primeiro valor em uma matriz, column_name:array_name[0].

As diferenças a seguir podem interromper as consultas existentes ao atualizar de strings JSON para variantes:

  • Todos os elementos do caminho variante são combinados de forma que diferencia maiúsculas de minúsculas. JSON strings não diferenciam maiúsculas de minúsculas. Isso significa que, para a variante, column_name:FIELD_NAME e column_name:field_name procuram campos diferentes nos dados armazenados.
  • A sintaxe [*] não é compatível com a identificação ou descompactação de todos os elementos em uma matriz.
  • A variante codifica os valores NULL de forma diferente de JSON strings. Consulte Regras nulas da variante.
  • As colunas de variantes têm limitações para algumas operações. Consulte Limitações.

Converter strings JSON de e para variantes

Em Databricks Runtime 15.3 e acima, a função to_json tem funcionalidade adicional para converter tipos VARIANT para JSON strings. As opções são ignoradas na conversão de VARIANT para JSON strings. Veja to_json.

A função parse_json transforma uma cadeia de caracteres JSON em um tipo VARIANT. Embora parse_json(json_string_column) seja o inverso lógico de to_json(variant_column), as regras de conversão a seguir descrevem por que não é exatamente o inverso:

  • O espaço em branco não está perfeitamente preservado.
  • A ordem das chaves é arbitrária.
  • Os zeros à direita em números podem ser truncados.

A função parse_json retornará um erro se as cadeias de caracteres JSON estiverem malformadas ou excederem o limite de tamanho da variante. Em vez disso, use a função try_parse_json para retornar NULL quando ocorrer um erro na análise.

Quais são as funções SQL para trabalhar com variantes?

Apache Spark SQL As funções disponíveis em Databricks Runtime 15.3 e acima fornecem métodos para interagir com dados de variantes. A tabela a seguir inclui a nova função, a função correspondente das cadeias de caracteres JSON e observações sobre as diferenças de comportamento.

nota

Para usar essas funções com o PySpark DataFrames, importe-as de pyspark.sql.functions. variant_explode e variant_explode_outer não são compatíveis com o PySpark.

Função variante

JSON função de cadeias de caracteres

Notas

variante_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 valores nulos.

teste_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 valores nulos.

é_variant_null

é nulo

Verifica se a expressão está armazenando um NULL codificado em VARIANT. Use is null para verificar se a expressão de entrada é NULL.

esquema da variante

esquema de json

Ao determinar o esquema para um ARRAY<elementType>, o elementType pode ser inferido como VARIANT se houver tipos conflitantes encontrados nos dados.

esquema da variante agg

esquema de json_agg

Quando nenhum tipo menos comum é identificado, o tipo é derivado como VARIANT.

variante_explode

explodir

Produz as colunas pos, key e value. Ao explodir uma matriz, a saída key é sempre nula.

variante_explode_outer

explodir exterior

Produz as colunas pos, key e value. Ao explodir uma matriz, a saída key é sempre nula.

As variantes tratam a conversão e NULLs de forma diferente das strings JSON. Consulte Regras de conversão do tipo variante e Regras nulas da variante.