SELECT используются для выборки данных. По умолчанию запрошенные данные возвращаются клиенту, а в сочетании с INSERT INTO их можно направить в другую таблицу.
Синтаксис
SELECT, о котором подробнее говорится ниже.
Особенности каждой необязательной секции описаны в отдельных разделах, перечисленных в том порядке, в котором они выполняются:
- конструкция WITH
- секция SELECT
- секция DISTINCT
- секция FROM
- предложение SAMPLE
- секция JOIN
- секция PREWHERE
- предложение WHERE
- секция WINDOW
- секция GROUP BY
- предложение LIMIT BY
- секция HAVING
- предложение QUALIFY
- секция LIMIT
- секция OFFSET
- секция UNION
- секция INTERSECT
- оператор EXCEPT
- Предложение INTO OUTFILE
- предложение FORMAT
Секция SELECT
SELECT, вычисляются после завершения всех операций в секциях, описанных выше. Эти выражения вычисляются так, как будто применяются к отдельным строкам результата. Если выражения в секции SELECT содержат агрегатные функции, ClickHouse обрабатывает агрегатные функции и выражения, используемые в качестве их аргументов, во время агрегации GROUP BY.
Если вы хотите включить в результат все столбцы, используйте символ звёздочки (*). Например: SELECT * FROM ....
Динамический выбор столбцов
a.
COLUMNS и применять к ним функции.
Например:
COLUMNS, передаётся в функцию как отдельный аргумент. Кроме того, в функцию можно передавать и другие аргументы, если она их поддерживает. Будьте осторожны при использовании функций. Если функция не поддерживает переданное ей количество аргументов, ClickHouse генерирует исключение.
Например:
COLUMNS('a') возвращает два столбца: aa и ab. COLUMNS('c') возвращает столбец bc. Оператор + нельзя применить к 3 аргументам, поэтому ClickHouse генерирует исключение с соответствующим сообщением.
Столбцы, соответствующие выражению COLUMNS, могут иметь разные типы данных. Если COLUMNS не соответствует ни одному столбцу и является единственным выражением в SELECT, ClickHouse генерирует исключение.
Звёздочка
MATERIALIZED и ALIAS). Есть лишь несколько случаев, когда использование звёздочки оправдано:
- При создании дампа таблицы.
- Для таблиц, содержащих всего несколько столбцов, например системных таблиц.
- Чтобы получить информацию о том, какие столбцы есть в таблице. В этом случае задайте
LIMIT 1. Но лучше использовать запросDESC TABLE. - Когда по небольшому числу столбцов выполняется жёсткая фильтрация с помощью
PREWHERE. - В подзапросах (поскольку столбцы, не нужные для внешнего запроса, из подзапросов исключаются).
Экстремальные значения
XML, JSON*, TabSeparated*, CSV*, Vertical, Template и Pretty* отдельно от остальных строк. Для других форматов они не выводятся.
В форматах JSON* и XML экстремальные значения выводятся в отдельном поле ‘extremes’. В форматах TabSeparated*, CSV* и Vertical эта строка выводится после основного результата и после ‘totals’, если они есть. Перед ней выводится пустая строка (после остальных данных). В форматах Pretty* эта строка выводится в виде отдельной таблицы после основного результата и после totals, если они есть. В формате Template экстремальные значения выводятся в соответствии с указанным шаблоном.
Экстремальные значения вычисляются для строк до LIMIT, но после LIMIT BY. Однако при использовании LIMIT offset, size строки до offset включаются в extremes. В потоковых запросах результат также может включать небольшое количество строк, прошедших через LIMIT.
Примечания
AS) в любой части запроса.
В секциях GROUP BY, ORDER BY и LIMIT BY можно использовать позиционные аргументы. Чтобы включить эту возможность, активируйте настройку enable_positional_arguments. Тогда, например, ORDER BY 1,2 будет сортировать строки таблицы сначала по первому, а затем по второму столбцу.
Подробности реализации
DISTINCT, GROUP BY и ORDER BY, а также подзапросы IN и JOIN, запрос будет полностью обрабатываться в потоковом режиме с использованием O(1) объёма оперативной памяти. В противном случае запрос может потреблять много оперативной памяти, если не заданы соответствующие ограничения:
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
Модификаторы SELECT
SELECT можно использовать следующие модификаторы.
Комбинации модификаторов
SETTINGS в SELECT-запросе
SELECT. Значение настройки применяется только к этому запросу и после его выполнения сбрасывается до значения по умолчанию или предыдущего значения.
О других способах задать настройки см. здесь.
Для логических настроек со значением true можно использовать сокращённый синтаксис, опустив присваивание значения. Если указано только имя настройки, ей автоматически присваивается значение 1 (true).
Пример