Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 que estão começando a usar o Azure Databricks, você deve usar o tipo variant em vez de strings JSON sempre que armazenar dados semiestruturados que exijam flexibilidade devido a um esquema mutável ou 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 aprimorado de leitura e escrita do tipo variant permite que ele substitua tipos complexos nativos do Spark, como structs e arrays, 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 do caminho da variante são comparados de forma sensível a maiúsculas e minúsculas. As cadeias de caracteres JSON não diferenciam maiúsculas de minúsculas. Isso significa que, para variante,
column_name:FIELD_NAMEecolumn_name:field_nameprocuram 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
NULLde forma diferente das cadeias de caracteres JSON. Consulte regras nulas de variante. - As colunas do tipo variant têm limitações em algumas operações. Confira Limitações.
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 (SQL ou Python) transforma uma string 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 de números podem ser truncados.
SQL
SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');
Python
spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()
A parse_json função retornará um erro se a cadeia de caracteres JSON estiver malformada, exceder o limite de tamanho de variante ou for inválida. Use a try_parse_json função (SQL ou Python) para, em vez disso, retornar um NULL quando ocorrer um erro na análise.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Python
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
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.
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.
Observação
Para usar essas funções com DataFrames do PySpark, importe-as de pyspark.sql.functions.
| 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 | explodir | Gera as colunas pos, key e value. Ao explodir uma matriz, a chave de saída é sempre nula. |
| variant_explode_outer | explode_outer | Gera as colunas pos, key e value. Ao explodir uma matriz, a chave de saída é sempre nula. |