我正在使用 Python 工作表并尝试使用请求库从外部 URL 下载 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 的最佳实践? 任何帮助或指导将不胜感激!
正如 Lukasz 在他的评论中指出的那样,您将需要配置外部网络访问。默认情况下,Snowflake 中的 Python 被沙箱到内部 Snowflake 环境中。为了访问外部服务、API 等,您可以通过创建网络规则、安全集成和外部访问集成来“打开防火墙”,以指定批准的外部访问。