nosql期末复习资料(三)

第三章 HBase数据模型与使用

一、单选 

1. 以下HBase的说法哪个是不正确的?

a. 在HBase中由行键、列族、列和时间戳来唯一确定一个单元格数值。

b. 在HBase Shell中创建表时,不需要预先定义列族。

c. HBase中不同行之间可以由不同的列组成。

d. HBase中所有数据都是字符串的形式。

2. 以下过滤器中,哪个可以针对行键进行过滤?

a. Rowfilter  b. QualifierFilter  c. FamilyFilter   d. ValueFilte  

3. Hbase基于java编程中,能实现删除表功能的接口是 (  )

a. Table接口  b. Admin接口  c. HbaseConfiguration类  d. HTableDescriptor类

4. 使用Admin接口是,调用Connection.getAdmin()方法时,返回的子对象是 (  )

a. Table   b. Connection   c. Admin   d. Put   

5. 下列对HBase的描述哪个是正确的?

a. 是关系型的  b. 是面向文档的  c. 分布式的  d. 是支持事务的

6. Hbase数据库新增或修改数据的关键字。              

A. put     B. create     C. drop      D. get   

7. HBase Java编程,其中对表进行操作的接口是         

A. Admin接口   B. Table接口    C. close接口    D. Add接口

二、多选

1. HBase的数据模型结构中包括以下哪几项?

a. 行键 b. 列族 c. 列标识 d. 时间戳

2. HBase Shell中包含以下哪些命令?

a. Create   b. Put   c. Scan  d. Add

3. 以下关于put命令说法正确的是

a. 一个逻辑行数据的插入可以通过一条put语句完成;

b. 如果put语句中的单元格是存在的,此语句为更新操作;

c. put命令需要指定表名、行键、列族和列的信息,即定位到具体单元格;

d. put命令不需要指定列族

4. HBase 中关于数据查询的操作,以下说法正确的是

a. get命令根据具体行键获取数据    b. scan可以获取指定范围的数据

c. get命令的必选参数为表名    d. scan必选参数为表名和行键名

5. 以下HBase的shell操作命令描述正确的是

a. version可以显示当前HBase的版本号

b. status命令用来显示集群各节点的状态

c. exit或quit退出当前HBase shell环境

d. 输入help命令可查看HBase提供的所有命令

e. 添加记录操作需用add命令

6. 以下在HBase中创建一个包含info列族的user表的命令正确的是

a. create 'user','info'   b. create 'user' 'info'

c. create 'user', {NAME => 'info'}   d. create 'User,'Info'

7. 查看表信息的相关命令有:

a. list查看当前所有表名

b. exist 'tablename'查看表是否存在

c. describe 'tablename'可以查看选定表中详细的列族信息

d. show db查看数据表

8. Alter命令能完成的功能包括:

a. 增加列族  b. 修改列族参数  c. 删除列族  d. 查询列族信息  

9. 以下HBase shell命令描述错误的是:

a. delete删除表之前不需要禁用表   b. 禁用表使用is_disable命令

c. truncat命令用来重新建立空表    d. truncat重建表之前需要禁用表

10. 以下delete操作说法正确的是

a. delete命令可以从表中删除一个单元格或行集,必须指明表名和列族名称;

b. 执行delete命令后,会马上删除数据;

c. delete命令不能跨列族操作;

d. 删除一个逻辑行使用deleteall命令

11. HBase中过滤器的概念说法正确的是

a. 查询时,无论是get或scan方法,均可以使用filter来显示扫描结果;

b. 过滤器类型包括行键、列族、列、值等filter;

c. 过滤器使用时一般配合比较运算符和比较器一起使用;

d. 可以使用多个过滤器组合使用;

e. ValueFilter是行键过滤器。

12. HBase中的客户端包括

a. HBase shell   b. 基于java开发的客户端

c. 基于thrift协议开发的客户端   d. 基于python开发的客户端   e. ZooKeeper

13. 关于HBase中列族描述正确的是:

a. HBase 中的列族是一些列的集合,列族中所有列成员有着相同的前缀

b. 列族的名字必须是可显示的字符串

c. 列族支持动态扩展,用户可以很轻松地添加一个列 族或列

d. 无须预定义列的数量以及类型。所有列均以字符串形式存储,用户在使用时需要自行进 行数据类型转换。

三、判断

1.HBase是基于Python语言开发的,它提供了这种语言的API接口来管理和操作数据库。

2.HBase使用Python语言来编写客户端时,需要进行跨语言的转换,这里需要用到Thrift服务来提供python客户端与java服务器端的连接。

3.HBase中检索数据可以使用get命令整个表进行扫描。

4.HBase可以直接删除表,不需要做禁用表操作

5.HBase中一个逻辑行对应实际存储的多行键值对

6.HBase中通过行键、列族、列和时间戳定位到具体的单元格数据。

7. HBase shell中get命令可以不指定行键获取数据。

8.当HBase表中只有一个列族时,是无法对其进行删除的。即一个表中至少包含一个列族

9.scan可以不指定行键进行全表扫描

10.HBase的ValueFilter过滤器可以利用get和scan方法对单元格进行过滤,但是使用get方法时,需要指定行键。

11.Hbase shell是大小写敏感的。    

答案:

单选:BABCC AA

多选:ABCD  ABC  ABC   AB  ABCD  AC  ABC  ABC  ABD  ACD  ABCD  ABCD  ABCD

判断:错对错错对对错对对对对

四、问答题

1.HBase数据库表逻辑结构如下:

RowKey

stuinfo

score

name

sex

math

english

Row1

zhangsan

male

80

90

请通过Hbase shell完成以下操作:

(1)表名为 ‘test’,建表时指定列族stuinfo

(2)通过修改表结构方式增加新列族score

(3)完成逻辑表中数据添加

(4)操作完成,删除表

1: create ‘test’,’stuinfo’

2: alter ‘test’,’score’

3: put ‘test’,’row1’,’stuinfo:name’,’zhangsan’

put ‘test’,’row1’,’stuinfo:sex’,’male’

put ‘test’,’row1’,’score:math’,80

put ‘test’,’row1’,’score:english’,90

4: disable 'test'

drop 'test'

2. 在HBase数据库中,利用shell命令完成以下操作:

(1)利用shell命令新建一张名为table的表,列族为cf;

(2)向table表中增加列族sf;

(3)将下面两条数据插入到table表中,以姓名为行键,年龄为列;

Name:xiaoming age:18

Name:lili age:20

(4)修改table表中xiaoming的年龄为15;

(5)删除table表中lili的数据;

(6)删除table表;

答:(1)create ‘table’,‘cf’

(2)alter ‘table’,NAME => ‘sf’

(3)put ‘table’,’xiaoming’,’cf:age’,’18’

put ’table’,’lili’,’cf:age’,’20’

(4)put ‘table’,’xiaoming’,’cf:age’,’15’

(5)deleteall ‘table’,’lili’

(6)disable ‘table’

drop ‘table’

3. 以下题目请使用Hbase shell命令进行编程

(1) 查看存在哪些表  

(2) 创造表people,表中有列簇info1,info2

(3) 向people中添加一条数据,行键10001,列族info1的age列,值20

(4) 查看people表中 row key为10001,列簇为info1的数

(5) people表添加一个列簇 id

(6)删除row key为10001,列族为info1,列为age的数据

(7)清空表people

(8)删除表

答:1) list(2分)

(2) create ‘people’,’info1’,’info2'(2分)

(3) put ‘people’,’10001’,’info1:age’,’20’(2分)

(4) get ‘people’,’10001’,’info1’(2分)

(5) alter ‘people’,’id’(2分)

(6) delete ‘people’,’10001’,’info1:age’(2分)

(7) truncate 'people'(2分)

(8) disable  ‘people’(1分)

drop ‘people’   (1分)

4.(10分)已知设计的HBase表students,Rowkey为学号,包含2个列族info和scores,表的逻辑结构如下所示,请根据要求写出对应的HBase shell命令。

Rowkey

info

scores

tj17001

name:tom,height:175

math:89,english:90

tj17002

name:jack,age:17

english:90,chinese:96

(1)创建上图所示HBase表students。(注:只需创建表,不需要put数据)

(2)查看上面创建的students表的表结构

(3)请修改students表的表结构,增加一个列族hobby

(4)查询学号为tj17002的学生的所有的成绩数据。

(5)删除表‘students’

答:(1)create ‘students’,‘info’,‘scores’或create ‘students’, {NAME => ‘info‘},{NAME= => ‘scores’}

(2)desc ‘students’或describe ‘students’

(3)disable ‘students’    

alter ‘students’,‘hobby’或alter ‘students’{NAME=>‘hobby’

(4)get ‘students’‘tj17002’,‘scores’或get ‘students’‘tj17002’,{COLUMN=>’scores’}

(5)disable ‘students’

drop ‘students’

5. (10分)请根据要求写出对应的HBase shell命令。(每小题2分)

(1)创建HBase表‘sqsf17’,表结构设计如下:

Rowkey

baseinfo

courses

rk001

name:tom

math:89

rk002

name:jack,age:17

english:90,chinese:96

...

...

...

(2)请将上表中的Rowkey为rk001的对应的数据插入sqsf17表中。

(3)查询Rowkey为rk001的学生的数学math的成绩值。

(4)扫描表中的所有的数据。

(5)删除表‘sqsf17’中Rowkey为rk001的学生的所有信息。

答:(1)create ‘sqsf17’,‘baseinfo’,‘courses’或create ‘sqsf17’, {NAME => ‘baseinfo‘},{NAME= => ‘courses’}

(2)put ‘sqsf17’,’rk001’,’baseinfo:name’,’tom’

put ‘sqsf17’,’rk001’,’courses:math’,’89’

(3)get ‘sqsf17’‘rk001’,‘courses:math’或get ‘sqsf17’‘rk001’,{COLUMN=>’courses:math’}

(4)scan ‘sqsf17’

(5)deleteall ‘sqsf17’,’rk001’

6.现有如下数据,需要在HBase中做以下操作:(12分)

id

name

age

English

Bigdata

001

Tom

18

80

002

Jack

19

60

75

(1) 创建student表,包含info和grades两个列族。(2分)

(2) 将数据插入到student表中,其中id对应行键,name、age为列族info中的列,Englist、Bigdata为列族grades中的列。(2分)

(3) 使用get方法获取行键为001的数据(2分)

(4) 使用scan方法查询出info列族的信息(2分)

(5) 使用值过滤器,查询出name为Tom的数据(2分)

(6) 删除student表(2分)

答:(1)create 'student','info','grades' (2分)

(2)put 'student','001','info:name','Tom'

put 'student','001','info:age',18

put 'student','001','grades:English',80

put 'student','002','info:name','Jack'

put 'student','002','info:age',19

put 'student','002','grades:English',60

put 'student','002','grades:Bigdata',75(2分)

(3)get 'student','001'(2分)

(4)scan 'student',{COLUMNS=>'info'}(2分)

(5)scan 'student', FILTER=>"ValueFilter(=,'binary:Tom')"(2分)

(6)disable 'student'

drop 'student'(2分)

7. 使用HBase Shell完成以下hbase操作。

A. 利用Hbase shell命令新建一张名为table的表,列族为cf

B. 向table表中增加列族sf

C. 将下面一条数据插入到table表中,以姓名为行键,年龄为列列族cf的列标识

Name:xiaoming age:18

D. 修改table表中行健为xiaoming的年龄为15

E. 删除table表

答:A: create ‘table’,’cf’

B: alter ‘table’,’sf’

C: put ‘table’,’xiaoming’,’cf:age’,18

D: put ‘table’,’xiaoming’,’cf:age’,15

E: disable 'table'

 drop 'table'

8.在HBase shell 客户端中进行以下操作:

(1)创建名称为 student的表,然后再将其删除。

(2)在HBase shell 客户端中查看student表结构。

(3)在HBase shell 客户端中向查询student从stu001开始,找到所有的rowkey以stu开头的数据。

(4)在HBase shell 客户端中将 student 表的 base_info 列族删除。

(5)更新student 表的 stu001 行、base_info 列族中 age 列的值。

(6)查看student集合的基本状态。

(7)查询student集合中年龄大于20的数据。

(8)使用正则匹配查询student集合中name字段中含有“xiao”内容的文档。

答:(1)创建:create 'student','base_info'或create 'student', {NAME => 'base_info'}

禁用:disable 'student'

删除:drop 'student'

(2)describe 'student' 或 desc ‘student’

(3)scan 'student', {STARTROW=>'stu001', FILTER => "PrefixFilter ('stu')"}

(4)alter 'student',{NAME=>'base_info',METHOD=>'delete'}

(5)put 'student ','stu001 ',  'base_info :age','20'

(6)db.getCollection('student').stats()   或者db.student.stats()

(7)db.student.find({'age':{'$gt':20}})

(8)db.student.find({name:{$regex:"xiao"}})

  • 14
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值