AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 30473
Accepted
8kb
8kb
Asked: 2012-12-15 13:39:44 +0800 CST2012-12-15 13:39:44 +0800 CST 2012-12-15 13:39:44 +0800 CST

ETL: extração de 200 tabelas - fluxo de dados SSIS ou T-SQL personalizado?

  • 772

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 um carregamento incremental e outras serão um carregamento completo.

Para observar, temos cerca de 225 bancos de dados de origem, todos com o mesmo esquema.

Pelo que vi, criar 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.

De uma perspectiva de 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 desejo 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 em meus testes, isso ainda não é tão rápido quanto usar um fluxo de dados SSIS com origem e destino OLEDB. Então, estou me perguntando que tipo de alternativas eu tenho. Os pensamentos até agora incluem:

  1. Usando EZAPI para gerar pacotes SSIS programaticamente com fluxo de dados simples. As tabelas e colunas a serem extraídas viriam das mesmas tabelas de metadados mencionadas anteriormente.
  2. Adquira 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 aprimorar apenas o básico também é uma preocupação.

sql-server sql-server-2005
  • 2 2 respostas
  • 11987 Views

2 respostas

  • Voted
  1. Best Answer
    billinkc
    2012-12-15T13:51:40+08:002012-12-15T13:51:40+08:00

    Eu não gostaria de ter 200 fluxos de dados em um único pacote. O tempo que levaria apenas para abrir e validar faria você envelhecer antes do tempo.

    EzAPI é divertido, mas se você é novo em .NET e SSIS, oh inferno não, você não quer isso. Acho que você gastará muito mais tempo aprendendo sobre o modelo de objeto SSIS e possivelmente lidando com COM do que realmente trabalhando.

    Como sou preguiçoso, incluirei o BIML como uma opção gratuita que você não listou. De uma resposta em SO https://stackoverflow.com/questions/13809491/generating-several-similar-ssis-packages-file-data-source-to-db/13809604#13809604

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

    Acho que pode ser uma abordagem para você também. Você define seu BIML que descreve como seus pacotes devem se comportar e depois os gera. No cenário que você descreve onde você faz uma alteração e precisa corrigir N pacotes, não, você corrige sua definição do problema e regenera os pacotes.

    Ou, se você ganhou familiaridade suficiente com a estrutura, use algo como EzAPI para consertar todas as coisas quebradas. Caramba, já que você marcou isso como 2005, você também pode experimentar o PacMan se precisar fazer modificações em massa nos pacotes existentes.

    Considerações de design do SSIS

    De um modo geral, tento fazer com que meus pacotes se concentrem em resolver uma única tarefa (carregar dados de vendas). Se isso requer 2 fluxos de dados, que assim seja. O que eu odeio herdar é um pacote do assistente de importação e exportaçã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 os aprimoramentos futuros menos arriscados, pois a área de superfície é reduzida. Um benefício adicional é que posso trabalhar no carregamento DimProductsenquanto meu lacaio está lidando com o carregamento do SnowflakeFromHellpacote.

    Em seguida, use o(s) pacote(s) mestre(s) para orquestrar os fluxos de trabalho filhos. Eu sei que você está em 2005, mas o lançamento do SQL Server 2012 do SSIS é o pijama do gato. Adoro o modelo de implantação do projeto e a forte integração que ele permite entre os 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 um novo SAN, ele caiu para cerca de 7+ horas. O mesmo processo lógico, reescrito no SSIS, foi consistente em menos de 2 horas. Facilmente, o maior fator para reduzir esse tempo foi a paralelização "gratuita" que obtivemos usando o SSIS. O trabalho do Agente executou todas essas tarefas em série. O pacote mestre basicamente dividiu as tabelas em unidades de processamento (5 conjuntos paralelos de tarefas serializadas de "executar replicar tabela 1", tabela 2, etc.) onde tentei dividir os baldes em unidades de trabalho de tamanho quase igual. Isso permitiu que as cerca de 60 tabelas de referência de pesquisa fossem preenchidas rapidamente e, em seguida, o processamento desacelerou quando entrou no "

    Outras vantagens para mim ao usar o SSIS é que recebo configuração "gratuita", registro e acesso às bibliotecas .NET para dados quadrados que preciso colocar em um buraco redondo. Acho que pode ser mais fácil manter (passar pela 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.

    • 13
  2. Harb
    2014-09-27T09:55:30+08:002014-09-27T09:55:30+08:00

    Você mencionou que tem 200 tabelas de origem e 225 bancos de dados. Estou assumindo que as 200 tabelas de origem são uma contagem de todas as tabelas de todos os 225 bancos de dados (porque se você tivesse 200 tabelas em cada banco de dados, isso colocaria sua contagem total de tabelas em 45.000). 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 1 banco de dados primeiro e, quando agendar seus trabalhos, pode apenas alterar a string 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 do pacote). Conforme mencionado nas respostas anteriores, o SQL 2012 tem novas maneiras de configurar seus parâmetros usando o modelo de implantação do projeto.

    Você pode obter mais informações sobre configuração de pacotes com 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, https://stackoverflow.com/questions/15206184/how-to-configure-ssis-2012-project-to-run-under-different-environment-configurat

    • 0

relate perguntas

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve