雪花python连接器无法处理AWS lamb中的较大数据集

2024-04-28 05:13:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Snowflakes python连接器尝试从我们的数据仓库中检索一组数据进行处理。此作业是在AWS lambda函数中执行的,当返回的行数约为20行时会出现问题。当我设置一个limit 10limit 20时,我就可以恢复数据集了。如果我关闭limit,那么它很难获得只有65行的结果集。在

lambda中的内存和超时值已经达到最大值,导出到CSV的数据集只有300KB。在本地运行此查询返回的结果很好,因此可能与内存大小有关,但返回的数据并不是很大。在

connector = snowflake.connector.connect(
    account=os.environ['SNOWFLAKE_ACCOUNT'],
    user=os.environ['SNOWFLAKE_USER'],
    password=os.environ['SNOWFLAKE_PASSWORD'],
    role="MY_ROLE",
    ocsp_response_cache_filename="/tmp/.cache/snowflake/"
                                 "ocsp_response_cache",
)
print("Connected to snowflake")
cursor = connector.cursor(DictCursor)
cursor.execute('USE DATA.INFORMATION_SCHEMA')

query = "SELECT * FROM TABLE WHERE X=Y"  # FAKE QUERY

print("Execute query: \n\t{0}".format(query))
cursor.execute(query)
print("Execute query done!")
posts = []
processed = 0
for rec in cursor:
    processed += 1
    print("Processed count: {}".format(processed))
    posts.append(rec)

# These attempts also didn't work. 
# posts = cursor.fetchmany(size=cursor.rowcount)
# posts = cursor.fetchall()

cursor.close()

processed整数值最多得到17条记录,但随后停止。我的日志输出了很多关于块没有准备好消费的信息,最终lambda只是超时了

^{pr2}$

Tags: 数据lambdacacheconnectorosenvironquerycursor
2条回答

我也遇到过类似的问题,但是使用雪花JDBC连接器。在

Select*from table:获取第一个数据块(600个记录),然后在获取下一个数据块时得到“连接超时”

如果我这样做,Select*from table limit 1200,它可以很好地工作,没有任何超时

所以,把整个过程分成两个步骤。。在

  1. rowcount=从表中选择count(*)
  2. 从表中选择*限制行数

从日志来看,python连接器似乎一直在尝试从s3下载结果。如果查询生成大量数据,这是预期的行为。我建议您尽量确保lambda环境能够访问s3bucket。一个简单的curl命令应该可以验证它。在

curl -v https://sfc-va-ds1-customer-stage.s3.amazonaws.com

如果你能得到一些http代码回来(比如403),那就意味着你有了连接。否则,如果挂起,则说明您的环境中没有正确配置某些内容。在

相关问题 更多 >