2013-07-05 16 views
17

現在のスキーマは次のとおりです。ハイブテーブルの列の種類を変更する方法はありますか?

hive> describe tableA; 
OK 
id  int 
ts  timestamp 

私はテーブルを落とすことなくBIGINTするts列を変更して再度作成し直したいです。出来ますか?

ALTER TABLE tableA CHANGE ts ts BIGINT AFTER id; 

は完全な詳細のためにこれを参照してください:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-AlterColumn

+0

を実行します。ハイブは、とても簡単に多くの不一致を作り出すことができます。おそらくそれは私ですが、ハイブは非常にイライラしています:-( –

+0

面白いのは、これもまたORCファイル –

答えて

34

は解決策を見つけました。

ALTER TABLE table_name CHANGE old_col_name new_col_name new_data_type 

ここでは、一度にカラム名とデータタイプを変更できます。 col_nameを変更したくない場合は、単にold_col_nameとnew_col_nameを同じにします。 OK。

問題が発生しました。 ts列をBIGINTに変更する場合は、変更する列型を意味します。このクエリを実行するだけです。ここで

ALTER TABLE tableA CHANGE ts ts BIGINT; 

TSとTSが同じである、あなたは、列名を変更することが、列タイプを変更していないこと。列名を変更する場合は、単に実行するだけです。

ALTER TABLE tableA CHANGE ts new_col BIGINT; 

は今、あなたは、パーティションを使用している場合は、 ``テーブル{TABLE_NAME}分配カラム({} {column_nameにCOLUMN_TYPEを})を変更しなければなりませんさらに

 
hive> describe tableA; 
OK 
id  int 
new_col  bigint
+1

+1です。なぜならあなたの回答はAnimeshsの答えの12日前に来ましたが何らかの理由で投票が少ないからです。 – MikeKulls

+1

@interskhこれは、ALTER TABLE tableA CHANGE a、b、ca、b、c BIGINT;などの1つのステートメントの複数の列にこれを適用する方法です。テーブルはハイブ用のHueインターフェイスを使って作成されていますが、 'DECIMAL'のデフォルトは'(10,0) 'ですが、'(38,0) 'が必要です –

+0

データがORCまたはパーケットとして格納されていますか? –

20
ALTER TABLE table_name CHANGE col_name col_name newType 
6

それはexestingテーブルはハイブで、この構文を使用する修正/変更するには、通常は簡単です

関連する問題