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

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

Создайте CSV-файл:

$ vi rows.csv

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

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
)USING MARS3
 DISTRIBUTED BY(c1)
 ORDER BY(time,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
  • Данные вставляются через 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 посредством конвейера (pipeline). mxgate осуществляет загрузку данных в таблицу dest базы данных test методом test.

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

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