zoukankan      html  css  js  c++  java
  • 【HBase】表模型和基本操作介绍


    HBase表模型

    在这里插入图片描述
    创建一个hbase表,必须要有表名列族名
    列族 —— columnFamily,就是上图中的Column Family1 userInfo store1 store2Column Family2 addressInfo store3
    —— column,就相当于mysql和hive中的字段名称,图中nameageaddressregtime等都是列。每一个列必然归属于某一个列族
    rowKey —— 行键,类似于mysql表中的主键
    timeStamp —— 每条数据产生的时间戳
    versionNum —— 每条数据当前的版本
    cell —— 单元格,就是hbase表中的数据值


    常用Shell操作

    • 进入hbase客户端命令操作界面
      bin/hbase shell
      会出现下图,在hbase(main):001:0>后输入命令即可
      在这里插入图片描述

    • 查看帮助命令
      help

    • 查看当前数据库中有哪些表
      list

    • 创建一张表
      create 'user','info','data' 表名为user,列族为info、data
      还有一种写法 create 'user',{NAME => 'info', VERSIONS => 3},{NAME => 'data'}

    • 添加数据
      以下均为向user表中插入数据

      一、向 列族info 中添加 name,并插入 rowKeyrk0001zhangsan 的数据
      put 'user','rk0001','info:name','zhangsan'

      二、向 列族info 中添加 gender,并插入 rowKeyrk0001female 的数据
      put 'user','rk0001','info:gender','female'

      三、向 列族info 中添加 age,并插入 rowKeyrk000120 的数据
      put 'user','rk0001','info:age',20

      四、向 列族data 中添加 pic,并插入 rowKeyrk0001picture 的数据
      put 'user','rk0001','data:pic','picture'
       

    • 查询数据

      HBase的查询比较脆弱,不支持SELECT * FROM tbl_nameLEFT JOIN

      第一种查询方式: get rowKey —— 通过rowKey直接获取数据,效率最高
      第二种查询方式: scan startRowKey endRowKey —— 根据rowKey的范围值进行查询,rowKey是按照字典顺序进行排列
      第三种查询方式: scan tbl_name —— 全表扫描,一般没人用

      查询实例:
      1.利用 get 查询数据:
       (1) get 'user','rk0001' 查询rowKey为rk0001的所有信息
       (2) get 'user','rk0001','info' 查询rowKey为rk0001,info列族的所有信息,如果要查多个列族,在后面追加即可:get 'user','rk0001','info','data'
       (3) get 'user','rk0001','info:name','info:age' 查询rowKey为rk0001,info列族中name列和age列的所有信息,查询列族中列的信息还有两种写法:get 'user', 'rk0001', {COLUMN => ['info', 'data']} / get 'user', 'rk0001', {COLUMN => ['info:name', 'data:pic']},但是一般查询带有rowKey数值时,都可以用第一种最简便的写法,怎么简便易懂易复用怎么来
       (4) get 'user', 'rk0001', {FILTER => "ValueFilter(=, 'binary:zhangsan')"} 使用过滤器,ValueFilter 是用来查询值的过滤器,binary 意思是二进制,使用过滤器还可以进行模糊查询,比如查询列名中含有字母’a’的数据:get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}

      2.利用 scan 查询数据:
       (1) scan 'user', {COLUMNS => 'info'} 查询user表中info列族的数据,如果要查询多个列族,在后面追加即可:scan 'user', {COLUMNS => ['info', 'data']}
       (2) scan 'user', {COLUMNS => ['info:name', 'data:pic']} 查询列族中某个列名的信息
       (3) scan 'user', {COLUMNS => 'info', RAW => true, VERSIONS => 5} VERSIONS指的是表中数据的版本号,这里是查询最近5个版本的数据
       (4) scan 'user', {COLUMNS => ['info', 'data'], FILTER => "(QualifierFilter(=,'substring:a'))"} 模糊查询,查询info和data列族中列名含有字母’a’的数据
       (5) scan 'people', {COLUMNS => 'info', STARTROW => 'rk0001', ENDROW => 'rk0003'} 范围查询,查询info列族中rk0001到rk0003之间的数据,除了可以指定rowKey的范围,还可以指定时间戳的范围:scan 'user', {TIMERANGE => [1392368783980, 1392380169184]}
       (6) scan 'user',{FILTER=>"PrefixFilter('rk')"} 查询rowKey中以’rk’开头的字母,Perfix是前缀的意思
       

    • 更新数据
      1.更新数据和添加数据的命令一样,如果没有数据则添加,有数据则更新
      2.alter 'user', NAME => 'info', VERSIONS => 5 更新info列族的版本号
      3.删除数据
       (1) delete 'user', 'rk0001', 'info:name' 删除user表中rowKey为rk0001,info列族中name列的数据,还可以在后面追加更多的属性来指定更精确的数据,比如时间戳:delete 'user', 'rk0001', 'info:name', 1392383705316
       (2) alter 'user', NAME => 'f1', METHOD => 'delete' / alter 'user', 'delete' => 'f1' 两个命令都是删除一个列族
       (3) truncate 'user' 清空表数据
      4.删除表,首先要先禁用表:disable 'user',然后才能删除表:drop 'user'

    • 显示服务器状态
      status 'host_name'

    • 显示HBase当前用户
      whoami

    • 统计指定表数据有多少条
      count 'tbl_namer'

    • 展示表结构信息
      describe 'tbl_name'

    • 检查表是否存在
      exist 'tbl_name'

    • 查看表是启用状态还是禁用状态
      is_enabled 'tbl_name' 是否启用
      is_disabled 'tbl_name' 是否禁用

  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772434.html
Copyright © 2011-2022 走看看