質問: 環境:Hadoop(HDFS) 言語:Hive Hiveにて、すでに存在するテーブルに対して、 初期値を設定しながらカラムを追加する方法が知りたいです。 既存テーブル:t1 | id | name | | --- | --- | | 1 | sato | | 2 | suzuki | | 3 | tanaka | 期待する結果:t1 | id | name | class | | --- | --- | --- | | 1 | sato | 1 | | 2 | suzuki | 1 | | 3 | tanaka | 1 | 色々調べてみた結果、以下の2通りのアプローチがあるかと思います。 (1)初期値を設定しながら、カラムを追加する (2)カラムを追加した上で、同一のデータで上書きする (1)初期値を設定しながら、カラムを追加する 1ALTER TABLE t1 ADD COLUMNS(class int); 2ALTER TABLE t1 ADD COLUMNS(class int default 1); 3ALTER TABLE t1 ADD COLUMNS(class int not null default 1); 1であればカラムのみの追加はできた(初期値はnullとなる)のですが、23だと失敗します。 ※おそらくMySQLなら2や3は実行できると思います。 (2)カラムを追加した上で、同一のデータで上書きする (1)がHiveで実行できない場合を想定しています。 1ALTER TABLE t1 ADD COLUMNS(class int); 2INSERT INTO t1(class) VALUES(1); 1の後に2を実行すると、以下のようになってしまいました。 期待しない結果:t1 | id | name | class | | --- | --- | --- | | 1 | sato | null | | 2 | suzuki | null | | 3 | tanaka | null | | null | null | 1 | Hiveの情報が書籍もwebも少ないのでどうしたらよいかと困っています。 どうぞよろしくお願いいたします。
回答: 現状のhiveではデフォルト値を追加する機能をサポートしていないようです。 Hive table creation with a default value 上記では、insert overwrite table を使用して初期値の値を更新する手順が紹介されています。