SELECT recuperam dados. Por padrão, os dados solicitados são retornados ao cliente, mas, quando usadas em conjunto com INSERT INTO, também podem ser encaminhados para outra tabela.
Sintaxe
SELECT, que é abordada com mais detalhes abaixo.
Os detalhes de cada cláusula opcional são abordados em seções separadas, listadas na mesma ordem em que são executadas:
- cláusula WITH
- cláusula SELECT
- cláusula DISTINCT
- cláusula FROM
- cláusula SAMPLE
- cláusula JOIN
- cláusula PREWHERE
- cláusula WHERE
- cláusula WINDOW
- cláusula GROUP BY
- cláusula LIMIT BY
- cláusula HAVING
- cláusula QUALIFY
- cláusula LIMIT
- cláusula OFFSET
- cláusula UNION
- cláusula INTERSECT
- cláusula EXCEPT
- cláusula INTO OUTFILE
- cláusula FORMAT
Cláusula SELECT
SELECT são calculadas após a conclusão de todas as operações nas cláusulas descritas acima. Essas expressões funcionam como se fossem aplicadas a linhas separadas no resultado. Se as expressões na cláusula SELECT contiverem funções de agregação, o ClickHouse processa as funções de agregação e as expressões usadas como seus argumentos durante a agregação GROUP BY.
Se você quiser incluir todas as colunas no resultado, use o símbolo de asterisco (*). Por exemplo, SELECT * FROM ....
Seleção dinâmica de colunas
a no nome.
COLUMNS em uma consulta e aplicar funções a elas.
Por exemplo:
COLUMNS é passada para a função como um argumento separado. Além disso, você também pode passar outros argumentos para a função, se ela oferecer suporte a eles. Tenha cuidado ao usar funções. Se uma função não oferecer suporte ao número de argumentos que você passou para ela, o ClickHouse lança uma exceção.
Por exemplo:
COLUMNS('a') retorna duas colunas: aa e ab. COLUMNS('c') retorna a coluna bc. O operador + não pode ser aplicado a 3 argumentos, então o ClickHouse lança uma exceção com a mensagem correspondente.
As colunas que correspondem à expressão COLUMNS podem ter tipos de dados diferentes. Se COLUMNS não corresponder a nenhuma coluna e for a única expressão em SELECT, o ClickHouse lança uma exceção.
Asterisco
MATERIALIZED e ALIAS). Há apenas alguns casos em que o uso de um asterisco se justifica:
- Ao criar um dump de uma tabela.
- Em tabelas com poucas colunas, como as tabelas de sistema.
- Para obter informações sobre quais colunas existem em uma tabela. Nesse caso, defina
LIMIT 1. Mas é melhor usar a consultaDESC TABLE. - Quando há uma filtragem forte em um número pequeno de colunas usando
PREWHERE. - Em subconsultas (já que as colunas que não são necessárias para a consulta externa são excluídas das subconsultas).
Valores extremos
XML, JSON*, TabSeparated*, CSV*, Vertical, Template e Pretty*, separadamente das demais linhas. Elas não são exibidas em outros formatos.
Nos formatos JSON* e XML, os valores extremos são exibidos em um campo separado chamado ‘extremes’. Nos formatos TabSeparated*, CSV* e Vertical, a linha aparece após o resultado principal e, se houver, após ‘totals’. Ela é precedida por uma linha vazia (depois dos demais dados). Nos formatos Pretty*, a linha é exibida como uma tabela separada após o resultado principal e, se houver, após totals. No formato Template, os valores extremos são exibidos de acordo com o template especificado.
Os valores extremos são calculados para as linhas antes de LIMIT, mas depois de LIMIT BY. No entanto, ao usar LIMIT offset, size, as linhas antes de offset são incluídas em extremes. Em requisições de stream, o resultado também pode incluir um pequeno número de linhas que passaram por LIMIT.
Observações
AS) em qualquer parte de uma consulta.
As cláusulas GROUP BY, ORDER BY e LIMIT BY podem aceitar argumentos posicionais. Para habilitar isso, ative a configuração enable_positional_arguments. Assim, por exemplo, ORDER BY 1,2 ordenará as linhas da tabela pela primeira e depois pela segunda coluna.
Detalhes de implementação
DISTINCT, GROUP BY e ORDER BY e as subconsultas IN e JOIN, ela será processada inteiramente em fluxo, usando O(1) de RAM. Caso contrário, a consulta poderá consumir muita RAM se os limites adequados não forem especificados:
max_memory_usagemax_rows_to_group_bymax_rows_to_sortmax_rows_in_distinctmax_bytes_in_distinctmax_rows_in_setmax_bytes_in_setmax_rows_in_joinmax_bytes_in_joinmax_bytes_before_external_sortmax_bytes_ratio_before_external_sortmax_bytes_before_external_group_bymax_bytes_ratio_before_external_group_by
Modificadores do SELECT
SELECT.
Combinações de modificadores
SETTINGS na consulta SELECT
SELECT. O valor da configuração é aplicado apenas a essa consulta e, após a execução, volta ao valor padrão ou ao valor anterior.
Para conhecer outras formas de definir configurações, veja aqui.
Para configurações booleanas definidas como true, você pode usar uma sintaxe abreviada, omitindo a atribuição de valor. Quando apenas o nome da configuração é especificado, ela é automaticamente definida como 1 (true).
Exemplo