我正在使用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")
错误:
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.
我不确定指定和在哪里sql查询才能工作
所有与AWS API的交互(包括通过SDK,如boto3
(都需要凭据,您可以在此处找到有关boto3
如何管理凭据的更多信息。
由于您在EC2实例上运行此操作,因此最佳实践建议通过实例配置文件管理凭据。假设您已经为EC2实例分配了IAM角色,那么您所需要做的就是为代码指定一个区域。您可以在AWS官方文档中找到有关如何将IAM角色分配给您的EC2的信息。
AWS Data Wrangler依赖于boto3
,并允许指定这样的区域:
boto3.setup_default_session(region_name="us-east-2")
来源:AWS Data Wrangler-Sessions
您可以像上面的例子一样对区域进行硬编码,也可以使用实例元数据端点检索部署EC2的区域。
以下终点:
curl http://169.254.169.254/latest/dynamic/instance-identity/document
将返回一个json,其中包含EC2:的区域等信息
{
"privateIp" : "172.31.2.15",
"instanceId" : "i-12341ee8",
"billingProducts" : null,
"instanceType" : "t2.small",
"accountId" : "1234567890",
"pendingTime" : "2015-11-03T03:09:54Z",
"imageId" : "ami-383c1956",
"kernelId" : null,
"ramdiskId" : null,
"architecture" : "x86_64",
"region" : "ap-northeast-1", # <- region
"version" : "2010-08-31",
"availabilityZone" : "ap-northeast-1c",
"devpayProductCodes" : null
}
您可以在Python中轻松实现此请求,也可以根据需要通过其他方式实现。