我有一个非常基本的 s3 设置,我想使用 Athena 对其进行查询。数据全部存储在一个存储桶中,并组织到年/月/日/小时文件夹中。
|--data
| |--2018
| | |--01
| | | |--01
| | | | |--01
| | | | | |--file1.json
| | | | | |--file2.json
| | | | |--02
| | | | | |--file3.json
| | | | | |--file4.json
...
然后,我设置一个 AWS Glue Crawler 来进行爬网s3://bucket/data
。所有文件中的架构都是相同的。我希望得到一个数据库表,其中包含年、月、日等分区。
我得到的却是数万张桌子。每个文件都有一个表,每个父分区也有一个表。据我所知,为每个文件/文件夹创建了单独的表,没有一个可以在大日期范围内查询的总体表。
我按照指示操作https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html尽我所能,但无法弄清楚如何构建我的分区/扫描,这样我就不会得到这个巨大的、几乎毫无价值的数据转储。
Glue Crawler 还有很多不足之处。它承诺解决很多情况,但实际支持的内容确实有限。如果您的数据存储在目录中并且不使用 Hive 式分区(例如year=2019/month=02/file.json
)它常常会搞砸。当数据是由其他 AWS 产品生成时尤其令人沮丧,例如 Kinesis Firehose,看起来您的数据可能就是这样。
根据您拥有的数据量,我可能会首先创建一个指向结构根的未分区 Athena 表。只有当您的数据增长到超过数千兆字节或数千个文件时,分区才变得重要。
您可以采用的另一种策略是添加 Lambda 函数,只要有新对象进入您的存储桶,该函数就会由 S3 通知触发。该函数可以查看键并找出它属于哪个分区,然后使用 Glue API 将该分区添加到表中。添加已存在的分区将从 API 返回错误,但只要您的函数捕获它并忽略它就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)