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"