2010-04-02 5 views
0

Я пишу, чтобы запросить идеи для решения предстоящей проблемы.Как обрабатывать дополнительные столбцы входных данных без необходимости поддерживать несколько версий пакетов SSIS?

Продукт, который предоставляет данные для нашего процесса ETL, в настоящее время имеет несколько версий. Наши клиенты используют некоторую версию продукта, но не все используют одну и ту же версию, и все они не будут одновременно обновлены.

Поскольку новые версии продукта развернуты, наиболее распространенным изменением является добавление новых столбцов данных. Столбцы, которые отбрасываются или переименовываются, иногда могут возникать, но основное внимание сейчас уделяется обработке новых столбцов.

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

Мы хотим избежать отдельной версии пакетов SSIS для каждой версии продукта. Кто-нибудь успешно реализовал решение для этой ситуации?

ответ

1

Ну, я должен был сделать что-то simliar, где я получил разные файлы в разных форматах от разных поставщиков, которые все должны были отправиться на одно и то же место. То, что я сделал, это создать контейнер для каждого цикла, который работает, хотя файлы, и первый шаг цикла определяет, какой путь он отключается. Затем я написал отдельный поток данных для каждого пути.

Вы можете сделать это с помощью таблицы, в которой перечислены ожидаемые столбцы для каждой версии, а затем отправляется по пути для версии, которую он соответствует.

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

Или вы можете написать новый пакет для каждой версии (включая версию в имени), чтобы избежать наличия 20 разных путей в одном пакете SSIS. Затем для каждого цикла в вызывающем пакете SSIS затем передайте файл в нужную версию. Или просто настройте разные задания для каждого клиента, зная, в какую версию ppackage они включены. Затем вы можете просто изменить пакет SIS на свои вызовы при обновлении до новой версии.

0

Похоже, вы пытаетесь избежать необходимости поддерживать метаданные для всех возможных версий. @ Решение HLGEM является хорошим, но оно по-прежнему требует, чтобы вы поддерживали метаданные для всех возможных комбинаций версий.

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

  1. Условные расколы: Наиболее очевидное решение, что хорошо работает, когда есть несколько вариантов и простой способ обнаружения разница, основанная на нескольких свойствах строки. Это не очень хорошо масштабируется для управления сложными изменениями, потому что выражения становятся слишком сложными для записи и обслуживания.

  2. Трансформации сценария. Если вы читаете в каждой строке как одну строку, то вы можете использовать задачи сценария, чтобы определить, нужно ли записывать дополнительные столбцы.Это хорошо работает, когда существует множество, множество и множество комбинаций комбинаций полей, а правила определения того, какой путь использовать, очень сложны.

  3. Метаданные с таблицей: для одного случая, когда я импортировал XML-файлы, я построил контрольную таблицу с номерами версий. Я в основном загружал XML в XML-тип данных в таблицу, а затем обрабатывал XML в хранимой процедуре. Затем пакет повторил каждый номер версии и динамически сгенерировал SQL, который ему нужен из таблицы, чтобы извлечь правильные узлы из XML, а затем пометил исходную строку как обработанную. Это было хорошим решением для моего процесса, но главной задачей подхода было знание того, когда добавлять новые строки в таблицу управления. В основном я должен был предоставить группе разработчиков флажок в своих форматах SDLC, которые потребовали, чтобы они заставили меня подписаться, что я получил новые изменения схемы для основных изменений версии.

Я не уверен, что это поможет вам, но я надеюсь, что вы сможете извлечь из него что-то полезное. Удачи.