Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
Esta funcionalidade está em Pré-visualização Pública.
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 variantes sobre cadeias de caracteres JSON sempre que armazenar dados semiestruturados que exijam flexibilidade para alterar ou esquema desconhecido. Consulte Modelo de dados semiestruturados.
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 um substituto para armazenar dados semiestruturados usando cadeias de caracteres JSON. O melhor desempenho de leitura e gravação para a variante permite que ela substitua tipos complexos nativos do Spark, como structs e arrays, em alguns casos de uso.
Como consultar dados de variantes?
Os dados de variante 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 quebrar consultas existentes ao atualizar de cadeias de caracteres JSON para variantes:
- Todos os elementos de caminho de variante são combinados de forma a diferenciar 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_NAMEecolumn_name:field_nameprocure campos diferentes nos dados armazenados. - A
[*]sintaxe não é suporte para identificar ou descompactar todos os elementos em uma matriz. - Variant codifica
NULLvalores de forma diferente das cadeias de caracteres JSON. Consulte Regras nulas variantes. - As colunas de variantes têm limitações para algumas operações. Consulte Limitações.
Converter cadeias de caracteres JSON de e para variante
No Databricks Runtime 15.3 e superior, a to_json função tem funcionalidade adicional para converter VARIANT tipos para cadeias de caracteres JSON. As opções são ignoradas ao converter VARIANT em cadeia de caracteres JSON. Ver to_json.
A parse_json função (SQL ou Python) transforma uma cadeia JSON em VARIANT tipo. Embora parse_json(json_string_column) seja o inverso lógico do , as seguintes regras de to_json(variant_column)conversão descrevem por que não é o inverso exato:
- O espaço em branco não está perfeitamente preservado.
- A ordenação das chaves é arbitrária.
- Os zeros à direita em 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 devolve um erro se a cadeia JSON estiver mal formada, exceder o limite de tamanho variante ou for inválida. Use a função try_parse_json (SQL ou Python) para devolver um NULL quando ocorrer um erro na análise sintática.
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 Apache Spark SQL 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 notas sobre diferenças de comportamento.
As variantes lidam com a transmissão e NULLs de forma diferente das cadeias de caracteres JSON. Consulte Regras de transmissão de tipo de variante e Regras nulas de variante.
Nota
Para usar essas funções com o PySpark DataFrames, importe-as do pyspark.sql.functions.
| Função variante | Função de cadeia de caracteres JSON | Notas |
|---|---|---|
| variant_get | elenco e get_json_object | Usa uma expressão, um caminho e um tipo. Segue todas as regras para caminhos de variantes, transmissã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, transmissão e nulos. |
| is_variant_null | é nulo | Verifica se a expressão está armazenando um VARIANTNULLarquivo . 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 pode ser inferido elementType 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 | Saídas pos, keye value colunas. Ao explodir uma matriz, a chave de saída é sempre nula. |
| variant_explode_outer | explode_outer | Saídas pos, keye value colunas. Ao explodir uma matriz, a chave de saída é sempre nula. |