Hiveのテーブルにカラムを追加した時に
追加したカラムがスッカスカでデータが取れないことがあった。
結論から言うと、パーティションが変更前のテーブル定義と紐づいてるから
追加カラムの値が取れなかったってこと。
なのでパーティションを作り直すと追加カラムのデータが取れた。
そのことを知見として書き留めておこう。
最初のテーブル定義
パーティションは適当、でもこれがくせもの。
external じゃなくてもいいかも、たぶん。
name カラムが無いことに注意。あとから作る。
create external table if not exists hogehoge_table ( id string ) partitioned by ( version string ) row format delimited fields terminated by '\t' null defined as '' stored as textfile location '/hoge/test.db/hogehoge_table';
パーティション作成
Hiveを起動して下記コマンド。自分はbeeline使ってるけど、普通は何使うんだろう?
alter table hogehoge_table add partition (version="1234");
SQL
でさっそくSQLを実行してみる。
select * from hogehoge_table where version="1234"; hogehoge_table.id hogehoge_table.version 001 1234 002 1234 003 1234
予想通りに取れる。
カラムを追加する
alter table hogehoge_table add columns ( name string );
select * from hogehoge_table where version="1234"; hogehoge_table.id hogehoge_table.name hogehoge_table.version 001 1234 002 1234 003 1234
→name 列が取れてない!
パーティションを削除してもう一回作る
alter table hogehoge_table drop partition (version="1234"); alter table hogehoge_table add partition (version="1234");
もう一回SQL実行
select * from hogehoge_table where version="1234"; hogehoge_table.id hogehoge_table.name hogehoge_table.version 001 hoge 1234 002 fuga 1234 003 mohimohi 1234
→name列が取れてる
参考
別の人も同じこと起きてるみたい。
Hiveのwiki見るとSQLの書き方が書いてある。
LanguageManual DDL - Apache Hive - Apache Software Foundation
ALTER TABLEの時にPARTITION入れればいいのね。
ALTER TABLE table_name [PARTITION partition_spec] ADD COLUMNS (col_name data_type ...);
- 作者: Edward Capriolo,Dean Wampler,Jason Rutherglen,佐藤直生,嶋内翔,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/06/15
- メディア: 大型本
- この商品を含むブログ (3件) を見る
- 作者: 加嵜長門,田宮直人,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/03/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る