Closed henriquearake1 closed 1 year ago
Essa tabela rede_search.db é bem grande, vai ocupar uns 11GB no disco. Então você tem que ver se tem espaço suficiente, ao menos o dobro disso no HD. A mensagem também pode ser um problema de memória RAM, então se vc rodar de novo, abra o Gerenciador de Tarefas e veja quanto memória o processo está ocupando. Se chegar perto dos 100% é sinal que pode travar de novo. Se o seu micro tem pouca memória, feche os outros aplicativos.
Espaço de HD tem tranquilo. Estou rodando em HD externo com um tera de espaço. Vou mandar o print aqui do gerenciador de tarefas.
Está parado no mesmo ponto há uma hora:
Pela imagem que vc mandou do gerenciador de tarefas, parece que o script não está rodando... Vc poderia ordenar por CPU e ver quanto consome algum processo Python. Estranho não aparecer na imagem. Para mim consome pelo menos uns 10 a 20% da cpu. Uma coisa possível é vc ter clicado ou apertado alguma tecla com o console em primeiro plano e daí ter parado, devido à opção Modo de Edição Rápida do prompt. O python para mas fica difícil saber que isso aconteceu
Feito, mas o python nem aparece. É a primeira vez que isso acontece, nas outras vezes que eu atualizei o banco de dados eu não tive esse problema.
Mas não, eu não apertei nada, e ele continua na mesma tela:
Eu sempre baixo o código fonte de novo tanto do rede quanto do cnpj toda vez que vou atualizar o banco de dados. Vou tentar rodar o script na versão anterior pra ver se ele vai travar no mesmo lugar
Olha, se já gerou o rede.db, você poderia economizar tempo e rodar só essa parte que gera o arquivo rede_search.db. Se você entende de python, seria só recortar a parte que gera o rede.db... Ou você copia o sql e roda essa parte que gera o rede_search.db... Abre o Dbbrowser, cria um novo banco rede_search.db (não vai dar aproveitar esse), anexa o cnpj.db e rede.db e roda o sql.
Eu cancelei o script. O arquivo rede que ele gerou dessa vez tem 4.5 Gb. Não deve estar completo.
E eu não manjo quase nada de Python, não. sou advogado hahahaha
Entendi. Olha, se for rodar de novo, outra opção é tentar o programa baixar-converter.v2 que está em https://www.redecnpj.com.br/rede/aviso, que é mais simples. Só prestar atenção no começo, NÃO selecione as opções de baixar e de gerar o cnpj.db, escolha só a opção 3 de gerar o rede.db e rede_search.db.
E desativa o Modo de edição rápido, que acontece a coisa de parar a execução do nada
Estou desconfiado que, na hora de gerar o cnpj.db, deve ter dado algum problema. De qualquer maneira, estuo rodando aqui a versão ".exe" pra ver se funciona. Retornarei.
Atualizando, tentei rodar pelo baixar-converter.v2 e continua travando na hora de gerar o rede_search.db. Não estou conseguindo. Mesmo erro.
Quais os tamanhos dos arquivo cnpj.db e rede,db? O seu computador tem quanta memória RAM?
Estou rodando o script novamente, mas o cnpj.db tem 30 gigas e o rede.db tinha 4 gigas, mas eu apaguei para rodar de novo para gerar o rede.db e o rede.search, que só tinha 25kb. Meu note tem 8gb de RAM e eu já tinha conseguido gerar esses arquivos usando o script (não o .exe) no mês passado.
Chegamos na mesma parte e não há atividade no script.
CNPJ.db com 30 gigas
rede.db com 4.5 gigas
rede_search 24kb
Como vc tentou várias vezes, provavelmente não vai funcionar. Talvez seja uma questão de memória RAM (seria bom vc testar em outra máquina com mais mémória). Teria que tentar de forma diferente. Eu sugiro vc fazer a sugestão: Abre o Dbbrowser (https://sqlitebrowser.org/), cria um novo banco rede_search.db,, anexa o cnpj.db e rede.db (botão anexar banco de dados). Numa aba Executar SQL vc roda:
DROP TABLE if exists id_search; CREATE virtual TABLE id_search using fts5 (id_descricao);
insert into idsearch select 'PJ' || te.cnpj ||'-' || t.razao_social as id_descricao from cnpj.estabelecimento te left join cnpj.empresas t on t.cnpj_basico=te.cnpj_basico where te.matrizfilial is '1' UNION ALL select 'PJ' || te.cnpj ||'-' || te.nome_fantasia as id_descricao from cnpj.estabelecimento te -- where trim(te.nome_fantasia) <>'' --incluir este where faz que ignore cnpj filial sem nome fantasia, o que faz falta na hora de busca filiais por cnpj básico UNION ALL select id1 as iddescricao from rede.ligacao where substr(id1,1,3)<>'PJ' UNION ALL select id2 as iddescricao from rede.ligacao where substr(id2,1,3)<>'PJ'
;
Isso deve levar pelo menos uma hora... Se o seu disco D for lento, talvez duas horas ou mais.
E vc acompanha no Gerenciador de Tarefas. Para mim, aparece algo como
Se funcionar... tem que apertar o botão "Escrever modificações" para salvar senão vc perde tudo.
Acho que está rodando:
Acho que deu erro. Não saiu do lugar Interrompi aqui:
Execução finalizada com erros. Resultado: interrupted Na linha 4: insert into idsearch select 'PJ' || te.cnpj ||'-' || t.razao_social as id_descricao from cnpj.estabelecimento te left join cnpj.empresas t on t.cnpj_basico=te.cnpj_basico where te.matrizfilial is '1' UNION ALL select 'PJ' || te.cnpj ||'-' || te.nome_fantasia as id_descricao from cnpj.estabelecimento te -- where trim(te.nome_fantasia) <>'' --incluir este where faz que ignore cnpj filial sem nome fantasia, o que faz falta na hora de busca filiais por cnpj básico UNION ALL select id1 as iddescricao from rede.ligacao where substr(id1,1,3)<>'PJ' UNION ALL select id2 as iddescricao from rede.ligacao where substr(id2,1,3)<>'PJ'
;
Se você tiver paciência, roda esta sql... Vc roda cada parte insert... até ; um por vez, pra ver se ele aceita. Se você quiser uma outra solução, me manda um email para redecnpj.com.br@gmail.com
DROP TABLE if exists id_search; CREATE virtual TABLE id_search using fts5 (id_descricao);
insert into idsearch select 'PJ' || te.cnpj ||'-' || t.razao_social as id_descricao from cnpj.estabelecimento te left join cnpj.empresas t on t.cnpj_basico=te.cnpj_basico where te.matriz_filial is '1' ; insert into idsearch select 'PJ' || te.cnpj ||'-' || te.nome_fantasia as id_descricao from cnpj.estabelecimento te -- where trim(te.nome_fantasia) <>'' --incluir este where faz que ignore cnpj filial sem nome fantasia, o que faz falta na hora de busca filiais por cnpj básico; insert into id_search select id1 as iddescricao from rede.ligacao where substr(id1,1,3)<>'PJ' ; insert into id_search select id2 as iddescricao from rede.ligacao where substr(id2,1,3)<>'PJ'
;
Vou tentar agora
É interessante, ele trava no primeiro insert. Vou te mandar e-mail.
Esse é o errro:
Tue Jul 25 17:55:42 2023 -executando parte: 3/4
insert into id_search --select distinct id_descricao select iddescricao from ( select 'PJ' || te.cnpj ||'-' || t.razao_social as id_descricao from cnpj.estabelecimento te left join cnpj.empresas t on t.cnpj_basico=te.cnpj_basico where te.matrizfilial is '1' UNION ALL select 'PJ' || te.cnpj ||'-' || te.nome_fantasia as id_descricao from cnpj.estabelecimento te -- where trim(te.nome_fantasia) <>'' --incluir este where faz que ignore cnpj filial sem nome fantasia, o que faz falta na hora de busca filiais por cnpj básico UNION ALL select id1 as iddescricao from rede.ligacao where substr(id1,1,3)<>'PJ' UNION ALL select id2 as iddescricao from rede.ligacao where substr(id2,1,3)<>'PJ' ) as tunion group by id_descricao --talvez group by seja mais rápido que distinct
Traceback (most recent call last): File "D:\rede-cnpj-master - julho\rede-cnpj-master\rede\bases\rede_cria_tabela_rede.db.py", line 246, in
executaSequencia(camDBrede_search, sqlsequencia=sql_search)
File "D:\rede-cnpj-master - julho\rede-cnpj-master\rede\bases\rede_cria_tabela_rede.db.py", line 163, in executaSequencia
engine.execute(sql)
sqlite3.OperationalError: disk I/O error
Esse erro ocorreu depois de algumas horas travado nessa etapa. Estou rodando novamente para ver se ocorre de novo.