HBaseクエリの例:put()、get()、scan()コマンド
⚡ スマートサマリー
HBase の put、get、scan は、データの書き込みと読み取りを行うコア コマンドであり、行と列ごとにセル値を保存したり、単一の行を取得したり、シェルから多数の行を参照したりできます。 Java APIです。

HBase テーブルへのデータの書き込み: シェル
これらの例では、HBase が インストール済みで実行中HBaseシェルが開いていて、 guru99という名前のテーブル 既に「教育」と「プロジェクト」という列ファミリーが存在します。
putコマンドは、データをテーブルに保存するために使用されます。
Syntax: put <'tablename'>,<'rowname'>,<'columnvalue'>,<'value'>
このコマンドは以下の目的で使用されます。
- 定義または指定されたテーブル、行、または列にセルの「値」を配置します。
- オプションでタイムスタンプを同期します。
例えば、ここでは「guru99」というテーブルのr1行目、c1列目に値を入れています。
hbase> put 'guru99', 'r1', 'c1', 'value', 10
以下のスクリーンショットに示すように、テーブル「guru99」に10、15、30の3つの値を格納しました。
テーブル「guru99」にgなどのテーブル参照があるとします。テーブル参照に対して、次のようにコマンドを実行することもできます。
hbase> g.put 'guru99', 'r1', 'c1', 'value', 10
「guru99」に値を入力すると、上記のスクリーンショットに示すように出力が表示されます。
HBase テーブルからのデータの読み取り: シェル
このセクションでは、 HBaseシェル:
- HBaseテーブル「guru99」に挿入される値。
- HBaseテーブルguru99に存在する値を持つ列名。
以下のスキャン出力には、「guru99」に挿入されたすべての値が、行名と列名とともに一覧表示されます。
上記のスクリーンショットから、以下のことが推測できます。
- HBaseシェルで「scan」コマンドを実行すると、「guru99」に挿入された値が次のように表示されます。
- HBaseシェルでは、コードによって挿入された値が、列名と行名とともに表示されます。
- ここで挿入された列名は「education」と「projects」であることがわかります。
- 上記の列に挿入される値は「BigData」と「HBase Tutorials」です。
getコマンドを使用して、テーブルからデータを読み取ることもできます。
Syntax: get <'tablename'>, <'rowname'>, {< Additional parameters>}
ここで追加されるパラメータには、TIMERANGE、TIMESTAMP、VERSIONS、およびFILTERSが含まれます。このコマンドを使用すると、テーブル内の行またはセルの内容を取得できます。TIMESTAMP、TIMERANGE、VERSIONS、またはFILTERSなどの追加パラメータを追加することで、特定の行またはセルの内容を取得できます。以下の表に、これらのパラメータの概要を示します。
| 目的 | |
|---|---|
| タイムレンジ | タイムスタンプが開始時刻と終了時刻の範囲内にあるセルを返します。 |
| タイムスタンプ | 正確なタイムスタンプで保存されたセルバージョンのみを返します。 |
| バージョン | セルのバージョンをいくつ返すかを設定します(デフォルトは1です)。 |
| FILTERS | フィルターを適用して、返される行または列を制限します。 |
| カラム | 結果を特定の列ファミリーまたは修飾子に限定します。 |
getコマンドの具体的な使用例を以下に示します。
hbase> get 'guru99', 'r1', {COLUMN => 'c1'}
テーブル「guru99」の場合、以下のスクリーンショットに示すように、このコマンドを使用すると、行r1と列c1の値が表示されます。
hbase> get 'guru99', 'r1'
テーブル「guru99」の場合、このコマンドを使用すると、行r1の値が表示されます。
hbase> get 'guru99', 'r1', {TIMERANGE => [ts1, ts2]}
このコマンドを使用すると、テーブル「guru99」の行r1の、時間範囲ts1からts2までの値が表示されます。
hbase> get 'guru99', 'r1', {COLUMN => ['c1', 'c2', 'c3']}
このコマンドを使用すると、テーブル「guru99」の行r1と列ファミリーc1、c2、c3の値が表示されます。
HBase テーブルへのデータの書き込み: JAVA API
このステップでは、HBaseテーブル「guru99」にデータを書き込みます。
まず、HBaseLoading.javaプログラムを使用して、HBaseへの値の挿入と取得を行うコードを記述する必要があります。列レベルでテーブルに値を作成および挿入するには、以下に示すようなコードを記述します。
以下のスクリーンショットは、 Java HBaseの設定を構築し、「guru99」に値を挿入するコード:
上記のスクリーンショットから:
- HBase構成を作成する際、HBaseのインストール時にhbase-site.xmlファイルとhbase-default.xmlファイルで設定した構成を参照します。
- HTableメソッドを使用してテーブル「guru99」を作成します。
- テーブル「guru99」に行1を追加します。
- 列名「education」と「projects」を指定し、それぞれの行1の列名に値を挿入します。ここに挿入される値は ビッグデータ そして「HBaseTutorials」。
HBase テーブルからデータを読み取ります: Java API
上記のセクションでHBaseテーブルに格納した値はすべて、ここで取得して表示します。
以下のコンソール出力は、HBaseテーブル「guru99」から読み取られたデータを示しています。
「guru99」に保存されている結果を取得するには:
- ここでは、「education」と「projects」という列ファミリーに格納されている値を取得します。
- 「get」コマンドを使用して、HBaseテーブルに保存されている値を取得します。
- 「scan」コマンドを使用してスキャンした結果です。row1に格納されている値がコンソールに表示されます。
コードが書かれたら、 Java このような:
HBaseLoading.java を右クリックして「実行」を選択します。 Java 応用。
「HBaseLoading.java」を実行すると、HBaseの各列に「guru99」の値が挿入され、同じプログラム内で値を取得することもできます。
完全なコードは次のとおりです。
import java.io.IOException; 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.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.util.Bytes; public class HBaseLoading { public static void main(String[] args) throws IOException { /* When you create a HBaseConfiguration, it reads in whatever you've set into your hbase-site.xml and in hbase-default.xml, as long as these can be found on the CLASSPATH*/ org.apache.hadoop.conf.Configuration config = HBaseConfiguration.create(); /*This instantiates an HTable object that connects you to the "test" table*/ HTable table = new HTable(config, "guru99"); /* To add to a row, use Put. A Put constructor takes the name of the row you want to insert into as a byte array.*/ Put p = new Put(Bytes.toBytes("row1")); /*To set the value you'd like to update in the row 'row1', specify the column family, column qualifier, and value of the table cell you'd like to update. The column family must already exist in your table schema. The qualifier can be anything.*/ p.add(Bytes.toBytes("education"), Bytes.toBytes("col1"),Bytes.toBytes("BigData")); p.add(Bytes.toBytes("projects"),Bytes.toBytes("col2"),Bytes.toBytes("HBaseTutorials")); // Once you've adorned your Put instance with all the updates you want to make, to commit it do the following table.put(p); // Now, to retrieve the data we just wrote. Get g = new Get(Bytes.toBytes("row1")); Result r = table.get(g); byte [] value = r.getValue(Bytes.toBytes("education"),Bytes.toBytes("col1")); byte [] value1 = r.getValue(Bytes.toBytes("projects"),Bytes.toBytes("col2")); String valueStr = Bytes.toString(value); String valueStr1 = Bytes.toString(value1); System.out.println("GET: " +"education: "+ valueStr+"projects: "+valueStr1); Scan s = new Scan(); s.addColumn(Bytes.toBytes("education"), Bytes.toBytes("col1")); s.addColumn(Bytes.toBytes("projects"), Bytes.toBytes("col2")); ResultScanner scanner = table.getScanner(s); try { for (Result rr = scanner.next(); rr != null; rr = scanner.next()) { System.out.println("Found row : " + rr); } } finally { // Make sure you close your scanners when you are done! scanner.close(); } } }
APIバージョンに関する注記: 上記の例では、古い HBase クライアント API を反映した HTable クラスとその add() メソッドを使用しています。HBase 1.0 以降、HTable は非推奨となっています。最新のコードでは、ConnectionFactory.createConnection(…).getTable(…) を使用して Table を取得し、add() の代わりに addColumn() を使用して Put を構築します。put、get、および scan のロジックは変わりません。





