分享

hive创建外部表,查询数据为null,不识别数据类型字节

desehawk 发表于 2014-6-7 20:56:07 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 25506
请教大家一个问题:hive映射hbase的表的问题,怎样才能让hive认识hbase的字节值?
先说说我情况:
--1,hbase有一张表:
create 'hitable','g';

-- 2,shell插入数据
    put 'hitable','scutshuxue','g:dev_type','24'        --- 这里的24应该是保存为字符串了。
-- 3, hive建立外部表连接到hbase的 hitable表
CREATE EXTERNAL TABLE hitable(key string, dev_type int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,g:dev_type")
TBLPROPERTIES("hbase.table.name" = "hitable");
--- 4, select * from hitable;
结果:
scutshuxue      24
Time taken: 0.226 seconds, Fetched: 1 row(s);

貌似正常。

---我的问题,实际情况是,写java代码,入库 dev_type 保存为字节(这也是hbase的权威指南推荐的)
       若我写java程序的时候入库代码如下:
       short dev_type=24
       put.add(Bytes.toBytes("g"),Bytes.toBytes("dev_type"),Bytes.toBytes(dev_type));

--- 然后在hive里面select * from hitable;
获取的结果为
  scutshuxue      NULL

究竟映射外部表的时候要做什么转换,才能让hive认识hbase的hbase的字节值为对应的数字?


已有(1)人评论

跳转到指定楼层
sstutu 发表于 2014-6-7 20:58:03
http://stackoverflow.com/questions/12909118/number-type-value-in-hbase-not-recognized-by-hive
Number type value in hbase not recognized by hive
上面问题的解决方法,加个#b就ok了。

意思就是按
CREATE EXTERNAL TABLE hitable(key string, dev_type int)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,g:dev_type#b")      

如下:
"hbase.columns.mapping" = ":key,cf1:c_name,cf1:c_kind,cf1:c_industry#b,cf1:c_jobtitle,cf1:c_workyear#b,cf1:c_title,cf1:c_company"




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条