input(structure) — табличная функция, которая позволяет эффективно преобразовывать и вставлять данные, отправленные на
сервер с заданной структурой, в таблицу с другой структурой.
structure — структура данных, отправляемых на сервер, в следующем формате: 'column1_name column1_type, column2_name column2_type, ...'.
Например, 'id UInt32, name String'.
Эту функцию можно использовать только в запросе INSERT SELECT и только один раз, но в остальном она ведет себя как обычная табличная функция
(например, ее можно использовать в подзапросе и т. д.).
Данные можно отправлять любым способом, как и для обычного запроса INSERT, и передавать в любом доступном формате,
который должен быть указан в конце запроса (в отличие от обычного INSERT SELECT).
Основная особенность этой функции заключается в том, что, когда сервер получает данные от клиента, он одновременно преобразует их
в соответствии со списком выражений в предложении SELECT и вставляет в целевую таблицу. Временная таблица
со всеми переданными данными не создается.
- Пусть таблица
test имеет следующую структуру (a String, b String),
а данные в data.csv — другую структуру (col1 String, col2 Date, col3 Int32). Запрос на вставку
данных из data.csv в таблицу test с одновременным преобразованием выглядит следующим образом:
$ cat data.csv | clickhouse-client --query="INSERT INTO test SELECT lower(col1), col3 * col3 FROM input('col1 String, col2 Date, col3 Int32') FORMAT CSV";
- Если
data.csv содержит данные той же структуры test_structure, что и в таблице test, то эти два запроса эквивалентны:
$ cat data.csv | clickhouse-client --query="INSERT INTO test FORMAT CSV"
$ cat data.csv | clickhouse-client --query="INSERT INTO test SELECT * FROM input('test_structure') FORMAT CSV"
Последнее изменение 10 июня 2026 г.