1

我正在尝试导入地名数据库(http://download.geonames.org/export/dump/特别是解压缩的 allCountries.zip 文件),如下所示:

-- yet another attempt to create geonames "quickly" wo a perl script 

CREATE TABLE geonames ( 
geonameid, 
name, 
asciiname, 
alternatenames, 
latitude, 
longitude, 
featureclass, 
featurecode, 
countrycode, 
cc2, 
admin1code, 
admin2code, 
admin3code, 
admin4code, 
population, 
elevation, 
dem, 
timezone, 
modificationdate DEFAULT '' 
); 

.bail OFF 
.separator "\t" 
.import allCountries.txt geonames 

我收到此错误:

错误:allCountries.txt 第 374993 行:预期有 19 列数据,但找到了 18

我理解错误: allCountries.txt 中的某些行的字段少于 19 个(最后一个字段假定为空白/空)。

我可以轻松地强制 SQLite3 将缺少的导入字段视为空白/空吗?

我意识到我可以编写 Perl 脚本等,但我很好奇这是否可以纯粹在 SQLite 中完成?

请注意,“.bail OFF”和为缺少的字段设置默认值都不起作用。

编辑:我仍然对答案感到好奇,但事实证明这是一条红鲱鱼:第 374993 行包含一个引号,它(正确地)抛出 sqlite3 import 关闭(参见sqlite3 import with quotes)。但是,所有行都包含 19 列数据。

4

1 回答 1

0

如果用 ' 删除两个字符 " 和 " 字符或完全删除它们,它将起作用。您需要对整个文件执行此操作。

这在其他一些地理名称数据库文件中也很普遍。我是这样做的,但是改变 sqlite 中的一些设置也可以完成这项工作。

注意:第二个字符是 utf-8 字符,所以最好从这里复制粘贴。

于 2013-10-07T11:38:18.267 回答