AWS AthenaのPartitionに関して
Athenaとは
S3上のデータに対して、SQLで集計を可能にしてくれるAWSのサービス
テーブル作成
S3のDirとColumnを指定し、テーブルを作成する
CREATE EXTERNAL TABLE IF NOT EXISTS <database_name>.<table_name> (
`id` bigint,
`year` int,
`month` int,
`day` int,
`column` int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '\t',
'field.delim' = '\t'
) LOCATION 's3://<my_bucket>/<path>/<to>/<data>'
TBLPROPERTIES ('has_encrypted_data'='false')
ただ、これだけだと検索するときに、全データを毎回スキャンしてしまい、データが蓄積するとQuery代がどんどん大きくなるので、検索範囲を絞れるようにするためにパーティションというものがある
パーティション
概要
パーティションは、データの検索範囲を指定するためのもの
テーブル作成
S3を指定してテーブル作成
-
PARTITIONED BY
のあとに、パーティションに使いたいcolumnを書く(複数のカラムをおけば、複数カラムでのパーティションも可能) - パーティションに使ったカラムは、table定義からは除く
- 今回の場合は、
s3://<my_bucket>/<path>/<to>/<data>/year=<year>/month=<month>/day=<day>
以下に実際のデータファイルが存在し、そのファイルがtsv
形式で、id
とcolumn
をカラムに持っている必要がある - パーティションの順番には特に意味はないようで、今回の例で query上で
month
だけを指定して検索することも可能
CREATE EXTERNAL TABLE IF NOT EXISTS <database_name>.<table_name> (
`id` bigint,
`column` int
)
PARTITIONED BY (year int, month int, day int)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '\t',
'field.delim' = '\t'
) LOCATION 's3://<my_bucket>/<path>/<to>/<data>'
TBLPROPERTIES ('has_encrypted_data'='false')
CREATE TABLEだけでは、ダメなので、登録する
MSCK REPAIR TABLE <table_name>
あとから増えたS3パスに対してパーティションを追加する
ALTER TABLE <athena_database>.<athena_table> ADD IF NOT EXISTS PARTITION (year=2019, month=02, day=01)
あとからパーティションを削除する
一つパーティションを消す
ALTER TABLE <athena_database>.<athena_table> DROP IF EXISTS PARTITION (year=2019, month=02, day=01)
複数同時に消す
今回の例では、2019年2月のパーティションはすべて消す(1日~28日)
ALTER TABLE <athena_database>.<athena_table> DROP IF EXISTS PARTITION (year=2019, month=02)
パーティションがなくてデータだけがあると
パーティション指定したときに、パーティションリストから対応するDirリストをみてデータを見に行くので、パーティションがない場合には、検索対象に入らない模様。
パーティションが増えすぎると
パーティションが増えすぎると検索のたびに全てのパーティションリストをロードして対応するパーティションのパスリストからデータを見に行くので、オーバーヘッドが大きくなるため、検索が遅くなる
https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/#OptimizeFileSizes こいつを参考にして、いろいろチューニングする必要あり
Author And Source
この問題について(AWS AthenaのPartitionに関して), 我々は、より多くの情報をここで見つけました https://qiita.com/nakamasato/items/c585c16e53006dd50f13著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .