尽管FGDB表大小限制,但ArcGIS无法将所有记录从庞大的CSV文件导入文件地理数据库表


11

我在Windows 7 64位和4GB RAM上使用ArcGIS 10.0。

我有一些非常大的CSV格式表要导入到ArcGIS中,它们都有大约30个字段,每张表最多有500万条记录(有些记录是该表的两倍或更多),并且文件大小约为5 GB。我试图将它们中的每一个作为单独的表导入到文件地理数据库中,以便最终可以将它们链接到要素类,并根据它们的位置分析表中的结果。

问题在于,ArcGIS似乎只是在某个时候停止了导入记录。我正在使用“转换”>“到地理数据库”下的“表到表”工具,但是“复制行”工具有相同的问题。即使我只是将CSV文件直接添加到ArcGIS中,而没有尝试先将其转换为FGDB表,问题仍然存在。我的一张表有大约1100万条记录,而ArcGIS仅导入了大约1000万条记录。ArcGIS不会告诉我发生了任何错误,该工具会像没有发生任何错误一样完成。

我已经尝试过几次了,进入FGDB表的记录数量始终是相同的,并且似乎不是我所听说过的文件大小限制(不是2的平方或16)。ArcGIS能够导入另一条包含大约600万条记录的CSV,并且所有记录都已通过(尽管由于较大的表,我遇到了问题,但较小的表现在也有点可疑)。ESRI的网站在文件地理数据库中列出了以下大小限制,而我远远没有碰到任何一个:

  • 文件地理数据库大小:无限制
  • 表或要素类的大小:1 TB(默认),4 GB或256 TB(带关键字)
  • 要素类和表的数量:2,147,483,647
  • 要素类或表中的字段数:65,534
  • 要素类或表中的行数:2,147,483,647
  • 地理数据库名称长度:操作系统在文件夹中允许的字符数
  • 要素类或表名称的长度:160个字符
  • 字段名称长度:64个字符
  • 文字栏位宽度:2,147,483,647

我真正需要做的就是添加几个字段,删除几个其他字段,并为新字段(一些现有字段的总和)生成值。我之所以使用ArcGIS,是因为我熟悉字段计算器,并且我知道(或直到现在才知道)它可以处理包含数百万条记录的表,而我使用的大多数其他桌面软件(MS Access / Excel) )在那么多的记录上令人窒息。因此,我愿意使用其他软件来操纵原始表,然后将结果表(更小)导出到ArcGIS。确实,我遇到了这个问题,而ArcGIS没有给我任何错误或警告甚至表明该问题正在发生,这一事实使我想尽可能地在ArcGIS之外处理这些数据。


2
如果“进入FGDB表的记录数始终相同”,那么我将查看最后一个记录和下一个记录,以查看它们中是否包含与之前成功导入的数百万记录相比不一致的内容。
PolyGeo

1
好主意。我看不到被截断的FGDB表中的最后一条记录与它之后的记录(来自CSV)之间的任何区别。我只是尝试从源CSV中删除所有成功导入的记录,然后将其余的导入到另一个FGDB表中,并且它起作用了。因此,任何一条记录似乎都不是问题。更糟的是,我合并了两个FGDB表(在两个FGDB表之间,我拥有所有的源记录),然后ArcGIS再次假装一切正常,但是合并后的表仅包含两个表的1090万个记录中的960万个FGDB表。
Dan C

您是否与ESRI一起发起了支持事件?似乎在这一点上,您已经发现了可能是一个相当严重的问题。如果没有其他要求,支持人员只是因为他们可能已经知道解决方案,或者愿意为测试提供帮助,便会对了解它感兴趣。
2012年

我同意Get Spatial,但是您可能要运行的最后一项测试是生成一个CSV文件,其中一个字段中您可以放置​​相同的值(也许是“ test”)。如果您的理论是最大960万行,那么只要使用1000万行“测试”就可以达到此限制,而当使用950万行时就不会达到此限制。
PolyGeo

我现在尝试使用不同但也很大(超过1000万条记录)的CSV,但它以相同的方式失败,但使用的行不同(大约有890万条记录)。因此,它似乎不是特定的记录数或特定的表大小。我将尝试使用具有两个字段的测试CSV,看看会发生什么。我无论如何都会在周一致电ESRI,此过程失败且没有错误消息是不可接受的,甚至会使确实记录在案的记录令人怀疑。
Dan C

Answers:


9

我确实为此打电话给ESRI支持,他们的回答并不令人鼓舞,但确实可以解释问题。解释ESRI:问题是,作为32位软件的ArcGIS Desktop最多只能使用4GB RAM。文本文件在存储为表格之前,必须先在RAM中进行处理,因此在处理过程中,某些时候,ArcGIS达到了RAM限制,然后才停止。我导入的文件大小约为6GB。显然,它没有给出错误消息而失败的事实对我来说是唯一的,我尝试让其他人在办公室执行此操作,并且导入仍然失败,但是它给出了错误消息(这是无用的,但至少可以使用户知道出了点问题),ESRI代表说应该给出一个错误。

我的解决方案是使用文本编辑器(我使用EditPad Pro)将文件拆分为两个较小的CSV,将它们分别作为单独的表导入到FGDB中,然后合并两个FGDB表。由于某种原因,这在我第一次尝试时失败了,但后来又解决了。我可能会对此进行更全面的测试,我将不断处理这种大小的文件。

我使用的是ArcGIS 10.0,但是ArcGIS 10.1 Service Pack 1刚刚发布,并且添加了使用64位背景地理处理器的功能,这将使地理处理器使用超过4GB的RAM,这可能会解决此问题,但我无法解决测试一下。

更新:我现在正在使用ArcGIS 10.1 SP1(带有64位背景地理处理插件),并且确实可以成功导入这些巨大的.CSV,至少是到目前为止我已经处理过的。在具有14GB RAM(是14)的计算机上,具有大约1,050万行的6GB .CSV成功导入了FGDB表。


1
如果您可以尝试在64位GDAL版本中运行它,我会很好奇。我敢打赌它会很好。
拉吉·亚瑟(Ragi Yaser Burhum)2012年

7

出于数据加载的目的,将巨大的CSV文件读取到内存中是很愚蠢的。它实际上只需要一次读取1行。

我建议编写一个Python脚本,并使用该csv模块逐行读取该脚本,并使用InsertCursor或(最好是arcpy.da.InsertCursor,因为速度较快,但仅在10.1可用)将行插入表中。

编辑:只需阅读您的最后一段。听起来您实际上可以很轻松地在Python中完成所有操作,甚至可以将结果导出回CSV或其他格式。

如果您可以准确地描述需要对每一行和每一列进行的操作,那将很有帮助。


4

您是否尝试过将5GB的csv文件拆分为小文件。

有一个工具可以根据行数或文件数来拆分csv。

拆分文件,然后尝试导入。。但是此工具有一个限制,我认为它仅适用于文件中的表(我认为是这样)。请 试一下。

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


我计划尝试,如果需要的话,不会处理太多CSV,因此我可能会使用文本编辑器手动将其拆分。我仍然想找出是否有人遇到了这个问题,如果ArcGIS会养成误解大表的习惯,甚至没有礼貌地抛出无用的错误消息,那将是一个问题。
Dan C

好的,我只是尝试了一下,并且它可以部分工作。将CSV拆分为两个较小的CSV文件后(手动,使用文本编辑器),它们成功地导入了两个单独的FGDB表中,并且所有记录都在那里。但是,当我尝试将这两个FGDB表合并为一个时,ArcGIS再次运行该过程,就好像没有什么问题,然后合并的表丢失了130万条记录。
Dan C

2

我在大型管道分隔的文本文件(2,712,391)行的大约四分之一的同一行中遇到了此错误(001156)。
因此,我认为该行有问题,但与其余各行相同。
我最终从部分导入中删除了行,然后加载了数据(“加载”>“加载数据...”),并且能够获取所有2M +行。

我也正在16 GB RAM上使用带有64位背景地理处理的10.1 SP1,这是一个将利用RAM的进程(尚未在64位上启用每个进程)。
缓慢而笨拙的解决方法,但是它始终有效。
如果任何程度的导入均未成功,则可能必须先设置空表。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.