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
ecolumn_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
. variant_explode
e variant_explode_outer
não são compatíveis com o PySpark.
Função de variante |
JSON função de cadeias de caracteres |
Notas |
---|---|---|
Recebe uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, conversão e nulos. |
||
Recebe uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, conversão e nulos. |
||
Verifica se a expressão está armazenando um |
||
Ao determinar o esquema para um |
||
Quando nenhum tipo mínimo comum é identificado, o tipo é derivado como |
||
Produz as colunas |
||
Produz as colunas |
As variantes tratam a conversão e os NULL
s de forma diferente das strings JSON. Consulte Regras de conversão de tipo de vari ante e Regras de nulidade de variante.