Snowflake Python 工作表从 url 请求数据

问题描述 投票:0回答:1

我正在使用 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 的最佳实践? 任何帮助或指导将不胜感激!

python python-3.x snowflake-cloud-data-platform
1个回答
0
投票

正如 Lukasz 在他的评论中指出的那样,您将需要配置外部网络访问。默认情况下,Snowflake 中的 Python 被沙箱到内部 Snowflake 环境中。为了访问外部服务、API 等,您可以通过创建网络规则、安全集成和外部访问集成来“打开防火墙”,以指定批准的外部访问。

© www.soinside.com 2019 - 2024. All rights reserved.