Загрузить данные DB2 в базу данных Oracle - исправление ненужных данных - PullRequest
0 голосов
/ 04 февраля 2011

Мне дали экспорт данных DB2 (около 7 ГБ) со связанными управляющими файлами DB2.Моя цель - загрузить все данные в базу данных Oracle.Я почти преуспел в этом - я пошел по пути преобразования контрольных файлов в файлы SQL * Loader CTL, и он по большей части работал.

Однако я обнаружил, что некоторые файлы данных содержат терминаторыи ненужные данные в некоторых столбцах, которые загружаются в базу данных, вызывая очевидные проблемы с сопоставлением этих данных.Например, столбец должен содержать «9930027130», покажет длину (trim (col)) = 14: 4 байта ненужных данных.

Мой вопрос: каков наилучший способ удалить эти ненужные данные из системы?Я надеюсь, что есть простое дополнение к файлу CTL, которое позволяет ему заменить мусор пробелами - в противном случае я могу думать только о написании скрипта, который анализирует данные и заменяет пустые / пустые места пробелами до запуска SQL * Loader.

Ответы [ 2 ]

2 голосов
/ 04 февраля 2011

Каково ваше определение «мусор»?

Если вы знаете, что столбец должен содержать только 10 символов данных, например, вы можете добавить NULLIF( LENGTH( <<column>> ) > 10 ) в свой контрольный файл.Если вы знаете, что столбец должен содержать только числовые символы (или буквенно-цифровые символы), вы можете написать пользовательскую функцию очистки данных (например, STRIP_NONNUMERIC) и вызвать ее из своего управляющего файла, например,

COLUMN_NAME  position(1:14)  CHAR "STRIP_NONNUMERIC(:LAST_NAME)",

В зависимости от ваших требованийэти очищающие функции и очищающая логика могут быть довольно сложными.В хранилищах данных, которые каждую ночь загружают и очищают большие объемы данных, данные обычно перемещаются через серию промежуточных таблиц, поскольку применяются последовательные раунды правил очистки и проверки данных вместо того, чтобы пытаться загрузить и очистить все данные за один шаг.,Обычным подходом может быть, например, загрузка всех данных в столбцы VARCHAR2 (4000) без очистки с помощью SQL * Loader (или внешних таблиц).Тогда у вас был бы отдельный процесс перемещения данных в промежуточную таблицу, которая имеет надлежащие типы данных, NULL-которых невозможно преобразовать (т. Е. Нечисловые данные в столбце NUMBER, невозможные даты и т. Д.).Пришёл бы другой процесс и переместил бы данные в другую промежуточную таблицу, где вы применяете правила домена - такие вещи, как номер социального страхования, должны быть 9 цифрами, широта должна быть между -90 и 90 градусами, или код штата долженбыть в таблице соответствия состояния.В зависимости от сложности проверок у вас может быть больше процессов, которые перемещают данные в дополнительные промежуточные таблицы, чтобы применять все более строгие наборы правил проверки.

1 голос
/ 04 февраля 2011

"Столбец должен содержать '9930027130', покажет длину (trim (col)) = 14: 4 байта ненужных данных."

Выполните SELECT DUMP (col), чтобы определить странные символы.Затем решите, являются ли они всегда недействительными, допустимыми в некоторых случаях или действительными, но неверно истолкованы.

...