O ArcGIS falha ao importar todos os registros de um enorme arquivo CSV para uma tabela de geodatabase, apesar de estar dentro dos limites de tamanho da tabela FGDB

11

Estou usando o ArcGIS 10.0 no Windows 7 de 64 bits com 4 GB de RAM.

Eu tenho algumas tabelas muito grandes no formato CSV para importar para o ArcGIS, todas elas têm cerca de 30 campos, mais de 5 milhões de registros por tabela (algumas têm o dobro disso ou mais) e tamanhos de arquivo de até 5 GB. Estou tentando importar cada um deles para um geodatabase de arquivo como tabelas separadas, para que eu possa, finalmente, vinculá-los a uma classe de recurso e analisar os resultados nas tabelas de acordo com sua localização.

O problema é que o ArcGIS parece simplesmente parar de importar registros em um determinado ponto. Estou usando a ferramenta "Tabela em tabela" em Conversão> Para geodatabase, mas a ferramenta "Copiar linhas" tem o mesmo problema. Mesmo se eu apenas adicionar o arquivo CSV diretamente ao ArcGIS sem tentar convertê-lo em uma tabela FGDB primeiro, o problema é o mesmo. Uma das minhas tabelas possui cerca de 11 milhões de registros, e o ArcGIS importa apenas cerca de 10 milhões deles. O ArcGIS não me diz que ocorreu algum erro, a ferramenta termina como se nada estivesse errado.

Eu tentei algumas vezes agora e o número de registros que entram na tabela FGDB é sempre o mesmo e não parece ser um limite de tamanho de arquivo que eu já ouvi falar (não um quadrado de 2 ou 16) O ArcGIS foi capaz de importar outro CSV com cerca de 6 milhões de registros e todos os registros surgiram (embora com os problemas que estou tendo com a tabela maior, a menor também seja suspeita agora). O site da ESRI lista os seguintes limites de tamanho em um geodatabase , e estou longe de atingir qualquer um deles:

  • Tamanho do geodatabase do arquivo: sem limite
  • Tamanho da tabela ou da classe de recurso: 1 TB (padrão), 4 GB ou 256 TB com a palavra-chave
  • Número de classes e tabelas de recursos: 2.147.483.647
  • Número de campos em uma classe ou tabela de recurso: 65.534
  • Número de linhas em uma classe ou tabela de recurso: 2.147.483.647
  • Comprimento do nome do geodatabase: número de caracteres que o sistema operacional permite em uma pasta
  • Classe do recurso ou comprimento do nome da tabela: 160 caracteres
  • Comprimento do nome do campo: 64 caracteres
  • Largura do campo de texto: 2.147.483.647

Tudo o que realmente preciso fazer nessas tabelas é adicionar alguns campos, excluir outros e gerar valores para os novos campos (somas de alguns dos campos existentes). Estou usando o ArcGIS para isso porque estou familiarizado com a calculadora de campo e sei (ou sabia até agora) que ele poderia lidar com tabelas que consistem em milhões de registros, enquanto a maioria dos outros softwares de desktop que eu tenho à mão (MS Access / Excel ) engasga com tantos registros. Portanto, estou aberto a usar outro software para manipular a tabela original e exportar a tabela resultante (muito menor) para o ArcGIS. Realmente, o fato de eu estar tendo esse problema e o ArcGIS não estar me dando nenhum erro ou aviso de que o problema está ocorrendo me faz querer lidar com esses dados fora do ArcGIS o máximo possível.

Dan C
fonte
2
Se "o número de registros que fazem parte da tabela FGDB for sempre o mesmo", verificarei o último e o próximo registro para ver se eles podem ter algo que parece inconsistente em comparação aos milhões importados com sucesso anteriormente.
PolyGeo
1
Boa ideia. Não vejo diferença entre o último registro na tabela truncada do FGDB e o registro após (do CSV). Eu apenas tentei remover todos os registros importados com êxito do CSV de origem e depois importar o restante para outra tabela FGDB, e funcionou. Portanto, não parece ser um problema com nenhum registro. Para piorar as coisas, mesclei as duas tabelas FGDB (entre as duas tenho todos os registros de origem) e mais uma vez o ArcGIS finge que tudo correu bem, mas a tabela mesclada contém apenas 9,6 milhões dos 10,9 milhões de registros dos dois. Tabelas FGDB.
Dan C
Você abriu um incidente de suporte com a ESRI? Parece que, neste ponto, você descobriu o que poderia ser um problema bastante sério. Se nada mais, a equipe de suporte estaria interessada em saber sobre isso simplesmente porque eles já sabem uma solução ou estariam dispostos a ajudar nos testes.
Get Spatial
Concordo com Get Spatial, mas um último teste que você pode querer executar é gerar um arquivo CSV com um campo no qual você coloca valores idênticos (talvez "teste"). Se sua teoria é de que 9,6 milhões é o máximo, esse limite seria atingido a qualquer momento 10 milhões de linhas de "teste" são usadas, mas não quando 9,5 milhões de linhas são.
PolyGeo
Agora eu tentei com um CSV diferente, mas também grande (mais de 10 milhões de registros), e ele falha da mesma maneira, mas em uma linha diferente (cerca de 8,9 milhões de registros entram). Portanto, não parece haver um número específico de registros ou um tamanho de tabela específico. Vou tentar um teste CSV com dois campos e ver o que acontece. Eu ligarei para a ESRI na segunda-feira, de qualquer maneira, porém, esse processo falhando sem mensagem de erro é inaceitável e torna até os registros que o tornam suspeito.
Dan C

Respostas:

9

Liguei para o suporte da ESRI sobre isso e a resposta deles não foi animadora, mas explicou o problema. Parafraseando a ESRI: O problema é que o ArcGIS Desktop, sendo um software de 32 bits, se limita ao uso máximo de 4 GB de RAM. O arquivo de texto deve ser processado na RAM antes de ser armazenado como uma tabela; portanto, em algumas situações durante o processamento, o ArcGIS atingiu o limite de RAM e parou por aí. O arquivo que eu estava importando tinha cerca de 6 GB de tamanho. Aparentemente, o fato de ter falhado sem fornecer uma mensagem de erro é exclusivo para mim. Tentei que outras pessoas em meu escritório o fizessem e a importação ainda falhou, mas deu uma mensagem de erro (uma inútil, mas pelo menos algo que deixava o o usuário sabe que algo deu errado), e o representante da ESRI disse que deveria dar um erro.

Minha solução foi dividir o arquivo em dois CSVs menores usando um editor de texto (usei o EditPad Pro), importar cada um deles para um FGDB como uma tabela separada e mesclar as duas tabelas FGDB. Por alguma razão, isso falhou na primeira vez que tentei, mas funcionou mais tarde. Eu posso testar isso um pouco mais completamente, vou lidar com arquivos desse tamanho continuamente.

Estou usando o ArcGIS 10.0, mas o ArcGIS 10.1 service pack 1 acabou de ser lançado e adiciona a capacidade de usar um geoprocessador de segundo plano de 64 bits, que permitirá que o geoprocessador use mais de 4 GB de RAM, o que pode corrigir esse problema, mas não posso teste isso.

ATUALIZAÇÃO: Agora estou usando o ArcGIS 10.1 SP1 (com o complemento de geoprocessamento em segundo plano de 64 bits) e importa com sucesso esses .CSVs gigantes, pelo menos os que já lidei até agora. Em uma máquina com 14 GB de RAM (sim, 14), um .CSV de 6 GB com cerca de 10,5 milhões de linhas é importado com êxito para uma tabela FGDB.

Dan C
fonte
1
Gostaria de saber se você pode tentar executá-lo em uma versão de 64 bits do GDAL. Aposto que funcionaria bem.
Ragi Yaser Burhum
7

Para fins de carregamento de dados, a leitura de um enorme arquivo CSV na memória é bastante tola. Ele realmente só precisa ler uma linha de cada vez.

Sugiro escrever um script Python e usar o csvmódulo para lê-lo linha por linha e inserir linhas na tabela usando um InsertCursor(ou de preferência um arcpy.da.InsertCursor, pois é mais rápido, mas disponível apenas na versão 10.1).

Edit: Basta ler o seu último parágrafo. Parece que você provavelmente poderia fazer isso tudo dentro do Python com bastante facilidade, mesmo exportando os resultados de volta para CSV ou algum outro formato.

Se você pudesse descrever exatamente o que precisa fazer com cada linha e coluna, isso seria útil.

blah238
fonte
4

Você já tentou dividir os arquivos csv de 5 GB em pequenos.

existe uma ferramenta para dividir o csv com base em linhas ou contagem de arquivos.

Divida os arquivos e tente importar .. Mas há uma limitação nessa ferramenta, acho que funcionará apenas para a tabela em um arquivo (acho que sim). pls. Experimente.

http://www.shivaranjan.com/2008/11/06/how-to-split-csv-file-into-multiple-parts-easily-and-quickly/

vadivelan
fonte
Eu pretendo tentar que, se for necessário, não existem muitos CSVs para lidar, então provavelmente os dividirei manualmente com meu editor de texto. Eu ainda gostaria de descobrir se alguém já teve esse problema, se o ArcGIS criar o hábito de entender mal as tabelas grandes e não ter a cortesia comum de lançar uma mensagem de erro inútil, isso será um problema.
Dan C
OK, eu apenas tentei isso e funciona parcialmente. Depois de dividir o CSV em dois menores (manualmente, com um editor de texto), eles foram importados com sucesso para duas tabelas FGDB separadas e todos os registros estão lá. Mas quando tento mesclar essas duas tabelas FGDB em uma, o ArcGIS mais uma vez executa o processo como se nada estivesse errado, e a tabela mesclada está perdendo 1,3 milhão de registros.
Dan C
2

Eu estava encontrando esse erro (001156) na mesma linha de um arquivo de texto grande delimitado por canal (2.712.391) linhas cerca de um quarto do caminho.
Então, pensei que havia algo errado com essa linha, mas era idêntica ao restante das linhas.
Acabei excluindo as linhas da importação parcial e, em seguida, carregando os dados (Carregar> Carregar Dados ...) e consegui obter todas as 2 milhões de linhas.

Também estou usando o geoprocessamento em segundo plano 10.1 SP1 com 64 bits em 16 GB de RAM e é um processo que utilizará a RAM (nem todos os processos estão ativados em 64 bits ainda).
Solução lenta e desajeitada, mas funciona de maneira consistente.
Talvez você precise configurar a tabela vazia primeiro se não tiver êxito com nenhum grau de importação.

Matt
fonte