multidivideserde是否支持null defined as子句?

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

本文展示了我们可以在配置单元中使用多字符分隔符。
但是我们也可以指定空值吗?
我尝试了以下返回错误的配置单元sql:

CREATE TABLE temp
( a STRING, b STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim"="@#")
NULL DEFINED AS 'NULL'
STORED AS TEXTFILE;

错误:

Error: Error while compiling statement: FAILED: ParseException line 5:0 missing EOF at 'NULL' near ')' (state=42000,code=40000)
2w3rbyxf

2w3rbyxf1#

使用行格式分隔选项时,可以使用定义为“null”的null选项。这里我们使用的是行格式serde选项,因此需要显式传递属性serialization.null.format。
通过设置serialization.null.format的属性值,可以使用以下查询:

CREATE TABLE temp
( a STRING, b STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe'
WITH SERDEPROPERTIES ("field.delim"="@#",'serialization.null.format'='NULL')
STORED AS TEXTFILE;

有关更多信息,请参阅《hive ddl参考指南》。multiserde源代码。

HIVE DDL GUIDE:

row_format
  : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
        [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
        [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)
  | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

相关问题