在 Athena 中创建表时,我无法使用特定文件创建表。有没有办法从给定的存储桶中选择以“year_2019”开头的所有文件?例如
s3://bucketname/prefix/year_2019*.csv
文档对此说得很清楚,这是不允许的。
From:
https://docs.aws.amazon.com/athena/latest/ug/tables-location-format.html https://docs.aws.amazon.com/athena/latest/ug/tables-location-format.html
Athena 读取您在中指定的 Amazon S3 位置中的所有文件
CREATE TABLE 语句,并且不能忽略其中包含的任何文件
字首。创建表时,仅在 Amazon S3 路径中包含
您希望 Athena 读取的文件。使用 AWS Lambda 函数扫描文件
在源位置中,删除所有空文件,然后移动不需要的文件
文件到另一个位置。
我想知道社区是否找到了一些解决方法:)
不幸的是,Athena 用于 S3 的文件系统抽象不支持这一点。它要求表位置看起来像目录,Athena 在列出文件时会在位置末尾添加斜杠。
有一种方法可以创建仅包含选定文件的表,但据我所知它不支持通配符,仅支持显式文件列表。
你要做的就是创建一个表
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
然后而不是指向LOCATION
将表指向实际文件,将其指向带有单个的前缀symlink.txt
文件(或将每个分区指向带有单个前缀的前缀)symlink.txt
)。在里面symlink.txt
在文件中,您添加要包含在表中的文件的 S3 URI,每行一个。
我所知道的有关此功能的唯一文档是用于与 Athena 集成的 S3 库存文档 https://docs.aws.amazon.com/AmazonS3/latest/dev/storage-inventory.html.
您还可以在此 Stackoverflow 响应中找到完整示例:https://stackoverflow.com/a/55069330/1109 https://stackoverflow.com/a/55069330/1109
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)