更新时间:2023-03-13 来源:黑马程序员 浏览量:
HBase 没有任何数据类型的概念;所有行键、列名和列值都被简单地视为原始字节字符串。
按照设计,HappyBase 不会进行任何自动字符串转换。这意味着在将数据传递给 HappyBase 之前,必须在应用程序中将数据转换为字节字符串(bytes),例如通过对文本字符串(使用 Unicode)调用 s.encode('utf-8') 或通过采用更高级的字符串序列化struct.pack() 之类的技术。查找 HBase 建模技术以获取更多详细信息。请注意,HappyBase 使用的底层 Thrift 库将文本字符串自动编码为字节,但强烈建议不要依赖此“功能”,因为返回的数据不会自动解码,从而导致不对称并因此造成混乱的行为。在应用程序代码中明确编码和解码步骤是正确的方法。
在 HBase 中,所有突变要么存储数据,要么将数据标记为删除;没有就地更新或删除之类的东西。 HappyBase 提供了进行单次插入或删除的方法,以及一次执行多个突变的批处理 API。
要在我们的表中存储单个单元格的数据,我们可以使用 Table.put(),它接受行键和要存储的数据。数据应该是一个字典,将列名映射到一个值:
table = connection.table('user') table.put(b'rk0003', {b'info:name': b'wangdacui', b'info:age': b'11'})如果要显式提供时间戳,请使用时间戳参数:
table = connection.table('user') table.put(b'rk0004', {b'info:name': b'zhangdasan', b'info:age': b'11'}, timestamp=1641839679206)如果省略,HBase 默认为当前系统时间。
Table.delete() 方法从表中删除数据。要删除完整的行,只需指定行键:
table.delete(b'rk0004')
要删除一列或多列而不是整行,还需指定 columns 参数:
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'])
可选的时间戳参数将删除操作限制为指定时间戳之前的数据。
# 小于等于这个时间戳被删除 table.delete(b'rk0004', columns=[b'info:name'], timestamp=1641840194232)