Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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??
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.
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?
Olá Paulo,
Tenho um campo de data no formato YYYYMMDD.
Vou tentar fazer isso que você disse.
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.
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.
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.
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.
Abraços.
Roberto Guilherme Gomes
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
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.