Поддерживает ли Ab Initio оператор Oracle Merge?
Я пытаюсь разработать процесс загрузки Ab Initio без обучения или документации Ab Initio. Да, знаю. Проектное решение таково: для входящих файлов данных будут вставки и обновления. Должен ли я, чтобы поставщик каналов делил их на файлы данных (по размеру 1–10 ГБ по ночам), и нужно ли, чтобы Ab Initio выполнял вставки и обновления отдельно?
Проблема, с которой я сталкиваюсь, заключается в том, что данные не всегда совпадают с ожидаемыми... И строка вставки может уже присутствовать (возможно, произошла ошибка очистки или провайдер канала совершил ошибку) или отсутствует строка UPdate.
Поэтому мне интересно, стоит ли мне просто объединить все вставки и обновления... и использовать оператор Oracle Merge (после параллельной загрузки данных в промежуточную таблицу без индекса, конечно)
Но я не знаю, поддерживает ли AbInitio Merge или нет.
Существует не так много для ab initio учебников или документов в Интернете... можете ли вы направить меня на что-нибудь хорошее?
2 ответа
Решение, которое вы только что изобразили (вставляет и обновляет в промежуточной таблице, а затем объединяет содержимое в основной таблице), возможно.
Проектное решение таково: для входящих файлов данных будут вставки и обновления.
Я не знаю предысторию этого решения, но вы должны знать, что это решение приведет к увеличению времени выполнения. Чтобы выполнить вставки и обновления, вы должны использовать компонент "Таблица обновлений", который работает медленнее, чем простой компонент "Таблица вывода". Кстати, не используйте один и тот же компонент "Таблица обновлений" для одновременной вставки и обновления. Вместо этого используйте отдельную "Таблицу обновлений" для вставок, а другую - для обновлений (таким образом вы значительно увеличите производительность). (Если вы можете изменить вышеупомянутое проектное решение, используйте вместо этого "Таблицу результатов".)
В любом случае установите для компонентов "Обновить таблицу"/"Таблица вывода" значение "никогда не прерывать", чтобы ваш график не завершился ошибкой, если один и тот же оператор вставки выполняется дважды или если нет записи для обновления.
Наконец, оператор "слияния оракула" должен запускаться / выполняться из компонента "Выполнить SQL", когда обработка всех вставок и обновлений завершена. Используйте фазы, чтобы убедиться, что это происходит таким образом...
Если вы намереваетесь построить график с параллельным выполнением, убедитесь, что операторы вставки и обновления для одних и тех же записей будут обрабатываться одними и теми же разделами. (Используйте первичный ключ финальной таблицы в качестве ключа в компоненте "разделение по ключам".)
Если вы хотите получить общее представление о том, сколько дублированных вставок или неправильных обновлений происходит в грязном вводе, используйте порт "Отклонить" (и в конечном итоге "Ошибка") соответствующих компонентов "Таблица обновлений"/"Таблица вывода" для дальнейшей обработки.,
Я бы, конечно, не полагался на исходную систему, чтобы сказать мне, присутствуют ли строки в целевой таблице или нет. Мой инстинкт говорит, чтобы идти параллельно, nologging (если возможно), сжимать (если возможно) нагрузку в промежуточную таблицу с последующим слиянием - если Ab-Initio не поддерживает Merge, то, надеюсь, он поддерживает вызов PL/SQL процедура или прямое выполнение оператора SQL.
Если это большой объем данных, я бы хотел организовать разбиение хеша по ключу соединения для новых и текущих наборов данных.