0

问题摘要:无法通过 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,查询也有效

4

0 回答 0