Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаба 4 Утилиты перемещения данных

.doc
Скачиваний:
14
Добавлен:
15.06.2014
Размер:
94.21 Кб
Скачать

Лабораторная работа №4: «Утилиты перемещения данных»

Теоретические сведения

Утилита экспортирования данных «EXPORT» перемещает данные из базы данных в файл операционной системы, заданного формата. Возможен один из следующих форматов файла:

  • PC/IXF – PC – версия Integrated Exchange Format, предпочтителен для менеджера баз данных. Структурированное описание таблицы базы данных, которое содержит внешнее представление внутренней таблицы. При использовании этого формата нет необходимости в существовании таблицы к началу операции. UDTs (User Defined Types) не восстанавливаются, вместо них используются базовые типы данных.

  • WSF – Work-sheet формат для обмена данными с такими продуктами, как Lotus 1-2-3 и Symphony. Этот формат файла не поддерживает утилита load.

  • DEL – ограниченный ASCII формат, где пользователем определяются типы разделителей значений колонок.

  • ASC – неограниченный ASCII формат, где данные в файле выровнены по колонкам.

При экспортировании данных необходима следующая информация:

  1. SQL-выражение, специфицирующее выборку данных для экспорта;

  2. Путь и имя файла операционной системы для размещения в него экспортированных данных;

  3. Формат данных выходного файла. Один из трех.

  4. Имя и путь файла сообщений;

  5. Дополнительные параметры, определяемые форматом выходного файла (разделители, имена колонок и др.).

Утилита Export может быть вызвана:

    1. из CLP (Command Line Processor):

DB2 EXPORT TO staff.ixf OF IXF SELECT * FROM db2admin.staff

    1. из диалога Control Center. Вызывается для соответствующей таблицы базы данных.

Синтаксис команды экспортирования данных:

<export command> ::=

EXPORT TO <file name> OF <file type>

[ METHOD N <(> <column name> [<,> <column name>...] <)> ]

[ MESSAGES <message file>]

{ <select statement> |

{ HIERARCHY { STARTING <sub-table name> | <traversal order list> }

[ <where clause> ]

}

}

<traversal order list> ::=

<(> <sub-table name> [<,> <sub-table name>...] <)>

HIERARCHY traversal order list означает экспорт подтаблиц в заданном порядке. Первая таблицы из списка используется как целевая таблица.

MESSAGES message-file файл, в котором сохраняются сообщения об ошибках при экспортировании.

METHOD N column-name специфицирует одну или несколько колонок в результирующем файле. Если колонки не специфицированы, то используются табличные. Этот параметр валиден только для формата WSF и IXF.

OF filetype специфицирует тип результирующего файла.

select-statement возвращает данные, которые будут экспортированы.

TO filename имя файла, куда будут экспортированы данные. Если путь не специфицирован, то данные сохраняются в “drive\Windows directory\system32”.

Утилита импортирования данных «IMPORT» перемещает данные из файла заданного формата в базу данных.

При использовании WSF, DEL и ACS форматов файла таблица, включая имена колонок и типы данных, должна быть создана до операции импортирования. Типы данных операционной системы конвертируются в соответствующие типы таблицы базы данных.

Синтаксис команды импортирования данных:

<import command> ::=

IMPORT FROM <file name> OF <file type>

[ METHOD { N <(> <column name> [<,> <column name>...] <)> } |

{ L <(> <column start> <column end>

[<,> <column start> <column end>] <)>

[NULL INDICATORS <(> <n> [<,> <n>...] <)>]} |

{ P <(> <column position> [<,><column position>...] <)> }

]

[ MESSAGES <message file>]

{ INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE

INTO <table name> [<(> <insert column> [<,><insert column>...] <)>]

} |

CREATE INTO <table name>

[<(> <insert column> [<,> <insert column>...] <)>]

CREATE создает в базе таблицу и наполняет указанными данными.

FROM file name специфицирует файл, содержащий данные, которые необходимо импортировать.

Insert column специфицирует колонки целевой таблицы, в которые данные будут импортироваться.

INSERT добавляет импортируемые данные в таблицу без изменения уже существующих там данных.

INSERT_UPDATE добавляет новые данные в таблицу, если первичные ключи совпадают, то происходит модификация старых данных.

INTO table name специфицирует таблицу базы данных, в которые данные будут импортированы. Для INSERT, INSERT_UPDATE или REPLACE может быть использован псевдоним.

METHOD L специфицирует номер начала и номер конца колонки, из которой необходимо импортировать данные. Может быть использован только для ASC формата.

METHOD P специфицирует номера импортируемых колонок. Данный метод может быть использован только для IXF или DEL форматов.

NULL INDICATORS n специфицирует номером индикатор нулевых значений для одной или нескольких колонок в файле данных. Если n=0, то колонка не может содержать нулевых значений. “Y” указывает на то, что колонка содержит нулевое значение. “N” указывает на то, что колонка не содержит нулевых значений.

REPLACE удаляет все данные, содержащиеся в таблице и импортирует новые. Может использоваться только когда таблица существует в базе.

REPLACE_CREATE удаляет все данные, содержащиеся в таблице и импортирует новые. Если таблицы в базе данных не существует, то создается новая, соответствующая данным в импортируемом файле.

Пример команды IMPORT:

DB2 IMPORT FROM myfile.ixf OF IXF MESSAGES msg.txt INSERT INTO staff

Утилита загрузки данных «LOAD» используется для эффективного перемещения больших объемов данных в таблицы базы данных. Утилита позволяет импортирвать все типы данных, в том числе LOB (Large Object) и UDT (User Define Types). Утилита Load быстрее, чем утилита Import, т.к. она записывает форматированные страницы напрямую в базу данных, в то время как утилита Import выполняет SQL Insert. При использовании утилиты не происходит запуск триггеров, а также проверки ссылочных и check ограничений. Загружаемые данные должны быть размещены непосредственно локально, в то время как утилиты Export и Import позволяют работать с данными удаленно. Процесс загрузки данных состоит из трех последовательных фаз:

  1. Load, во время которой данные записываются в таблицы. Устанавливаются точки сохранения данных, которые специфицированы в параметре SAVECOUNT команды LOAD. Генерируются сообщения о количестве строк, загруженных в течение заданного интервала между точками сохранения. Если произошел сбой, то команду Load необходимо перезапустить. Данные начнут загружаться с момента последней точки сохранения.

  2. Build, во время которой осуществляется построение индексов. Если строки не удовлетворяют условию уникальности, то они отклоняются. Сообщение об этих строках записывается в файл сообщений. Однако сами строки удаляются на следующей фазе.

  3. Delete, во время которой строки, которые не удовлетворяют условию уникальности удаляются.

Примеры использования утилиты Load:

Пример 1:

DB2 LOAD FROM stafftab.ixf OF IXF MESSAGES staff.msgs INSERT INTO userid.staff

Пример 2:

DB2 LOAD FROM delfile1 OF DEL METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9)

INSERT INTO table1 (BLOB1, S2, I3, Int 4, I5, I6, DT7, I8, TM9)

Пример 3:

TABLE1 включает 5 колонок:

v COL1 VARCHAR 20 NOT NULL WITH DEFAULT

v COL2 SMALLINT

v COL3 CHAR 4

v COL4 CHAR 2 NOT NULL WITH DEFAULT

v COL5 CHAR 2 NOT NULL

ASCFILE1 включает 6 записей:

ELE1 позиции 01 to 20

ELE2 позиции 21 to 22

ELE5 позиции 23 to 23

ELE3 позиции 24 to 27

ELE4 позиции 28 to 31

ELE6 позиции 32 to 32

ELE6 позиции 33 to 40

Записи с данными в загружаемом файле:

1... 5.... 10... 15... 20... 25... 30...35...40

Test data 1 XXN 123abcdN

Test data 2 and 3 QQY wxyzN

Test data 4,5 and 6 WWN6789 Y

Для того чтобы загрузить данные из рассматриваемого файла в заданную таблицу необходимо выполнить следующую команду:

DB2 LOAD FROM ascfile1 OF ASC MODIFIED BY striptblanks reclen=40

METHOD L (1 20, 21 22, 24 27, 28 31)

NULL INDICATORS (0,0,23,32)

INSERT INTO table1 (col1, col5, col2, col3)

Спецификатор striptblanks в параметре MODIFIED BY означает обрезание пробелов в колонках типа VARCHAR. Например, Col1 содержит данные разной длины: 11, 17 и 19 байт в первой, второй и третьей строке соответственно.

Спецификатор reclen=40 в параметре MODIFIED BY означает, что в конце каждой записи нет символа конца строки и каждая запись имеет длину 40 байт. Последние 8 байт не используются для загрузки таблицы.

Контрольные вопросы:

  1. В каком формате находится файл со следующими данными:

Smith, Bob 4973 15.46

Jones, Suzanne 12345 16.34

Williams, Sam 452123 193.78

  1. В каком формате находится файл со следующими данными:

"Smith, Bob",4973,15.46

"Jones, Bill",12345,16.34

"Williams, Sam",452,193.78

  1. Что означают методы импортирования L, N и P? Приведите примеры.

  2. Продемонстрируйте на компьютере, как из CLP вызывается команда экспортирования таблицы в файл.

  3. Где можно размещать файлы для утилит Import, Export и Load?

  4. Какая команда работает быстрее Import или Load и почему?

  5. Какие ограничения проверяются при использовании утилиты Load: уникальность, check-ограничения, ссылочные ограничения?

  6. Поясните разницу в режимах импортирования INSERT, INSERT_UPDATE, REPLACE и REPLACE_CREATE?

  7. Должна ли существовать таблица(ы) в базе данных к началу операции Import?

  8. Должна ли существовать таблица(ы) в базе данных к началу операции Load?

  9. Можно ли экспортировать данные из нескольких таблиц? Если можно, то поясните как?

Задание:

В каждом варианте индивидуального задания описаны операции Import (или Load) и Export, которые необходимо реализовать на SQL. Исходные таблицы хранятся в базе данных Sample. Последовательность выполнения варианта индивидуального задания следующая:

  • экспортировать указанную таблицу в файл заданного формата;

  • отредактировать выходной файл в соответствии с заданием;

  • создать новую таблицу в базе данных, аналогичную исходной, в соответствии с экспортируемыми колонками;

  • импортировать (или загрузить) отредактированный файл в новую таблицу.

Варианты индивидуальных заданий:

  1. Экспортировать колонки deptno, deptname и admrdept из таблицы department в файл в формате ASC. В файле вручную добавить следующую запись: (‘F11’, ‘SALES DEPARTMENT’, ‘A00’). Создать новую таблицу office, соответствующую данным в файле. Импортировать измененный файл в новую таблицу office, используя соответствующий метод импортирования.

  2. Экспортировать все колонки из таблицы staff в файл в формате ASC. В файле модифицировать строки с 3 – 5, 6 – 7, 33 – 35. Импортировать модифицированный файл в новую таблицу office, используя соответствующий метод импортирования.

  3. Экспортировать колонки deptno, deptname и admrdept из таблицы department в файл в формате DEL. В файле вручную добавить колонку mgrno и запись: deptno = ‘F11’, deptname = ‘SALES DEPARTMENT’, admrdept = ‘A00’, mgrno = ‘000100’. Создать новую таблицу office, соответствующую данным в файле. Импортировать измененный файл в новую таблицу office, используя соответствующий метод импортирования.

  4. Экспортировать все колонки из таблицы org в файл в формате IXF. В файле вручную добавить запись: (88, ‘Great Hills’, 50, ‘Western’, ‘Denver’). Создать новую таблицу office, соответствующую данным в файле. Импортировать файл в новую таблицу office, используя соответствующий метод импортирования.

  5. Экспортировать все колонки из таблицы sales в файл в формате ASC. В файл добавить четыре новый строки, например: (‘3/03/2006’, ‘THOMPSON’, ‘Manitoba’), (‘3/03/2006’, ‘KWAN’, ‘Quebec’), (‘3/03/2006’, ‘HAAS’, ‘Ontario-North’), (‘3/03/2006’, ‘JONES’, ‘Ontario-South’). Импортировать файл в новую таблицу office, используя соответствующий метод импортирования.

  6. Экспортировать первые четыре колонки из таблицы org в файл в формате DEL. В файле вручную добавить новую колонку location со следующими значениями: (‘New York’, ‘Boston’, ‘Washington’, ‘Atlanta’, ‘Chicago’, ‘Dallas’, ‘San Francisco’, ‘Denver’). Создать новую таблицу office, соответствующую данным в файле. Импортировать измененный файл в новую таблицу office, используя соответствующий метод импортирования.

  7. Экспортировать firstnme, lastname, hiredate, birthdate таблицы employee в файл формата ACS. Загрузить, используя соответствующий метод, из полученного файла в новую таблицу, из колонки firstnme только первую букву имени, колонку lastname полностью, из колонок hiredate и birthdate только год. Полученный файл при необходимости отформатировать.

  8. Экспортировать empno, projno, emptime, emstdate, emendate таблицы emp_act в файл формата ACS. Импортировать, используя соответствующий метод, из полученного файла в новую таблицу, из колонки empno только три последние цифры, колонку projno полностью, из колонки emptime только целую часть числа, из колонок emstdate и emendate только год. Полученный файл при необходимости отформатировать.

  9. Экспортировать projno, respemp, prstaff, prstdate, prendate таблицы project в файл формата ACS. Импортировать, используя соответствующий метод, из полученного файла в новую таблицу, колонку projno полностью, из колонки respemp только последние три символа, из колонки prstaff только целую часть числа, из колонок prstdate и prendate только год. Полученный файл при необходимости отформатировать.

  10. Экспортировать sales_date, sales_person, sales, region таблицы sales в файл формата ACS. Загрузить, используя соответствующий метод, из полученного файла в новую таблицу, из колонки sales_date только год, колонки sales_person, sales, region полностью. Полученный файл при необходимости отформатировать.

  11. Экспортировать id, name, dept, job, years, salary, comm таблицы staff в файл формата ACS. Загрузить, используя соответствующий метод, из полученного файла в новую таблицу, колонку id, name, dept, job, years полностью, из колонок salary и comm только целую часть числа. Полученный файл при необходимости отформатировать.

  12. Экспортировать все колонки таблицы staff в файл формата ACS. Импортировать, используя соответствующий метод, из полученного файла в новую таблицу, колонку id полностью, из колонки name только первую букву имени, колонку dept полностью, из колонки job только первую букву названия, колонку years полностью, из колонок salary и comm только целую часть числа. Полученный файл при необходимости отформатировать.