使用 aws wrangler 从 athena 错误读取数据

use*_*373 6 amazon-web-services amazon-athena aws-data-wrangler

我正在使用 python3

我正在尝试使用 awswrangler 包从 aws athena 读取数据。

下面是代码

import boto3
import awswrangler as wr
import pandas as pd

df_dynamic=wr.athena.read_sql_query("select * from test",database="tst")
Run Code Online (Sandbox Code Playgroud)

错误:

    Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.6/site-packages/awswrangler/_config.py", line 361, in wrapper

       File "/usr/local/lib/python3.6/site-packages/botocore/regions.py", line 148, in _ 
   endpoint_for_partition
     raise NoRegionError()
      botocore.exceptions.NoRegionError: You must specify a region.
Run Code Online (Sandbox Code Playgroud)

我不确定要指定 sql 查询的工作位置

And*_*IDK 8

与 AWS API 的所有交互(包括通过 SDK,如boto3)都需要凭证,您可以在此处boto3找到有关如何管理凭证的更多信息。

由于您在 EC2 实例上运行此程序,因此最佳实践建议通过实例配置文件管理凭证。假设您已经为 EC2 实例分配了 IAM 角色,您所需要做的就是为您的代码指定一个区域。您可以在官方AWS 文档中找到有关如何将 IAM 角色分配给 EC2 的信息。

AWS Data Wrangler 依赖boto3并允许指定一个区域,如下所示:

boto3.setup_default_session(region_name="us-east-2")
Run Code Online (Sandbox Code Playgroud)

来源:AWS Data Wrangler - 会话

您可以像上面的示例一样对区域进行硬编码,也可以使用实例元数据端点检索部署 EC2 的区域。

以下端点:

curl http://169.254.169.254/latest/dynamic/instance-identity/document
Run Code Online (Sandbox Code Playgroud)

将返回一个 json,其中包含 EC2 区域等信息:

curl http://169.254.169.254/latest/dynamic/instance-identity/document
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以使用 Python 或其他方式轻松实现此请求。