Внешние таблицы против SQLLoader
поэтому мне часто приходится загружать данные в таблицы хранения, чтобы выполнить некоторые проверки проверки данных, а затем вернуть результаты. Обычно я создаю таблицу хранения, затем файл управления sqlldr и загружаю данные в таблицу, затем запускаю свои запросы. Есть ли причина, по которой я должен использовать внешние таблицы вместо этого? Каким образом они облегчат мою жизнь?
4 ответов
большим преимуществом внешних таблиц является то, что мы можем запросить их из базы данных с помощью SQL. Таким образом, мы можем просто запускать проверки проверки как операторы SELECT без необходимости в таблице хранения. Аналогично, если нам нужно выполнить некоторые манипуляции с загруженными данными, это почти всегда проще сделать с помощью SQL, а не команд SQLLDR. Мы также можем управлять загрузкой данных с помощью подпрограмм DBMS_JOB/DBMS_SCHEDULER, что дополнительно сокращает потребность в скриптах оболочки и cron джобс.
однако, если у вас уже есть зрелый и стабильный процесс с использованием SQLLDR, то я допускаю, что вряд ли вы поймете огромные преимущества от переноса на внешние таблицы.
есть также некоторые случаи, особенно если вы загружаете миллионы строк, где подход SQLLDR может быть значительно быстрее. Howver, разница не будет отмечена более поздними версиями базы данных. Я полностью ожидаю, что SQLLDR в конечном итоге будет устаревшим в предпочтение внешних таблиц.
Если вы посмотрите на синтаксис внешней таблицы, он подозрительно похож на синтаксис файла управления SQL * Loader: -)
Если ваша внешняя таблица будет многократно использоваться в нескольких запросах, может быть быстрее загрузить таблицу (как вы делаете сейчас), а не повторно сканировать внешнюю таблицу для каждого запроса. Как отмечает @APC, Oracle вносит в них улучшения, поэтому в зависимости от вашей версии БД YMMV.
Я бы использовал внешние таблицы для их гибкости.
легче изменить источник данных на другой файл alter table ... location ('my_file.txt1','myfile.txt2')
вы можете делать многопозиционные вставки, слияния,запускать его через конвейерную функцию и т. д...
параллельный запрос проще ...
Он также лучше устанавливает зависимости ...
код хранится в базе данных, поэтому он автоматически резервное копирование ...
еще одна вещь, которую вы можете сделать с внешними таблицами, - это чтение сжатых файлов. Если ваши файлы сжаты, например, gzip, вы можете использовать директиву препроцессора в определении внешней таблицы для распаковки файлов по мере их чтения.