Hbase-read-data

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

HBase-データの読み取り

HBase Shellを使用したデータの読み取り

*get* コマンドと *HTable* クラスの* get()*メソッドは、HBaseのテーブルからデータを読み取るために使用されます。 *get* コマンドを使用すると、一度に1行のデータを取得できます。 その構文は次のとおりです。
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

Java APIを使用したデータの読み取り

HBaseテーブルからデータを読み取るには、HTableクラスの* get()メソッドを使用します。 このメソッドには、 *Get クラスのインスタンスが必要です。 以下の手順に従って、HBaseテーブルからデータを取得します。

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

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

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

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

HTable hTable = new HTable(conf, tableName);

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

*HTable* クラスの* get()*メソッドを使用して、HBaseテーブルからデータを取得できます。 このメソッドは、指定された行からセルを抽出します。 パラメーターとして *Get* クラスオブジェクトが必要です。 以下に示すように作成します。
Get get = new Get(toBytes("row1"));

ステップ4:データを読む

データの取得中に、IDで単一の行を取得したり、行IDのセットで行のセットを取得したり、テーブル全体または行のサブセットをスキャンしたりできます。

*Get* クラスのaddメソッドバリアントを使用して、HBaseテーブルデータを取得できます。

特定の列ファミリから特定の列を取得するには、次の方法を使用します。

get.addFamily(personal)

特定の列ファミリからすべての列を取得するには、次の方法を使用します。

get.addColumn(personal, name)

ステップ5:結果を取得する

*Get* クラスインスタンスを *HTable* クラスのgetメソッドに渡すことで結果を取得します。 このメソッドは、要求された結果を保持する *Result* クラスオブジェクトを返します。 以下に、* get()*メソッドの使用法を示します。
Result result = table.get(g);

ステップ6:結果インスタンスから値を読み取る

*Result* クラスは、インスタンスから値を読み取る* getValue()*メソッドを提供します。 以下に示すように使用して、 *Result* インスタンスから値を読み取ります。
byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name"));
byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));

以下は、HBaseテーブルから値を読み取るための完全なプログラムです。

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;

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

public class RetriveData{

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

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

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

     //Instantiating Get class
      Get g = new Get(Bytes.toBytes("row1"));

     //Reading the data
      Result result = table.get(g);

     //Reading values from Result class object
      byte [] value = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("name"));

      byte [] value1 = result.getValue(Bytes.toBytes("personal"),Bytes.toBytes("city"));

     //Printing the values
      String name = Bytes.toString(value);
      String city = Bytes.toString(value1);

      System.out.println("name: " + name + " city: " + city);
   }
}

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

$javac RetriveData.java
$java RetriveData

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

name: Raju city: Delhi