我有一个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组合比较陌生,所以我经历了一些教程,然后才到达我认为最好向社区寻求帮助的地方。我在谷歌上进行了一些搜索,但没有用。
非常感谢任何帮助/建议。
答案 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中。希望它能帮助将来的某个人。