Hive 在HBase现有表之上定义配置单元外部表

Hive 在HBase现有表之上定义配置单元外部表,hive,hbase,hcatalog,Hive,Hbase,Hcatalog,有一个空的HBase表,有两个列族: create 'emp', 'personal_data', 'professional_data' 现在我正在尝试将一个配置单元外部表映射到它,它自然会有一些列: CREATE EXTERNAL TABLE emp(id int, city string, name string, occupation string, salary int) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHan

有一个空的HBase表,有两个列族:

create 'emp', 'personal_data', 'professional_data'
现在我正在尝试将一个配置单元外部表映射到它,它自然会有一些列:

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");
现在我得到的错误是:

失败:执行错误,从返回代码1 org.apache.hadoop.hive.ql.exec.ddlstask。java.lang.RuntimeException: MetaException(消息:org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.hbase.hbaseserd:列有5个元素,而 hbase.columns.mapping有6个元素(如果是隐式的,则计键))


你能帮我一下吗?我做错了什么吗?

在映射中,您引用的是
id
字段,但您应该引用HBase
关键字。如合同所述:

映射项必须为:key或形式 列族名称:[列名称][#(二进制|字符串)

只需将
: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");
列映射基于列的顺序,而不是它们的名称。在文档中的段落“多列和族”中,您可以清楚地看到名称并不重要

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"
)
然后,映射就开始了

  • 键->id
  • a:b->value1
  • a:c->value2
  • d:e->value3

但它会将Hive id列映射到Hbase键吗?还是我弄错了什么?谢谢您的回答:)是的,我将那个部分文档重读了好几遍,这让我非常困惑。非常感谢cheseaux!它工作得很好。祝您愉快。