Atualmente, estou no processo de criação de ETLs para nosso data warehouse. Estamos usando o SSIS 2008, mas estamos enfrentando problemas, o maior dos quais é a dificuldade em reutilizar componentes. Temos pacotes separados para cada tabela e cada pacote recebe como entrada um número de variáveis de um pacote pai. À medida que fazemos alterações nessas variáveis de entrada, somos obrigados a entrar em cada pacote (temos 15 ou mais agora, mas esse número vai crescer significativamente) e modificar o pacote para lidar com essas alterações. Há também outros problemas, incluindo a incapacidade de executar SQL arbitrário para nossa extração, recursos de log ruins etc.
Todo esse processo seria muito mais robusto se houvesse uma maneira de desenvolver nossos ETLs no código, permitindo a reutilização de código, bibliotecas comuns, melhores testes de unidade, etc. Existe uma linguagem / API ETL padrão de fato para SQL Server? Eu estou olhando para evitar ferramentas GUI, tanto quanto possível.
Edit: Devo mencionar o meu passado. Eu não sou um DBA e não tenho treinamento formal (ou informal), eu basicamente descobri essas coisas ao longo do caminho, então há toda a probabilidade de que eu esteja tentando fazer coisas inapropriadas com o SSIS ou abordando este ETL projeto a partir do ângulo errado. Além disso, atualmente estou empregado no governo estadual, portanto, quaisquer soluções que exijam a compra de um novo pacote de software não estão dentro do campo de possibilidade.
Aqui está uma de nossas tarefas. Estamos usando um único pacote SSIS para carregar cada tabela em nosso armazém. Cada pacote Fact e Dimension são geralmente iguais, diferem apenas em
- Extrações do banco de dados de origem
- Manipulações em um fluxo de dados
- Mescla na tabela de destino
O que eu gostaria de poder fazer (que acho difícil de fazer no SSIS)
- Carregue a consulta de extração de um arquivo de texto. Quando os desenvolvedores estão escrevendo e testando suas consultas de extração, não preciso manipular sua consulta de forma alguma antes que o SSIS a execute e não preciso recortar e colar a consulta em um objeto de origem de banco de dados.
- Teste cada componente individualmente. Deveria poder testar o processo ETL completo para uma tabela individual isoladamente, independentemente de outras cargas de tabela.
- Faça modificações na lógica compartilhada em um único local, não precisa editar cada pacote individual. Todo pacote carrega dados nas tabelas de auditoria da mesma maneira, se eu quiser alterar os dados carregados auditados, não quero editar todos os 15 pacotes (esse número ficará muito maior com o tempo).
Todo o processo parece que seria muito mais fácil de implementar e mais robusto se feito de maneira programática com o uso adequado do código compartilhado.