Hbase 操作

一、基本操作

1. 基本操作

  1. hbase shell
  2. 进入系统
  3. help
  4. 显示帮助信息
  5. status
  6. 查看服务器状态
  7. version
  8. 查看 hbase 版本

2. DDL 操作

  1. * 创建表 :
  2. create '表名','列族 1','列族 2','列族 N'
  3. create 'member','member_id','address','info'
  4. create 'member',{NAME=>'member_id'},{NAME=>'address'},{NAME=>'info'}
  5. * 修改表名
  6. disable 'member'
  7. snapshot 'member', 'member_Snapshot' // 快照一份
  8. clone_snapshot 'member_Snapshot', 'member_20160518' // 克隆到目标表
  9. delete_snapshot 'member_Snapshot' // 删除快照表
  10. * 查看所有表 :
  11. list
  12. * 查看表结构 :
  13. describe '表名'
  14. describe 'member'
  15. * 删除、修改列族 :
  16. disable 'member' // 禁用
  17. alter 'member',{'delete' => 'member_id'}
  18. enable 'member' // 开启
  19. * 增加列族
  20. disable 'member'
  21. alter 'member',{NAME => 'recommend', VERSIONS => 3} 表示存储 3 个版本数据
  22. enable 'member'
  23. * 删除表 :
  24. disable 'member' // 禁用
  25. drop 'member'
  26. * 删除列
  27. delete 'member','1','列族:列'
  28. * 检测一个表是否存在 :
  29. exists 'member'
  30. * 判断表是否 enable(启用) :
  31. is_enabled 'member'
  32. * 判断表示会否 disable(禁用) :
  33. is_disabled 'member'

3. DML 操作

3.1 普通操作

  1. * 插入记录 :
  2. put '表名','行名','列族:','值'
  3. // member 表, (row-key), (列族:列) ,写入数据
  4. put 'member','jason','info:age','1'
  5. put 'member','jason','info:birthday','2016-01-01'
  6. put 'member','jason','info:company','angejia'
  7. // member 表, (row-key), (列族:列) ,写入数据
  8. put 'member','jason','address:contry','china'
  9. put 'member','jason','address:province','shanghai'
  10. put 'member','jason','address:city','shanghai'
  11. * 查看记录 :
  12. get '表名','行名','列族:列名'
  13. 1) 获取一个 row-key 所有列族数据
  14. get 'member','jason'
  15. 2) 获取一个 row-key , 列族数据
  16. get 'member','jason','info'
  17. 3) 获取一个 row-key , 列族:列 的数据
  18. get 'member','jason','info:age'
  19. * 更新记录(就是重新写一条) :
  20. put 'member','jason','info:age','24'
  21. * 根据获取 2 个版本数据 :
  22. 1) 修改前时间戳数据
  23. get 'member','jason',{COLUMN=>'info:age',TIMESTAMP=>1456068948812}
  24. 2) 修改后时间戳数据
  25. get 'member','jason',{COLUMN=>'info:age',TIMESTAMP=>1456069279146}
  26. 3) 获取三个版本数据
  27. get 'member','jason',{COLUMN=>'info:age',VERSIONS=>3}
  28. * 全表扫描(显示所有 row-key,列族) :
  29. scan 'member'
  30. 1) 显示 member 所有列族,但只取一行
  31. scan 'member', {COLUMNS => ['info'], LIMIT => 1}
  32. 1) 显示 member 表,列族是 info 的所有数据
  33. scan 'member', {COLUMNS => ['info'], LIMIT => 1}
  34. 2) 显示 member 表,列族 info , birthday 列的 数据
  35. scan 'member', {COLUMNS => ['info:birthday'], LIMIT => 1}
  36. * 删除 row-key 下的 列族:列 的字段 :
  37. delete 'member','jason','info:age'
  38. * 删除 row-key
  39. deleteall 'member','10'
  40. * 查询表行数 :
  41. count 'member'
  42. * 递增
  43. incr 'member','jason','info:age'
  44. * 清空表
  45. truncate 'member'

4. filter 过滤器

  1. * ValueFilter() 针对值查找过滤
  2. 1) 列族:所有列,值 = (angejia)
  3. scan 'member', {FILTER=>"ValueFilter(=,'binary:angejia')"}
  4. 2) 列族:所有列,值 包含 (ge)
  5. scan 'member', {FILTER=>"ValueFilter(=,'substring:ge')"}
  6. * ColumnPrefixFilter() 针对列查找过滤
  7. 1) 列族:company 列,值 包含 (ge)
  8. scan 'member', {FILTER=>"ColumnPrefixFilter('company') AND ValueFilter(=,'substring:ge')"}
  9. 2) = (angejia)
  10. scan 'member', {FILTER=>"ColumnPrefixFilter('company') AND (ValueFilter(=,'binary:angejia') )"}
  11. * PrefixFilter() row-key 开头查找过滤
  12. 1) row-key jason 开头的,所有列族和列 的数据
  13. scan 'member', {FILTER => "PrefixFilter ('jason')"}
  14. * FirstKeyOnlyFilter() 多个 version 的第一个
  15. KeyOnlyFilter() 只要,key 不要值
  16. 1) 查找 多个版本中第一个版本的数据
  17. scan 'member', {FILTER=>"FirstKeyOnlyFilter() AND KeyOnlyFilter()"}
  18. * STARTROW 范围查找开始
  19. STOPROW 范围查找结束
  20. 1) row-key n 个位置开始查找(star_row)
  21. scan 'member', {STARTROW => 'jason'}
  22. 2) row-key n 个位置开始 row-key n 个位置 结束的数据
  23. scan 'member', {STARTROW=>'jason', STOPROW=>'jason'}
  24. * RowFilter() row-key 包含查找过滤
  25. import org.apache.hadoop.hbase.filter.CompareFilter
  26. import org.apache.hadoop.hbase.filter.SubstringComparator
  27. import org.apache.hadoop.hbase.filter.RowFilter
  28. import org.apache.hadoop.hbase.filter.RegexStringComparator
  29. 1) row-key 里面包含 jas 的数据
  30. scan 'member', {
  31. FILTER => RowFilter.new(
  32. CompareFilter::CompareOp.valueOf('EQUAL'),
  33. SubstringComparator.new('jas')
  34. )
  35. }
  36. 2) row-key 正则匹配查询
  37. scan 'member', {
  38. FILTER => RowFilter.new(
  39. CompareFilter::CompareOp.valueOf('EQUAL'),
  40. RegexStringComparator.new('^jas[a-z]+$')
  41. )
  42. }
  43. * SingleColumnValueFilter() 列值过滤器
  44. import org.apache.hadoop.hbase.filter.CompareFilter
  45. import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
  46. import org.apache.hadoop.hbase.filter.SubstringComparator
  47. 1) info:company 列,值 = angejia 的数据
  48. scan 'member', {
  49. # 显示指定列数据,如果不写,则返回所有匹配出的数据
  50. COLUMNS => 'info:company',
  51. FILTER => SingleColumnValueFilter.new(
  52. Bytes.toBytes('info'),
  53. Bytes.toBytes('company'),
  54. CompareFilter::CompareOp.valueOf('EQUAL'),
  55. Bytes.toBytes('angejia')
  56. )
  57. }