HBase數(shù)據(jù)模型操作

2018-03-09 14:29 更新

HBase數(shù)據(jù)模型操作

在 HBase 中有四個主要的數(shù)據(jù)模型操作,分別是:Get、Put、Scan 和 Delete。

Get(讀?。?/h3>

Get 指定行的返回屬性。讀取通過 Table.get 執(zhí)行。

Get 操作的語法如下所示:

get ’<table name>’,’row1’

在以下的 get 命令示例中,我們掃描了 emp 表的第一行:

hbase(main):012:0> get 'emp', '1'

   COLUMN                     CELL
   
personal : city timestamp=1417521848375, value=hyderabad

personal : name timestamp=1417521785385, value=ramu

professional: designation timestamp=1417521885277, value=manager

professional: salary timestamp=1417521903862, value=50000

4 row(s) in 0.0270 seconds

讀取指定列

下面給出的是使用 get 操作讀取指定列語法:

hbase>get 'table name', ‘rowid’, {COLUMN => ‘column family:column name ’}

在下面給出的示例表示用于讀取 HBase 表中的特定列:

hbase(main):015:0> get 'emp', 'row1', {COLUMN=>'personal:name'}

  COLUMN                CELL
  
personal:name timestamp=1418035791555, value=raju

1 row(s) in 0.0080 seconds

Put(寫)

Put 可以將新行添加到表中(如果該項是新的)或者可以更新現(xiàn)有行(如果該項已經(jīng)存在)。Put 操作通過 Table.put(non-writeBuffer)或 Table.batch(non-writeBuffer)執(zhí)行。

Put 操作的命令如下所示,在該語法中,你需要注明新值:

put ‘table name’,’row ’,'Column family:column name',’new value’

新給定的值將替換現(xiàn)有的值,并更新該行。

Put操作示例 

假設(shè) HBase 中有一個表 EMP 擁有下列數(shù)據(jù):

hbase(main):003:0> scan 'emp'
 ROW              COLUMN+CELL
row1 column=personal:name, timestamp=1418051555, value=raju
row1 column=personal:city, timestamp=1418275907, value=Hyderabad
row1 column=professional:designation, timestamp=14180555,value=manager
row1 column=professional:salary, timestamp=1418035791555,value=50000
1 row(s) in 0.0100 seconds

以下命令將員工名為“raju”的城市值更新為“Delhi”:

hbase(main):002:0> put 'emp','row1','personal:city','Delhi'
0 row(s) in 0.0400 seconds

更新后的表如下所示:

hbase(main):003:0> scan 'emp'
  ROW          COLUMN+CELL
row1 column=personal:name, timestamp=1418035791555, value=raju
row1 column=personal:city, timestamp=1418274645907, value=Delhi
row1 column=professional:designation, timestamp=141857555,value=manager
row1 column=professional:salary, timestamp=1418039555, value=50000
1 row(s) in 0.0100 seconds

Scan(掃描

Scan 允許在多個行上對指定屬性進行迭代。

Scan 操作的語法如下:

scan ‘<table name>’ 

以下是掃描表格實例的示例。假定表中有帶有鍵  "row1 "、 "row2 "、 "row3 " 的行,然后是具有鍵“abc1”,“abc2”和“abc3”的另一組行。以下示例顯示如何設(shè)置Scan實例以返回以“row”開頭的行。

public static final byte[] CF = "cf".getBytes();
public static final byte[] ATTR = "attr".getBytes();
...

Table table = ...      // instantiate a Table instance

Scan scan = new Scan();
scan.addColumn(CF, ATTR);
scan.setRowPrefixFilter(Bytes.toBytes("row"));
ResultScanner rs = table.getScanner(scan);
try {
  for (Result r = rs.next(); r != null; r = rs.next()) {
    // process result...
  }
} finally {
  rs.close();  // always close the ResultScanner!
}

請注意,通常,指定掃描的特定停止點的最簡單方法是使用 InclusiveStopFilter 類。

Delete(刪除)

Delete 操作用于從表中刪除一行。Delete 通過 Table.delete 執(zhí)行。

HBase 不會修改數(shù)據(jù),因此通過創(chuàng)建名為 tombstones 的新標(biāo)記來處理 Delete 操作。這些  tombstones,以及沒用的價值,都在重大的壓實中清理干凈。

使用 Delete 命令的語法如下:

delete ‘<table name>’, ‘<row>’, ‘<column name >’, ‘<time stamp>’

下面是一個刪除特定單元格的例子:

hbase(main):006:0> delete 'emp', '1', 'personal data:city',
1417521848375
0 row(s) in 0.0060 seconds

刪除表的所有單元格

使用 “deleteall” 命令,可以刪除一行中所有單元格。下面給出是 deleteall 命令的語法:

deleteall ‘<table name>’, ‘<row>’,

這里是使用“deleteall”命令刪除 emp 表 row1 的所有單元的一個例子。

hbase(main):007:0> deleteall 'emp','1'
0 row(s) in 0.0240 seconds

使用 Scan 命令驗證表。表被刪除后的快照如下:

hbase(main):022:0> scan 'emp'

ROW                  COLUMN+CELL

2 column=personal data:city, timestamp=1417524574905, value=chennai 

2 column=personal data:name, timestamp=1417524556125, value=ravi

2 column=professional data:designation, timestamp=1417524204, value=sr:engg

2 column=professional data:salary, timestamp=1417524604221, value=30000

3 column=personal data:city, timestamp=1417524681780, value=delhi

3 column=personal data:name, timestamp=1417524672067, value=rajesh

3 column=professional data:designation, timestamp=1417523187, value=jr:engg

3 column=professional data:salary, timestamp=1417524702514, value=25000
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號