hive将具有null的列写入某个字符串

ljsrvy3e  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(439)

我正在使用“org.apache.hadoop.hive.serde2.opencsvserde”来编写配置单元表数据。

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'、''。空字符串按原样写入文本文件。textfile中的数据读取“1”、“2”、“0”
但如果'foo'包含空值,例如'1','2',则为空。空值未写入文本文件。文本文件中的数据读取“1”、“2”,
如何确保使用csv-serde将空值正确写入文本文件。写为空字符串或任何其他字符串说“nullstring”?
我也试过这个:

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

尽管这可能会将空字符串替换为null。但这根本不起作用。
请指导我如何将空值写入csv文件。
我是否需要检查select查询本身中的列的空值,比如(nvl或其他什么)并用其他内容替换它?

koaltpgm

koaltpgm1#

open csv serde忽略“serialization.null.format”属性,您可以使用以下步骤处理空值

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

相关问题