Ввод файлов

Ввод файлов — это процесс импорта существующих текстовых файлов с данными в целевую таблицу. Как правило, текстовые файлы имеют формат 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 прост в использовании, однако имеет следующие ограничения:

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

2. MatrixGate

MatrixGate использует высокоскоростной инструмент ввода данных YMatrix — mxgate — для импорта данных.

По сравнению с 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 ',' 

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

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

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