Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
julianacampag
Creator
Creator

Problemas com volume de dados

Bom dia,

Estou tentando fazer a carga de uma tabela que contem 23.000.000 de registros, no postgres, porém, não estou conseguindo chegar ao final do processamento aparece o seguinte erro:

SQL##f - SqlState: S1001, ErrorCode: 4, ErrorMsg: Out of memory while reading tuples.

Pedido_Vendas_Itens:

SQL SELECT *

FROM  xxx."public"."itens_pedido_venda"

where d_e_l_e_t_ <> '*'

Para fazer a carga, estou usando a seguinte expressão:

Pedido_Vendas_Itens:

SQL SELECT *

FROM  xxx."public"."itens_pedido_venda";

STORE Pedido_Vendas_Itens into Pedido_Vendas_Itens.qvd;

//DROP Table Pedido_Vendas_Itens;


Fiz uma carga usando o comando Limit, e carreguei apenas 1000 registros. O qvd gerado ficou com 120KB.

Alguém tem alguma ideia de como poderei fazer a carga dessa tabela??

1 Solution

Accepted Solutions
junior_ehlke
Creator III
Creator III

Acredito que assim como o Paulo falou, é interessante você usar um Inner Join direto no SQL juntando as duas tabelas, fazendo isso você consegue criar um QVD para cada mes (isso faria o QVD ficar pequeno e de leitura rápida) e no projeto basta Concatenar eles. Tome cuidado com outro fator, a quantidade de informações não é tão importante quanto o tamanho do QVD, tente deixar o menor possível. Uma opção é ao invez de dar um select *, você selecionar os campos necessários (caso possa desconsiderar alguns), as vezes fazendo apenas isso você ja consiga criar esse arquivo. Faça um teste com apenas um campo.

View solution in original post

8 Replies
Not applicable

Você pode tentar fazer com cargas incremental. Dividindo em vários QVD. Nessa tabela tem algum campo de data, para que você possa utilizar no where e separar por anos, meses ou dias?

julianacampag
Creator
Creator
Author

Olá Paulo,

Tenho um campo de data no formato YYYYMMDD.

Vou tentar fazer isso que você disse.

Not applicable

Juliana,

assim você pode separar de ano em ano, três em três anos, da forma que você achar melhor.

Acredito que você não esteja conseguindo carregar toda a tabela por falta de memória ou espaço no hd na hora de gravar o qvd.

Grato pela atenção.

julianacampag
Creator
Creator
Author

Paulo, cabei me confundindo com as tabelas...

A tabela que possui o campo de data que eu lhe disse era a tabela de CABEÇALHO dos pedidos. Esta tabela com 23.000.000 é a tabela de ITENS, e não possui campo de data...

Tem alguma outra ideia?

O vínculo entre essas duas tabelas é o número do pedido.

Not applicable

Você pode fazer um join entre elas e usar o campo de data da tabela cabeçalho na cláusula where para restringir os valores.

roberto_ntws
Contributor II
Contributor II

Bom dia Juliana. Como você esta?

Acredito que o erro que esteja encontrando seja devido a utilização de um driver desatualizado do PostgreSql.

Entre neste link, baixe o arquivo mais atual e instale-o. Acredito que seu problema será resolvido.

PostgreSQL: File Browser

Abraços.

Roberto Guilherme Gomes

felipe_dutra
Partner - Creator
Partner - Creator

Para gerar qvds por AnoMês:

Busque a menor e a maior data dos pedidos na tabela "Cabeçalho dos Pedidos";

Crie um laço de repetição que vai do menor AnoMês ao maior AnoMês;

For ...

     Tabela Cabeçalho:

          Faça um select da tabela usando uma cláusula para ler apenas os registros com AnoMês = AnoMês do Laço;

          Gere o qvd da tabela adicionando o AnoMês do Laço ao nome do qvd

     Tabela Itens:

          Faça um select da tabela usando uma cláusula para ler apenas os pedidos existentes na tabela Cabeçalho;

          Gere o qvd da tabela adicionando o AnoMês do Laço ao nome do qvd

     Drope as tabelas Cabeçalho e Itens.

Next

Abs,

Felipe

junior_ehlke
Creator III
Creator III

Acredito que assim como o Paulo falou, é interessante você usar um Inner Join direto no SQL juntando as duas tabelas, fazendo isso você consegue criar um QVD para cada mes (isso faria o QVD ficar pequeno e de leitura rápida) e no projeto basta Concatenar eles. Tome cuidado com outro fator, a quantidade de informações não é tão importante quanto o tamanho do QVD, tente deixar o menor possível. Uma opção é ao invez de dar um select *, você selecionar os campos necessários (caso possa desconsiderar alguns), as vezes fazendo apenas isso você ja consiga criar esse arquivo. Faça um teste com apenas um campo.