Den*_*nis 2 hbase hive hcatalog
有一个空的HBase表,有两个列族:
create 'emp', 'personal_data', 'professional_data'
Run Code Online (Sandbox Code Playgroud)
现在我尝试将Hive外部表映射到它,它自然会有一些列:
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");
Run Code Online (Sandbox Code Playgroud)
现在我得到的错误是这样的:
FAILED:执行错误,从 org.apache.hadoop.hive.ql.exec.DDLTask 返回代码 1。java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.hbase.HBaseSerDe: columns 有 5 个元素,而 hbase.columns.mapping 有 6 个元素(计算键如果隐式))
你能帮我一下吗?难道我做错了什么?
在映射中,您引用该id字段,但应引用 HBasekey关键字。如文档中所述:
映射条目必须是 :key 或以下形式:column-family-name:[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");
Run Code Online (Sandbox Code Playgroud)
列映射基于列的顺序,而不是它们的名称。在文档的“多列和族”段落中,您可以清楚地看到名称并不重要
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"
)
Run Code Online (Sandbox Code Playgroud)
那么映射就是
| 归档时间: |
|
| 查看次数: |
5246 次 |
| 最近记录: |