Hbase-update-data

提供:Dev Guides
移動先:案内検索

HBase-データの更新

HBase Shellを使用してデータを更新する

*put* コマンドを使用して、既存のセル値を更新できます。 これを行うには、同じ構文に従い、以下に示すように新しい値を指定します。
put ‘table name’,’row ’,'Column family:column name',’new value’

新しく指定された値は既存の値を置き換え、行を更新します。

次のデータを含む emp というHBaseのテーブルがあるとします。

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」という名前の従業員の都市値をデリーに更新します。

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

Java APIを使用したデータの更新

  • put()*メソッドを使用して、特定のセルのデータを更新できます。 以下の手順に従って、テーブルの既存のセル値を更新します。

ステップ1:構成クラスのインスタンス化

*Configuration* クラスは、HBase構成ファイルをオブジェクトに追加します。 以下に示すように、 *HbaseConfiguration* クラスの* create()*メソッドを使用して、構成オブジェクトを作成できます。
Configuration conf = HbaseConfiguration.create();

ステップ2:HTableクラスをインスタンス化する

HBaseのTableの実装である HTable というクラスがあります。 このクラスは、単一のHBaseテーブルと通信するために使用されます。 このクラスをインスタンス化する際、構成オブジェクトとテーブル名をパラメーターとして受け入れます。 以下に示すように、HTableクラスをインスタンス化できます。

HTable hTable = new HTable(conf, tableName);

ステップ3:Putクラスをインスタンス化する

HBaseテーブルにデータを挿入するには、* add()メソッドとそのバリアントが使用されます。 このメソッドは *Put に属しているため、 put クラスをインスタンス化します。 このクラスには、データを挿入する行名が文字列形式で必要です。 以下に示すように、 Put クラスをインスタンス化できます。

Put p = new Put(Bytes.toBytes("row1"));

ステップ4:既存のセルを更新する

*Put* クラスの* add()*メソッドは、データを挿入するために使用されます。 列ファミリー、列修飾子(列名)、および挿入する値をそれぞれ表す3バイト配列が必要です。 以下に示すように、* add()*メソッドを使用してHBaseテーブルにデータを挿入します。
p.add(Bytes.toBytes("coloumn family "), Bytes.toBytes("column
name"),Bytes.toBytes("value"));
p.add(Bytes.toBytes("personal"),
Bytes.toBytes("city"),Bytes.toBytes("Delih"));

ステップ5:テーブルにデータを保存する

必要な行を挿入したら、以下に示すように、putインスタンスをHTableクラスの* put()*メソッドに追加して、変更を保存します。

hTable.put(p);

ステップ6:HTableインスタンスを閉じる

HBase Tableでデータを作成した後、以下に示すようにclose()メソッドを使用して HTable インスタンスを閉じます。

hTable.close();

以下は、特定のテーブルのデータを更新するための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.util.Bytes;

public class UpdateData{

   public static void main(String[] args) throws IOException {

     //Instantiating Configuration class
      Configuration config = HBaseConfiguration.create();

     //Instantiating HTable class
      HTable hTable = new HTable(config, "emp");

     //Instantiating Put class
     //accepts a row name
      Put p = new Put(Bytes.toBytes("row1"));

     //Updating a cell value
      p.add(Bytes.toBytes("personal"),
      Bytes.toBytes("city"),Bytes.toBytes("Delih"));

     //Saving the put Instance to the HTable.
      hTable.put(p);
      System.out.println("data Updated");

     //closing HTable
      hTable.close();
   }
}

以下に示すように、上記のプログラムをコンパイルして実行します。

$javac UpdateData.java
$java UpdateData

出力は次のようになります。

data Updated