在hbase现有表上定义配置单元外部表

wvmv3b1j  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(350)

有一个空的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个元素(如果是隐式的,则计算键)
你能帮帮我吗?我做错什么了吗?

l7mqbcuq

l7mqbcuq1#

在Map中,您引用的是 id 字段,但应引用hbase key 关键字。如文件所述:
Map项必须为:key或列族名称:[column name][#(binary | string)形式
只要替换一下 :id:key 这应该可以做到:

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" = ":key,
                   personal_data:city,
                   personal_data:name,
                   professional_data:occupation,
                   professional_data:salary")
TBLPROPERTIES ("hbase.table.name" = "emp", "hbase.mapred.output.outputtable" = "emp");

列Map基于列的顺序,而不是它们的名称。在文档、段落、多个列和族中,您可以清楚地看到名称并不重要

CREATE TABLE hbase_table_1(key int, value1 string, value2 int, value3 int) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
  "hbase.columns.mapping" = ":key,a:b,a:c,d:e"
)

那么Map就是
键->id
a:b->值1
a:c->值2
d:e->值3

相关问题