【问题标题】:How can I increase the maximum query time?如何增加最大查询时间?
【发布时间】:2018-03-25 02:55:16
【问题描述】:

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

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 的正确参数可能是什么。

我怎样才能克服这个问题并运行我的完整查询?

【问题讨论】:

  • 您似乎已达到底层数据库查询时间限制。
  • 对不起,我对 JDBC 和 presto 都不熟悉,只能从堆栈跟踪中猜测。
  • @georgexsh 毕竟你是对的。直接查询数据库时遇到了同样的问题。
  • 酷,你愿意分享你的解决方案吗?
  • 没有解决方案,因为我没有设置数据库查询限制的管理权限:/

标签: python python-2.7 pandas presto jaydebeapi


【解决方案1】:

在执行查询时,Presto 通过 CPU、内存、执行时间和其他约束来限制每个查询。您达到了执行时间限制。请确保您的查询是正确的,否则您可能会导致集群崩溃。

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

SET SESSION query_max_execution_time=60m;

【讨论】:

    【解决方案2】:

    要覆盖最大查询执行时间,请在 CLI 中添加此参数:

    SET SESSION query_max_execution_time='60m';
    

    这会将其更改为 60 分钟,请注意 引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 2018-02-13
      • 2013-03-26
      • 2013-04-05
      • 2015-11-12
      • 2011-12-06
      相关资源
      最近更新 更多