1

我需要将 Geonames 数据库(http://download.geonames.org/export/dump/)导入 SQLite(文件大小约为 1 GB,±8,000,000 条记录,制表符分隔)。

我正在使用 Mac OS X 的内置 SQLite-possibilities,通过终端访问。一切顺利,直到记录 381174(使用旧文件测试,确切数字根据 Geonames 数据库的确切版本略有不同,因为它每隔几天更新一次),其中错误“预期 19 列数据但发现 18”被展示。

导致问题的确切行是:

126704 Gora Kyumyurkey Gora Kyumyurkey Gora Kemyurkey,Gora Kyamyar-Kup,Gora Kyumyurkey,Gora Këmyurkëy,Komur Qu",Komur Qu',Komurkoy Dagi,Komūr Qū',Komūr Qū”,Kummer Kid,Kömürköy Dağı,kumwr qwʾ,ك3ُمور 35ق. 48.24133 T MT AZ AZ 00 0 2471 亚洲/巴库 2014-03-05

我分别测试了各个国家,西方国家完全进口没有问题,让我相信问题出在某些条目中使用的异国字符的某个地方。(我已经把这行放到一个单独的文件中,并用其他几个数据库程序进行了测试,有些确实给出了错误,有些导入没有问题)。

我该如何解决这个错误,或者有其他方法可以导入文件吗?

感谢您的帮助,如果您需要更多信息,请告诉我。

4

3 回答 3

1

关于问题标题,初步搜索导致

GeoNames 格式描述(“utf8 编码中的制表符分隔文本”)

一些库(未经测试):

GUI(@charlest 提到):

SQLite 工具也具有导入功能:

于 2020-09-17T08:27:40.670 回答
0

我在这里使用地名论坛的脚本发现了同样的问题:http: //forum.geonames.org/gforum/posts/list/32139.page

尽管将脚本调整为在 Mac OS X (Sierra 10.12.6) 上运行,但我遇到了同样的错误。但是感谢脚本作者,因为它帮助我创建了 sqlite 数据库文件。

过了一会儿,我决定使用 sqlite DB Browser for SQLite(版本 3.11.2)而不是继续使用脚本。

这种方法我也有错误,发现我必须将导入对话框中的“引用字符”设置设置为空白状态。完成后,从 FULL allCountries.txt 文件的导入在我的 MacBookPro(一个旧的,但带有 SSD)上运行不到一个小时。

虽然我没有深入研究,但我假设地名文本文件不能以任何方式引用解析。每行只需要作为制表符分隔的 UTF-8 字符串处理。

在撰写本文时 allCountries.txt 为 1.5GB,包含 11,930,517 条记录。SQLite 数据库文件只有 3GB。

希望有帮助。

更新 1:进一步的调查显示,这确实是由于 geonames 文件中嵌入的引号引起的,在这里查看:https ://sqlite.org/quirks.html#dblquote表明 SQLite 存在引号问题。因此,您需要能够在 SQLite 中关闭引号解析。

尽管 3.11.2 版本的 DB Browser 基于 SQLite 3.27.2 没有忽略引号所需的模块,但我只能假设当您将“引号字符”设置为空白时它必须转义引号。

于 2019-07-22T22:08:38.970 回答
0

它看起来像一个双向文本问题。"كُمور قوء" 预计将位于逗号分隔的备用名称列表的末尾。但是,由于它是右旋(或 RTL),它显示在纬度和经度值的错误一侧。

我不了解您的导入方法,但在我看来,这可能就是它认为缺少一列的原因。

于 2015-11-16T14:21:52.090 回答