MetaException(message:org.apache.hadoop.hive.serde2.SerDeException Error: hbase.columns.mapping missing for this HBase table.)
时间: 2024-05-20 07:14:29 浏览: 295
这个错误通常出现在使用 Hive 查询 HBase 表时,需要在创建外部表时指定 HBase 列映射信息,具体方法如下:
1. 在创建外部表时使用 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES(...) 指定 HBase 存储处理程序和序列化属性。
2. 在表定义中指定 HBase 列映射,例如:
CREATE EXTERNAL TABLE hbase_table(key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:value")
TBLPROPERTIES("hbase.table.name" = "hbase_table");
其中,hbase.columns.mapping 指定了 HBase 表中列的映射关系,格式为 “column_family:column”。如果不指定映射关系,就会出现你遇到的异常。
相关问题
hbase.columns.mapping,有id和name两个字段,列族是F怎么写
在HBase中,当你使用Hive作为查询工具并想通过`CREATE EXTERNAL TABLE`语句创建一个Hive表来映射HBase表时,`hbase.columns.mapping`属性非常关键,它定义了HBase列族(Column Family)中的列如何映射到Hive表的列上。
如果你有一个名为`F`的列族,其中包含`id`和`name`两个字段,对应的Hive映射语句应该像下面这样写:
```sql
CREATE EXTERNAL TABLE my_hive_table (
id INT,
name STRING
)
PARTITIONED BY (partition_column STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
'hbase.columns.mapping' = 'F:id,F:name', -- 这里指定了列族F下的'id'和'name'分别映射到Hive的'id'和'name'列
'hbase.table.name' = 'my_hbase_table_name', -- HBase表的实际名称
'hbase.column.qualifier' = '' -- 如果你的列族没有限定符,默认值为空
)
LOCATION 'hdfs://path_to_my_hbase_directory';
```
这里的`F:id,F:name`表示HBase列族`F`中的`id`字段将被映射到Hive表的`id`列,`name`字段将被映射到`name`列。
hive抽取hbase
Hive可以通过HBase存储的数据表进行数据抽取,具体步骤如下:
1. 在Hive中创建外部表,指定HBase表的名称和列簇。
2. 使用Hive的HBase存储处理器(HBaseStorageHandler)将HBase表映射到Hive表。
3. 在Hive中查询HBase表的数据。
示例代码如下(假设HBase表名为hbase_table,列簇名为cf,列名为col1和col2):
```
CREATE EXTERNAL TABLE hive_table (col1 STRING, col2 INT)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:col1,cf:col2")
TBLPROPERTIES ("hbase.table.name" = "hbase_table");
SELECT * FROM hive_table;
```
阅读全文