SummingMergeTree, o ClickHouse substitui todas as linhas com a mesma chave primária (ou, mais precisamente, com a mesma chave de ordenação) por uma única linha contendo os valores somados das colunas com tipo de dado numérico. Se a chave de ordenação for composta de modo que um único valor de chave corresponda a um grande número de linhas, isso reduz significativamente o volume de armazenamento e acelera a seleção de dados.
Recomendamos usar esse motor em conjunto com MergeTree. Armazene os dados completos em uma tabela MergeTree e use SummingMergeTree para armazenar dados agregados, por exemplo, na preparação de relatórios. Essa abordagem evita a perda de dados valiosos devido a uma chave primária composta incorretamente.
Criar uma tabela
Parâmetros do SummingMergeTree
Colunas
columns - uma tupla com os nomes das colunas cujos valores serão somados. Parâmetro opcional.
As colunas devem ser de tipo numérico e não devem estar na partição nem na chave de ordenação.
Se columns não for especificado, o ClickHouse soma os valores de todas as colunas com tipo de dado numérico que não estejam na chave de ordenação.
Cláusulas de consulta
SummingMergeTree, são necessárias as mesmas cláusulas exigidas na criação de uma tabela MergeTree.
Exemplo de uso
sum e a cláusula GROUP BY na consulta.
Processamento de dados
GROUP BY no (SELECT), conforme descrito no exemplo acima.
Regras comuns de soma
columns.
Se os valores forem 0 em todas as colunas de soma, a linha será excluída.
Se uma coluna não fizer parte da chave primária e não for somada, um valor arbitrário será selecionado entre os existentes.
Os valores não são somados nas colunas da chave primária.
A soma nas colunas do tipo AggregateFunction
Estruturas aninhadas
Map e ela contém pelo menos duas colunas que atendem aos seguintes critérios:
- a primeira coluna é numérica
(*Int*, Date, DateTime)ou uma string(String, FixedString), vamos chamá-la dekey, - as outras colunas são aritméticas
(*Int*, Float32/64), vamos chamá-las de(values...),
key => (values...) e, ao mesclar suas linhas, os elementos de dois conjuntos de dados são mesclados por key, somando os (values...) correspondentes.
Exemplos:
Map.
Para estruturas de dados aninhadas, não é necessário especificar suas colunas na tupla de colunas usada para a soma.
Agregação de elementos de Tuple
allow_tuple_element_aggregation está habilitada, as colunas Tuple são achatadas recursivamente para que cada elemento final participe da soma de forma independente. Isso permite armazenar várias métricas em uma única coluna Tuple e fazer com que elas sejam somadas elemento por elemento durante as operações de merge.
As mesmas regras se aplicam às subcolunas achatadas e às colunas regulares:
- Apenas subcolunas numéricas são somadas.
- As subcolunas que pertencem a um
Tuplena chave de ordenação ou na chave de partição são excluídas da soma. - Se
columnsfor especificado, apenas as subcolunas das colunasTuplelistadas serão somadas. - Se todas as subcolunas numéricas de uma linha forem zero após a soma, a linha será excluída.
Esta configuração é imutável e deve ser especificada no momento da criação da tabela.