ETL: extraindo de 200 tabelas - fluxo de dados SSIS ou T-SQL personalizado?


12

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:

  1. 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.
  2. 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.


1
Como todos os 225 bancos de dados têm o mesmo esquema, é possível manter uma visão que une os dados de todos os 225 bancos de dados e apontar o pacote SSIS para isso? Embora isso possa parecer uma ferramenta de clobber e não necessariamente funcione magicamente, parece muito mais fácil gerenciar do que 225 pacotes SSIS (mesmo se você gerenciar alguma automação lá). Você também pode ir até o meio do caminho e criar uma exibição para cada conjunto de bancos de dados, por exemplo, bancos de dados 1-25, 26-50, 51-75, etc.
Aaron Bertrand

Os bancos de dados residem em vários servidores, o que acho que o torna mais complicado. Na verdade, tentei criar uma exibição de tabelas diferentes na minha caixa de desenvolvimento em 225 bancos de dados e a leitura dos dados foi dolorosamente lenta.
8kb

1
Bem, você só quer uma visão para fazer referência a bancos de dados no mesmo servidor. E, novamente, uma única exibição em todas as 225 tabelas não funcionará magicamente, mas acho que você ainda pode dividir e conquistar e não possui 225 fluxos de dados.
Aaron Bertrand

Respostas:


12

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

  • Biml é uma fera interessante. A Varigence terá prazer em vender uma licença para a Mist, mas isso não é necessário. Tudo que você precisa é BIDSHelper e, em seguida, navegue pelo BimlScript e procure uma receita que se aproxime de suas necessidades. Depois disso, clique no botão de menu sensível ao contexto no BIDSHelper e whoosh, ele gera pacotes.

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 DimProductsenquanto meu lacaio lida com o carregamento do SnowflakeFromHellpacote.

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.


BIML parece muito interessante. Eu também estava pensando em criar cada fluxo de dados como um pacote separado e depois solicitá-los através de um pacote principal. Você acha que isso é melhor? Além disso, curioso se você tem uma opinião sobre a abordagem T-SQL. É mais lento, mas eu testei e funcionará.
8kb

Eu atualizei minha resposta com pensamentos sobre design e abordagem pura de ETL de
tsql

0

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.