HBase数据库基础


HBase 是一种开源的分布式非关系型数据库 (NoSQL),专为在大型数据集上实现高性能读写而设计,其构建在 Hadoop 分布式文件系统 (HDFS) 之上,具有良好的水平扩展能力并与 Hadoop 生态系统的高度集成。

HBase 的一大核心优势即可以动态的扩展列而不像传统的关系型数据库需要修改固定的表结果,同时依托于 Hadoop 的能力对于海量数据处理拥有出色的性能表现。

本文将介绍 HBase 数据库基础的 DDLDML 语法使用。

一、DDL操作

1. 命名空间

HBase 的命名空间 (Namespace) 可以理解为 MySQL 的数据库与 OracleSchema

即通过 Namespace 独立隔离不同存储空间之间的数据内容。

-- 列出所有 namespace
list_namespace
    
-- 创建 namespace
create_namespace '<name>'
    
-- 删除 namespace
drop_namespace '<name>'

2. 表管理

HBase 中一张表包含多个 蔟族,而每个 蔟族 下又可包含多个 ,而 与常见的数据库字段定义类似。

通过 create 关键字新建表,未指定 namespace 时为 default ,注意一张表至少需要一个蔟族 (cluster)

-- 列出所有表
list
    
-- 建表
create '<namespace>:<table>', '<cluster-1>', ..., '<clustern-n>'

-- 示例
create 'budai:user', 'info', 'score'

3. 表禁用

通过 Drop 关键字删除表,需要注意删除表之前需要先禁用表。

-- 禁用表
disable '<namespace>:<table>'
    
-- 是否禁用
is_disabled '<namespace>:<table>'
    
-- 删除表(需要先禁用)
drop '<namespace>:<table>'
    
-- 删除表(自动禁用再删除)
truncate '<namespace>:<table>'

二、DML操作

1. 数据插入

通过 put 关键字向表中添加字段,需要注意 put 一次只能添加一个列的值,若需要插入大量数据建议通过代码程序进行。

其中 row_key 类似于每条记录的主键,可以通过该值快速查找记录。

-- 新增数据,一次只能添加一个列
put '<namespace>:<table>', '<row_key>', '<cluster:cloumn>', '<value>'

-- 示例
put 'budai:user', '1', 'info:id', '123'
put 'budai:user', '1', 'info:name', 'alex'
put 'budai:user', '1', 'score:math', '80'
put 'budai:user', '1', 'score:english', '86'

完成插入后表中数据即如下所示:

Row Key Info Score
- Id Name Math English
1 123 alex 80 86

2. 数据查询

通过 Get 关键字可实现简单的语句查询,若需要实现复合查询建议使用 Scan 查询。

-- 查看行
get '<namespace>:<table>', 'row_key'
    
-- 查看列族
get '<namespace>:<table>', 'row_key', '<cluster>'
    
-- 查看列
get '<namespace>:<table>', 'row_key', '<cluster:cloumn>'

3. 高级查询

通过 Scan 配合 FILTER 等关键字可实现类 MySQL 的复合查询。

-- 等价 select * from table
scan '<namespace>:<table>'
    
-- 等价 select * from table where cloumn = 'value'
scan '<namespace>:<table>', COLUMNS => '<cluster:cloumn>', FILTER => "ValueFilter(=,'binary:<value>')"
    
-- 模糊查询, 等价 select * from table where cloumn like 'value'
scan '<namespace>:<table>', COLUMNS => '<cluster:cloumn>', FILTER => "ValueFilter(=,'substring:<value>')"
    
-- 组合查询, 等价 select * from table where cloumn = 'value'
scan '<namespace>:<table>', FILTER => "ColumnPrefixFilter('<cloumn>') AND ValueFilter(=,'binary:<value>')"

4. 数据删除

与常见数据库不同的是 HBasedelete 是删除单个列的值,若要删除整条记录需要通过 deleteall 关键字。

-- 删除单个列数据
delete '<namespace>:<table>', 'row_key', '<cluster:cloumn>'

-- 删除整条记录
deleteall '<namespace>:<table>', 'row_key'

文章作者: 烽火戏诸诸诸侯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 烽火戏诸诸诸侯 !
  目录