Qual é a diferença entre a variante e as cadeias de caracteres JSON?

Visualização

Esse recurso está em Prévia Pública.

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 o senhor 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] onde 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 de caminho de variantes são combinados com distinção entre maiúsculas e 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 desempacotamento de todos os elementos de uma matriz.

  • A variante codifica os valores NULL de forma diferente das strings JSON. Consulte Regras de nulidade de variantes.

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. Consulte 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 ele não é o inverso exato:

  • Os espaços em branco não são perfeitamente preservados.

  • A ordem das chaves é arbitrária.

  • Os zeros à direita nos 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. 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?

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.

Observação

Para usar essas funções com PySpark DataFrames, importe-as de pyspark.sql.functions.

Função de variante

JSON função de cadeias de caracteres

Notas

variant_get

cast e get_json_object

Recebe 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

Recebe uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, conversão e nulos.

is_variant_null

é nulo

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 para um ARRAY<elementType>, o elementType pode ser inferido como VARIANT se houver tipos conflitantes nos dados.

schema_of_variant_agg

schema_of_json_agg

Quando nenhum tipo mínimo comum é identificado, o tipo é derivado como VARIANT.

variant_explode

explodir

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

variant_explode_outer

explode_outer

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

As variantes tratam a conversão e os NULLs de forma diferente das strings JSON. Consulte Regras de conversão de tipo de vari ante e Regras de nulidade de variante.