0. HBase Shell
HBase Shell是HBase内置的操作控制台。
启动HBase Shell:
命令行下输入: hbase shell
1. 建表和查看
- 建表
create [TableName], [ColumnFamily]
eg: create 'testTable', 'cf'
什么是ColumnFamily(列族)?
HBase的表都是由列族组成的。
没有列族的表示没有意义的。
不同于RDBMS,列依附在列族上而不是表上

为什么不定义列?
很多从关系型数据库转过来的初学者都会问这个问题。
是的,传统的关系型数据库建表的时候必须建立列。
但是,HBase不是这样玩的。
HBase中的列是灵活的,可以随便定义。
在你插入一条数据的时候,就会生成列。
插入一条数据实际上是插入了一个单元格:
[单元格] = [表]:[列族]:[行]:[列]
现在我们可以看到,列族更像传统关系型数据库中的表,而HBase的表变成了存放列族的更高的概念。
- 查看表
list
这条命令可以查看数据库中有哪些表。
- 查看表属性
describe [TableName]
eg: describe 'testTable'
- 新增列族
alter [TableName], [NewColumnFamily]
2. 插入数据
- put
我们使用put命令来插入数据。
put [tableName], [rowKey], [columnFamily]:[columnName], [cellValue], {timestamp}
eg: put 'testTable', 'row1', 'cf:column1', 'kg'
从上面的命令我们可以看到,timestamp是一个可选项。
这是因为,HBase的单元格可以存储多个版本(version)的值,而这个版本号就用timestamp来存储该条记录的时间戳,如果不指定timestamp会默认使用当前时间。
3. 查看表数据
- scan
scan命令其实相当于传统关系型的select。
scan [tableName]
scan [tableName], {STARTROW=>[rowKey]}
显示所有rowKey大于等于某个值的记录。
eg: scan 'testTable', {STARTROW=>'row5'}
scan [tableName], {ENDROW=>[rowKey]}
显示所有rowKey小于等于某个值的记录。
eg: scan 'testTable', {ENDROW =>'row10'}
4. 获取单元格数据
- get
get只能查一个单元格的记录。
在表数据量很大的时候,用scan会很慢,这个时候get的查询速度要远远高于scan。
scan [tableName], [rowKey], [columnFamily]:[columnName]
eg: get 'testTable', 'row7', 'cf:column1'
获取多个版本的单元格的值
scan [tableName], [rowKey], {COLUMN=>[columnFamily]:[columnName], VERSIONS=>xx}
eg: scan 'testTable', 'row5', {COLUMN=> 'cf:column1', VERSIONS=>5}
网友评论