我试图将AmazonAthena查询的数据按年、月、日进行分区。但是,当我试图从分区数据中查询时,我无法获得任何记录。我遵循了这篇博文中的说明。
创建表查询:
CREATE external TABLE mvc_test2 (
ROLE struct<Scope: string, Id: string>,
ACCOUNT struct<ClientId: string, Id: string, Name: string>,
USER struct<Id: string, Name: string>,
IsAuthenticated INT,
Device struct<IpAddress: string>,
Duration double,
Id string,
ResultMessage string,
Application struct<Version: string, Build: string, Name: string>,
Timestamp string,
ResultCode INT
)
Partitioned by(year string, month string, day string)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://firehose-titlesdesk-logs/Mvc/'
表创建成功,结果消息显示:
“查询成功。如果表有分区,则需要加载这些分区才能查询数据。可以加载所有分区,也可以单独加载。如果使用load all partitions(msck repair table)命令,则分区的格式必须为配置单元所理解的格式。了解更多信息。”
跑步
msck repair table mvc_test2;
我得到的结果是:
“不在metastore中的分区:mvc\u test2:2017/06/06/21 mvc\u test2:2017/06/06/22”
此时,当我试图查询表时,没有得到任何结果。
日志按年/月/日/小时以子文件夹格式存储。e、 g:'s3://firehose application logs/process/year/month/day/hour'
如何正确划分数据?
2条答案
按热度按时间gudnpqoy1#
按日期添加每个分区。这样速度更快,节省更多的钱。只加载所需的分区,而不是加载所有分区。
您可以根据需要更改年、月和/或日来加载更多分区,只要确保它们有效即可。然后,您可以通过运行以下查询来检查分区是否已加载:
busg9geu2#
您的目录格式似乎是
2017/06/06/22
. 这与具有的命名转换的配置单元分区不兼容year=2017/month=06/day=06/hour=22
.因此,当前的数据格式排除了使用分区的能力。您需要重命名目录,或者(最好)通过配置单元处理数据,以正确的格式存储数据。
另请参见:使用AmazonAthena分析s3中的数据