使用Python大容量加载期间与连接冲突相关的不可描述的Google函数错误

2024-05-01 19:10:27 发布

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

我正在寻找如何正确配置我的谷歌云函数和/或它们运行的Python代码。我得到以下错误:“云函数中出现未知错误”

我手动逐行注释了我的代码,发现如果连接未正确关闭到snowflake,可能会发生这种情况。每次谷歌功能不能正常退出并关闭连接时,我都必须手动删除并重新创建雪花表

如果连接未正确终止,我可以在db中手动重新创建表,并使此代码每次都能成功运行,只要没有其他问题,例如连接到INVOICES_TEMP_PROD。因此,我制作了INVOICES_TEMP_STG进行测试,这样就不太可能发生这种情况

table='Invoices'
sql = f'DELETE FROM {str.upper(table)}_TEMP_PROD'
con.execute(sql)

con.close()

但即使如此,我也无法通过下面的代码段而不得到相同的错误。也就是说,当我没有对Snowflake执行单个sql命令,而是迭代地向db发送数据时,它将抛出相同的连接错误

我可以在Collab中迭代地完成这段代码。是否有什么原因使我每次向数据库发送数据时都需要打开和关闭一个与Collab不同的连接,或者这种方法是否有其他错误?在我没有遵循的环境中,有什么标准可以遵循吗?示例代码感谢

i=0
df = pd.DataFrame()
result = pd.DataFrame()
while((i==0) or (len(df)==top)):
   url2 = 'https://<<<url>>>/v2/<<<Table>>>?$orderby=APICreateDate&$filter=APIRemovedDate eq null&$skip=<<<Skip>>>&$top=<<<Top>>>'
   url_mod = url2.replace('<<<Table>>>',table).replace('<<<Skip>>>',str(i)).replace('<<<Top>>>',str(top))
   r = requests.get(url_mod,auth=(user,passw),headers=headers)
   t = [i for i in r.json().values()]
   df = pd.json_normalize(t[1])
   result = result.append(df,ignore_index=True)
   df_to_sf = result.drop(['odata.etag'],axis=1)
   df_to_sf.columns = df_to_sf.columns.str.upper()
   df_to_sf.to_sql(name=f'{str.lower(table)}_temp_prod',con=con, if_exists='append',index=False,chunksize=16384)
   result = pd.DataFrame()
   i += top

con.close()

顺便说一句,在它因为那个不伦不类的“未知错误”崩溃之前,它确实上传了一些(但不是全部)我想要的数据

enter image description here


1条回答
网友
1楼 · 发布于 2024-05-01 19:10:27

您没有为我们提供足够的信息来重现问题-例如,您从未显示连接con是如何建立的,也没有显示必要的导入

作为一种通用的Python约定,您可以使用with语句来确保在块结束时关闭连接:

with snowflake.connector.connect(...) as con:
  code
  code
  code

如果这还不足以在云函数中运行迭代,请添加更多日志、版本信息,并在问题中包括相关日志:

相关问题 更多 >