2017-03-28 20 views
0

S3に格納されたデータをこのようなハイブ形式でパーティション化しました。Athenaからs3データへのクエリパフォーマンスを向上させる方法

bucket/year=2017/month=3/date=1/filename.json 
bucket/year=2017/month=3/date=2/filename1.json 
bucket/year=2017/month=3/date=3/filename2.json 

すべてのパーティションには、約1,000,000レコードがあります。私はこのためにAthenaにテーブルとパーティションを作成しました。

は今、このクエリは1,000,000レコードをスキャンするために1800秒を取っているアテナ

select count(*) from mts_data_1 where year='2017' and month='3' and date='1' 

からクエリを実行しています。

私の質問は、このクエリのパフォーマンスを向上させる方法です。

+0

パーティションの列の定義は何ですか? –

+0

PARTITIONED BY(年の文字列、月の文字列、日付の文字列) – Shailendra

+0

このクエリでは、Athenaのスキャンのデータファイルとバイト数はいくつですか? – James

答えて

1

私は問題がAthenaがS3から非常に多くのファイルを読まなければならないと思います。 250 MBはそれほどデータではありませんが、1,000,000個のファイルは多くのファイルです。ファイル数を減らし、集約されたファイルを圧縮すると、Athenaのクエリのパフォーマンスが大幅に向上します。 1日分のパーティションに必要なファイル数はいくつですか? 1分の解像度でも、1,500ファイル以下が必要です。現在のクエリ時間が〜30分の場合は、簡単に開始することができます。

  • AWSのKinesis Firehoseは問題のまさにこの種の上の開始するかなり簡単な方法です:

    は、あなたの記録を集約して圧縮するための多くのオプションがあります。

  • Apache NiFiのようなストリーミングデータ処理ツールは、豊富な変換、集約、および圧縮オプションを提供します。私はusing Apache NiFi to stream data to S3 for Athenaについてのブログ投稿を書いています。
関連する問題