LoginSignup
0
1

More than 3 years have passed since last update.

Amazon AthenaのDDL(CREATE TABLE)でパーティションを指定してもパーティションが利用できない問題

Posted at

事象

AthenaのDDLでパーティションを指定しても、それだけでは実際のSELECTクエリで結果は返ってきません。これはGlueのAPIでCREATE TABLEした場合でも同様です。

解決策

DDL実行後に下記クエリを実行する。

MSCK REPAIR TABLE table_name

これは解決策というよりか普通に必要な手順になります。以下公式Docsにも記載されています。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/partitions.html

解説

CREATE TABLEしただけでは、そのパーティションキーがこのテーブルにはあるよ、という情報がデータカタログに渡されるだけで、実際にそのパーティションキーにはどんな値のものがあるかということが知らされないため、パーティションキーはスキーマに記載されているがパーティションはカタログ上存在しないという状態になります。
例えばnameというパーティションキーがスキーマに登録されても、実際のパーティションにname=yamadaとかname=satoがあるかどうかはカタログ側はまだ知らないのでパーティション使えませんという状態ということです。
なのでMSCK REPAIR TABLEコマンドでS3パスと照合して実際に存在するパーティションをスキャンしてメタ情報がカタログに登録され、ようやくクエリできるということです。

その他

上記のコマンドは自動的にパーティションをスキャンさせる方法ですが、単体のパーティションを個別で登録するにはALTER TABLE table_name ADD PARTITION xxxxxxを使う方法があります。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1