Так что мне часто приходится загружать данные в таблицы удержания для выполнения некоторых проверок проверки данных, а затем возвращать результаты. Обычно я создаю таблицу холдинга, затем файл управления sqlldr и загружаю данные в таблицу, затем запускаю свои запросы. Есть ли причина, по которой я должен использовать внешние таблицы для вещей? Каким образом они облегчат мою жизнь?Внешние таблицы и SQLLoader
ответ
Большое преимущество внешних таблиц заключается в том, что мы можем запрашивать их из базы данных с помощью SQL. Таким образом, мы можем просто запустить проверки проверки как инструкции SELECT без необходимости наличия таблицы удержания. Аналогично, если нам нужно сделать некоторые манипуляции с загруженными данными, почти всегда проще сделать это с помощью SQL, а не команд SQLLDR. Мы также можем управлять нагрузками данных с помощью процедур DBMS_JOB/DBMS_SCHEDULER, что дополнительно сокращает необходимость в сценариях оболочки и заданиях cron.
Однако, если у вас уже есть зрелый и стабильный процесс с использованием SQLLDR, то я признаю, что вряд ли вы поймете огромные преимущества от портирования на внешние таблицы.
Есть также некоторые случаи - особенно если вы загружаете миллионы строк, где подход SQLLDR может быть значительно быстрее. Как бы то ни было, разница не будет отличаться от более поздних версий базы данных. Я полностью ожидаю, что SQLLDR в конечном итоге будет устаревшим в пользу внешних таблиц.
Если вы посмотрите на синтаксис внешней таблицы, это выглядит подозрительно, как SQL * Loader файл управления синтаксисом :-)
Если внешняя таблица будет повторно использоваться в нескольких запросах может быть быстрее, чтобы загрузить таблицу (как вы сейчас делаете), а не повторное сканирование внешней таблицы для каждого запроса. Как отмечает @APC, Oracle делает улучшения в них, поэтому в зависимости от вашей версии YMMV.
Подозрительно подобный, хотя и не эквивалентный. :) http://stackoverflow.com/questions/898872/oracle-external-tables-advanced-flat-file-layout –
Хорошая точка. Интересно, сколько SQL * Loader-кода было позади, по крайней мере, начального перехода на внешние таблицы ... – DCookie
@DCookie. Он разработан одной командой :) – BobC
Я бы использовал внешние таблицы для их гибкости.
Легче изменить источник данных на них, чтобы быть в другой файл alter table ... location ('my_file.txt1','myfile.txt2')
Вы можете сделать многотабличные вставки, сливается, запустить его через конвейерную функцию и т.д. ...
Параллельный запрос проще. ..
он также устанавливает зависимости лучше ...
код хранится в базе данных, так что это автоматическое резервное копирование ...
Другое, что вы можете сделать с внешними таблицами, - это чтение сжатых файлов. Если ваши файлы сжаты, например, gzip, вы можете использовать директиву PREPROCESSOR в своем определении внешней таблицы, чтобы распаковывать файлы по мере их чтения.
+1, все хорошие моменты. – DCookie