nit*_*rog 14 schema hadoop hbase
有没有人有关于如何使用嵌套实体创建Hbase表的示例?
例
UserName (string)
SSN (string)
+ Books (collection)
Run Code Online (Sandbox Code Playgroud)
例如,书籍集合看起来像这样
图书
isbn
title
etc...
Run Code Online (Sandbox Code Playgroud)
我找不到一个例子是如何创建这样的表.我看到很多人都在谈论它,以及在某些情况下它是如何做到最好的做法,但我找不到一个如何在任何地方做到这一点的例子.
谢谢...
Ian*_*ley 19
嵌套实体不是HBase的官方特征; 这只是一些人谈论一种使用模式的方式.在这种模式中,您使用HBase中的"columns"实际上只是一个大的映射(一组键/值对)这一事实,让您通过在每个"行"中添加一列来对行内的基数维建模.嵌套实体.
从架构方面来说,你不需要在桌子上做太多事情; 在HBase中创建表时,只需指定名称和列族(以及关联的属性),就像这样(在hbase shell中):
hbase:001:0> create 'UserWithBooks', 'cf1'
Run Code Online (Sandbox Code Playgroud)
然后,这取决于你在列中明智地放入的内容.您可以插入如下值:
hbase:002:0> put 'UsersWithBooks', 'userid1234', 'cf1:username', 'my username'
hbase:003:0> put 'UsersWithBooks', 'userid1234', 'cf1:ssn', 'my ssn'
hbase:004:0> put 'UsersWithBooks', 'userid1234', 'cf1:book_id_12345', '<isbn>12345</isbn><title>mary had a little lamb</title>'
hbase:005:0> put 'UsersWithBooks', 'userid1234', 'cf1:book_id_67890', '<isbn>67890</isbn><title>the importance of being earnest</title>'
Run Code Online (Sandbox Code Playgroud)
列名完全取决于您,并且您可以拥有的数量没有限制(在理由范围内:有关此内容的更多信息,请参阅HBase参考指南).当然,这样做,你必须做自己的腿部工作:放入和取出值(你可能用比我用这些shell命令更复杂的方式使用java客户端,他们'仅用于解释目的).虽然您可以通过键有效地扫描表中的一部分列(使用列分页过滤器),但除了拉取它们并将它们解析到其他地方之外,您无法对单元格的内容做很多事情.
你为什么要这样做?可能只是你想要一个父行的所有嵌套行周围的原子性.这不是很常见,你最好的选择可能是将它们建模为单独的表格,并且只有在你真正了解权衡时才采用这种方法.