Skip to content
This repository was archived by the owner on Mar 2, 2025. It is now read-only.

this.db.load

do- edited this page Jun 5, 2023 · 14 revisions

Данный метод осуществляет загрузку строк в указанную таблицу из предоставленного потока (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

Для PostgreSQL данный вызов транслируется в оператор COPY ... FROM STDIN, где раздел WITH формируется из последнего параметра.

Если он не задан, по умолчанию принимается значение {NULL: ''}, то есть текстовый формат с разделителями-символами табуляции и переводом пустых строк в NULL.

Для использования данного метода необходимо включить в проект модуль pg-copy-streams.

ClickHouse

В ClickHouse массовый пакетный ввод является основной предусмотренной операцией изменения данных, так что используется базовый INSERT. Более того, для этой СУБД this.db.insert реализован через внутренний вызов this.db.load.

3-й параметр (список столбцов), помимо массива строк, может быть объектом-копией раздела `columns` описания таблицы. Это имеет смысл при записи потоков объектов во временные таблицы, создаваемые на лету и не имеющие описаний в модели — поскольку ClickHouse может воспринимать значения даты/времени только фиксированной длины (Date — без времени, Timestamp — без дробных секунд), то для корректного формирования текста типы полей необходимо указывать явно.

На момент написания этого текста 4-й параметр (опции) никак не используется.

Для текстовых потоков единственный поддерживаемый формат строк — TSV.

Для потоков объектов имеется следующее техническое ограничение: все значения полей должны быть отформатированы в соответствии с типами соответствующих столбцов. В основном это касается типов, связанных с датами и временем: например, ClickHouse отказывается принимать для Date значения со временем (даже если это 00:00:00), а для DateTime -- какие-либо миллисекунды.

Чтобы форматировать значения автоматически, можно использовать this.db.insert, но это возможно только для таблиц, описанных в модели.

Clone this wiki locally