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