FROM Clause
Клауза FROM
указывает источник для чтения данных:
Клаузы JOIN и ARRAY JOIN также могут быть использованы для расширения функциональности клаузы FROM
.
Подзапрос — это другой запрос SELECT
, который может быть указан в скобках внутри клаузы FROM
.
FROM
может содержать несколько источников данных, разделённых запятыми, что эквивалентно выполнению CROSS JOIN над ними.
FROM
может опционально появляться перед клаузой SELECT
. Это специфическое для ClickHouse расширение стандартного SQL, которое делает предложения SELECT
более читаемыми. Пример:
FINAL Modifier
Когда указано FINAL
, ClickHouse полностью объединяет данные перед возвратом результата. Это также выполняет все преобразования данных, которые происходят во время объединений для данного движка таблицы.
Это применимо при выборке данных из таблиц, используя следующие движки таблицы:
ReplacingMergeTree
SummingMergeTree
AggregatingMergeTree
CollapsingMergeTree
VersionedCollapsingMergeTree
Запросы SELECT
с FINAL
выполняются параллельно. Настройка max_final_threads ограничивает количество используемых потоков.
Drawbacks
Запросы, которые используют FINAL
, выполняются немного медленнее, чем аналогичные запросы, не использующие FINAL
, потому что:
- Данные объединяются во время выполнения запроса.
- Запросы с
FINAL
могут читать столбцы первичного ключа в дополнение к столбцам, указанным в запросе.
FINAL
требует дополнительных вычислительных и оперативных ресурсов, так как обработка, которая обычно происходит во время объединения, должна происходить в памяти во время запроса. Однако, использование FINAL
иногда необходимо для получения точных результатов (так как данные могут ещё не быть полностью объединены). Это менее затратно, чем запуск OPTIMIZE
, чтобы принудить объединение.
В качестве альтернативы использованию FINAL
, иногда возможно использовать разные запросы, которые предполагают, что фоновые процессы движка MergeTree
ещё не произошли, и справиться с этим, применяя агрегацию (например, для отбрасывания дубликатов). Если вам необходимо использовать FINAL
в ваших запросах для получения требуемых результатов, вы можете это сделать, но будьте готовы к дополнительной обработке.
FINAL
может быть автоматически применен с использованием настройки FINAL ко всем таблицам в запросе с использованием сессии или профиля пользователя.
Example Usage
Использование ключевого слова FINAL
Использование FINAL
как настройки уровня запроса
Использование FINAL
как настройки уровня сессии
Implementation Details
Если клаузу FROM
пропустить, данные будут считываться из таблицы system.one
. Таблица system.one
содержит ровно одну строку (эта таблица выполняет ту же функцию, что и таблица DUAL, встречающаяся в других СУБД).
Для выполнения запроса все столбцы, указанные в запросе, извлекаются из соответствующей таблицы. Любые столбцы, не необходимые для внешнего запроса, отбрасываются из подзапросов. Если в запросе не перечислены столбцы (например, SELECT count() FROM t
), какой-то столбец всё равно извлекается из таблицы (предпочтительно самый маленький), чтобы рассчитать количество строк.