Название файлов CITY. csv и MAN. csv, кодировка UTF8. Ниже представлено содержание этих файлов текстовом виде.
1,Москва,10000000
2,Владимир,500000
3,Орел,300000
4,Курск,200000
5,Казань,2000000
7,Котлас,110000
8,Мурманск,400000
9,Ярославль,500000
9152222221,Андрей, Николаев,1,22
9152222222,Максим, Москитов,1,31
9153333333,Олег, Денисов,3,34
9173333334,Алиса, Никифорова,4,31
9173333335,Таня, Иванова,4,31
9213333336,Алексей, Иванов,7,25
9213333331,Андрей, Некрасов,2,27
9213333332,Миша, Рогозин,2,21
9214444444,Алексей, Галкин,1,38
Вы можете создать эти файлы сами с помощью любого текстового редактора. Напоминаю, что кодировка файлов UTF8.
Перед использованием внешних таблиц необходимо создать специальный объект DIRECTORY, указывающий на каталог, где расположены файлы для внешних таблиц.
CREATE OR REPLACE DIRECTORY EXT_TAB_DATA AS ’c:/temp’;
Здесь ext_TAB_DATA — название объекта DIRECTORY;
AS ’c:/TEMP» — каталог, где расположены файлы для формирования внешних таблиц.
Далее формируем временные таблицы.
Создаем таблицу для файла CITY. csv:
Здесь CITY_EXT — название таблицы;
• TYPE — драйвер загрузки;
• DEFAULT DIRECTORY — объект-директория, которую мы создали;
• ACCESS PARAMETERS — параметры загрузки файла, см. документацию к LOADER;
• LOCATION — название файла, на основе которого создается внешняя таблица.
Создаем таблицу для файла MAN. csv:
Здесь CITY_EXT — название таблицы;
• TYPE — драйвер загрузки;
• DEFAULT DIRECTORY — объект-директория, который мы создали;
• ACCESS PARAMETERS — параметры загрузки файла, см. документацию к LOADER;
• LOCATION — название файла, на основе которого создается внешняя таблица.
Обращаемся к таблицам, которые мы создали, с помощью запроса:
Используем агрегатную функцию и группировку данных.
Соединяем внешнюю таблицу и обычную таблицу в запросе.
Используем аналитический SQL.
• Для внешних таблиц могут создаваться представления и синонимы.
• Кодировка файлов во внешних таблицах должна совпадать с кодировкой базы данных.
• На папки, в которых собираются файлы для подготовки внешних таблиц, администратор системы должен выдать специальное разрешение на чтение пользователю, из-под которого устанавливалась ORACLE СУБД.
• Вешние таблицы неэффективны при частом обращении к этим таблицам в высоконагруженных проектах; для таких проектов следует искать другое решение.
Где еще используются на практике внешние таблицы?
Довольно часто внешние таблицы используются при обмене данными между системами.
Где можно посмотреть материалы по ACCESS PARAMETERS?
В описании SQLLoader на сайте ORACLE.
В разобранном примере используется драйвер SQLLoader. Можно ли использовать другие драйвера?
Да, например можно для загрузки данных воспользоваться драйвером DATAPUMP.
Можно ли загрузить данные из внешней таблицы в обычную таблицу?
Да, и на этой возможности основано довольно много ETL (процедур загрузки).
Пример — следующий запрос создаст таблицу CITYcCODE:
Запрос добавляет в эту таблицу данные, не забудьте завершить запрос операцией COMMIT.
Контрольные вопросы и задания для самостоятельного выполнения
1. Изучите материалы данного шага.
2. Выгрузите таблицу AUTO в CSV-файл, перенесите получившийся файл в каталог TEMP.
3. Создайте внешнюю таблицу для созданного файла.
4. Напишите запрос к созданной таблице, группирующий авто по марке и считающий количество цветов заданной марки авто.
5. Создайте на основе этого запроса таблицу.
6. Перегрузите данные из внешнего файла в таблицу, используя SQL-запрос.
Шаг 96. Оптимизатор запросов, чтение плана запроса
Любой SQL-запрос выполняется по заданному плану. В плане выполнения запроса описывается последовательность операций для доступа к данным, особенности использования, последовательность операций сортировок и объединения строк таблиц. Профессиональный SQL-разработчик должен уметь читать план запроса, чтобы оценить эффективность выполнения запроса.
План запроса строит оптимизатор ORACLE, задача разработчика — анализируя план запроса, найти проблемные места в производительности и постараться решить проблемы.
Для того чтобы посмотреть план запроса, необходимо выполнить команду:
EXPLAIN PLAN FOR SELECT FIRSTNAME, LASTNAME FROM MAN WHERE CITYCODE> 1; — или любой другой запрос
Читать дальше
Конец ознакомительного отрывка
Купить книгу