Как мне параллельную прямую загрузку с использованием внешних таблиц Oracle? - PullRequest
4 голосов
/ 05 января 2011

Несколько лет назад Томас Кайт сказал это ( здесь ):

Мое любимое использование внешних столов:

Загрузите этот действительно большой файл как можно скорее. Раньше настраивали сценарии для параллельной прямой загрузки пути. Координировать запуск указанных сценариев. Просмотрите файлы журнала, чтобы убедиться, что все они закончены. Разделите входной файл или используйте skip и загрузите, чтобы разделить файл вверх. Короче, боль в заднице.

Сейчас:

create table ET parallel;
create table new_table (...) parallel
as
select * from ET;

параллельная прямая траектория нагрузки сделана тривиальной.

За исключением того, что это недопустимый синтаксис ...

Как мне использовать внешние таблицы Oracle для выполнения "параллельной загрузки прямого пути"?

1 Ответ

5 голосов
/ 05 января 2011

Параллельные возможности внешних таблиц несколько ограничены.Насколько я знаю, вам нужно либо иметь несколько файлов одного формата, которые можно обрабатывать параллельно (см. Ниже), либо один файл в формате фиксированной длины:

CREATE TABLE WORKING_HOURS_EXT
( employee_id       NUMBER(8), 
  project_id        VARCHAR2(20),
  start_time        VARCHAR2(25), 
  end_time         VARCHAR2(25)
) 
ORGANIZATION EXTERNAL 
( 
  TYPE ORACLE_LOADER 
  DEFAULT DIRECTORY loader_data_dir 
  ACCESS PARAMETERS 
  ( 
    records delimited by newline 
    fields terminated by ';' 
    ( employee_id, project_id, start_time, end_time
    ) 
  ) 
  LOCATION ('hours01.txt', 'hours02.txt', 'hours03.txt') 
) 
PARALLEL;

ALTER SESSION ENABLE PARALLEL DML;

MERGE INTO WORKING_HOURS a
USING WORKING_HOURS_EXT b ON (...
...