Snowflake中的异步查询执行:SQL执行被取消

时间:2018-03-30 17:44:33

标签: python python-3.x aws-lambda snowflake-datawarehouse snowflake

我使用Snowflake Database-as-a-service来存储和处理我们的数据。由于处理大量数据,我想运行一个查询,获取查询ID并让它以异步方式执行查询。系统的另一部分将通过使用该查询ID检查查询历史记录表来监视查询的状态。

我正在使用Snowflake Python Connector。

以下是我目前的样本:

from __future__ import print_function
import io, os, sys, time, datetime
modules_path = os.path.join(os.path.dirname(__file__), 'modules')
sys.path.append(modules_path)

import snowflake.connector

def async_query(data):
    connection = snowflake.connector.connect(
        user=data['user'],
        password=data['password'],
        account=data['account'],
        region=data['region'],
        database=data['database'],
        warehouse=data['warehouse'],
        schema=data['schema']
    )

    cursor = connection.cursor()
    cursor.execute(data['query'], _no_results=True)
    print(cursor.sfqid)

    return cursor.sfqid

这段代码似乎正在工作,即我得到了查询ID,但是有一个问题 - SQL查询失败并出现错误" SQL执行被取消。"在雪花。如果我删除_no_results=True参数,查询效果很好,但我必须等待它完成,这不是理想的行为。

导致" SQL执行被取消的任何想法"失败?

更多信息:我之所以不想等待它,是因为我在AWS Lambda上运行代码,而Lambdas的最长运行时间为5分钟。

1 个答案:

答案 0 :(得分:0)

如果_no_results = True指定了 ,则执行将被同步,因此应用程序必须等待查询完成。如果指定,查询将变为异步,因此应用程序将继续运行,但连接的析构函数将最终关闭会话,并且将取消所有活动查询。似乎" SQL执行被取消"。

AWS lambda将执行时间限制为5分钟,因此如果查询超过限制,则无法正常工作。

Btw _no_results = True是用于SnowSQL的内部参数,其行为将来可能会发生变化。