• 【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' 是否禁用

  • 相关阅读:
    新手Android开发:onclicklistener到底怎么用?
    Myeclipse中web project 与java project区别
    <jsp:directive.page import=""/>的用法和解释
    怎样在myeclipse下,打开已有的项目
    有史以来最简单的三层实例(C#)
    show()跟showdialog()的区别
    献给和我一样的Java初学者——用UltraEdit代替“笨重”的IDE,实现轻巧编程!
    数据库连接错误——请求失败或服务器未及时响应
    说说二级C++
    十一张图让你轻松学会用VS打包
  • 原文地址:https://www.cnblogs.com/zzzsw0412/p/12772434.html
Copyright © 2020-2023  润新知