首页 > 编程问答 >从雪花获取数据

从雪花获取数据

时间:2024-07-25 05:50:17浏览次数:8  
标签:python snowflake-cloud-data-platform

因此,我一直在尝试设置一个流程,以使用 Snowflake Python 连接器从 python 中的 Snowflake 数据库中提取数据。我已经制作了一个请求数据的方法(如下所示)

import snowflake.connector

def request_data(s, query):
    snowflake_connection = snowflake.connector.connect(user = 'user',
                                                       password = 'password',
                                                       account = 'account',
                                                       warehouse = 'warehouse',
                                                       database = 'database',
                                                       schema = s)
   try:
       with snowflake_connection.cursor() as cursor:
           cursor.execute(query)
           data = cursor.fetch_pandas_all()
   finally:
       snowflake_connection.close()
   return data

我已经能够从该方法请求数据并使用Python中的数据,如下例所示

query = "select * from books.sales where date between '2020-08-01' and '2020-11-31'"
sales = request_data('BOOKS', query)

但是,当我尝试请求更大的数量时数据(例如将日期范围更改为 2020-08-01 到 2021-07-31),我收到错误

250003: Failed to get the response. Hanging? method: get, url: <snowflake url>

我尝试查看文档,我测试过的一件事是打印属性 rowcount在游标 - print(cursor.rowcount) 中(我将其添加到 cursor.execute(query) data = cursor.fetch_pandas_all() 之间的请求数据方法中。当我这样做时,我看到 rowcount 与我在工作表上测试查询时获得的行数相匹配在snowflakecomputing.com中。

所以我想这与数据量有关。我的日期范围为2020年8月1日到2021年7月31日的查询大约有39,000行。我查看了有关 Snowflake Python 连接器请求中数据量限制的文档,我见过的唯一数字是 10,000。

当我尝试减小日期范围以便行数时会比这个少,我仍然遇到同样的错误,所以我不确定出了什么问题。我可以将一个查询分解为多个查询,但我试图将我的请求保持在最低限度。如果有人知道如何解决这个问题,我将不胜感激。


这个错误“250003:获取响应失败。挂起?method: get, url: ”在 Snowflake Python 连接器中,通常表明由于结果集过大,客户端和 Snowflake 服务器之间的数据传输出现问题。尽管 rowcount 可能表明 Snowflake 成功执行了查询,但问题出在通过网络有效地将大量数据提取到 Pandas DataFrame ( fetch_pandas_all() )。

以下是一些可以解决此问题的步骤:

  1. 增加提取块大小: Snowflake Python 连接器默认情况下以块的形式提取数据。可以通过设置 fetch_pandas_chunk_size 参数来增加此块大小。这将允许分批提取数据并减少内存压力。

python data = cursor.fetch_pandas_all(chunk_size=10000) # 每次提取 10000 行 尝试不同的块大小以找到适合情况的最佳值。

  1. 使用迭代器提取: fetch_pandas_all() 会尝试将所有数据立即加载到内存中,这可能会导致大型结果集出现问题。考虑改用 fetchmany() 以迭代方式提取数据。

python while True: chunk = cursor.fetchmany(10000) # 每次提取 10000 行 if not chunk: break # 处理当前数据块 这种方法允许逐块处理数据,从而防止内存溢出。

  1. 优化查询: 如果只需要数据的一个子集,请优化的查询以仅选择必要的列和行。使用 LIMIT 子句来测试和调试的代码。

  2. 检查网络连接: 网络问题有时会导致数据传输出现问题。确保与 Snowflake 服务器的连接稳定且具有足够的带宽。

  3. 客户端内存和资源: 对于非常大的结果集,请考虑的客户端计算机的可用内存和处理能力。如果提取的数据量太大,可能需要升级的资源或探索其他解决方案,例如将数据直接卸载到云存储。

如果尝试了这些步骤后问题仍然存在,可能需要联系 Snowflake 支持以获得进一步的帮助。提供有关的环境和查询的详细信息,以便他们可以有效地帮助进行故障排除。

标签:python,snowflake-cloud-data-platform
From: 68835231

相关文章

  • 在 Azure 上部署代码时使用 Python 的多处理模块是否有意义?
    我们的团队在Azure机器学习(AML)上部署了一个Python脚本来处理存储在Azure存储帐户上的文件。我们的管道由一个ForEach活动组成,该活动调用每个或列出的文件的Python脚本。从Azure数据工厂(ADF)运行它会触发多个单独的管道同时运行......
  • 我已成功安装 pypdf2 但无法将其导入到我的 python 文件中
    我已经成功安装了pypdf2模块,但在导入它时,我发现该模块丢失了。我尝试使用fromPyPDF2importPdfReader导入,但它不起作用此问题的各种解决方案是什么?在尝试导入PyPDF2时遇到问题。以下是可能导致此问题的一些常见原因和解决方案:安......
  • Python3打开图片时请求ConnectionResetError(10054)
    我试图从'http://xxx.jpg'之类的网站下载图片。代码:headers={'user-agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/66.0.3359.139Safari/537.36'}url='http://xxx.jpg'resp......
  • Jupyter Notebook 环境中的 Python 版本不匹配
    我遇到Jupyter笔记本启动横幅中报告的Python版本与我在笔记本中查询python--version时显示的版本之间的差异。启动横幅指示Python3.11.9,但是当我运行!python--version时,它返回Python3.11.7。我所做的步骤:basecondahas3.11.7versio......
  • Python XML 解析:字符串中的“<”被阻塞
    我有一个使用ET.XMLParser来解析CppCheckXML报告文件的Python模块。当尝试解析字符串中包含“<”的XML元素中的属性之一时,它会令人窒息,它会将其解释为格式错误的XML,例如:<errormsg="Includefile<iostream>notfound.">(注意字符和“iostream”之间的空格必须放......
  • 任意几行代码要成为Python中的函数需要什么?
    我正在上一门计算机科学课,我的任务是创建一个程序来实现一个带有参数的函数。我的老师告诉我,下面的代码不是一个函数,这让我很困惑,对于将某些代码行归类为“函数”所需的条件,我感到很困惑。defgame(numbers,max_turns,pfl,tgl):turns=0flag=Falseprint("You......
  • 如何使用 Python 创建新的 Azure 订阅?
    我正在尝试使用PythonSDK以编程方式创建新的Azure订阅。我发现的对AzurePythonSDK的唯一引用是这个这是我最终得到的结果:importazure.mgmt.billingimportazure.mgmt.subscriptioncreds=AzureCliCredential()client_name='test'defcreat......
  • 用于打印脚本输出的 Python 实用程序
    我可以发誓有一个实用程序可以打印一个python脚本,其输出交织在一起。例如,给定一个脚本:a=2b=3print(a+b)print(a*b)该实用程序将输出a=2b=3print(a+b)#>5print(a*b)#>6有人知道该实用程序的名称吗?我最难找到它。谢谢你!描述的实用程序没有标......
  • a method to make some handy tools with python
    Inmyworkingofcomputer,therearealotofsimplejobsthatarefrequentlyrepeated.Itriedtofindawaytomakethesejobbeenprocessedeasily.Method1:Themethodiswritingascripttodothejob,andexecutingthescriptbyutoolsextensionuto......
  • Python网络爬虫详解:实战豆瓣电影信息采集
    文章目录前言一、爬虫是什么?二、常用库及其作用1.Requests2.BeautifulSoup3.lxml4.Scrapy5.Selenium6.PyQuery7.Pandas8.JSON9.Time三、实现步骤步骤一:环境准备步骤二:数据采集步骤三:数据处理步骤四:数据存储总结前言随着互联网的迅猛发展和数据分析需求的不......