Поддерживает ли 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.

Если это большой объем данных, я бы хотел организовать разбиение хеша по ключу соединения для новых и текущих наборов данных.

Другие вопросы по тегам