Com base em minha análise, um modelo dimensional completo para nosso data warehouse exigirá a extração de mais de 200 tabelas de origem. Algumas dessas tabelas serão extraídas como parte de uma carga incremental e outras serão uma carga completa.
Para observar, temos cerca de 225 bancos de dados de origem, todos com o mesmo esquema.
Pelo que vi, a criação de um fluxo de dados simples no SSIS com uma origem OLE DB e um destino OLE DB requer que as colunas e os tipos de dados sejam determinados em tempo de design. Isso significa que acabarei com mais de 200 fluxos de dados apenas para a extração.
Do ponto de vista da manutenção, isso me parece um grande problema. Se eu precisasse fazer algum tipo de alteração abrangente no código de extração, teria que modificar 200 fluxos de dados diferentes.
Como opção alternativa, escrevi um pequeno script que lê os bancos de dados de origem, nomes de tabelas e colunas que quero extrair de um conjunto de tabelas de metadados. O código é executado em vários loops e usa SQL dinâmico para extrair das tabelas de origem por meio de um servidor vinculado e OPENQUERY.
Com base nos meus testes, isso ainda não é tão rápido quanto usar um fluxo de dados SSIS com uma origem e destino OLEDB. Então, eu estou me perguntando que tipo de alternativas eu tenho. Os pensamentos até agora incluem:
- Usando o EZAPI para gerar programas SSIS com um fluxo de dados simples. As tabelas e colunas a serem extraídas viriam das mesmas tabelas de metadados mencionadas anteriormente.
- Compre software de terceiros (componente de fluxo de dados dinâmico)
Qual é a melhor maneira de abordar isso? Quando se trata de programação .NET, sou iniciante, portanto, o tempo necessário para acelerar apenas o básico também é uma preocupação.
Respostas:
Eu não gostaria de ter 200 fluxos de dados em um único pacote. O tempo que levaria apenas para abrir e validar o deixaria velho antes do tempo.
O EzAPI é divertido, mas se você é novo no .NET e SSIS, oh não, não quer isso. Eu acho que você gastará muito mais tempo aprendendo sobre o modelo de objeto SSIS e possivelmente lidando com COM do que realmente fazendo o trabalho.
Como sou preguiçoso, vou conectar o BIML como uma opção gratuita que você não listou. De uma resposta no SO /programming/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604
Eu acho que pode ser uma abordagem para você também. Você define seu BIML que descreve como seus pacotes devem se comportar e os gera. No cenário, você descreve onde faz uma alteração e precisa corrigir N pacotes; não, você corrige sua definição do problema e gera novamente os pacotes.
Ou, se você adquiriu familiaridade suficiente com a estrutura, use algo como EzAPI para consertar todas as coisas quebradas. Heck, já que você marcou isso em 2005, você também pode tentar o PacMan se precisar fazer modificações em massa nos pacotes existentes.
Considerações de design do SSIS
De um modo geral, tento focar meus pacotes na solução de uma única tarefa (carregar dados de vendas). Se isso requer 2 fluxos de dados, que seja. O que eu odeio herdar é um pacote do assistente de exportação e importação com muitos fluxos de dados não relacionados em um único pacote. Decomponha-os em algo que resolva um problema muito específico. Isso torna as melhorias futuras menos arriscadas à medida que a área de superfície é reduzida. Um benefício adicional é que eu posso trabalhar no carregamento
DimProducts
enquanto meu lacaio lida com o carregamento doSnowflakeFromHell
pacote.Em seguida, use o (s) pacote (s) mestre (s) para orquestrar os fluxos de trabalho filho. Eu sei que você está em 2005, mas o lançamento do SSIS no SQL Server 2012 é o pijama do gato. Adoro o modelo de implantação do projeto e a forte integração que ele permite entre pacotes.
TSQL vs SSIS (minha história)
Quanto à abordagem TSQL pura, em um trabalho anterior, eles usaram um trabalho de 73 etapas para replicar todos os dados do Informix no SQL Server. Geralmente, levava cerca de 9 horas, mas podia chegar a 12 ou mais. Depois que eles compraram uma nova SAN, ela caiu para mais de 7 horas. O mesmo processo lógico, reescrito no SSIS, foi consistente em 2 horas. Facilmente, o maior fator para reduzir esse tempo foi a paralelização "livre" que obtivemos usando o SSIS. O trabalho do agente executou todas essas tarefas em série. O pacote principal basicamente dividiu as tabelas em unidades de processamento (5 conjuntos paralelos de tarefas serializadas de "executar tabela replicada 1", tabela 2, etc.), onde tentei dividir os baldes em unidades de trabalho quase iguais. Isso permitiu que as cerca de 60 tabelas de referência de pesquisa fossem preenchidas rapidamente e, em seguida, o processamento diminuiu quando entrou no "
Outras vantagens para mim usando o SSIS é que eu recebo configuração "gratuita", registro e acesso às bibliotecas .NET para dados quadrados que preciso basear em um buraco redondo. Eu acho que pode ser mais fácil manter (repassar a manutenção) um pacote SSIS do que uma abordagem TSQL pura em virtude da natureza gráfica da besta.
Como sempre, sua milhagem pode variar.
fonte
Você mencionou que possui 200 tabelas de origem e 225 bancos de dados. Suponho que as 200 tabelas de origem sejam uma contagem de todas as tabelas de todos os 225 bancos de dados (porque se você tivesse 200 tabelas em cada banco de dados que colocará sua contagem total de tabelas em 45000). Você também mencionou que o esquema do banco de dados é o mesmo para os 225 bancos de dados.
Você pode criar os pacotes SSIS para apenas o banco de dados 1 primeiro e, em seguida, ao agendar seus trabalhos, basta alterar a cadeia de conexão do banco de dados usando a configuração do pacote (se o seu SQL 2005, você usará o modelo de implantação de pacotes). Conforme mencionado nas respostas anteriores, o SQL 2012 possui novas maneiras de configurar seus parâmetros usando o modelo de implantação do projeto.
Você pode obter mais informações sobre a configuração de pacotes com o SSIS aqui http://www.sql-server-performance.com/2007/package-configuration-2005/
Você pode obter mais informações sobre como usar os parâmetros do projeto aqui, /programming/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat
fonte