HBaseクエリの例:put()、get()、scan()コマンド

⚡ スマートサマリー

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

  • ✍️ put を使って書き込む: putコマンドは、テーブル、行、列、およびオプションのタイムスタンプに値を格納します。
  • 🔍 get で読み込む: getコマンドは、TIMERANGE、VERSIONS、およびFILTERSオプションを使用して、単一の行またはセルを返します。
  • 📜 スキャンして閲覧する: scanコマンドは、テーブル全体にわたる多数の行とその列の値を一覧表示します。
  • Java API: 同じ操作が実行されます Java Put、Get、Scan、およびBytesヘルパークラスを使用します。
  • 🧬 座標: すべての値は、行キー、列ファミリー、および列修飾子によって指定されます。
  • 🤖 AIアシスト: AIアシスタントは、配置、取得、スキャンに関するコードを作成し、効率的な行キー設計を提案します。

HBase のシェルでの put()、get()、scan() クエリ コマンドと Java

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つの値を格納しました。

HBaseシェルのputコマンドで、テーブルguru99に値10、15、30を挿入します。

テーブル「guru99」にgなどのテーブル参照があるとします。テーブル参照に対して、次のようにコマンドを実行することもできます。

hbase> g.put 'guru99', 'r1', 'c1', 'value', 10

「guru99」に値を入力すると、上記のスクリーンショットに示すように出力が表示されます。

HBase テーブルからのデータの読み取り: シェル

このセクションでは、 HBaseシェル:

  • HBaseテーブル「guru99」に挿入される値。
  • HBaseテーブルguru99に存在する値を持つ列名。

以下のスキャン出力には、「guru99」に挿入されたすべての値が、行名と列名とともに一覧表示されます。

HBaseシェルスキャンコマンドの出力で、テーブル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が返される。

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」に値を挿入するコード:

Java HBase構成を作成し、Put APIを使用して値を挿入するコード

上記のスクリーンショットから:

  • HBase構成を作成する際、HBaseのインストール時にhbase-site.xmlファイルとhbase-default.xmlファイルで設定した構成を参照します。
  • HTableメソッドを使用してテーブル「guru99」を作成します。
  • テーブル「guru99」に行1を追加します。
  • 列名「education」と「projects」を指定し、それぞれの行1の列名に値を挿入します。ここに挿入される値は ビッグデータ そして「HBaseTutorials」。

HBase テーブルからデータを読み取ります: Java API

上記のセクションでHBaseテーブルに格納した値はすべて、ここで取得して表示します。

以下のコンソール出力は、HBaseテーブル「guru99」から読み取られたデータを示しています。

Java 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 のロジックは変わりません。

よくあるご質問

getコマンドは行キーに基づいて1行を取得し、迅速に結果を返します。scanコマンドは、テーブル全体またはキー範囲にわたって複数の行を順番に読み込み、必要に応じて列または時間でフィルタリングします。単一の行を検索する場合はgetコマンドを、複数の行を閲覧またはエクスポートする場合はscanコマンドを使用してください。

列ファミリーとは、テーブル作成時に定義され、まとめて格納される名前付きの列グループです。列修飾子は、そのファミリー内の個々の列名であり、例えば education:col1 のようになります。ファミリーはスキーマ内に存在する必要がありますが、修飾子は書き込み時に自由に追記できます。

セルを1つ削除するには、deleteコマンドを使用します。例えば、`delete 'guru99', 'r1', 'c1'`のように入力します。行全体を削除するには、`deleteall`コマンドを使用します。例えば、`deleteall 'guru99', 'r1'`のように入力します。テーブルを完全に空にするには、まずテーブルを無効にしてから、`truncate 'guru99'`コマンドを実行します。これにより、テーブルが削除されて再作成されます。

HBaseは、各セルのタイムスタンプ付きバージョンを複数保持します。保持するバージョン数は、VERSIONS属性によって列ファミリーごとに設定され、デフォルト値は1です。複数のバージョンを取得するには、getまたはscanに{VERSIONS => 3}を追加し、正確なバージョンを1つ取得するにはTIMESTAMPを追加します。

HBase内のすべてのテーブルを表示するには、listコマンドを実行します。テーブルの行数をカウントするには、count 'guru99'コマンドを実行します(必要に応じて、INTERVALを指定して実行できます)。列ファミリーを表示するには、describe 'guru99'コマンドを使用します。クラスタの状態を確認するには、status 'simple'コマンドを使用します。

HBaseにはネイティブSQLはありませんが、Apache Phoenixはクエリをネイティブなput、get、scan操作にコンパイルするSQLレイヤーを追加します。使い慣れたSELECT、UPSERT、JOIN構文をサポートしているため、SQLに精通しているチームにとってHBaseへのクエリが容易になります。

AIコーディングアシスタントと大規模言語モデルはHBaseシェルコマンドをドラフトでき、 Java 平易な言語のプロンプトからクライアントコードを生成し、行キー設計を提案し、スキャンフィルタについて説明します。機械学習は、ホットスポットを予測することでパフォーマンスの調整にも役立ちますが、生成されたクエリはすべてエンジニアが検証する必要があります。

Yes. GitHubコパイロット HBaseのput、get、scanのスニペットを生成できます。 Java または、Bytes.toBytes 呼び出しや Scan フィルタを含む、短いコメントからのシェル。 Rev実行する前に、正しいテーブル名、カラムファミリー、および現在のテーブルAPIの出力を確認してください。