美文网首页
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