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