美文网首页
HBase从入门到精通(三) - 基本操作

HBase从入门到精通(三) - 基本操作

作者: ElliotG | 来源:发表于2020-06-11 09:17 被阅读0次

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}

相关文章

网友评论

      本文标题:HBase从入门到精通(三) - 基本操作

      本文链接:https://www.haomeiwen.com/subject/sxpvtktx.html