rictom / rede-cnpj

Visualização gráfica de relacionamentos entre sócios e empresas com dados públicos de CNPJ.
MIT License
183 stars 75 forks source link

Travando na parte final do script de tabelas #24

Closed henriquearake1 closed 1 year ago

henriquearake1 commented 1 year ago

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.

rictom commented 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.

henriquearake1 commented 1 year ago

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. image

Está parado no mesmo ponto há uma hora:

image

rictom commented 1 year ago

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

henriquearake1 commented 1 year ago

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. image

Mas não, eu não apertei nada, e ele continua na mesma tela: image

henriquearake1 commented 1 year ago

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

rictom commented 1 year ago

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.

henriquearake1 commented 1 year ago

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

rictom commented 1 year ago

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.

rictom commented 1 year ago

E desativa o Modo de edição rápido, que acontece a coisa de parar a execução do nada

henriquearake1 commented 1 year ago

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.

henriquearake1 commented 1 year ago

Atualizando, tentei rodar pelo baixar-converter.v2 e continua travando na hora de gerar o rede_search.db. Não estou conseguindo. Mesmo erro.

rictom commented 1 year ago

Quais os tamanhos dos arquivo cnpj.db e rede,db? O seu computador tem quanta memória RAM?

henriquearake1 commented 1 year ago

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.

henriquearake1 commented 1 year ago

Chegamos na mesma parte e não há atividade no script. image image CNPJ.db com 30 gigas rede.db com 4.5 gigas rede_search 24kb

rictom commented 1 year ago

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.

rictom commented 1 year ago

E vc acompanha no Gerenciador de Tarefas. Para mim, aparece algo como image

rictom commented 1 year ago

Se funcionar... tem que apertar o botão "Escrever modificações" para salvar senão vc perde tudo.

henriquearake1 commented 1 year ago

Acho que está rodando: image image

henriquearake1 commented 1 year ago

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'

;

rictom commented 1 year ago

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'

;

henriquearake1 commented 1 year ago

Vou tentar agora

henriquearake1 commented 1 year ago

É interessante, ele trava no primeiro insert. Vou te mandar e-mail.