CREATE TABLE acima declara a estrutura de dados aninhada Goals, que contém dados sobre conversões, ou metas alcançadas.
Cada linha na tabela ‘visits’ corresponde a zero ou mais conversões.
Quando a configuração flatten_nested é definida como 0 (flatten_nested=1 por padrão), níveis arbitrários de aninhamento são suportados.
Na maioria dos casos, ao trabalhar com uma estrutura de dados aninhada, suas colunas são especificadas com nomes de colunas separados por ponto.
Essas colunas formam um array de tipos correspondentes.
Todos os arrays de colunas de uma mesma estrutura de dados aninhada têm o mesmo comprimento.
Por exemplo:
Filtrando colunas Nested em WHERE
Nested é armazenada como um Array, referenciá-la em uma cláusula WHERE retorna o array inteiro para cada linha, e não um elemento individual. Não é possível comparar diretamente uma coluna aninhada com um valor escalar, portanto você deve usar funções de array.
Por exemplo, esta consulta não simplesmente retorna zero linhas — ela gera uma exceção, porque Goals.ID tem o tipo Array(UInt32) e equals(Array(UInt32), UInt32) não é uma comparação válida:
has para verificar se um array contém determinado valor:
arrayExists quando a condição for mais complexa:
length ou excluir arrays vazios com notEmpty:
ARRAY JOIN para expandir os arrays primeiro.
Após ARRAY JOIN, cada elemento se torna uma linha separada, então a cláusula WHERE se aplica a valores escalares.
Para mais informações, consulte a cláusula ARRAY JOIN. Exemplo:
SELECT em uma estrutura de dados aninhada inteira. Só é possível listar explicitamente as colunas individuais que fazem parte dela.
Inserção de dados
INSERT, você deve passar separadamente todos os arrays das colunas componentes de uma estrutura de dados aninhada (como se fossem arrays de colunas individuais). Durante a inserção, o sistema verifica se eles têm o mesmo tamanho.
Cada subcoluna aninhada é listada na lista de colunas usando notação de ponto (Goals.ID, Goals.Serial, …), e os valores correspondentes são arrays:
DESCRIBE, as colunas em uma estrutura de dados aninhada são listadas separadamente da mesma forma.
Limitações do ALTER
ALTER em estruturas de dados aninhadas têm as seguintes limitações:
Adicionar subcolunas funciona normalmente. Você pode adicionar uma nova subcoluna a uma estrutura Nested existente:
- Renomear a estrutura aninhada como um todo (por exemplo,
GoalsparaConversions). - Mover uma subcoluna para uma estrutura aninhada diferente (por exemplo,
Goals.IDparaOtherNested.ID). - Mover uma subcoluna para fora de uma estrutura aninhada ou para dentro dela (por exemplo,
Goals.IDparaGoalIDou vice-versa).