-
Notifications
You must be signed in to change notification settings - Fork 17
this.db.load
Данный метод осуществляет загрузку строк в указанную таблицу из предоставленного потока (Readable).
try {
await this.db.load (
fs.createReadStream (fn),
'my_table',
['id', 'label'],
{ENCODING: 'utf-8', NULL: ''}
)
}
catch (x) {
darn (x)
}
Поток может быть:
- символьным:
- тогда в норме он представляет собой последовательность строк, оканчивающихся на
\n, с разделителями записей\t;
- тогда в норме он представляет собой последовательность строк, оканчивающихся на
- объектным:
- тогда его элементы соответствуют добавляемым записям (ключи -- имена столбцов), причём сохраняются только поля из списка, указанного в 3-м параметре.
Для PostgreSQL данный вызов транслируется в оператор COPY ... FROM STDIN, где раздел WITH формируется из последнего параметра.
Если он не задан, по умолчанию принимается значение {NULL: ''}, то есть текстовый формат с разделителями-символами табуляции и переводом пустых строк в NULL.
Для использования данного метода необходимо включить в проект модуль pg-copy-streams.
В ClickHouse массовый пакетный ввод является основной предусмотренной операцией изменения данных, так что используется базовый INSERT. Более того, для этой СУБД this.db.insert реализован через внутренний вызов this.db.load.
3-й параметр (список столбцов), помимо массива строк, может быть объектом-копией раздела `columns` описания таблицы. Это имеет смысл при записи потоков объектов во временные таблицы, создаваемые на лету и не имеющие описаний в модели — поскольку ClickHouse может воспринимать значения даты/времени только фиксированной длины (Date — без времени, Timestamp — без дробных секунд), то для корректного формирования текста типы полей необходимо указывать явно.
На момент написания этого текста 4-й параметр (опции) никак не используется.
Для текстовых потоков единственный поддерживаемый формат строк — TSV.
Для потоков объектов имеется следующее техническое ограничение: все значения полей должны быть отформатированы в соответствии с типами соответствующих столбцов. В основном это касается типов, связанных с датами и временем: например, ClickHouse отказывается принимать для Date значения со временем (даже если это 00:00:00), а для DateTime -- какие-либо миллисекунды.
Чтобы форматировать значения автоматически, можно использовать this.db.insert, но это возможно только для таблиц, описанных в модели.