繁体   English   中英

亚马逊雅典娜的分区表

[英]Partitioning table for amazon athena

我正在尝试按年、月和日对 amazon athena 查询的数据进行分区。 但是,当我尝试从分区数据进行查询时,我无法获取任何记录。 我遵循了这篇博文中的说明。

创建表查询:

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/'

表创建成功,结果提示:

》查询成功。如果你的表有分区,需要加载这些分区才能查询数据。可以加载所有分区,也可以单独加载。如果使用加载所有分区(MSCK REPAIR TABLE)命令,分区必须以 Hive 理解的格式。了解更多信息。”

跑步

msck repair table mvc_test2;

我得到结果:

“不在 Metastore 中的分区:mvc_test2:2017/06/06/21 mvc_test2:2017/06/06/22”

此时,当我尝试查询表时没有得到任何结果。

日志按年/月/日/小时以子文件夹格式存储。 例如:'s3://firehose-application-logs/process/year/month/day/hour'

如何正确分区数据?

您的目录格式似乎是2017/06/06/22 这与 HIVE 分区不兼容,它们的命名转换为year=2017/month=06/day=06/hour=22

因此,您的数据的当前格式使您无法使用分区。 您需要重命名目录或(最好)通过 HIVE 处理您的数据以将其存储为正确的格式。

另请参阅: 使用 Amazon Athena 分析 S3 中的数据

按日期添加每个分区。 这种方式速度更快,为您节省更多的钱。 仅加载您需要的分区,而不是所有分区。

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

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

show partitions mvc_test2

AWS 现在支持Athena Partition Projections ,这将自动进行分区管理并在添加新数据时自动添加新分区

https://docs.aws.amazon.com/athena/latest/ug/cloudtrail-logs.html#create-cloudtrail-table-partition-projection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM