HBase获取多版本数据和进行数据表查询操作
HBase数据模型是一个多维稀疏映射。 HBase中的表包含列族,其列限定符包含值和时间戳。在大多数 HappyBase API 中,列族和限定符名称被指定为单个字符串,例如cf1:col1,而不是作为两个单独的参数。虽然列族和限定符在 HBase 数据模型中是不同的概念,但它们在与数据交互时几乎总是一起使用,因此将它们视为单个字符串会使 API 变得更简单。
查询行
Table 类提供了多种方法来从 HBase 中的表中检索数据。最基本的是 Table.row(),它从表中检索单行,并将其作为映射列到值的字典返回:
row = table.row(b'rk0001')
print(row[b'info:name']) # prints the value of info:name
# 返回值:b'zhangsan',注意是二进制<class 'bytes'>类型
# 转换字符串:
print(str(row[b'info:name'], encoding="utf-8"))
# 即
str(bytes对象, encoding="编码格式,通常使用utf-8")
> 注意,库中的字符串都有前缀:b,表示二进制
> 如:print(type(row[b'info:name']))
> 返回值:
查询多行
Table.rows() 方法的工作方式与 Table.row() 类似,但需要多个行键并将它们作为 (key, data) 元组返回:
rows = table.rows([b'rk0001', b'rk0002'])
for key, data in rows:print(key, data)"""
返回值:
b'rk0001' {b'data:pic': b'picture', b'info:age': b'20', b'info:gender': b'female', b'info:name': b'zhangsan'}
b'rk0002' {b'data:pic': b'picture', b'info:age': b'11', b'info:gender': b'male', b'info:name': b'wangwu'}注意哦,key是bytes对象
data是字典对象,字典中key和value都是bytes
如果您希望 Table.rows() 作为字典或有序字典返回的结果,您必须自己执行此操作。不过这真的很简单,因为返回值可以直接传递给字典构造函数。对于普通字典,顺序丢失:
rows_dict = dict(table.rows([b'rk0001', b'rk0002']))
# 返回值:
"""
字典:
{b'rk0001': {b'data:pic': b'picture', b'info:age': b'20',b'info:gender': b'female', b'info:name': b'zhangsan'}, b'rk0002': {b'data:pic': b'picture', b'info:age': b'11',b'info:gender': b'male', b'info:name': b'wangwu'}}
"""
而对于 OrderedDict,顺序被保留:
from collections import OrderedDict
rows_as_ordered_dict = OrderedDict(table.rows([b'rk0002', b'rk0001']))"""
返回值:
OrderedDict([(b'rk0002', {b'data:pic': b'picture',
b'info:age': b'11', b'info:gender': b'male', b'info:name':
b'wangwu'}), (b'rk0001', {b'data:pic': b'picture',
b'info:age': b'20', b'info:gender': b'female',
b'info:name': b'zhangsan'})])
"""
进行更细粒度的查询
HBase 的数据模型允许对要检索的数据进行更细粒度的选择。如果您事先知道需要哪些列,则可以通过将这些列明确指定给 Table.row() 和 Table.rows() 来提高性能。 columns 参数采用列名的列表(或元组):
row = table.row(b'rk0001', columns=[b'info:name', b'data:pic'])
# row对象类型字典,内容:{b'data:pic': b'picture', b'info:name': b'zhangsan'}
print(row[b'info:name'])
print(row[b'data:pic'])"""
返回值:bytes类型,需要的话自行转字符串
b'zhangsan'
b'picture'
如果检索一整个列族中的所有列(二级列)。例如,要获取列族 info中的所有列和值,请使用以下命令:
row = table.row(b'rk0001', columns=[b'info'])
print(type(row))
print(row)"""
返回值:
<class 'dict'>
{b'info:age': b'20', b'info:gender': b'female', b'info:name': b'zhangsan'}
"""
基于时间戳查询
在 HBase 中,每个单元都有一个附加的时间戳。如果您不想使用存储在 HBase 中的最新版本数据,则可以使用从数据库中检索数据的方法,例如Table.row() 都接受一个时间戳参数,该参数指定结果应限制为时间戳不超过指定时间戳的值:
row = table.row(b'rk0001', timestamp=123456789)
默认情况下,HappyBase 在返回的结果中不包含时间戳。在您的应用程序需要访问时间戳时,只需将 include_timestamp 参数设置为 True。现在,结果中的每个单元格都将作为(值,时间戳)元组返回,而不仅仅是一个值:
row = table.row(b'rk0001', columns=[b'info'], include_timestamp=True)
print(type(row))
print(row)"""
返回值:
<class 'dict'>
{b'info:age': (b'20', 1641832837038), b'info:gender':(b'female', 1641832832414), b'info:name': (b'zhangsan', 1641832826093)}
"""
获取多版本数据
HBase 支持存储同一单元的多个版本。这可以为每个列族配置。要检索给定行的列的所有版本,可以使用 Table.cells()。此方法返回一个有序的单元格列表,最新版本排在最前面。版本参数指定要返回的最大版本数。就像检索行的方法一样,include_timestamp 参数确定时间戳是否包含在结果中。例子:
# 首先,准备一个保存多版本的表
create 'tv', {NAME => 'info', VERSIONS => 5}
# 插入版本1
put 'tv', 'rk0001', 'info:name', 'hahaha'
# 插入版本2
put 'tv', 'rk0001', 'info:name', 'heiheihei'# 检查
hbase(main):024:0> scan 'tv'
ROW COLUMN+CELL rk0001 column=info:name, timestamp=1641836267655, value=heiheihei
1 row(s)
Took 0.0103 seconds
table = connection.table('tv')
# 获取1个版本(默认最新咯)
values = table.cells(b'rk0001', b'info:name', versions=1)
print(type(values))
print(values)"""
返回值:
<class 'list'>
[b'heiheihei']
"""
# 获取2个版本
values = table.cells(b'rk0001', b'info:name', versions=2)
print(type(values))
print(values)"""
返回值:
<class 'list'>
[b'heiheihei', b'hahaha']
可见,2个版本都获取了,按照顺序,第一个最新
"""# 获取多版本并附带时间戳信息
values = table.cells(b'rk0001', b'info:name', versions=2, include_timestamp=True)
print(type(values))
print(values)"""
返回值:
<class 'list'>
[(b'heiheihei', 1641836267655), (b'hahaha', 1641836263534)]
"""
HBase获取多版本数据和进行数据表查询操作相关推荐
- 【MapReduce】数据去重、多表查询、倒排索引、单元测试等案例编程
数据去重.多表查询.倒排索引.单元测试等案例编程 1 数据去重 2 多表查询 2.1 笛卡尔积 2.2 等值连接 2.3 自连接 3 倒排索引 4 单元测试 手动反爬虫,禁止转载: 原博地址 http ...
- 数据查询语言及联表查询
4 DQL 查询数据(最重点) 4.1 DQL ( Date Query Language : 数据查询语言) 所有的查询操作都用它 Select 简单复杂的查询都可以做 数据库中最核心的语言 使用频 ...
- hbase获取所有版本的数据和时间戳
1.要保证hbase表本身有多个version 2.get的时候,要保证读取的可以读到多个或者所有的version 3.正常读取各个版本的数据Cell user_tag某些行的某些列有多个版本,可以获 ...
- Android之非root手机run-as命令获取debug版本apk里面的数据(shared_prefs文件,lib下面的so,数据库文件)
1 问题 非root手机想要获取debug版本的apk里面的数据(shared_prefs文件,lib下面的so,数据库文件) 2 直接用run-as命令 adb shellrun-as pack ...
- mysql获取多张表中的数据_mysql 之多表查询
阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建一个数据库,那数据库里 ...
- mysql获取多张表中的数据_mysql之多表查询
1.新建的一个数据库db3 create database db3 charset utf8; 2.为db3数据库创建两张表和数据 (1)创建person表 create tableperon ( i ...
- 10月25日学习内容整理:数据操作:增加更新删除,单表查询操作
>>\G是按行显示,必须是大写 >>插入数据:补充另一种插入记录的方法 -->insert into 表名1(字段1,字段2,...) select 字段1,字段2,.. ...
- mysql多表查询取出最后的数据_数据库多表查询,如何取A表中最后一个数据在B表中进行查找?...
A表中有id user_id B表中有id phone a.user_id = b.id 需求:现在要取a.user_id最新的一个数据然后在B表中查找phone,并给b.phone发送短信= =.. ...
- Mysql- --DQl语句(select数据查询语言,多表查询,View试图)linux常用(重点)
文章目录 一.SELECT WHERE子句(条件) 1.逻辑操作符 2.DISTINCT 去除重复列 3.LIKE: 通配符 4.空值查询 5.统计 6.分组:统计 7.排序 8.限定查询结果 9.I ...
最新文章
- JS实现文本框有“请输入关键字”功能
- 什么是php商城系统?
- springboot获取URL请求参数的几种方法
- matlab遗传算法无人机问题,基于改进遗传算法的无人机路径规划
- java lazy loading_java – Spring,@Transactional和Hibernate Lazy Loading
- 微信公众平台开发新手教程(图文具体解释)
- 好用的wordpress主题
- 【H264/AVC 句法和语义详解】(五):Exp-Golomb指数哥伦布编码(理论篇)
- html5 canvas实现图片玻璃碎片特效
- CodeForces 580A Kefa and First Steps
- RuoYi-Cloud 部署篇_01(windows环境 mysql +nginx版本)
- 滴滴北京网约车将涨价 官方解释:为了平衡供需矛盾
- 微信语音遥控Windows Azure云虚拟机
- 【杂题总汇】HDU-6406 Taotao Picks Apples
- ibm语音识别输入系统
- Atitit 微服务实践 艾提拉著 微服务主要解决几个问题负载均很 目录 1. 微服务的模式 http请求层 vs服务层	1 1.1. Http vs 服务层优缺点	1 2. 实现技术	2
- HIVE Sql 笛卡尔积关联导致查询过慢问题优化
- Python爬虫 - 01.实现贴吧一键签到
- 综述(十)北京在安全测试示范区上的政策与成果数据分析
- 阿里云免费企业邮箱申请流程
热门文章
- 梦泪的服务器是qq还是微信,从微信区杀到QQ区,梦泪、孤影双排诠释什么叫上分如喝水...
- TGT正式上线BiFinance交易所开启交易,首日暴涨超300%
- Mac 上“照片”中的键盘快捷键和手势
- mysql spool_用MySQL实现类似Oracle SPOOL的功能
- c语言狗吃玉米的编程,玉米或玉米面给狗狗当主食可能会引发的问题------分析...
- FastDFS实战笔记
- 打开catia界面全是白色怎么办_基于CATIA的圆柱螺旋拉伸弹簧有限元分析(文末有“彩带”)...
- 3G 4G 5G中的网络安全问题——文献汇总
- 字符三角形 Java 作业
- esp8266模块软件定时