我有一个很大的 id 列表,我想在 sqlite3 中用于查询。我可以在 shell、perl 或 R 中一个接一个地循环,或者使用 xargs 或 ',' 进行巧妙的破解,以便批量查询以提高效率,但我想知道是否有直接加载的方法临时表中的文件或执行“在([读取文件])中的位置。处理这种常见情况的标准方法是什么?
问问题
216 次
2 回答
3
您的意思是 sqlite3 命令行外壳,对吗?
是的,该选项可以在(临时)表中以某种分隔格式加载文件。
create temporary table ids (id integer primary key);
.import ids.txt ids
每个 id 在哪里ids.txt
会有单独的行。如果要导入多列,则必须.separator
事先使用命令设置分隔符,但仅对于一列无关紧要。
请注意,integer primary key
它比任何其他列类型都快,因为它为 row id 起别名,并且 sqlite 将表存储在由 rowid 索引的 b 树中。因此,如果可以,请使用它。
于 2013-07-01T12:10:59.563 回答
0
我提供了一个大的单行解决方案:创建一串逗号分隔和引用的元素,并通过管道连接到 xargs。xargs 将尽可能多地放入命令行中,并根据需要多次重复该命令。
如果我在第二列中有一个包含我的元素的制表符分隔文件:
perl -lane ' push @x,$F[2]; END{ print join(", ",map{q{\"}.$_.q{\"}}@x)}' file.txt |\
xargs -t -I{} sqlite3 -separator $'\t' -header database.db \
'select * from xtable where mycolumn in ('{}') and myothercolumn="foo" order by bar"
于 2014-03-17T14:43:47.583 回答