【问题标题】:Validate list elements if they take X time to run in a loop验证列表元素是否需要 X 时间在循环中运行
【发布时间】:2021-12-09 17:27:27
【问题描述】:

我有一个列表,其中包含可以在外部 Trino CLI 中执行的 SQL 代码。例如,我的嵌套列表如下所示:

sql = []
sql = [['test 1', 'SELECT * FROM a.testtable1'],['test 2', 'SELECT * FROM a.testtable1']]

这个简单的循环检测是否有语法错误:

sql_results = []
for l in sql:
    sql_code = l[1]
    try:
        cur.execute(sql_code
        rows = cur.fetchall()
    except Exception as e:
        status = str(e)
    status = 'OK' if len(rows) > 1
    sql_results.append([l[0],sql_code,status])

效果很好,但有时查询时间过长并终止进程。知道如果一个查询在执行过程中持续时间超过 3 秒,那么这意味着语法是好的(我只对检查语法感兴趣,而不是查询结果)我想添加一个时间验证。就像是: 如果 SQL 执行持续超过 3 秒,则将其杀死并 status = 'OK'

我用时间试过这个:

import time
sql_results = []
for l in sql:
    sql_code = l[1]
    try:
        timeout = time.time() + 2
        cur.execute(sql_code)
        rows = cur.fetchall()
    except Exception as e:
        status = str(e)
    status = 'OK' if len(rows) > 1 or time.time() > timeout 
    sql_results.append([l[0],sql_code,status])

但这并没有多大作用,而且我不断收到偶尔的超时。有什么想法吗?

【问题讨论】:

标签: python loops time sdk trino


【解决方案1】:

您可以询问 Trino 查询语法是否有效,而不是实际运行查询。只需将以下内容添加到您的每个查询中:

EXPLAIN (TYPE VALIDATE)

https://trino.io/docs/current/sql/explain.html#explain-type-validate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 2020-10-14
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多