这个article 表明我们可以在Hive中使用多字符分隔符。
但是我们还可以指定NULL值吗?
我尝试了以下hive 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)
答案 0 :(得分:2)
当我们使用ROW FORMAT DELIMITED 选项时,可以选择使用 NULL DEFINED AS' NULL' 。这里我们使用ROW FORMAT 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参考指南。 MultiDelimitSerde源代码。
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, ...)]