我需要将Geonames数据库(http://download.geonames.org/export/dump/)导入SQLite(文件大小约为1 GB,±8,000,000条记录,制表符分隔)。
我正在使用Mac OS X的内置SQLite功能,可通过终端访问。一切顺利,直到记录381174(使用较旧的文件测试,确切的数字略有不同,具体取决于Geonames数据库的确切版本,因为它每隔几天更新一次),其中错误“预计19列数据但找到18”显示。
导致问题的确切行是:
126704 Gora Kyumyurkey Gora Kyumyurkey Gora Kemyurkey,Gora Kyamyar-Kup,Gora Kyumyurkey,GoraKëmyurkëy,Komur Qu“,Komur Qu',Komurkoy Dagi,KomūrQū',KomūrQū“,Kummer Kid,KömürköyDağı,kumwr qw',كمور قوء38.73335 48.24133 T MT AZ AZ 00 0 2471 Asia / Baku 2014-03-05
我已经分别测试了各个国家,西方国家全部完全导入没有问题,让我相信问题是某些条目中使用的异国情调的某个地方。 (我把这行放到一个单独的文件中并使用其他几个数据库程序进行测试,有些确实给出了错误,有些导入没有问题)。
如何解决此错误,还是有其他方法可以导入文件?
感谢您的帮助,如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
它看起来像是双向文本问题。预计“كمورقوء”将以逗号分隔的备用名称列表结尾。但是,由于它是右旋(或RTL),它显示在纬度和经度值的错误一侧。
我没有您的导入方法的可见性,但似乎我认为这就是为什么它认为列缺失了。
答案 1 :(得分:0)
我在http://forum.geonames.org/gforum/posts/list/32139.page
的地名论坛中使用脚本发现了相同的问题尽管调整了脚本以在Mac OS X(Sierra 10.12.6)上运行,但我遇到了相同的错误。但是感谢脚本作者,因为它帮助我创建了sqlite数据库文件。
过了一会儿,我决定将sqlite DB Browser用于SQLite(版本3.11.2),而不是继续执行脚本。
我在此方法上也有错误,发现必须将导入对话框中的“报价字符”设置设置为空白状态。完成此操作后,从FULL allCountries.txt文件的导入就完成了,而在我的MacBookPro(旧版本但装有SSD)上花费了不到一个小时的时间。
尽管我没有更深入地研究,但我假设绝不能以任何方式对地名文本文件进行引用解析。每行只需要以制表符分隔的UTF-8字符串进行处理。
在撰写本文时,allCountries.txt为1.5GB,包含11,930,517条记录。 SQLite数据库文件不足3GB。
希望有帮助。
更新1: 进一步的调查表明,这确实是由于在地名文件中嵌入了引号引起的,在此处查看:https://sqlite.org/quirks.html#dblquote表明SQLite在引号方面存在问题。因此,您需要能够在SQLite中关闭报价解析。
尽管数据库浏览器的3.11.2版本基于SQLite 3.27.2,它没有必需的mod来忽略引号,但我只能假定将“ Quote character”设置为转义时必须转义引号。空白。
答案 2 :(得分:0)
关于问题标题,进行了初步搜索
GeoNames格式说明(“以utf8编码制表符分隔的文本”)
一些库(未试用):
GUI(由@charlest提及):
SQLite工具也具有导入功能: