Prezados Os dados são extraídos de uma base de dados, e estes são montados\tratados através de um SELECT no qual irá carregar a base STAGE. Logo após os STAGE estive carregado ai entra o ODI carregando a base OLAP.
1 - Necessito diariamente ter todos (tenho tabelas com mais 138 Milhões de registro) os dados do STAGE atualizados, para que posteriormente o ODI comece a tratar\carregar as tabelas FATOS e DIMENSÕES - numa segunda fase. Segue exemplo de parte do SELECT que utilizo: insert /*+ APPEND PARALLEL(DEGREE 12 INSTANCES DEFAULT) */ into TESTE SELECT ROWNUM AS ID_PESSOA_AQUISICAO, qry.SEQ_MUNICIPIO, qry.SEQ_ORGAO, qry.SEQ_REMESSA, qry.SEQ_PESSOA, qry.COD_PROCESSO_AQUISICAO, qry.DSC_TIPO_COMISSAO_LICITACAO, qry.NUM_DECRETO_PORTARIA, qry.NUM_ATO_NOMEACAO, qry.SEQ_TEMPO_ATO_NOMEACAO, qry.DSC_CARGO, qry.DSC_NATUREZA_CARGO >________________________________ > De: J. Laurindo Chiappa <jlchia...@yahoo.com.br> >Para: oracle_br@yahoogrupos.com.br >Enviadas: Segunda-feira, 25 de Fevereiro de 2013 12:23 >Assunto: [oracle_br] Re: Carga ETL > > > >Explica um pouco melhor : esse SELECT que vai recuperar os dados busca os >dados em outras instâncias via dblink, é isso ? OU os dados já estarão >carregados (via algum processo anterior, provavelmente) em tabelas STAGE/de >trabalho nesse mesmo database ?? Essas 'n tabelas', são tabelas DESTINO, a >serem carregadas, OU são as tabelas de origem dos dados ?? De quantas >tabelas-destino a serem carregadas estamos falando ? Se existem tabelas-stage >e/ou tabelas remotas a buscar os dados, mais ou menos quantas ? É possível um >único SELECT buscar todos os dados, ou não, não hpa nenhum tipo de >relacionamento entre as tabelas-destino e as origem ?? >DEPENDENDO do que vc disser a gente pode fazer recomendações, mas algumas best >practices se impõem : > >a) uma solução de ETL fora do database, não escrita por vc mesmo (como >datastage, warehouse builder, etc, etc, etc) te dá a vantagem de ser mais >rápida para implementar, se houver expertise nela (já que vc escreve menos), E >via de regra a customização é feita sem programação, numa GUIzinha da tool, >MAS nem sempre ela te dá a máxima performance (já que nem Todas conseguem usar >todos os recursos do RDBMS Oracle), além de terem um CUSTO não-desprezível, >seja em licenciamento seja em valor homem-hora para instalar e configurar > >b) SE os dados-stage vêm de outras fontes e num formato de arquivo-texto, é >via de regra INDEFENSÁVEL a opção de se criar tabelas-stage e carregar os >dados pra lá via sql*loader ou quetais : no século XXI, o ideal é acessar os >arquivos-texto como se fossem tabelas Oracle via EXTERNAL TABLES > >c) SEJA QUAL FOR a solução de ETL adotada (externa ou Customizada/escrita por >vc mesmo), ela ** TEM ** que onde recomendado/possível/viável usar os recursos >do RDBMS Oracle, como insert em direct-mode, constraints em novalidate, >Paralelismo (de SQL e/ou DIY, via múltiplas sessões simultãneas), MERGE, >Particionamento (ie, swap de tabelas em partições, carga referenciando a >partição, etc, etc), e outras > >d) se vc optar por solução desenvolvida aí E for feita dentro do banco (em >PL/SQL provavelmente), as principais Recomendações são vc : > >- EVITAR CURSORES A (quase) QUALQUER CUSTO, pois isso implica em context >switch, não-otimização de trechos SQL separados, etc : o negócio é mesmo >INSERT INTO tabelasdestino (SELECT em questão), SEM loops e cursores > >- programar a carga para uma janela com menos utilização > >- evitar SQL dinâmico : SQL dinâmico NECESSARIAMENTE IMPLICA em hard parse, >mais gasto de CPU... E já que vc vai ter POUCO código para cada tabela a >carregar, não vejo como impossível vc simplesmente escrever na sua procedure >PL/SQL de carga os INSERTs.. INTO necessários. >O que vc PODE fazer é pedir para o próprio RDBMS te "escrever" o código, tipo : > >no sqlplus, vc pede um SPOOL rotina.sql >configura o sqlplus para não trazer infos extras/cabeçalho >SELECT 'INSERT INTO ' || table_name || ' SELECT * FROM tabela' FROM DBA_TABLES >WHERE owner='nomedodono' and TABLE_NAME in (lista das tabelas); >spool off > >Depois carregaa isso num editor de texto, mete CREATE PROCEDURE e faz as >pequenas edições necessárias, e é isso ... > >[]s > >Chiappa > >--- Em oracle_br@yahoogrupos.com.br, Samuel Santos escreveu >> >> PessoALL >> >> Tenho o seguinte cenário de ETL para que seja realizado diariamente (este >> será realizado após as 20hrs). >> Este procedimento trata-se de carga de dados insert into (através de um >> SELECT) que deverá ser realizado em n's tabelas. >> >> O que vocês sugerem a realizar? >> >> Virew Materializada (ser puder enviar exemplos de criação, agendamentos, >> incremento ou não), enfim qual a melhor forma? >> Procedure? >> >> >> Desde já agradeço o apoio de todos. >> >> [As partes desta mensagem que não continham texto foram removidas] >> > > > > > [As partes desta mensagem que não continham texto foram removidas]