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 
)

Несколько важных моментов:

  1. Поля, которые не идут напрямую в целевую таблицу, надо отметить как FILLER и указать их тип
  2. Загружать можно в том числе и из сжатых файлов
  3. Для файла помимо пути, надо указать на какой ноде он лежит (Vertica - распределённая БД). Соответствие между node_name (v_bi_node0001 - в данном случае) и IP ноды можно найти в таблице nodes
Written on October 10, 2024