我正在使用' org.apache.hadoop.hive.serde2.OpenCSVSerde'编写hive表数据。
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;
所以,如果&#39; foo&#39; table中有空字符串,例如:&#39; 1&#39;,&#39; 2&#39;,&#39;&#39; 。空字符串按原样写入文本文件。文本文件中的数据为“&#39; 1&#39;&#39; 2&#39;&#39;&#39;
但如果&#39; foo&#39;包含空值,例如:&#39; 1&#39;,&#39; 2&#39;,null。空值不会写入文本文件中。 文本文件中的数据为&#39; 1&#39;&#39; 2&#39;,
如何确保使用csv serde将空值正确写入文本文件。写为空字符串或任何其他字符串说&#34; nullstring&#34;?
我也试过这个:
CREATE TABLE testtable ROW FORMAT SERDE
....
....
STORED AS TEXTFILE LOCATION '<location>'
TBLPROPERTIES ('serialization.null.format'='')
AS select * foo;
虽然这可能应该用null替换空字符串。但这甚至不能做到。
请指导我如何将空值写入csv文件。
我是否必须检查select查询本身中的列的空值,如(NVL或其他),并将其替换为某些内容?
答案 0 :(得分:1)
打开CSV Serde忽略&#39; serialization.null.format&#39;属性,您可以使用以下步骤处理空值
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