问题摘要:无法通过 AWS Athena 在 Delta Lake 表(在 S3 中)上查询数据。我相信如果帐户启用了 Lake Formation,问题就会特别发生。
复制步骤:
- 确保您在新的AWS 账户或尚未启用 Lake Formation 的账户中执行此操作。为简单起见,只需在登录帐户时使用管理员权限。
- 上传示例 delta Lake 表。在此处获取目录的内容,并将其上传到您选择的 S3 存储桶(SSE-S3 加密)
- 确保更新 _symlink_format_manifest/manifest 文件的内容以反映您的存储桶名称
- 设置一个新的 Athena 表(更新下面的 $bucket 和 $prefix)
CREATE EXTERNAL TABLE `superstore_delta`(
`Category` string,
`SubCategory` string,
`Sales` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://$bucket/$prefix/_symlink_format_manifest/'
- 查询表,会看到20行数据
- 现在导航到 Lake Formation
- 由于这是您第一次使用此帐户,因此您需要将自己设置为管理员
- 转到“数据湖位置”,并将您的 S3 存储桶注册为位置
- 为您的主体提供对 superstore_delta 表的访问权限(使用 LF 标签)
- 再次查询 Athena 中的表。现在你会得到这个错误:
Permission denied on S3 path: s3a://$bucket/superstore_delta/part-00000-81186b2b-ee07-4543-ab15-8c8cfce2ed0d-c000.snappy.parquet
在使用 Delta Lake 表 + Lake Formation 时,还有其他人遇到过这个问题吗?
PS 如果我使用完全未加密的 S3 存储桶,即使启用了 Lake Formation,查询也有效