Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
rbarbosa
Contributor III
Contributor III

Estratégia de Extração

Bom dia pessoal tudo bem?

Tenho um SQL hoje que carrega a partir de 19 tabelas uma espécie de dataware house, porém isso demora muita.

Cerca de 30 horas pra carregar 3 meses, acredito que isso tem gerado um impacto negativo em meu banco de dados e no processo de BI como um todo.

Pensei em mudar minha estratégia, gerando um qvd para cada tabela dessa e depois fazendo esse "data-warehouse" direto no qlikview, através dos scripts.

Eu teria um ganho real de performance trabalhando assim?

Rodolfo Barbosa
Labels (3)
1 Solution

Accepted Solutions
Marcio_Campestrini
Specialist
Specialist

Bom dia Rodolfo.

O seu problema pode ser relacionado aos joins.

O uso do JOIN simples fará com que as linhas da segunda tabela (do JOIN) que não tem correspondentes na primeira tabela sejam combinadas com TODAS as linhas.

Basicamente:

JOIN: combina as linhas com os campos com os mesmos valores e as demais linhas da segunda tabela serão combinadas com todas as linhas da primeira tabela (produto cartesiano)

LEFT JOIN: combina as linhas da segunda tabela com as correspondentes da primeira tabela. Aquelas que não tiverem correspondência serão desprezadas

OUTER JOIN: liga as linhas correspondentes e acrescenta na primeira tabela as linhas que não tem correspondência

INNER JOIN: somente mantém as linhas que tem correspondência nas duas tabelas.

Para complementar:

Joins and Lookups

Márcio Rodrigo Campestrini

View solution in original post

14 Replies
jonas_rezende
Specialist
Specialist

Olá, Rodolfo Barbosa.

Permita-me entender.

Você tem um SQL unindo 19 tabelas? Ou ele é condicionado para carregar a partir de 19 tabelas?

Vale lembrar que o data warehouse (DW) é uma estrutura de armazenamento (repositório de dados para dar suporte as suas aplicações), ou seja, o conglomerado de seus Data Marts.

rbarbosa
Contributor III
Contributor III
Author

O SQL Une as 19 tabelas, ele é bem complexo o que dificuldade qualquer mudança.

Comecei o processo mas estou com dificuldades em reescrever as funções, será possível reeescreve-las no click?

Rodolfo Barbosa
Clever_Anjos
Employee
Employee

Possivel sim, mas talvez demore ainda mais.

Recomendo extrair por "pedaços" e salvando em QVD´s (QVD diario, semanal ou mensal)

rbarbosa
Contributor III
Contributor III
Author

Então, fiz QVD por QVD, um por tabela, pra depois juntar e fazer o "Tabelão" como era feito no SQL, estou com dúvidas em como transcrever as functions do PL/SQL para o Qlikview, se realmente vale a pena

As tabelas separadas já fiz todas as consultas / QVD's o mais demorado deu 10 minutos, é uma vitória. Rs,

Rodolfo Barbosa
Clever_Anjos
Employee
Employee

Bom, as funções teríamos que saber quais você tem duvida

rbarbosa
Contributor III
Contributor III
Author

Opa Clever, desculpem a demora em responder, ontem consegui reescrever quase todas, as que não o fiz criei tabelas virtuais com load inline pra poder fazer o "decode" do oracle.

Mas muito obrigado

Rodolfo Barbosa
rbarbosa
Contributor III
Contributor III
Author

Boa tarde pessoal, tem sido um sucesso a estratégia porém estou tendo alguns problemas:

A nível de informação a carga que no oracle demorava no minimo 5 horas para cada mês hoje consigo extrair os dados de todos os perídios em menos de 30 minutos.

Estou fazendo o join dos QVDs pra gerar o DW que igual usava antes, sem necessidade de mudar a estrutura do meu BI original(isto é ter os mesmos campos).

Porém, acho que meus joins não estão indo dar formata correta, usei apenas JOIN, sem dizer se é inner ou left, porém a memória do servidor foi no talo 32gb. Vou tentar seguir o mesmo que o oracle, pensei em repartir em mais etapas, mas acredito que isso vá aumentar a complexidade.

i208^cimgpsh_orig.png

Rodolfo Barbosa
Marcio_Campestrini
Specialist
Specialist

Bom dia Rodolfo.

O seu problema pode ser relacionado aos joins.

O uso do JOIN simples fará com que as linhas da segunda tabela (do JOIN) que não tem correspondentes na primeira tabela sejam combinadas com TODAS as linhas.

Basicamente:

JOIN: combina as linhas com os campos com os mesmos valores e as demais linhas da segunda tabela serão combinadas com todas as linhas da primeira tabela (produto cartesiano)

LEFT JOIN: combina as linhas da segunda tabela com as correspondentes da primeira tabela. Aquelas que não tiverem correspondência serão desprezadas

OUTER JOIN: liga as linhas correspondentes e acrescenta na primeira tabela as linhas que não tem correspondência

INNER JOIN: somente mantém as linhas que tem correspondência nas duas tabelas.

Para complementar:

Joins and Lookups

Márcio Rodrigo Campestrini
Clever_Anjos
Employee
Employee

Como eu disse anteriormente, acredito que seja melhor manter os joins no banco (RDBMS foram feitos para isso) e extrair por partes.

Revisar as queries, verificando se estão usando os índices corretos

"Possivel sim, mas talvez demore ainda mais.

Recomendo extrair por "pedaços" e salvando em QVD´s (QVD diario, semanal ou mensal)"