A cláusula FROM especifica a origem de onde os dados serão lidos:
As cláusulas JOIN e ARRAY JOIN também podem ser usadas para estender a funcionalidade da cláusula FROM.
Uma subconsulta é outra consulta SELECT que pode ser especificada entre parênteses dentro da cláusula FROM.
Uma cláusula VALUES padrão do SQL também pode ser usada como expressão de tabela:
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);
Veja a função de tabela Values para mais detalhes.
O FROM pode conter várias fontes de dados, separadas por vírgulas, o que equivale a fazer CROSS JOIN entre elas.
FROM também pode aparecer opcionalmente antes de uma cláusula SELECT. Esta é uma extensão do SQL padrão específica do ClickHouse que torna as instruções SELECT mais fáceis de ler. Exemplo:
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 ocorrem durante as mesclagens no motor de tabela em questão.
Ele se aplica à seleção de dados de tabelas que usam os seguintes motores 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.
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 da chave primária além das colunas especificadas na consulta.
FINAL exige recursos adicionais de computação e memória porque o processamento que normalmente ocorreria no momento da mesclagem precisa acontecer na memória durante a consulta. No entanto, às vezes é necessário usar FINAL para produzir resultados precisos (já que os dados podem ainda não ter sido totalmente mesclados). Isso é menos custoso do que executar OPTIMIZE para forçar uma mesclagem.
Como alternativa ao uso de FINAL, às vezes é possível usar consultas diferentes que partem do pressuposto de que os processos em segundo plano do engine MergeTree 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 há problema em fazer isso, mas esteja ciente do processamento adicional exigido.
FINAL pode ser aplicado automaticamente a todas as tabelas de uma consulta usando a configuração FINAL, por meio de uma sessão ou de um perfil de usuário.
Uso da palavra-chave FINAL
SELECT x, y FROM mytable FINAL WHERE x > 1;
Usando FINAL como configuração em nível de consulta
SELECT x, y FROM mytable WHERE x > 1 SETTINGS final = 1;
Usar FINAL como configuração em nível de sessão
SET final = 1;
SELECT x, y FROM mytable WHERE x > 1;
Detalhes de implementação
Se a cláusula FROM for omitida, os dados serão lidos da tabela system.one.
A tabela system.one contém exatamente uma linha (ela tem a mesma finalidade da tabela DUAL encontrada em outros SGBDs).
Para executar uma consulta, todas as colunas listadas na consulta são extraídas da tabela apropriada. As colunas que não forem 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), ainda assim alguma coluna será extraída da tabela (de preferência, a menor), para calcular o número de linhas. Última modificação em 10 de junho de 2026