Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Demora em calculo trasnformador

Ola Galera boa tarde,

   Sei que é carnaval mais eu estou direto aqui e com este problema, seguinte, eu trabalho com o conceito de BI tradicional onde eu tenho um Extrator (select * no banco), transformador (onde faço os calculos e transformações necessarias) e por fim a visão que tem apenas o load das tabelas, muito bem, eu necessito fazer alguns calculos de juros e etc na fato e se tirando esses calculos o transformador roda em no maximo 5 minutos, porém com esses calculos esta levando mais de 1 hora, alguem poderia ajudar nesta questão ? seria melhor fazer esses calculos na visão então  pra ser mais rapido ?

eu estou mandando o transformador em anexo tamanho o desespero, pois o projeto tem de entrar em producao na sexta feira. kkkkkkkkk

Labels (2)
16 Replies
nicolett_yuri

Wagner, em que parte de seu script estão esses cálculos?

Qual a volumetria de registros dessa tabela em que esta realizando esses cálculos?

Anonymous
Not applicable
Author

há aba que tenho esses calculos é a aba  FATO_WHOSALE

a volumetria seria em torno de 2 milhoes de linha (é isso que quis perguntar Yuri )

nicolett_yuri

Wagner, fazer o cálculo em um transformador sempre é a melhor opção, talvez o ponto em que você esteja pecando é em relação a não utilizar carga incremental.

Tente verificar uma regra para refazer somente os cálculos que ainda não foram feitos, ou do último dia, ou do último mês. Essa regra vai depender totalmente da regra de negócio de seus dados.

Outro ponto: Sua tabela possui muitas colunas e talvez essas colunas não influenciem em seu cálculo. Veja se existe a necessidade de retornar tantas colunas nessa mesma tabela na hora de realizar esses cálculos. Tive um cliente em que foi necessário fazer o cálculo somente com as colunas necessárias e depois do cálculo pronto juntei a tabela com outra que possuía o restante das colunas.

nicolett_yuri

Outra coisa, rsrs, uma hora de carga não é um problema caso esta aplicação sofra atualização somente 1x ao dia.

Mas verifique os pontos do post anterior, pois a carga vai aumentar seu tempo quando o volume de registros aumentar.

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Wagner,

eu ja alterei rotina que tinha um LOAD sobre LOAD que levava 35 minutos e fiz o LOAD sobre um resident e caiu para 4 minutos.

Se você pegar o LOAD que faz os cálculos, se ler sobre o Resident e não como esta eu quase aposto que vai ficar mais rápido.....por mais estranho que pareca........

TMP_FATO_WHOSALE:

LOAD

     Atraso_Dealer_Contrato AS [ATRASO DEALER CONTRATO],

     Codigo_Dealer AS [CODIGO DEALER],

     Codigo_Contrato AS [CODIGO CONTRATO],

     .

     .

     .

FROM $(vDadosExtraidos)CONTRATOS_WHOSALE.QVD(qvd); 

FATO_WHOSALE:

LOAD *,

     //qtde de dias é calculado atraves da diferença de dias entre a data do recebimento e a data auxiliar criada acima       Floor(Interval(floor([DATA AUXILIAR PRAZO CONTRATO]) - Floor([DATA FIM SUB]), 'DD')) AS [QTDE DIAS PRAZO CONTRATO],

    .

    .

    .

Resident TMP_FATO_WHOSALE;

//

drop table TMP_FATO_WHOSALE;

furtado@farolbi.com.br
Anonymous
Not applicable
Author

Então Alessandro, ja havia feito isso de acordo, fiz a carga novamente como TMP e mais pra frente eu fiz a carga com os calculos, da na mesma fica lento do mesmo jeito

inclusive fiz 2 testes

1 - fiz a carga na tmp e fiz o load com o resident

2 - fiz a carga normal e salvei o QVD dai mais pra frente eu carreguei este QVD para incluir os calculos e deu na mesma, a questão é os calculos mesmo, muito pesado.

Anonymous
Not applicable
Author

vou fazer este teste agora Yuri, tem sentido sim o que voce falou, obrigado jaja posto o que deu ...

posso inclusive fazer uma chave pra ligar essas duas tabelas não é mesmo ?

ou voce fez um join pra unir novamente  ?

nicolett_yuri

No meu caso eu juntei, mas você pode sim deixa-las separadas, isso vai depender do modelo final da sua aplicação.

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Wagner,

tem um if que vi, me parece estranho.

    IF(

        Floor(Interval([DATA AUXILIAR PRAZO CONTRATO] - [DATA VENDA])) > 0,

        IF(

             Floor(([DATA DA VISTORIA FATO]) <= [DT FIM CONTRATO] )

se perceber o <= do if esta dentro do Floor

furtado@farolbi.com.br