如果列表元素在循环中花费 X 时间到 运行,则验证它们
Validate list elements if they take X time to run in a loop
我有一个列表,其中包含 SQL 可以在外部 Trino CLI 中执行的代码。因此,例如,我的嵌套列表如下所示:
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秒,则kill它,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])
但它并没有太大作用,我总是偶尔会超时。有什么想法吗?
而不是实际 运行 查询,您可以询问 Trino 查询语法是否有效。只需将以下内容添加到您的每个查询中:
EXPLAIN (TYPE VALIDATE)
https://trino.io/docs/current/sql/explain.html#explain-type-validate
我有一个列表,其中包含 SQL 可以在外部 Trino CLI 中执行的代码。因此,例如,我的嵌套列表如下所示:
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秒,则kill它,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])
但它并没有太大作用,我总是偶尔会超时。有什么想法吗?
而不是实际 运行 查询,您可以询问 Trino 查询语法是否有效。只需将以下内容添加到您的每个查询中:
EXPLAIN (TYPE VALIDATE)
https://trino.io/docs/current/sql/explain.html#explain-type-validate