2017-03-28 16 views
2

私は 'org.apache.hadoop.hive.serde2.OpenCSVSerde'を使ってハイブテーブルのデータを書きます。OpenCSVSerde - HIVEを使用してNULLを持つカラムをいくつかの文字列に書く

CREATE TABLE testtable ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES (
    "separatorChar" = "," 
    "quoteChar"  = "'" 
    ) 
STORED AS TEXTFILE LOCATION '<location>' AS 
select * from foo; 

'foo'テーブルに空の文字列がある場合は、 '1'、 '2'、 ''などです。空の文字列はそのままテキストファイルに書き込まれます。テキストファイル内のデータは、 '1'、 '2'、 ''のようになります。

'foo'には、 '1'、 '2'、nullなどのnull値が含まれています。 null値はテキストファイルには書き込まれません。 テキストファイルのデータは、 '1'、 '2'、

と表示されます。csv serdeを使用してNULLがテキストファイルに正しく書き込まれていることを確認する方法を教えてください。空文字列または他の文字列として "nullstring"と書かれていますか?おそらく、nullを指定して空の文字列を置き換える必要があり、このものの

CREATE TABLE testtable ROW FORMAT SERDE 
.... 
.... 
STORED AS TEXTFILE LOCATION '<location>' 
TBLPROPERTIES ('serialization.null.format'='') 
AS select * foo; 

は私もこれを試してみました。しかし、これでさえできません。

csvファイルにnullを書き込む方法を教えてください。

(NVLなど)のような選択クエリ自体の列のNULL値をチェックして何かに置き換える必要がありますか?

答えて

1

オープンCSV Serdeは 'serialization.null.format' プロパティを無視し、あなたは以下の使用してnull値を扱うことができる

1. CREATE TABLE testtable 
    (
    name string, 
    title string, 
    birth_year string 
    )ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
    WITH SERDEPROPERTIES (
    "separatorChar" = "," 
    ,"quoteChar"  = "'" 
    ) 
    STORED AS TEXTFILE; 

2. load data into testtable 

3. CREATE TABLE testtable1 
(
name string, 
title string, 
birth_year string 
) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
TBLPROPERTIES('serialization.null.format'=''); 

4. INSERT OVERWRITE TABLE testtable1 SELECT * FROM testtable 
ステップ
関連する問題