更新時(shí)間:2023-03-13 來(lái)源:黑馬程序員 瀏覽量:
HBase 沒(méi)有任何數(shù)據(jù)類型的概念;所有行鍵、列名和列值都被簡(jiǎn)單地視為原始字節(jié)字符串。
按照設(shè)計(jì),HappyBase 不會(huì)進(jìn)行任何自動(dòng)字符串轉(zhuǎn)換。這意味著在將數(shù)據(jù)傳遞給 HappyBase 之前,必須在應(yīng)用程序中將數(shù)據(jù)轉(zhuǎn)換為字節(jié)字符串(bytes),例如通過(guò)對(duì)文本字符串(使用 Unicode)調(diào)用 s.encode('utf-8') 或通過(guò)采用更高級(jí)的字符串序列化struct.pack() 之類的技術(shù)。查找 HBase 建模技術(shù)以獲取更多詳細(xì)信息。請(qǐng)注意,HappyBase 使用的底層 Thrift 庫(kù)將文本字符串自動(dòng)編碼為字節(jié),但強(qiáng)烈建議不要依賴此“功能”,因?yàn)榉祷氐臄?shù)據(jù)不會(huì)自動(dòng)解碼,從而導(dǎo)致不對(duì)稱并因此造成混亂的行為。在應(yīng)用程序代碼中明確編碼和解碼步驟是正確的方法。
在 HBase 中,所有突變要么存儲(chǔ)數(shù)據(jù),要么將數(shù)據(jù)標(biāo)記為刪除;沒(méi)有就地更新或刪除之類的東西。 HappyBase 提供了進(jìn)行單次插入或刪除的方法,以及一次執(zhí)行多個(gè)突變的批處理 API。
要在我們的表中存儲(chǔ)單個(gè)單元格的數(shù)據(jù),我們可以使用 Table.put(),它接受行鍵和要存儲(chǔ)的數(shù)據(jù)。數(shù)據(jù)應(yīng)該是一個(gè)字典,將列名映射到一個(gè)值:
table = connection.table('user') table.put(b'rk0003', {b'info:name': b'wangdacui', b'info:age': b'11'})如果要顯式提供時(shí)間戳,請(qǐng)使用時(shí)間戳參數(shù):
table = connection.table('user') table.put(b'rk0004', {b'info:name': b'zhangdasan', b'info:age': b'11'}, timestamp=1641839679206)如果省略,HBase 默認(rèn)為當(dāng)前系統(tǒng)時(shí)間。
Table.delete() 方法從表中刪除數(shù)據(jù)。要?jiǎng)h除完整的行,只需指定行鍵:
table.delete(b'rk0004')
要?jiǎng)h除一列或多列而不是整行,還需指定 columns 參數(shù):
table = connection.table('user') table.put(b'rk0004', {b'info:name': b'zhangdasan', b'info:age': b'11', b'info:pic': b'pic'}, timestamp=1641839679206) table.delete(b'rk0004', columns=[b'info:age', b'info:pic'])
可選的時(shí)間戳參數(shù)將刪除操作限制為指定時(shí)間戳之前的數(shù)據(jù)。
# 小于等于這個(gè)時(shí)間戳被刪除 table.delete(b'rk0004', columns=[b'info:name'], timestamp=1641840194232)