注意:数小时前,我已经开始使用HBase,并且我来自RDBMS背景:P

我有一个类似于RDBMS的表CUSTOMERS,具有以下各列:

  • CUSTOMER_ID STRING
  • CUSTOMER_NAME STRING
  • CUSTOMER_EMAIL STRING
  • CUSTOMER_ADDRESS STRING
  • CUSTOMER_MOBILE STRING

  • 我想到了以下等效的HBase:



    根据我所读的内容,RDBMS表中的主键与HBase表的行键大致相似。因此,我想将CUSTOMER_ID保留为行键。

    我的问题很愚蠢而直截了当:
  • 不管我使用shell命令还是HBaseAdmin java
    类,如何定义行键?我什么也没找到
    在 shell 程序或HBaseAdmin类中(类似
    HBaseAdmin.createSuperKey(...))
  • 给定HBase表,如何确定行键详细信息,即用作行键的值是什么?
  • 我知道行键设计很关键。假设客户id接收到CUST_12345,CUST_34434等值,那么HBase将如何使用rowkey来确定特定行驻留在哪个区域中(假设该区域概念类似于DB水平分区)?

  • ***编辑后添加示例代码段

    我只是想在shell中使用'put'为客户表创建一行。我是这样做的:
    hbase(main):011:0> put  'CUSTOMERS', 'CUSTID12345', 'CUSTOMER_INFO:NAME','Omkar Joshi'
    0 row(s) in 0.1030 seconds
    
    hbase(main):012:0> scan 'CUSTOMERS'
    ROW                              COLUMN+CELL
     CUSTID12345                     column=CUSTOMER_INFO:NAME, timestamp=1365600052104, value=Omkar Joshi
    1 row(s) in 0.0500 seconds
    
    hbase(main):013:0> put  'CUSTOMERS', 'CUSTID614', 'CUSTOMER_INFO:NAME','Prachi Shah', 'CUSTOMER_INFO:EMAIL','Prachi.Shah@lntinfotech.com'
    
    ERROR: wrong number of arguments (6 for 5)
    
    Here is some help for this command:
    Put a cell 'value' at specified table/row/column and optionally
    timestamp coordinates.  To put a cell value into table 't1' at
    row 'r1' under column 'c1' marked with the time 'ts1', do:
    
      hbase> put 't1', 'r1', 'c1', 'value', ts1
    
    
    hbase(main):014:0> put  'CUSTOMERS', 'CUSTID12345', 'CUSTOMER_INFO:EMAIL','Omkar.Joshi@lntinfotech.com'
    0 row(s) in 0.0160 seconds
    
    hbase(main):015:0>
    hbase(main):016:0* scan 'CUSTOMERS'
    ROW                              COLUMN+CELL
     CUSTID12345                     column=CUSTOMER_INFO:EMAIL, timestamp=1365600369284, value=Omkar.Joshi@lntinfotech.com
     CUSTID12345                     column=CUSTOMER_INFO:NAME, timestamp=1365600052104, value=Omkar Joshi
    1 row(s) in 0.0230 seconds
    

    最多投入5个参数,我无法弄清楚如何在一个put命令中插入整行。这将导致不需要的同一行的增量版本,而且我不确定CUSTOMER_ID是否被用作行键!
    感谢致敬 !

    最佳答案

  • 您不需要, key (以及其他与此相关的列)是一个字节数组,您可以在其中放置任何内容,甚至可以封装子实体
  • 我不确定我理解-每个值都存储为键+列族+列限定符+日期时间+值-因此键就在那里。
  • HBase可以确定记录将转到哪个区域。当区域太大时,它会重新分区。同样,当垃圾太多时,HBase还会执行压缩以重新存储文件。当您对自己进行预分区时,您可以控制这一点,这肯定会在将来引起您的注意。但是,由于您似乎只是从HBase开始,因此可以从HBase开始。一旦您更好地了解了使用模式和数据,您可能会想要再次进行遍历。

  • 您可以阅读/了解有关HBase模式设计herehere的信息。

    关于nosql - HBase-行键基础,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15917558/

    10-09 16:46
    查看更多