Поддержка преобразования данных непосредственно во время вставки
Компания | Яндекс |
Учебный семестр | Осень 2018 |
Учебный курс | 3-4-й курс |
Максимальное количество студентов, выбравших проект: ? | |
Иногда у пользователя есть файл с данными некоторой структуры, и ему нужно загрузить их в таблицу в ClickHouse другой структуры. Это легко решается с помощью временной таблицы:
- создаётся временная таблица такой же структуры, что и исходные данные; туда загружаются данные из файла; а затем вставляются в результирующую таблицу с одновременным преобразованием, с помощью запроса INSERT SELECT.
Но это - довольно громоздкое решение. Было бы лучше сделать так, чтобы данные преобразовывались прямо во время загрузки. Это можно представить в виде запроса INSERT SELECT из загружаемого потока данных:
INSERT INTO table (a, b) SELECT x, y + z FROM input(x UInt64, y Int32, z Int32)
Также можно рассмотреть ограниченные варианты. Например, игнорирование отдельных столбцов при загрузке из файла:
INSERT INTO table (a, IGNORE String, b) - при чтении будет игнорироваться второй столбец из файла (который будет считываться как столбец типа String).