1

現在、Amazon EMR に HIVE 0.7 インスタンスがあります。Hive 0.11 を使用して、新しい EMR クラスターでこのインスタンスの複製を作成しようとしています。

私の 0.7 インスタンスには、空の文字列を NULL に設定する外部テーブルがあります。テーブルの作成方法は次のとおりです。

CREATE EXTERNAL TABLE IF NOT EXISTS tablename
(column1 string,
column2 string)
PARTITIONED BY (year STRING, month STRING, day STRING)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'
TBLPROPERTIES ('serialization.null.format' = '');

データは次のようにテーブルに追加されます。

ALTER TABLE tablename 
ADD PARTITION (year = '2013', month = '10', day='01')
LOCATION '/location_in_hdfs';

これは 0.7 ではうまく機能しますが、0.11 では空の文字列を NULLS として評価していないようです。興味深いことに、同じデータとテーブル定義で通常のテーブルを作成すると、空の文字列が予想どおり NULL として評価されるようです。

0.11 の外部テーブルでこれを行う別の方法はありますか?

4

1 に答える 1

1

テーブル プロパティをオーバーライドする Hive の既定のパーティション プロパティ。次のように、ALTER ステートメントに SERDE プロパティを含めます。

ALTER TABLE tablename  ADD PARTITION (year = '2013', month = '10', day='01') SET  
SERDEPROPERTIES ('serialization.null.format' = '');
于 2014-08-12T15:29:16.840 に答える