我正在尝试将以下数据存储在csv文件中的配置单元表中,但无法成功执行
Ann, 78%,7,
Beth,81%,5,
Cathy,83%,2,
数据存在于csv文件中。我在配置单元中使用以下定义创建了表:
Hive> CREATE TABLE test1 (Name String, Perc String, Rank String)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ("input.regex" = "^(\w+)\,(\w+)\%\,(\w+)$",
"output.format.string" = "%1$s %2$s %3$s" )
STORED AS TEXTFILE;"
ok
hive> load data local inpath '/tmp/input.csv' into table test1;
ok
hive> Select * from test1;
ok
Name Perc Rank
Null Null Null
Null Null Null
Null Null Null
我想不出这个错误。结果数据没有加载到表中。
4条答案
按热度按时间deyfvvtc1#
你不应该需要regexserde。您应该能够将分隔符设置为逗号。
CREATE TABLE test1 (Name String, Perc String, Rank String) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;
你也可以看看这个cvs服务器。https://github.com/ogrodnek/csv-serdeyacmzcpb2#
使用
OpenCSVSerde
如果你需要灵活性。这样,您就可以完全控制分隔符、引号字符、转义字符、空处理和头处理。
看看这里和这里。
g2ieeal73#
你能像这样使用hive的内置regexp udf吗:
inn6fuwd4#
根据示例cvs数据,regex不匹配尾随逗号,也不匹配cvs数据的第一个示例行中显示的可选空格字符。正则表达式应该从:^(\w+)\,(\w+)%\,(\w+)$更改为:^(\w+)\,\s*(\w+)%\,(\w+)$