有一个空的hbase表,有两个列族:
create 'emp', 'personal_data', 'professional_data'
现在我尝试将配置单元外部表Map到它,它自然会有一些列:
CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":id,
personal_data:city,
personal_data:name,
professional_data:occupation,
professional_data:salary")
TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp");
我得到的错误是:
失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddltask返回代码1。java.lang.runtimeexception:元异常(message:org.apache.hadoop.hive.serde2.serdeexception org.apache.hadoop.hive.hbase.hbaseserde:columns有5个元素,而hbase.columns.mapping有6个元素(如果是隐式的,则计算键)
你能帮帮我吗?我做错什么了吗?
1条答案
按热度按时间l7mqbcuq1#
在Map中,您引用的是
id
字段,但应引用hbasekey
关键字。如文件所述:Map项必须为:key或列族名称:[column name][#(binary | string)形式
只要替换一下
:id
由:key
这应该可以做到:列Map基于列的顺序,而不是它们的名称。在文档、段落、多个列和族中,您可以清楚地看到名称并不重要
那么Map就是
键->id
a:b->值1
a:c->值2
d:e->值3