Athenaで元データのカラム数とテーブル定義が一致しない時どのような挙動になるか
概要
ある日のデータからカラムが追加されることになった。
その時、Athenaではどのようなデータが表示されることになるのだろうか
テスト準備
price | name |
---|---|
int | string |
- 上記カラムのファイルの末尾に、country(string)のカラムを追加したcsvファイルを作成
- S3
hr1 | hr2 |
---|---|
price, name | price, name, country |
- Athena
- カラム追加前後、それぞれのテーブルを作成する
Load partitions
を実行して、Athenaにパーティションを認識させる
テスト内容と結果
テーブル毎にSELECTするカラムと読み取るパーティション、その実行結果を出すと下記の通り
- 追加前のカラムが定義されているテーブル(price, name)
SELECTするカラム / 読み取るパーティション | hr1(price,name) | hr2(price,name,country) | hr1 と hr2 両方 |
---|---|---|---|
price, name | price,nameの値が取得可能 | price,nameの値が取得できる | price,nameの値が取得できる |
price, name, country | countryが定義されていないのでエラー | countryが定義されていないのでエラー | countryが定義されていないのでエラー |
- 追加後のカラムが定義されているテーブル(price, name, country)
SELECTするカラム / 読み取るパーティション | hr1(price,name) | hr2(price,name,country) | hr1 と hr2 両方 |
---|---|---|---|
price, name | price,nameの値が取得可能 | price,nameの値が取得できる | price,nameの値が取得できる |
price, name, country | price, nameの値を取得 countryは空白で出力 |
price, nameの値を取得 | price, nameの値を取得 データにcountryがあれば取得、なければ空白 |
まとめ
- ある時点から元データのカラムは増やしてよい
- それに合わせてAthenaのテーブルカラムも増やしてよい
- 元データに存在しないカラムをSELECTしても、空白で出力されるだけでエラーにならない
- 空白があってもそのカラムに対してSUM()等の関数は実行できる