我运行了一个查询,最终将以500,000块的大小返回大约17M行。一切似乎都很顺利,但我遇到了以下错误:
Traceback (most recent call last):
File "sql_csv.py", line 22, in <module>
for chunk in pd.read_sql_query(hours_query, db.conn, chunksize = 500000):
File "/Users/michael.chirico/anaconda2/lib/python2.7/site-packages/pandas/io/sql.py", line 1424, in _query_iterator
data = cursor.fetchmany(chunksize)
File "/Users/michael.chirico/anaconda2/lib/python2.7/site-packages/jaydebeapi/\__init__.py", line 546, in fetchmany
row = self.fetchone()
File "/Users/michael.chirico/anaconda2/lib/python2.7/site-packages/jaydebeapi/\__init__.py", line 526, in fetchone
if not self._rs.next(): jpype._jexception.SQLExceptionPyRaisable: java.sql.SQLException: Query failed (#20171013_015410_01255_8pff8):
**Query exceeded maximum time limit of 60.00m**
显然这样的查询可能需要一些时间;我对此很好(并且chunking意味着我知道我不会破坏任何RAM限制 - 实际上我运行的文件输出显示查询在崩溃之前完成了17M行中的16M!)。
但我没有看到read_sql_query
的任何直接选项。 params
似乎是一个不错的候选人,但我无法在jaydebeapi
文档中看到任何提示给execute
的正确参数的提示。
如何克服这个问题并运行我的完整查询?
答案 0 :(得分:1)
执行查询时,Presto会根据CPU,内存,执行时间和其他约束来限制每个查询。你达到了执行时间限制。请确保您的查询是正确的,否则可能导致群集崩溃。
要增加查询执行时间,请在session variables中定义新值。
SET SESSION query_max_execution_time=60m;
答案 1 :(得分:0)
要覆盖最大查询执行时间,请在CLI中添加以下参数:
SET SESSION query_max_execution_time='60m';
这将更改为60分钟,请注意单引号。