gpt4 book ai didi

amazon-web-services - Pyathena 模式不存在

转载 作者:行者123 更新时间:2023-12-03 08:51:41 26 4
gpt4 key购买 nike

我需要处理存储桶 S3 中特定文件夹中特定流的一些数据。我想在 Python 中执行此操作。经过一段时间的搜索,我发现了库 PyAthena 这正是我正在寻找的!

我安装了 PyAthena 版本 1.8.0

仅供引用,我的 S3 存储桶位于 Paris eu-west-3 区域,我的 Athena 数据库位于该区域Francfort eu-central-1

我使用了在文档 PyAthena Doc 中找到的以下代码:

from pyathena import connect

cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',
aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',
region_name='us-west-2').cursor()
cursor.execute("SELECT * FROM one_row")
print(cursor.description)
print(cursor.fetchall())

我一开始不确定要使用哪个 region_name,它是否应该是 Paris 所在的 S3 存储桶,或 Francfort 之一,其中 Athena 数据库所在!!

我尝试了这两种方法,并按照收到的错误消息进行操作,最终使用了我的 S3 存储桶!但是,我不断收到有关 Glue 的权限错误,例如:

pyathena.error.OperationalError: Insufficient permissions to execute the query.  Error retrieving table : master in database : default due to : User: arn:aws:iam::<my-account-client-ID>:user/s3-test is not authorized to perform: glue:GetTable on resource: arn:aws:glue:eu-west-3:<my-account-client-ID>:catalog

因此我在 IAM 中添加了以下策略:

        {
"Sid": "VisualEditor2",
"Effect": "Allow",
"Action": [
"athena:StartQueryExecution",
"athena:GetQueryResultsStream",
"athena:GetQueryResults",
"athena:DeleteNamedQuery",
"athena:GetNamedQuery",
"athena:*",
"athena:ListQueryExecutions",
"athena:ListNamedQueries",
"athena:CreateNamedQuery",
"athena:StopQueryExecution",
"athena:GetQueryExecution",
"athena:BatchGetNamedQuery",
"athena:BatchGetQueryExecution"
],
"Resource": "*"
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": [
"glue:GetTable",
"glue:GetTables",
"glue:GetDatabase"
],
"Resource": [
"arn:aws:glue:eu-west-3:<my-account-client-ID>:catalog",
"arn:aws:glue:eu-west-3:<my-account-client-ID>:database/*",
"arn:aws:glue:eu-west-3:<my-account-client-ID>:table/*/*"
]
}

现在我收到此错误消息:

    cursor.execute("select * from master")
File "/home/ubuntu/.local/lib/python3.6/site-packages/pyathena/util.py", line 28, in _wrapper
return wrapped(*args, **kwargs)
File "/home/ubuntu/.local/lib/python3.6/site-packages/pyathena/cursor.py", line 57, in execute
raise OperationalError(query_execution.state_change_reason)
pyathena.error.OperationalError: SYNTAX_ERROR: line 1:15: Schema default does not exist

最佳答案

问题在于 select 语句:如果您不指定它,您将使用默认数据库,如果您的环境中没有这样的数据库,它将失败。您应该指出您的数据库和表:

cursor.execute("SELECT * FROM <YOUR_DATABASE>.<YOUR_TABLE>")

或者您也可以在游标函数中使用参数指定数据库名称(或模式名称):

cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',
aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',
s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',
region_name='us-west-2').cursor(schema_name=<YOUR_DATABASE>)
cursor.execute("SELECT * FROM <YOUR_TABLE>")

如果您执行其中一项操作,则不应再出现相同的错误。

关于amazon-web-services - Pyathena 模式不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58604840/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com