В настоящее время я нахожусь в процессе создания ETL для нашего хранилища данных. Мы используем SSIS 2008, но у нас возникают проблемы, самая большая из которых - это проблема повторного использования компонентов. У нас есть отдельные пакеты для каждой таблицы, и каждый пакет принимает в качестве входных данных несколько переменных из родительского пакета. Когда мы вносим изменения в эти входные переменные, мы должны входить в каждый пакет (у нас их 15 или около того, но это число будет значительно расти) и модифицировать пакет, чтобы справиться с этими изменениями. Есть и другие проблемы, в том числе невозможность запустить произвольный SQL для нашего извлечения, плохие возможности ведения журналов и т. Д.
Весь этот процесс был бы гораздо более надежным, если бы существовал способ разработки наших ETL в коде, позволяющий повторное использование кода, общие библиотеки, улучшенные модульные тесты и т. Д. Существует ли де-факто стандартный язык / API ETL для SQL Server? Я стараюсь избегать инструментов GUI, насколько это возможно.
Изменить: я должен упомянуть мой фон. Я не администратор баз данных и у меня нет формального (или неофициального) обучения администраторам баз данных, я, по сути, разобрался с этим, так что есть большая вероятность, что я пытаюсь делать неподходящие вещи с помощью SSIS или приближаться к этому ETL проект под неправильным углом. Кроме того, в настоящее время я работаю в правительстве штата, поэтому любые решения, требующие покупки нового программного пакета, не находятся в пределах возможного.
Вот одна из наших задач. Мы используем один пакет служб SSIS для загрузки каждой таблицы на нашем складе. Каждый пакет фактов и пакет измерений, как правило, одинаковы, они отличаются только
- Извлечения из исходной базы данных
- Манипуляции в потоке данных
- Сливается в таблицу назначения
Что я хотел бы иметь возможность делать (что мне трудно сделать в SSIS)
- Загрузите запрос извлечения из текстового файла. Когда разработчики пишут и тестируют свои запросы на извлечение, мне не нужно каким-либо образом манипулировать их запросом перед тем, как SSIS его выполнит, и мне не нужно было вырезать и вставлять запрос в объект-источник БД.
- Проверьте каждый компонент в отдельности. Я должен быть в состоянии проверить весь процесс ETL для отдельной таблицы изолированно, независимо от других нагрузок таблицы.
- Вносите изменения в общую логику в одном месте, не нужно редактировать каждый отдельный пакет. Каждый пакет загружает данные в таблицы аудита одним и тем же способом. Если я хочу изменить загруженные данные аудита, мне не нужно редактировать все 15 пакетов (это число будет значительно увеличиваться со временем).
Весь процесс выглядит так, как будто его было бы намного проще реализовать и сделать более надежным, если бы он выполнялся программно с правильным использованием общего кода.