C++SQLite在C接口中导入整个CSV文件
C++ SQLite importing entire CSV file in C Interface
有没有办法通过C接口将整个CSV文件导入SQLite?
我知道命令行导入看起来像这样,
sqlite> .mode csv <table>
sqlite> .import <filename> <table>
但我需要能够在我的程序中做到这一点。
我还应该注意到,我已经成功地在C++中创建了一个CSV读取器,它读取CSV文件并逐行将其内容插入到表中。
这就完成了任务,但对于包含730k行的CSV,这种方法需要大约20分钟才能加载,这太长了。
(机器:Intel(R)Core(TM)2 Duo CPU E8500@3.16GHz 3.17GHz,4.0 GB Ram,Windows 7 64位,Visual Studio 2010)
这对我的项目来说是不可接受的,所以我需要一种更快的方式,大约需要2-3分钟。
有没有办法引用文件的内存位置,这样就不需要导入了?若有的话,信息的访问速度慢吗?
SQLite可以将CSV文件作为二进制数据吗?这会加快导入文件的速度吗?
想法?
注意:我在C接口中使用":memory:"选项来在内存中加载DB以提高速度(我希望如此)。
编辑
在做了更多的优化之后,我发现了这一点。它解释了如何通过编写将insert语句分组到一个事务中。
BEGIN TRANSACTION;
INSERT into TABLE VALUES(...);
...Million more INSERT statements
INSERT into TABLE VALUES(...);
COMMIT;
这在性能上产生了巨大的改进。
有用的相关旁注
此外,如果您希望从查询结果创建表或将查询结果插入表,请尝试此方法创建表或此方法将结果插入表。
插入链接对于插入到表中可能不明显。要执行此操作的查询如下所示。
INSERT INTO [TABLE] [QUERY]
其中[TABLE]
是您希望运行的查询[QUERY]
的结果进入的表。
我已经成功地在C++中创建了一个CSV读取器,它读取CSV文件并逐行将其内容插入到表中。。。加载大约需要20分钟
将所有插入放入一个事务中,或者每个事务至少批处理100或1000行,我希望您的程序运行得更快。
- 正在将csv文件读取为双精度矢量
- 如何选择在 csv 文件中输出的位置
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 无法读取C++中的 CSV 文件
- 流:CSV 文件中的换行符
- 如何正确格式化csv文件?
- 正在分析CSV文件-C++
- 如何获取组件和搜索 CSV 文件
- C++ 中的 CSV 文件管理(特别是设置标头和每个标头将分别具有的值)
- 无法逐行读取.csv文件
- 非常快速地阅读 CSV 文件
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- CSV文件之间的差异,使用getline()产生不同的结果
- 将 CSV 文件中的双倍值C++到矢量中
- C++ 将 CSV 文件的列写入向量
- 使用getline读取.csv文件时出现问题
- CSV文件未从缓冲区获取数据
- 错误的值是使用c++从CSV文件数据写入数组
- 将csv文件加载到MySQL C++中
- 读取C++中的大型CSV文件(~4GB)