Moçada. Alguma nova sugestão?
>________________________________ > De: Samuel Santos <samuel.gsan...@yahoo.com.br> >Para: "oracle_br@yahoogrupos.com.br" <oracle_br@yahoogrupos.com.br> >Enviadas: Segunda-feira, 25 de Fevereiro de 2013 12:55 >Assunto: Re: [oracle_br] Re: Carga ETL > > >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]