cuducos/minha-receita

Erro ao criar o JSON

Closed this issue · 6 comments

Olá, primeiramente parabéns pelo projeto!

Já usei várias vezes para baixar a base, mas após as últimas alterações está dando esse erro:

`Creating the JSON data for each CNPJ 0% | | (0/60267819, 0 it/hr) [0s:0s]panic: send on closed channel

goroutine 90099308 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc001cffd40, 0xc01b25c000?)
/srv/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
/srv/minha-receita/transform/venues.go:56 +0x3b
panic: send on closed channel

goroutine 90099306 [running]:
github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows.func1(0xc001cffd40, 0xc01b25c000?)
/srv/minha-receita/transform/venues.go:74 +0x72
created by github.com/cuducos/minha-receita/transform.(*venuesTask).produceRows
/srv/minha-receita/transform/venues.go:56 +0x3b`

comando utilizado:
minha-receita transform --directory /srv/minha-receita/data/

Faltam detalhes para eu conseguir te ajudar.

  • qual a data de extração dos arquivos está usando? Qual o conteúdo do updated_at.txt?
  • Qual as configurações do servidor/computador?
  • Está usando Docker?

Talvez as issues #176 e #203 te ajude.

Desculpe esqueci de adicionar mais informações.

Seguem os detalhes:

  • updated_at.txt => 2024-04-13
  • Go go1.22.2 linux/amd64
  • PostgreSQL 16 - localhost
  • AlmaLinux (64-bit)
  • 4 CPU / 16 GB / 1 TB SSD
  • Está rodando diretamente da máquina virtual (sem docker).

Comandos executados:

  • minha-receita download --directory /srv/minha-receita/data/
  • minha-receita transform --directory /srv/minha-receita/data/

Obs.: O banco de dados já está populado e estou tentado atualizar as informações, por isso não estou rodando com o --clean-up

O banco de dados já está populado e estou tentado atualizar as informações

Você não vai conseguir.
A coluna id tem que ser única, então vai dar conflito quando ele tenta escrever no PostgreSQL um CNPJ que já existe.

O melhor é exlcuir a base de dados e começar do zero.
A opção --clean-up do comando transform faz isso automaticamente para você, se quiser.

Acho que seria interessante verificar se já existe e se existir substituir a informação, pois no meu caso o banco de dados não pode ficar "vazio" enquanto é feita a atualização das informações.

Mas muito obrigado. Vou rodar aqui para atualizar utilizando o clean-up.

Acho que seria interessante verificar se já existe e se existir substituir a informação

Computacionalmente falando, um “upsert” é muito mais caro do que o carregamento em lote.
Isso faria o processo do ETL saltar de 2h para dias.

Não é uma opção.

no meu caso o banco de dados não pode ficar "vazio" enquanto é feita a atualização das informações.

No meu também não.
Por isso para “atualizar” uso os passos descritos em #142

Resumo:

  1. criar novo banco de dados
  2. subir dados novos para novo banco de dados
  3. mudar a aplicação para ler do novo banco de dados
  4. jogar no lixo o banco de dados antigo

0% de downtime ; )