【问题标题】:Why pyathena doesn't work on longer running queries while Athena runs them?为什么 pyathena 在 Athena 运行时不能处理运行时间较长的查询?
【发布时间】:2019-04-15 04:42:06
【问题描述】:

我有一个查询,它通过扫描 90GB 数据在 43 秒内(直接)在 Athena 上运行。然后我使用 pyathena 运行相同的查询(我在 EMR 上的 jupyter notebook 中使用它),它只是没有完成运行(并且永远不会返回任何结果)。我已经针对较小的查询(通过设置限制 100)对其进行了测试,并且它可以工作。为什么 pyathena 比直接在 Athena 上运行查询要慢得多?

【问题讨论】:

    标签: amazon-athena pyathena


    【解决方案1】:

    我猜你正在使用 fetchall api。

    fetchall 方法使用 fetchone 直到没有更多结果,这就是为什么它需要这么长时间。

    def fetchall(self):
        rows = []
        while True:
            row = self.fetchone()
            if row:
                rows.append(row)
            else:
                break
        return rows
    

    您可以使用 cursor.output_location 获取 Athena 创建的 csv 结果文件以读取结果(例如使用 boto3):

    bucket, key = cursor.output_location.strip('s3://').split('/', 1)
    session = boto3.session.Session(aws_access_key_id=YOUR_AWS_KEY, aws_secret_access_key=YOUR_AWS_SECRET, region_name=YOUR_REGION_NAME)
    
    result = session.resource('s3').Object(bucket, key)
    

    此外,在 pyathena 的下一个版本中,您将能够使用从 s3 读取文件的 as_pandas api 将结果读取到 pandas 数据帧。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      相关资源
      最近更新 更多