我有一个用双引号和逗号分隔的CSV文件。它看起来有点像以下内容:
“来自供应商的文本",”供应商名称,Inc.",“blah blah ","Next string","",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文件(尽管双引号有问题):
hive>创建表example2(tax_numb int,tax_name string,tax_addr string,tax_city string,tax_stat string)行格式分隔字段,以“,”作为文本文件存储;
但是,我无法将“分隔字段”位集成到在Hbase中创建外部表的命令中。
由于我对Hbase的组合比较陌生,所以在到达一个我认为向社区寻求帮助的程度之前,我已经读过了许多教程。我在谷歌上做了很多搜索,但都没有用。
如有任何帮助/建议,将不胜感激。
发布于 2014-02-11 08:38:42
我使用org.apache.hadoop.hive.serde2.RegexSerDe作为serde来解析此类文件。例如,如果我有一个csv,其中包含4个字段,即整数、字符串、整数、字符串,我可以使用:
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";
regexp总是一样的,所以我用python生成它,如下所示:
>>> r = "^" + ",".join(['"([^"]*)"' for i in xrange(0,4)]) + "$"
>>> print str(r).replace('"', '\\"')
^\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\",\"([^\"]*)\"$
欢迎光临!
发布于 2013-02-28 15:58:44
经过几次尝试寻找一个美丽的解决方案,我最终不得不求助于老派,并回到了awk。我使用的命令看起来有点像这样:
$ cat inputCSVfile.csv awk '{print ($0,252,20) echo“\”substr ($0,133,2) echo“颇具”substr ($0,297,13)}‘
这给了我所需要的。然后我将数据导入到Hive中,然后从那里弹出数据到Hbase中。希望它能对未来的人有所帮助。
https://stackoverflow.com/questions/15138181
复制