copy from file с обработкой данных
Наткнулся в Vertica на интересную фишку - обработка данных при загрузке из файла,
Условно - есть файл .csv, там три колонки - (id, a, b), а нам в итоге надо получить две - (id, a + b). В Greenplum пришлось бы использовать промежуточную таблицу - чтобы выгрузить данные AS IS, а уже следующим шагом сделать трансформацию. В Vertica это можно сделать сразу на этапе загрузки
COPY table(
id,
f_a FILLER INT,
f_b FILLER INT,
rez AS f_a + f_b
FROM '/tmp/file.csv.gz' ON v_bi_node0001
)
Несколько важных моментов:
- Поля, которые не идут напрямую в целевую таблицу, надо отметить как FILLER и указать их тип
- Загружать можно в том числе и из сжатых файлов
- Для файла помимо пути, надо указать на какой ноде он лежит (Vertica - распределённая БД). Соответствие между node_name (v_bi_node0001 - в данном случае) и IP ноды можно найти в таблице nodes
Written on October 10, 2024