Cláusula FROM
A FROMcláusula especifica a fonte de leitura dos dados:
Table
Subquery
Table function
As cláusulas JOIN e ARRAY JOIN também podem ser usadas para estender a funcionalidade da FROM cláusula.
Subconsulta é outra SELECTconsulta que pode ser especificada entre parênteses dentro de FROMuma cláusula.
A cláusula FROM pode conter várias fontes de dados, separadas por vírgulas, o que equivale a executar CROSS JOIN nelas.
FINAL
Quando FINAL é especificado, o ClickHouse mescla completamente os dados antes de retornar o resultado. Isso também executa todas as transformações de dados que acontecem durante as mesclagens para o mecanismo de tabela fornecido.
É aplicável ao selecionar dados de tabelas usando os seguintes mecanismos de tabela:
ReplacingMergeTree
SummingMergeTree
AggregatingMergeTree
CollapsingMergeTree
VersionedCollapsingMergeTree
Consultas SELECT com FINAL são executadas em paralelo. A configuração max_final_threads limita o número de threads usados.
Drawbacks
Consultas que usam FINAL são executadas um pouco mais lentamente do que consultas semelhantes que não usam FINAL porque:
Os dados são mesclados durante a execução da consulta.
Consultas com FINAL podem ler colunas de chave primária, além das colunas especificadas na consulta.
FINAL requer recursos adicionais de computação e memória porque o processamento que normalmente ocorreria no momento da mesclagem deve ocorrer na memória no momento da consulta. No entanto, usar FINAL às vezes é necessário para produzir resultados precisos (pois os dados podem ainda não estar totalmente mesclados). É menos dispendioso do que executar OPTIMIZE para forçar uma mesclagem.
Como alternativa ao uso de FINAL, às vezes é possível usar consultas diferentes que assumem que os processos de segundo plano do MergeTreemecanismo ainda não ocorreram e lidar com isso aplicando uma agregação (por exemplo, para descartar duplicatas). Se você precisar usar FINAL em suas consultas para obter os resultados necessários, não tem problema, mas esteja ciente do processamento adicional necessário.
FINAL pode ser aplicado automaticamente usando a configuração FINAL a todas as tabelas em uma consulta usando uma sessão ou um perfil de usuário.
Exemplo
Usando a FINAL palavra-chave
SELECT x, y FROM mytable FINAL WHERE x > 1;
Usando FINAL como uma configuração de nível de consulta
SELECT x, y FROM mytable WHERE x > 1 SETTINGS final = 1;
Usando FINAL como uma configuração de nível de sessão
SET final = 1;
SELECT x, y FROM mytable WHERE x > 1;
Detalhes da implementação
Se a cláusula FROM for omitida, os dados serão lidos da tabela system.one, contém exatamente uma linha (esta tabela cumpre o mesmo propósito que a tabela DUAL encontrada em outros DBMSs).
Para executar uma consulta, todas as colunas listadas na consulta são extraídas da tabela apropriada. Quaisquer colunas que não sejam necessárias para a consulta externa são descartadas das subconsultas. Se uma consulta não listar nenhuma coluna (por exemplo, SELECT count() FROM t), alguma coluna é extraída da tabela de qualquer maneira (a menor é a preferida), para calcular o número de linhas.
Referencias:
FROMClause. Clickhouse.com. Disponível em:
https://clickhouse.com/docs/en/sql-reference/statements/select/from. Acesso em: 05 Jan 2024.