amazon athena的hive分区表

xwmevbvl  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(331)

我试图将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'
如何正确划分数据?

gudnpqoy

gudnpqoy1#

按日期添加每个分区。这样速度更快,节省更多的钱。只加载所需的分区,而不是加载所有分区。

ALTER TABLE mvc_test2 
ADD PARTITION (year='2017',month='06',day='06')
location 's3://firehose-titlesdesk-logs/Mvc/'

您可以根据需要更改年、月和/或日来加载更多分区,只要确保它们有效即可。然后,您可以通过运行以下查询来检查分区是否已加载:

show partitions mvc_test2
busg9geu

busg9geu2#

您的目录格式似乎是 2017/06/06/22 . 这与具有的命名转换的配置单元分区不兼容 year=2017/month=06/day=06/hour=22 .
因此,当前的数据格式排除了使用分区的能力。您需要重命名目录,或者(最好)通过配置单元处理数据,以正确的格式存储数据。
另请参见:使用AmazonAthena分析s3中的数据

相关问题