成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HBase數據表如何查詢操作和獲取多版本數據?

存儲
HBase數據模型是一個多維稀疏映射。 HBase中的表包含列族,其列限定符包含值和時間戳。在大多數 HappyBase API 中,列族和限定符名稱被指定為單個字符串,例如cf1:col1,而不是作為兩個單獨的參數。

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)]
"""
責任編輯:華軒 來源: 今日頭條
相關推薦

2011-07-05 18:11:13

Qt 數據庫

2010-08-04 11:03:03

DB2數據表

2009-07-02 09:40:17

JSP導出Oracle

2010-11-23 13:51:55

MySQL數據表

2009-09-07 16:13:14

LINQ to SQL

2010-11-22 13:53:46

MySQL數據表

2009-06-02 10:57:22

ADO.NET多數據表操作

2024-06-20 08:26:01

JPA公共字段

2017-05-25 10:23:13

數據a表b表

2009-09-09 11:24:13

Linq使用數據表

2020-12-02 14:38:21

SQL數據庫MySQL

2009-08-17 08:33:00

Visual C#數據

2017-08-10 13:43:00

大數據數據表格優化設計

2010-03-01 16:41:04

WCF數據表

2010-06-09 16:55:47

MySQL數據表

2010-11-29 13:22:45

sybase數據表

2010-11-24 13:11:06

MySQL遍歷數據表

2011-02-25 15:31:19

MySQL數據庫DBA

2020-08-20 14:49:22

數據查詢數據庫

2020-11-06 17:42:02

Python開發工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕亚洲一区二区va在线 | 九九九国产 | 911影院 | 国产精彩视频 | 中文字幕免费视频 | 国产在线精品一区二区 | 午夜精品一区二区三区三上悠亚 | 一本一道久久a久久精品蜜桃 | 99av成人精品国语自产拍 | 国产一区免费 | 欧美成人一级 | 亚洲国产精品日本 | 精品中文字幕一区二区 | 久久国内精品 | 黄色大片免费看 | 一区二区三区四区在线免费观看 | 亚洲国产精品一区二区久久 | 999免费网站| 成人在线免费视频 | 日日干日日色 | 中文在线观看视频 | 久久精品国产99国产 | 欧美大片在线观看 | 久久国产精品一区二区 | 爱高潮www亚洲精品 中文字幕免费视频 | 一区二区三区视频在线观看 | av三级在线观看 | 日韩视频中文字幕 | av在线一区二区三区 | 黄色中文字幕 | 91精品一区 | 久久久久久美女 | 久久精品久久久久久 | 日本精品视频 | 成人国产精品久久 | 精品国产一区二区三区久久久久久 | 欧美日韩一区在线播放 | 国产精品久久久久久吹潮 | av毛片 | 精品久久久久久久久久久久久久久久久 | 精品一区二区在线看 |