我有一个带有DDL的外部表,如下所示:
CREATE EXTERNAL TABLE pathirippilly_db.serdeTest (Name varchar(50),Job varchar(50),Sex varchar(4))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES
(
"separatorChar" = ",",
"quoteChar" = "\""
)
STORED AS TEXTFILE
location "/user/pathirippilly/hive_data_external/serdeTest";
使用上面的DDL创建表之后,我将如下插入数据:
insert into serdetest values('"AKHIL"','Engineer','Male');
但是即使在定义了opencsv serde之后,双引号也不会被转义(不会被删除)。这是我的问题
答案 0 :(得分:0)
第一个问题和第三个问题都相似-为什么不删除双引号?
这是因为在将数据直接插入表中时未使用SerDe。 SerDe代表Serializer / Deserializer,Hive使用它来读取/写入文件中的表行。
HDFS文件-> InputFileFormat->->反序列化器-> 行对象
行对象->序列化程序->-> OutputFileFormat-> HDFS文件
尝试使用“ load”命令将数据插入到配置单元表中,您会看到它正在工作。
load data local inpath '/home/hive/test/test.csv' into table serdetest;
示例-test.csv
"AKHIL",Engineer,Male
有关更多详细信息,请检查Hive Wiki page。
第二个问题-如何转义多个引号字符?
可以使用'RegexSerDe'完成。
CREATE EXTERNAL TABLE serdetest (Name varchar(50),Job varchar(50),Gender
varchar(6))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '^\"(\\d+)\\W+\\W+(\\w+).*'
)
STORED AS TEXTFILE
location "/user/pathirippilly/hive_data_external/serdeTest";
注意:例如,语句中给出的正则表达式不是实际的。
希望这会有所帮助!