【问题标题】:Selecting specific files for athena为 athena 选择特定文件
【发布时间】:2021-02-19 11:29:02
【问题描述】:

在 Athena 中创建表时,我无法使用特定文件创建表。有没有办法从给定的存储桶中选择所有以“year_2019”开头的文件?例如 s3://bucketname/prefix/year_2019*.csv


文档中说得很清楚,是不允许的。

来自: https://docs.aws.amazon.com/athena/latest/ug/tables-location-format.html

Athena 读取您在 CREATE TABLE 语句,并且不能忽略包含在 字首。创建表时,在 Amazon S3 路径中仅包含 您希望 Athena 读取的文件。使用 AWS Lambda 函数扫描文件 在源位置,删除所有空文件,并移动不需要 文件到另一个位置。

我想知道社区是否找到了一些解决方法:)

【问题讨论】:

  • 您可以尝试使用所有文件创建一个表,然后在隐藏的合成"$path" 列上使用条件来过滤您想要的内容。你试过了吗?

标签: amazon-athena


【解决方案1】:

不幸的是,Athena 用于 S3 的文件系统抽象不支持这一点。它要求表位置看起来像目录,Athena 会在列出文件时在位置末尾添加一个斜杠。

有一种方法可以创建只包含文件选择的表,但据我所知,它不支持通配符,只支持明确的文件列表。

你要做的是创建一个表

STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'

然后不是将表的LOCATION 指向实际文件,而是将其指向带有单个symlink.txt 文件的前缀(或将每个分区指向带有单个symlink.txt 的前缀)。在 symlink.txt 文件中,添加要包含在表中的文件的 S3 URI,每行一个。

我所知道的有关此功能的唯一文档是S3 Inventory documentation for integrating with Athena

您还可以在 Stackoverflow 回复中找到完整示例:https://stackoverflow.com/a/55069330/1109

【讨论】:

  • Athena 将来是否有可能停止对符号链接文件的支持?
  • 不太可能,这是 Hive 的一项功能,并且不会消失。它已经存在了很长时间。
  • 您遇到了多少次超时错误(由于 30 分钟限制)?如果我的数据超过几百 GB,这会是一个大问题吗?
  • 我只遇到过多 TB 查询超时,或者连接太多的查询。除非您对这数百 GB 进行自我连接,否则应该没问题。
猜你喜欢
  • 1970-01-01
  • 2014-09-29
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多