問題
タイトルの通りAWSのAthenaでデータを取得しようとしたら下記のエラーが発生。
HIVE_PARTITION_SCHEMA_MISMATCH: There is a mismatch between the table and partition schemas. The types are incompatible and cannot be coerced. The column 'col1' in table 'database_name.table_name' is declared as type 'bigint', but partition 'partition1=aaa/partition2=bbb' declared column 'col1' as type 'struct<long:bigint,string:string>'.
テーブルのスキーマのパーティションのスキーマが一致しないとエラーが出ていました。
csvファイルのcol1列が文字列の時と数値の時があったため今回の問題が起きました。
データを入れなおしてCrawlerを実行すれば直ると思っていましたがエラーが出たままでした。
解決策
正しい形式でデータを上書きしているのであればパーティションを一度消して再生成すれば直る。
-- パーティションを削除
ALTER TABLE table_name DROP PARTITION (partition1 = 'aaa', partition2 = 'bbb');
-- パーティションを再生成
MSCK REPAIR TABLE table_name;
おわりに
今回の問題が発生してはじめてパーティションごとにもスキーマを管理しているということを知りました。
テーブルでスキーマ管理しているのに何で必要なんでしょうか...
Glueに関しては、まだまだ分からないことばかりですが少しずつ理解を深めていければと思います。