hbase-2(命令行操作)

DDL

执行命令bin/hbase shell进入hbase命令行
表增删改查

list#显示全部表
create '表名','列族1','列族2',...# 创建表
desc[ribe] '表名'# 查看表信息
alter 'student',{NAME=>'info',VERSIONS=>3}# 将versions值改为3
disable '表名'# 表下线
enable tab_name# 表上线
drop '表名'# 删除表,删除前要先下线

命名空间
命名空间操作与表操作基本一致,只需要在每个命令前添加_namespace,注明为命名空间操作

list_namespace#查看命名空间
create_namespace '命名空间名称'# 创建命名空间
create '命名空间:表','列族1','列族2',...# 创建表时指定命名空间,不指定命名空间默认为default命名空间
drop_namespace '命名空间'# 删除命名空间,命名空间删除前需要清空该命名空间下的表

DML

# 向指定的位置添加数据,当数据已存在时,就是覆盖修改
put 'namespace:table', 'rowkey', 'column-family:column', 'value'
# 查看表数据
scan '表名'
get '表名','行号'#查看单行数据
# 查看以前指定个版本的信息
scan 'stu',{RAW=>true,VERSIONS=>10}

shell中的中文会以十六进制编码显示,要想将这些编码显示为中文,需要在get命令后添加一个属性:{FORMATTER=>‘toString’}

# 删除
delete 'table','rowkey','column-family:column'
deleteall 'table','rowkey'

执行delete操作时,如果表中某个列有多次修改,会删除最近的依次修改
默认保存最近三次操作的时间戳

执行shell脚本:hbase shell path

# 获取行数
count 'table'
# 执行大数据量的计数
hbase org.apache.hadoop.hbase.mapreduce.RowCounter 'table'

scan table为全表扫描,是一个比较影响性能的操作,一般需要搭配限制条件使用

# 限定条数
scan 'table',{LIMIT=>xx}
# 指定查询列
scan 'table',{COLUMNS=>[]}
# 根据`rowkey`查询
scan '表名'{`ROWPREFIXFILTER`=>''}

过滤器

scan ‘表名’,{FILTER=>“过滤器(比较运算符,‘比较器表达式’)”}

比较器效果
BinaryComparator匹配完整字节数组
BinaryPrefixComparator匹配字节数组前缀
BitComparator匹配比特位
NullComparator匹配空值
RegexStringComparator匹配正则表达式
SubstringComParator匹配子字符串

比较器表达式:

比较器表达式语言缩写
BinaryComparatorbinary:值
BinaryPrefixComparatorbinaryprefix:值
BitComparatorbit:值
NullComparatornull
RegexStringComparatorregexstring:正则表达式
SubstringComparatorsubstring:值

行过滤器

案例:查询行键位001的数据

# 两个引号嵌套,外面需要使用双引号
# =代表要做的是等值判断
# binary:001代表要判断的值
scan 'table',{FILTER=>"RowFilter(=,'binary:001')"}

使用过滤器的重点:

  1. shell中执行的ruby脚本,还是需要调用hbase提供的Java api
  2. 过滤器再hbase中使用表达式描述,在java中使用new对象方式
  3. rowfilter就是java中filter构造器名称
  4. =是JRuby一个特殊记号,表示是一个比较运算符

列过滤器

scan 'table',{FILTER=>"SingleColumnValueFilter('c1','category',=,'binary:phone')"}

组合查询

案例:查询类型为phone且支付方式为1的数据

scan 'table',{FILTER=>"SingleColumnValueFilter('c1','category',=,'binary:phone') AND SingleColumnValueFilter('c1','pay_way',=,'binary:1')"}

注意:HBase中的比较默认都是字符串比较,如果比较数值,会出现不准确的情况。

INCR

incr可以实现对某个单元格的值进行原子性计数,语法:
incr 'table',‘rowkey’,'column-family:column',累加值
累加值默认为1

  • 如果某一列要实现计数功能,必须要使用incr来创建对应的列
  • 使用put创建的列是不能实现累加的

使用incr插入数据:

# 创建表之后
incr 'table','rowkey','column-family:column',value
# 计数器单独编码,一般scan无法显示
get_counter 'table','rowkey','column-family:column'
# 使用incr累加1
incr 'table','rowkey','column-family:column',1

管理命令

# 显示服务器状态
status
# 显示当前用户
whoami
# 显示所有表
list
# 统计指定表的记录数
count
# 展示表的结构信息
describe
# 检查表是否存在
exists
# 检查表是否启用或禁用
is_enabled is_disabled
# 改变表和列族的模式
alter
# 清空表数据
truncate

导入HBASE表

create external table student(
rowkey string,
first_name string,
last_name string,
addr_city string,
addr_country string)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties(
# hbase中列簇:列名,rowkey固定写法::key,需要和上面的字段列表对应
"hbase.columns.mapping"=":key,name:first_name,name:last_name,addr:city,addr:country")
tblproperties("hbase.table.name"="stu");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值