我运行了一个查询,该查询最终将以500,000个块为单位返回大约1700万行。一切似乎都很好,但是我遇到了以下错误:

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**


显然,这样的查询可能会花费一些时间。我对此表示满意(并且分块表示我知道我不会打破任何RAM限制-实际上我正在运行的文件输出显示查询在崩溃前完成了17M行中的16M!)。

但是我没有看到read_sql_query的任何直接选项。 params似乎是一个不错的候选人,但我在jaydebeapi文档中看不到任何提示给execute正确参数的提示。

如何克服这个问题并运行完整查询?

最佳答案

执行查询时,Presto会根据CPU,内存,执行时间和其他约束条件来限制每个查询。您达到执行时间限制。请确保您的查询是正确的,否则,可能会使群集崩溃。

要增加查询执行时间,请在session variables中定义一个新值。

SET SESSION query_max_execution_time=60m;

关于python - 如何增加最长查询时间?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46721982/

10-12 20:04
查看更多