AWS Athena 似乎存在权限问题,但我不知道在哪里?
我浏览粘合表(代表爬行的 S3 csv 文件),无论我尝试“预览”或列出哪个,我都会得到零行。
我有类似的问题,我作为一个问题提出来这里。
我将在此处复制问题,这样您就无需跳转:
我有一个指向 S3 位置的 AWS Glue 表(比方说
s3://bucket-name/root-folder
)
在 root-folder
下,我有多个文件夹(比如说 1
、2
、3
等)。
在每个文件夹下我都有一些镶木地板文件。
我创建了一个 GLue 表,它指向没有分区的
root-folder
。
当我使用 Athena 查询编辑器运行查询时,我得到了预期的结果,它们包含来自所有 1、2、3 文件夹的数据。
我运行的查询:
select count(*) from db_name.table_name
当我使用带有 Spark 的 Athena 笔记本运行相同的查询时,我得到一个空表: 我运行的代码:
spark.sql("select count(*) from db_name.table_name").count()
下面的代码也不起作用并返回0:
spark.read.table("db_name.table_name").count()
当我运行
show()
而不是 count()
时,我得到了正确的架构,但表是空的。
当我在 Athena Spark 中运行以下代码时,我得到了正确的结果:
spark.read.option("recursiveFileLookup", "true").parquet("s3a://bucket-name/root-folder/").count()
工作组的 IAM 角色包含以下(非常广泛开放)权限:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"glue:SearchTables",
"glue:GetTables",
"glue:GetTableVersions",
"glue:GetPartitions",
"glue:BatchGetPartition",
"glue:GetDatabases",
"glue:GetPartitionIndexes",
"glue:GetTable",
"glue:GetDatabase",
"glue:GetPartition",
"glue:GetTableVersion",
"glue:GetUserDefinedFunction",
"glue:GetColumnStatisticsForTable",
"glue:GetUserDefinedFunctions",
"glue:GetColumnStatisticsForPartition"
],
"Resource": [
"arn:aws:glue:eu-central-1:MY_ACCOUNT:catalog",
"arn:aws:glue:eu-central-1:MY_ACCOUNT:table/db_name/*",
"arn:aws:glue:eu-central-1:MY_ACCOUNT:database/db_name"
]
},
{
"Effect": "Allow",
"Action": "s3:List*",
"Resource": [
"arn:aws:s3:::bucket-name/*",
"arn:aws:s3:::bucket-name"
]
},
{
"Sid": "VisualEditor3",
"Effect": "Allow",
"Action": "s3:Get*",
"Resource": [
"arn:aws:s3:::bucket-name/*"
]
}
]
}
虽然文件夹名称与分区命名不匹配,但 S3 结构似乎已分区。另外,我觉得很奇怪的是,Athena 查询编辑器可以工作,而 Spark 却不能工作