Hbase基础操作/Phoenix操作-二者差异

对Hbase的基础认知

HBase适用于:

持久化存储大量数据(TB、PB)
对扩展伸缩性有要求
需要良好的随机读写性能
简单的业务KV查询(不支持复杂的查询比如表关联等)
能够同时处理结构化和非结构化的数据
订单流水、交易记录、需要记录历史版本的数据等
不适用于(适用于RDBMS):

几千、几百万数据
需要类型列(不过已经可以用Phoniex on HBase解决这个问题)
需要跨行事务,目前HBase只支持单行事务,需要跨行必须依赖第三方服务
SQL查询(不过可以用Phoniex on HBase解决这个问题)
硬件太少,因为HBase依赖服务挺多,比如至少5个HDFS DataNode,1个HDFS NameNode(为了安全还需要个备节点),一个Zookeeper集群,然后还需要HBase自身的各节点
需要表间Join。HBase只适合Scan和Get,虽然Phoenix支持了SQL化使用HBase,但Join性能依然很差。如果非要用HBase做Join,只能再客户端代码做
 

Hbase和Phoenix的差异

1  Phoenix中建立的表,在Hbase中可查,但是Hbase中建的表,在Phoenix中不可查询

2 Phoenix支持join,Hbase不可以

Hbase操作

在hbase 
hbase shell 进入命令行
//下面操作一定要带上引号
drop 't1'  删除表
# 获取整个表的值
scan 'flinkcdcresult1'

disable 'FLINKCDCRESULT' 
drop 'FLINKCDCRESULT'             禁用后才能删除表
create 'FLINKCDCRESULT',  {NAME=>'f'}
--增加数据
put'FLINKCDCRESULT', '001','f:times','13309882999'
put'FLINKCDCRESULT', '001','f:temp','31'

通用性解释

创建表 create '表名', '列族名1','列族名2','列族名N'
         创建表只用创建列族,然后插入数据的时候指定列就能新增列
查看所有表 list
描述表 describe '表名'
判断表存在 exists '表名'
判断是否禁用启用表 is_enabled '表名', is_disabled '表名'
添加记录 put '表名', 'rowKey', '列族 : 列' , '值'
查看记录rowkey下的所有数据 get '表名' , 'rowKey'
查看表中的记录总数 count '表名'
获取某个列族 get '表名','rowkey','列族'
获取某个列族的某个列 get '表名','rowkey','列族:列'
删除记录 delete '表名' ,'行名' , '列族:列'
删除整行 delete all '表名','rowkey'
删除一张表 先要屏蔽该表,才能对该表进行删除 ,第一步 disable '表名' ,第二步 drop '表名'
清空表 truncate '表名'
查看所有记录 scan '表名'
查看某个表某个列中所有数据 scan '表名' , {COLUMNS=>'列族名:列名'}
更新记录 就是重写一遍,进行覆盖,hbase没有修改,都是追加

对于一些解释

HBase Shell语法中,所有字符串参数都必须包含在单引号中,且区分大小写,
如 Student 和 student 代表两个不同的表。
另外,在上条命令中没有对列族参数进行定义,因此使用的都是默认参数,
如果建表时要设置列族的参数,参考以下方式:
create 'Student',{NAME=>'Stulnfo',VERSIONS=>3},{NAME=>'Grades',BLOCKCACHE=>true}

大括号内是对列族的定义,NAME、VERSION 和 BLOCKCACHE 是参数名,无须使用单引号,
符号=>表示将后面的值赋给指定参数。例如,VERSIONS => 3是指此单元格内的数据可以保留最近的 3 个版本,
BLOCKCACHE => true指允许读取数据时进行缓存。
创建表结构以后,可以使用 exsits 命令查看此表是否存在.

建表查看测试

create 'hbase_test', '列族名1','列族名2','列族名N'

操作hbase数据:
表有两个列族,列族1和列族2,其中列族1和列族2下分别有两个列name和age,phone和address
|		|	列族1   |     列族2        |
|		|name	age	| phone 	address|
|001	|Tom	18	| 110		wuhan  |
注意:hbase的表只动态加入列的,比如说列族1下面有两列,再添加数据时,可以在动态的加一列。
1 创建表hbase_test有两个列族CF1和CF2
hbase(main):041:0>create 'hbase_test',  {NAME=>'cf1'},{NAME=>'cf2'}

注意:shell语句后跟分号表示语句还没有,这一点恰恰和mysql相反(我的理解)
这样表结构就起来了,其实比较自由,列族里边可以自由添加子列很方便。如果列族下没有子列,cf1:name加不加冒号都是可以的,也可以写成cf1name

如果在添加数据的时候,需要手动的设置时间戳,则在put命令的最后加上相应的时间戳,时间戳是long类型的,所以不需要‘加引号

Hbase(main):045:0>put'hbase_test', '001','cf2:phone','13309882999',1478053832459

3 查看表中的所有数据

hbase(main):046:0>scan 'hbase_test'

ROW   COLUMN+CELL                                                            
001   column=cf1:name,  timestamp=1478053832459, value=Tom                  
001   column=cf1:age,  timestamp=1478053787178, value=18                    
001   column=cf:phone,  timestamp=1478053848225,  value=13309882999
001   column=cf2:address,  timestamp=1478053858144, value=昆明
row(s)in0.0140seconds
因为表中只有一条数据,所以结果和下面查询一条数据的结果相同

4 查看其中某一个Key的数据
hbase(main):048:0>get'hbase_test','001'
COLUMN                    CELL                                                                   
 001 column=cf1:name,    timestamp=1478053832459, value=Tom                  
 001 column=cf1:age,     timestamp=1478053787178, value=18                    
 001 column=cf:phone,    timestamp=1478053848225, value=13309882999
 001 column=cf2:address, timestamp=1478053858144, value=昆明

一条hbase命令只允许更新一个column

/opt/cloudera/parcels/PHOENIX-5.0.0-cdh6.2.0.p0.1308267/lib/phoenix/bin/sqlline.py
./sqlline.py 10.129.37.71:2181
CREATE TABLE flinkcdcresult (
id varchar ,
times varchar, 
temp double
CONSTRAINT my_pk PRIMARY KEY (id)
);

查看
!tables
select * from !;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值