2017-06-07 12 views
1

amazon athenaでクエリされたデータを年、月、日でパーティション分割しようとしています。ただし、パーティション化されたデータからクエリを実行しようとすると、レコードを取得できません。私はこのblog投稿にある指示に従った。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によるood。 。詳しくはこちらをご覧ください "

私は結果を得る

msck repair table mvc_test2; 

実行

" パーティションない メタストアで:mvc_test2:2017/06/06/21 mvc_test2:2017/06を/ 06/22 "

この時点では、テーブルをクエリしようとすると結果は得られません。

ログは、年/月/日/時間でサブフォルダ形式で保存されます。 例: 's3:// firehose-application-logs/process/year/month/day/hour'

データを正しくパーティション分割するにはどうすればよいですか?

+0

あなたは負荷のすべてのパーティション(MSCKの修復表)コマンドを使用している場合」、**パーティションはハイブが理解できる形式でなければなりません** " –

答えて

1

あなたのディレクトリ形式は2017/06/06/22です。これは、名前変換がyear=2017/month=06/day=06/hour=22のHIVEパーティションと互換性がありません。

したがって、データの現在のフォーマットでは、パーティションを使用することができません。ディレクトリの名前を変更するか、適切な形式でHIVEを使用してデータを処理する(できれば)必要があります。

も参照してください:Analyzing Data in S3 using Amazon Athena

2

は日付で各パーティションを追加します。それはこのように速く、より多くのお金を節約します。すべてのパーティションではなく、必要なパーティションだけをロードします。

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

あなたはちょうど彼らが有効であることを確認し、必要に応じて年、月、および/または日を変更することで、複数のパーティションをロードすることができます。次に、あなたのパーティションがこのクエリを実行することによってロードされていることを確認するためにチェックすることができます。

show partitions mvc_test2 
関連する問題