Мельница данных  (01.05.2024)
Загрузка данных из внешнего файла

Firebird
Чтобы использовать загрузку из внешнего файла, необходимо, чтобы одновременно выполнялись следующие условия:
  • Сервер БД выполняется на том же хосте, на котором происходит запуск dbsetup.exe (в строке соединения хост не указан, указан как localhost, указан как 127.0.0.1, указан так, чтобы совпадать с результатом вызова функции gethostname).
  • Временная папка процесса dbsetup.exe (переменная окружения %TMP%) доступна сервису Firebird как источник внешних данных (в конфигурации FireBird - параметр ExternalFileAccess).
  • Таблица не содержит полей типа BLOB.
  • Таблица не содержит обнуляемых полей, все поля таблицы обязательные.
  • Загружаемый блок содержит как минимум 1000 записей.
В этом случае во временной папке будет создан временный файл, содержащий загружаемые данные в требуемом Firebird формате, и выполнены операторы:
1create table "DML..." external '.....'
2  ("ID" BIGINT,
3  ....);
4insert into "..."("ID", ...)
5  select "ID", ....
6  from "DML....";
7drop table "DML....";
    
После чего временный файл будет удален.

Oracle
Чтобы использовать загрузку из внешнего файла, необходимо, чтобы одновременно выполнялись следующие условия:
  • Сервер БД выполняется на том же хосте, на котором происходит запуск dbsetup.exe (в строке соединения хост не указан, указан как localhost, указан как 127.0.0.1, указан так, чтобы совпадать с результатом вызова функции gethostname).
  • Владельцу данных доступна на чтение и запись хотя бы одна папка (directory). Этого можно достичь, например, такими операторами:
    Пример
    1CREATE DIRECTORY dir_name AS 'D:\TEMP';
    2GRANT READ,WRITE ON DIRECTORY dir_name TO user_name;
              
    При этом папка (на диске) должна быть доступна на запись процессу dbsetup.exe.
  • Оператор
    01create table "DML...."
    02(
    03 ....
    04) ORGANIZATION EXTERNAL (
    05  DEFAULT DIRECTORY ....
    06  ACCESS PARAMETERS (
    07    RECORDS DELIMITED BY NEWLINE
    08    FIELDS TERMINATED BY '....'
    09  )
    10  LOCATION ('DML.....')
    11)
            
    выполняется без ошибок. Созданная при этом таблица доступна для чтения.
  • Таблица не содержит полей типа BLOB.
  • Загружаемый блок содержит как минимум 1000 записей.
В этом случае в папке, которая доступна, будет создан временный файл, содержащий загружаемые данные в требуемом Oracle формате, и выполнены операторы:
1create table "DML....."
2(
3 ....
4) ORGANIZATION EXTERNAL (
5....);
6insert into "..."("ID", ...)
7  select "ID", ....
8  from "DML....";
9drop table "DML....";
    
После чего временный файл будет удален.

Postgres
Чтобы использовать загрузку из внешнего файла, необходимо, чтобы одновременно выполнялись следующие условия:
  • Сервер БД выполняется на том же хосте, на котором происходит запуск dbsetup.exe (в строке соединения хост не указан, указан как localhost, указан как 127.0.0.1, указан так, чтобы совпадать с результатом вызова функции gethostname).
  • Временная папка процесса dbsetup.exe (переменная окружения %TMP%) доступна сервису PostgreSQL как источник внешних данных.
В этом случае в папке, которая доступна, будет создан временный файл, содержащий загружаемые данные в требуемом Postgres формате. В случае, когда размер файла превысит 1GB, а также по исчерпании источника, будет выполнен оператор
  copy "..."(...) from %TEMP%\DML....CSV with (format csv, encoding UTF8)
    
После чего временный файл будет удален.

Механизм может быть принудительно заблокирован ключем /NOCSV.