Доступ к файлам

Доступ к файлам означает импорт существующих текстовых файлов данных в целевую таблицу. Как правило, текстовые файлы находятся в формате CSV.

Формат тестового файла CSV следующий: первая строка — это заголовок (HEADER), далее идут строки с данными. Типы трёх столбцов — временная метка, целое число и строка:

time,c1,c2
2021-01-01 00:00:00,1,a1
2021-01-01 00:00:00,2,a2
2021-01-01 00:00:00,3,a3

Целевая база данных — test, а схема целевой таблицы dest следующая, что соответствует формату CSV-файла:

CREATE TABLE dest(
    time timestamp,
    c1 int,
    c2 text
)DISTRIBUTED BY(c1);

Ниже приведены несколько часто используемых способов импорта содержимого файла в целевую таблицу:


1. COPY

Команда COPY — это SQL-команда, входящая в состав YMatrix, позволяющая импортировать файлы данных с узла Master (мастера) в целевую таблицу.

Сначала подключитесь к целевой базе данных с помощью psql, затем выполните команду COPY.

[mxadmin@mdw ~]$ psql test
psql (12)
Type "help" for help.

test=# COPY dest FROM '/home/mxadmin/rows.csv' DELIMITER ',' HEADER;
COPY 3

Параметр DELIMITER задаёт разделитель; HEADER указывает на необходимость фильтрации заголовка файла при импорте данных.

Метод COPY достаточно прост в использовании, однако имеет следующие недостатки:

  • Файл данных должен находиться на узле Master
  • Данные вставляются через мастер, аналогично пакетной вставке INSERT, что при большом объёме данных приводит к проблемам с производительностью

2. MatrixGate

Метод MatrixGate заключается в использовании высокоскоростного инструмента доступа к данным mxgate, предоставляемого YMatrix, для импорта данных.

По сравнению с COPY, mxgate демонстрирует лучшую производительность при большом объёме данных, кроме того, файлы данных и мастер могут быть развернуты отдельно.

tail -n +2 rows.csv | mxgate --source stdin --db-database test --db-master-host localhost --db-master-port 5432 --db-user mxadmin --time-format raw --target public.dest --parallel 2 --delimiter ',' 

Приведённая выше команда передаёт данные из файла rows.csv в mxgate посредством конвейера (pipe). mxgate выполняет загрузку данных в таблицу dest базы данных test методом test.

Внимание!
Так как mxgate не требует наличия заголовков в файле при загрузке данных, команда tail -n +2 используется для вывода данных, начиная со второй строки.

Более подробную информацию об использовании mxgate см. в документации