Snowflake Python worksheet 从 URL 请求数据
我正在使用Python工作表,想通过requests库从外部网址下载CSV数据。但是,我遇到了一个叫做NameResolutionError的错误,这似乎是个DNS解析的问题。以下是我收到的错误信息:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='www.data.gouv.fr', port=443): Max retries exceeded with url: /fr/datasets/r/5cb21a85-b0b0-4a65-a249-806a040ec372 (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fb7f66e1450>: Failed to resolve 'www.data.gouv.fr' ([Errno -3] Temporary failure in name resolution)"))
这个错误发生在我尝试在Python工作表中执行以下代码时:
import snowflake.snowpark as snowpark
from snowflake.snowpark.functions import col
import pandas as pd
from io import StringIO
import requests
def load_csv_to_snowflake(session, url, table_name, delimiter, encoding):
# Télécharger le contenu du fichier CSV depuis l'URL
response = requests.get(url)
if response.status_code != 200:
raise Exception(f"Échec de la requête HTTP: {response.status_code}")
# Lire le contenu dans un DataFrame pandas
csv_string = response.content.decode(encoding)
df = pd.read_csv(StringIO(csv_string), delimiter=delimiter)
# Charger le DataFrame dans Snowflake en utilisant Snowpark
session.write_pandas(df, table_name, auto_create_table=True)
def main(session: snowpark.Session):
# Liste des fichiers à charger
files_to_load = [
{
"url": "https://static.data.gouv.fr/resources/lieux-de-vaccination-contre-la-covid-19/20240328-180518/centres-vaccination.json",
"table_name": "table_file1",
"delimiter": ";",
"encoding": "utf-8"
},
# Ajouter les autres fichiers ici avec leurs paramètres respectifs
]
# Charger chaque fichier
for file_info in files_to_load:
load_csv_to_snowflake(
session,
file_info["url"],
file_info["table_name"],
file_info["delimiter"],
file_info["encoding"]
)
# Afficher un message de succès
print("Chargement des fichiers terminé avec succès.")
我怀疑Snowflake中的Python UDF环境可能无法访问互联网,或者存在一些网络限制。以下是我的问题:
有没有人遇到过类似的问题,知道如何解决Snowflake的Python UDF?
有没有办法在Snowflake的Python UDF环境中配置网络设置或DNS,以允许外部互联网访问?
有没有什么最佳实践可以用来通过Python UDF将外部数据下载到Snowflake中?
任何帮助或指导都将非常感谢!
1 个回答
正如Lukasz在他的评论中提到的,你需要设置一下外部网络访问。默认情况下,Snowflake中的Python是被限制在内部环境里的。要想访问外部服务、API等,你需要通过创建网络规则、安全集成和外部访问集成来“打开防火墙”,这样才能指定允许的外部访问。