2009-11-20 5 views
7

Так что мне часто приходится загружать данные в таблицы удержания для выполнения некоторых проверок проверки данных, а затем возвращать результаты. Обычно я создаю таблицу холдинга, затем файл управления sqlldr и загружаю данные в таблицу, затем запускаю свои запросы. Есть ли причина, по которой я должен использовать внешние таблицы для вещей? Каким образом они облегчат мою жизнь?Внешние таблицы и SQLLoader

ответ

13

Большое преимущество внешних таблиц заключается в том, что мы можем запрашивать их из базы данных с помощью SQL. Таким образом, мы можем просто запустить проверки проверки как инструкции SELECT без необходимости наличия таблицы удержания. Аналогично, если нам нужно сделать некоторые манипуляции с загруженными данными, почти всегда проще сделать это с помощью SQL, а не команд SQLLDR. Мы также можем управлять нагрузками данных с помощью процедур DBMS_JOB/DBMS_SCHEDULER, что дополнительно сокращает необходимость в сценариях оболочки и заданиях cron.

Однако, если у вас уже есть зрелый и стабильный процесс с использованием SQLLDR, то я признаю, что вряд ли вы поймете огромные преимущества от портирования на внешние таблицы.

Есть также некоторые случаи - особенно если вы загружаете миллионы строк, где подход SQLLDR может быть значительно быстрее. Как бы то ни было, разница не будет отличаться от более поздних версий базы данных. Я полностью ожидаю, что SQLLDR в конечном итоге будет устаревшим в пользу внешних таблиц.

+1

+1, все хорошие моменты. – DCookie

3

Если вы посмотрите на синтаксис внешней таблицы, это выглядит подозрительно, как SQL * Loader файл управления синтаксисом :-)

Если внешняя таблица будет повторно использоваться в нескольких запросах может быть быстрее, чтобы загрузить таблицу (как вы сейчас делаете), а не повторное сканирование внешней таблицы для каждого запроса. Как отмечает @APC, Oracle делает улучшения в них, поэтому в зависимости от вашей версии YMMV.

+1

Подозрительно подобный, хотя и не эквивалентный. :) http://stackoverflow.com/questions/898872/oracle-external-tables-advanced-flat-file-layout –

+0

Хорошая точка. Интересно, сколько SQL * Loader-кода было позади, по крайней мере, начального перехода на внешние таблицы ... – DCookie

+0

@DCookie. Он разработан одной командой :) – BobC

3

Я бы использовал внешние таблицы для их гибкости.

Легче изменить источник данных на них, чтобы быть в другой файл alter table ... location ('my_file.txt1','myfile.txt2')

Вы можете сделать многотабличные вставки, сливается, запустить его через конвейерную функцию и т.д. ...

Параллельный запрос проще. ..

он также устанавливает зависимости лучше ...

код хранится в базе данных, так что это автоматическое резервное копирование ...

0

Другое, что вы можете сделать с внешними таблицами, - это чтение сжатых файлов. Если ваши файлы сжаты, например, gzip, вы можете использовать директиву PREPROCESSOR в своем определении внешней таблицы, чтобы распаковывать файлы по мере их чтения.