2017-02-03 6 views
0

テーブルファシリティヘッダーがあります。これを変更していくつかの列を追加したいのです。新しく追加された列がデフォルト値をnullとして保持します。私のテーブルにはすでに14年間のデータがロードされています.2002〜2014年のパーティションテーブルでは、これらの新しく追加されたカラムの値はデフォルトでNULLになるはずです。ALTER TABLE DEFAULT NULLを持つ列を追加します。

create table facility_HEADER 
(
A string, 
B INT, 
C INT 
)partitioned by (year int comment 'Date Year Incurred') 
STORED AS PARQUET 

アルター表コマンド

ALTER TABLE facility_HEADER add columns (MSCLMID Bigint,NPI STRING,UNITS decimal(10,2)); 

私はテーブルの上に記述を置くとき、私は列が末尾に追加しまっ見ることができます。 パーティションのいずれかからselect *を入力すると、エラーが発生します。 org.apache.hadoop.hive.ql.metadata.HiveException: とjava.lang.ClassCastException:org.apache.hadoop.io.IntWritableは をキャストすることはできません例外 にjava.io.IOExceptionに失敗しました

to org.apache.hadoop.io.LongWritable

私のテーブルは14年分のデータを持っているため、select句にヌルを入れてエイリアスを付けることはできません。

hereおよびhereからの参照を試みました。

私のテーブルで実際に起こったことを助けてくれる人がいますか。私は14年のデータを失ってしまいました。

答えて

0

最初に完全なファイルバックアップを作成してください。テーブルを変更して、新しく追加した列を削除してください。あなたがテーブルにまだ書き込んでいなければ、それはうまくいくはずです。テーブルが再び選択可能であることを確認してください。次に、新しい列で新しい表を作成し、上書きを挿入します。

0

ハイブでalterコマンドを使用すると、データを敷設していないメタデータが変更されたため、select * from tableは失敗します。 ROW_FORMATとFILE_FORMATがROW_FORMAT上で説明したように列の値を見つけることができなくなりますを使用して使用してハイブが格納されたファイルからデータを抽出しようとしている「/apps/hive/warehouse/databasename.db/tablename/」として

:新しいテーブルを作成し、データを挿入し、TABLE selet INTO oldtablname

INSERTように、テーブルの名前を変更:寄木細工のハイブがPARQUETに周り

仕事を新しい列の定義を取得していないなどのデータが格納されています(古い)MSCLMIDとしてnull、NPIとしてnull、oldtabelのUNIsとしてnull

+0

私はすでにクエリで言及しています。私のデータがTBであるため、これらの列としてselectとnullを入れたくありません。他の回避策はありますか? – codaholic

+0

これは、私があなたの寄せ木細工のファイルを変更しない限り、別のオプションのまわりでしか働かないと言った理由です... –

関連する問題