使用SQLite的Jupyter Python给我“数据库或磁盘已满”错误

时间:2018-11-15 16:05:44

标签: python linux pandas sqlite jupyter

我创建了一个SQLite数据库,其中从CSV文件导入了数十亿行(目前为1.1 TB)到数据库的各种表中。一个这样的表(X)包含超过50 GB的数据。我正在使用Jupyter Python(在我自己的conda环境中)来获取对该表查询的结果。该表具有基于time列的各种年份的数据,因此我也可以使用条件(在where子句中)仅获取年度数据或每月数据。

使用创建表时使用的主键在此表上建立索引。

我正在使用熊猫查询数据库并获取结果:

pd.read_sql_query("select id, strftime(\"%Y-%m\", time) as month, count(case value when '1' then 1 else null end) as values_count from X where time>= '2018-01-01' GROUP BY id, strftime(\"%Y-%m\", time);", conn)

在上面的查询中,我试图仅根据2018年的月份对所有ID进行分组(考虑到我没有未来几年的数据),并在它们等于1时计算值。

我一直遇到DatabaseError: database or disk is full错误。

规格为:

  • SQLite3版本:3.25.2
  • Python版本(在Jupyter环境中): 3.7.0
  • Linux内存:295 GB

我很确定我将能够使用可用的内存来解析并生成SQL输出(因为同一数据库上的另一个查询有效),但是我不确定Python是否使用内存或临时目录来产生结果。该查询还会在将近30分钟(使用几乎100%的CPU)之后终止。

我还研究了将chunksize用作read_sql_query,但似乎在查询成功执行后很有用。任何人都可以进一步阐明我如何进行这项工作吗?

0 个答案:

没有答案