0

テーブルの施設ヘッダーがあり、それを変更していくつかの列を追加したい.新しく追加された列にデフォルト値をnullとして保持させたい. 私のテーブルにはすでに 14 年間のデータがロードされています。デフォルトでは 2002 年から 2014 年のパーティション分割されたテーブルであるため、これらの新しく追加された列の値はテーブルで 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 * を配置すると、エラーが発生します。

例外 java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.ClassCastException: org.apache.hadoop.io.IntWritable を org.apache.hadoop.io にキャストできませんで失敗しました。書き込み可能

私のテーブルには 14 年間のデータがあり、select 句に null を入れてエイリアスを与えることでデータを処理したくありません。

hereと here から参照してみました。

私のテーブルで実際に何が起こったのか、誰か助けてくれませんか.私は14年間のデータを一度に失いました.

4

2 に答える 2

0

ハイブでalterコマンドを使用すると、レイアウトデータの下にないメタデータが変更されただけなので、 select * from table は失敗します。

ハイブは、row_format と file_formatを使用して "/apps/hive/warehouse/databasename.db/tablename/" に保存されたファイルからデータを抽出しようとしているため、row_formatで説明されているように列の値を見つけることができません。

: データは PARQUET として保存されます ハイブは PARQUET の新しい列の定義を取得しません

回避策: 新しいテーブルを作成してデータを挿入し、テーブルの名前を oldtablename に変更します

INSERT INTO TABLE selet columns(old) null as MSCLMID ,null as NPI, null as UNITS from oldtabel

于 2017-02-04T07:20:45.053 に答える