HBase内容分享(二):HBase数据定义和数据操作

目录

HBase数据定义

HBase Shell

数据定义

创建表

表相关操作查看

某个表是否存在

查看当前HBase所有的表名

查看选定表的列族及其参数

修改表结构

删除表

清空数据

HBase数据操作

put

delete

数据查询

get

scan

数据统计


HBase数据定义

HBase Shell

HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;

[root@localhost bin]# hbase shell
HBase Shell; enter 'help<RETURN>' for list of supported commands.
Type "exit<RETURN>" to leave the HBase Shell
Version 1.2.6, rUnknown, Mon May 29 02:25:32 CDT 2017
hbase(main):001:0>
命令描述语法
help查看命令的使用描述help '命令名'
whoami我是谁whoami
version返回hbase版本的信息version
status返回hbase集群的状态信息status
table_help查看如何操作表table_help
shutdown关闭hbase集群(与exit不同)
tools列出hbase所支持的工具
exit推出hbase shell

数据定义

命令描述
create创建指定模式的新表
alter修改表的结构,如添加新的列族
describe展示表结构的信息,包括列族的数量与属性
list列出HBase中已有的表
disable/enable删除或更改表时,需禁用表,更改完后需要解禁表
disable_all禁用所有的表
is_disabled判断一个表是否被禁用
drop删除表
truncate如果只是想删除数据而不是表结构,用truncate来禁用表、删除表并自动重建表结构

创建表

  • 语法
create    '表名','列族名'
  • 描述

    • 必须指定表名和列族;
    • 可以创建多个列族
    • 列可在插入数据时直接定义
    • 可以对表和列族指明一些参数
    • 参数大小写敏感
    • 字符串参数需要包含在单引号中
  • 案例演示

例1:create 'teacher','f1','f2'

例2:create 'teacher','f1',f2',MAX_FILESIZE=>'134217718'

例3:create 'teacher',{NAME=>‘f1’,VERSIONS=>5,BLOCKCACHE=>true}

例4:create 'teachEr','f1','f2'

例5:create 'teacher','F1','f2'

例6:create 'teacher',‘f1','f1'

表相关操作查看

某个表是否存在

  • 语法
exists

Hbase(main):005:0>exists ’teacher’

Table teacher does exist

0 row(s) in 0.2080 seconds

查看当前HBase所有的表名

  • 语法
list

Hbase(main):006:0>list

TABLE

teacher

Hbase thrift

Student

Test

4 row(s) in 0.0560 seconds

查看选定表的列族及其参数

  • 语法
describe

hbase(main):006:0>describe ‘teacher'

Table teacher is ENABLED

tercher

COLUMN FAMILIES DESCRIPTION

{NAME => ‘f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DE LETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_S COPE => '0'}

{NAME => ‘f2', BLOOMFILTER => 'ROW', VERSIONS => ‘5', IN_MEMORY => 'false', KEEP_D ELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION ='NONE', MIN_VERSIONS => '0', BLOCKCACHE => ‘false', BLOCKSIZE => '65536', REPLICATION_ SCOPE => '0'}

2 row(s) in 0.0340 seconds

修改表结构

  • 功能

    • 修改表中列族的参数信息
    • 增加列族
    • 移除或删除已有的列族
  • 语法

  • 添加一个列族

alter '表名', '列族名'
  • 删除列族
alter '表名', {NAME=> '列族名', METHOD=> 'delete'}

例1:alter 'teacher', {NAME => 'f1', VERSIONS => 4}

例2:alter 'teacher', 'f3'

例3:alter 'teacher', {NAME=>'f3', METHOD=>'delete'}

例4:alter 'teacher', 'delete' => 'f3'

注意

删除列族时,表中至少有两个列族;

删除表

  • 语法
disable 'teacher'
drop ' teacher '
  • 注意:删除表之前需要先禁用表

清空数据

  • 语法
truncate

truncate 'teacher'

HBase数据操作

put

  • 语法
put  '表名','行键','列族:列限定符','单元格值',时间戳
  • 描述
    • 必须指定表名、行键、列族、列限定符
    • 列族必须是已经创建的,否则HBase会报错
    • 列名是临时定义的,所以列族里的列是可以随意扩展的
    • 时间戳是可选参数,如不设置,则系统会自动插入当前时间为时间戳
    • 参数区分大小写,字符串使用单引号
    • 只能插入单个数据

02

  • 描述:如果指定的单元格已经存在,则put操作为更新数据;
    • 单元格会保存指定VERSIONS=>n的多个版本数据

03

delete

  • 语法
delete  '表名','行键','列族<:列限定符>',<时间戳>
  • 描述:必须指定表名、行键和列族,列限定符和时间戳是可选参数;

    • delete最小删除粒度为单元格,且不能跨列族删除

04

注意

delete操作并不会马上删除数据,只是将对应的数据打上删除标记,只有在数据产生合并时,数据才会被删除。

数据查询

get

  • 语法
get  '表名','行键',<'列族:列限定符',时间戳>

get 'student','001'

get 'student','001',{COLUMN=>'Grades'}

05

get 'student','001' ,{COLUMN=>'Grades',TIMERANGE => [1,2]}

get 'student','001' ,{COLUMN=>'StuInfo',VERSIONS=>2}

hbase(main):020:0> put 'student', '001', 'StuInfo:Name','jim green',2

0 row(s) in 0.0140 seconds

hbase(main):021:0> put 'student', '001', 'StuInfo:Name','jerry',3

0 row(s) in 0.0140 seconds

hbase(main):022:0> put 'student', '001', 'StuInfo:Name','curry',4

0 row(s) in 0.0690 seconds

hbase(main):023:0> get 'student','001',{COLUMN => 'StuInfo',VERSIONS => 2}

COLUMN CELL

StuInfo:Age timestamp=1541039335956, value=18

StuInfo:Name timestamp=4, value=curry

StuInfo:Name timestamp=3, value=jerry

StuInfo:Sex timestamp=1541039336280, value=Male

4 row(s) in 0.0240 seconds

scan

  • 语法
scan  '表名',{< '列族:列限定符',时间戳>}
  1. 扫描全表:scan '表名'
  2. 指定列族名称:

scan 'student', {COLUMN=>'stuinfo'}

  1. 指定列族和列的名称

scan 'student', {COLUMN=>'stuInfo:Name'}

  1. 指定输出行数

scan 'student', {LIMIT => 1}

  1. 指定输出行键范围

scan 'student', {STARTROW =>'001',ENDROW => '003'}

  1. 指定组合条件查询

scan 'student', {COLUMN=>'stuinfo',STARTROW =>'001',ENDROW => '002'}

数据统计

  • 语法
count  '表名'

hbase(main):004:0> count ‘student’

3 row(s) in 0.0440 seconds

在关系型数据库中,有多少条记录就有多少行,表中的行数很容易统计。而在 HBase 里,计算逻辑行需要扫描全表的内容,重复的行键是不纳入计数的,且标记为删除的数据也不纳入计数。

执行 count 命令其实是一个开销较大的进程,特别是应用在大数据场景时,可能需要持续很长时间,因此,用户一般会结合 Hadoop 的 MapReduce 架构来进行分布式的扫描计数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之乎者也·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值