Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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
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?
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 )
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.
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.
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;
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.
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 ?
No meu caso eu juntei, mas você pode sim deixa-las separadas, isso vai depender do modelo final da sua aplicação.
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