使用Hive将双引号和逗号分隔的CSV文件导入Hbase

时间:2013-02-28 14:37:20

标签: hadoop hbase hive

我有一个CSV文件,用双引号和逗号逗号分隔。它看起来有点像:

  

“供应商提供的文字”,“供应商名称,公司”,“blah blah”,“下一个字符串”,“”,   1234

我正在尝试使用Hive将其导入Hbase中的表。

我可以使用以下内容从Hbase中的Hive创建一个表:

hive> CREATE TABLE exampletable1(tax_numb int, tax_name string, tax_addr string, tax_city string, tax_stat string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:tax_name,cf:tax_addr,cf:tax_city,cf:tax_stat")
TBLPROPERTIES ("hbase.table.name" = "hiveexampletable1");

我还能够在Hive中添加一个表格,我使用如下命令导入CSV文件(虽然双引号存在问题):

  

蜂房> create table example2(tax_numb int,tax_name string,tax_addr   string,tax_city string,tax_stat string)行格式分隔的字段   以','存储为文本文件;

但是,我无法将“分隔字段”位集成到我在Hbase中创建外部表的命令中。

由于我对Hive-Hbase组合比较陌生,所以我经历了一些教程,然后才到达我认为最好向社区寻求帮助的地方。我在谷歌上进行了一些搜索,但没有用。

非常感谢任何帮助/建议。

2 个答案:

答案 0 :(得分:1)

我使用org.apache.hadoop.hive.serde2.RegexSerDe作为serde来解析这种文件。例如,如果我有一个带有4个字段的csv,它们是整数,字符串,整数,字符串我可以使用:

CREATE EXTERNAL TABLE mytable (
    F1 BIGINT, F2 STRING, 
    F2 INT, F4 STRING
)
row format SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
with SERDEPROPERTIES ("input.regex" = "^\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\"$")
LOCATION "/somepath";

正则表达式总是一样的,所以我用python生成它:

>>> r = "^" + ",".join(['"([^"]*)"' for i in xrange(0,4)]) + "$"
>>> print str(r).replace('"', '\\"')
^\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\"$

问候!

答案 1 :(得分:0)

经过多次尝试寻找一个漂亮的解决方案后,我不得不求助于老去,然后再回到awk上。我使用的命令看起来有点像这样:

  

$ cat inputCSVfile.csv | awk'{print substr($ 0,252,20)echo“|”   substr($ 0,133,2)echo“|” substr($ 0,297,13)}'

这给了我所需要的东西。然后我将数据导入Hive并从那里弹出到Hbase中。希望它能帮助将来的某个人。