2017-10-04 13 views
1

Cette article montre que nous pouvons utiliser un délimiteur multi-caractères dans Hive.Est-ce que MultiDelimitSerde prend en charge la clause NULL DEFINED AS?

Mais pouvons-nous également spécifier la valeur NULL?

J'ai essayé la sql ruche suivante qui renvoie une erreur:

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; 

L'erreur:

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

Répondre

2

L'option d'utiliser NULL DEFINED AS 'NULL' est disponible lorsque nous utilisons ROW FORMAT DELIMITED option. Ici nous utilisons une option ROW FORMAT SERDE donc nous devons passer explicitement la propriété serialization.null.format.

vous pouvez utiliser la requête ci-dessous en définissant la valeur de la propriété de 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; 

Pour plus d'informations, vous pouvez consulter Hive DDL guide de référence. MultiDelimitSerde code source.

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, ...)]