【问题标题】:Writing columns having NULL as some string using OpenCSVSerde - HIVE使用 OpenCSVSerde 将具有 NULL 的列写入某些字符串 - HIVE
【发布时间】:2017-08-20 20:53:46
【问题描述】:

我正在使用 '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','' 。空字符串按原样写入文本文件。文本文件中的数据读取 '1','2',''

但如果 'foo' 包含空值,例如:'1','2',null。空值未写入文本文件。 文本文件中的数据读取 '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 文件。

我是否必须检查选择查询本身(如(NVL 或其他))中列的空值并将其替换为某些内容?

【问题讨论】:

    标签: hive


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2021-02-09
      • 2015-06-01
      • 2015-02-07
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多