python - Snowflake中的异步查询执行: SQL execution canceled

标签 python python-3.x aws-lambda snowflake-cloud-data-platform

我正在使用 Snowflake 数据库即服务来存储和处理我们的数据。由于处理大量数据,我想运行一个查询,获取查询ID并让它异步执行查询。系统的另一部分将通过使用该查询 ID 检查查询历史表来监视查询的状态。

我正在使用 Snowflake Python 连接器。

这是我迄今为止所拥有的示例:

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 上运行代码,而 Lambda 的最长运行时间为 5 分钟。

最佳答案

如果指定_no_results=True,则执行是同步的,因此应用程序必须等待查询完成。如果指定,查询将变为异步,因此应用程序将继续运行,但连接的析构函数最终将关闭 session ,并且所有事件查询将被取消。看来这就是“SQL执行取消”的原因。

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

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

关于python - Snowflake中的异步查询执行: SQL execution canceled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578938/

相关文章:

python - 列重新编号 Pandas Dataframe

python - 如何在 Windows 中设置 PYTHONPATH?

python - 入口配置错误

python - 在Mouse中将 'elif'解释为画笔代码

python - merry 处理 python 中的异常吗?

python - 将包含 Pandas DataFrame 列表列表的单元格解包到新 DataFrame 的单独行和列中

amazon-web-services - Cloudformation:一起使用 Fn::Join 和 Fn:GetAtt

python - 我的 RDS 有指向存储在 s3 中的图像的链接 如何在 lambda python 函数中将该链接转换为图像

node.js - Amazon Lex 在 Lambda Fulfillment 上 30 秒内超时

python - 如何为我的 Django/Python View 编写装饰器?