簡體   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