このトピックでは、Lindorm ワイドテーブル内の合計行数をカウントする方法について説明します。
使用上の注意
Lindorm は、Log-Structured Merge-Tree (LSM-Tree) ストレージ構造を使用する NoSQL データベースです。Lindorm ワイドテーブル内の正確な行数をクエリするには、テーブル全体をスキャンする必要があります。テーブルが大きくなるほど、この操作にかかる時間は長くなります。したがって、Lindorm ワイドテーブルに対して COUNT 操作を頻繁に実行しないでください。行をカウントするには、次のいずれかの方法を使用できます。
Lindorm ワイドテーブル内の推定行数を取得するには、Lindorm クラスター管理システムの [テーブル概要] ページで情報を表示できます。詳細については、「クラスター管理システムを使用して推定行数を表示する」をご参照ください。
HBase Shell ツールを使用して行数をカウントする
開始する前に、HBase Shell を使用して LindormTable に接続します。詳細については、「Lindorm Shell を使用して LindormTable にアクセスする」をご参照ください。
HBase Shell ツールの COUNT コマンドを使用して、HBase テーブルの行数を正確にカウントできます。COUNT コマンドは、すべてのテーブルデータをバッチでスキャンして統計をコンパイルすることで機能します。同じ仮想プライベートクラウド (VPC) 内の ECS クライアントで COUNT コマンドを実行します。インターネット経由で COUNT コマンドを実行すると、ネットワーク使用率が高くなり、カウント操作の効率が低下します。スキャン速度はテーブルスキーマによって異なります。COUNT コマンドを使用した全表スキャンの速度は、毎秒 100,000 行未満になる場合があります。次の文を実行して、テーブル内の合計行数をカウントします。
count 'table'次の結果が返されます:
HBase RowCounter を使用して行数をカウントする
開始する前に、HBase Shell を使用して LindormTable に接続します。詳細については、「Lindorm Shell を使用して LindormTable にアクセスする」をご参照ください。
RowCounter は、ローカルの疑似分散 MapReduce ジョブを開始して COUNT 操作を実行します。デフォルトでは、この操作はシングルスレッドです。カウント速度は、HBase Shell で COUNT コマンドを実行する場合と似ています。カウント速度を上げるには、Dmapreduce.local.map.tasks.maximum=number_of_threads を指定して複数のスレッドを使用できます。次の点に注意してください:
スレッド数は、テーブル内のリージョン数以下である必要があります。
スレッド数が多くなると、クラスターの負荷が高くなり、オンラインサービスに影響を与える可能性があります。要件に応じてスレッド数を設定してください。
HBase Shell で、次のコードを実行して Lindorm ワイドテーブルの行数をカウントします。
テーブル内の合計行数をカウントします。
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "table"16 の同時スレッドを使用して、テーブル内の合計行数をカウントします。
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter -Dmapreduce.local.map.tasks.maximum=16 "table"ns 名前空間にあるテーブル内の合計行数をカウントします。
./alihbase-2.0.18/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter "ns:table"
結果は Log ディレクトリの hbase.log ファイルに保存されます。
Lindorm SQL を使用して行数をカウントする
正確な行数をカウントする
開始する前に、Lindorm-cli を使用して LindormTable に接続します。
Lindorm SQL を使用した行のカウントは、HBase RowCounter を使用するよりも高速です。これは、Lindorm が COUNT ロジックを各 Lindorm プロセスに自動的に分散するためです。これは複数のスレッドを使用することに相当します。対照的に、HBase Shell はシングルスレッドです。ただし、COUNT 操作では依然として全表スキャンが必要です。Lindorm SQL 文のデフォルトのタイムアウトは 120 秒です。120 秒以内にカウントが完了しない場合、文はタイムアウトし、エラーが返されます。Lindorm SQL でのカウント速度は、サーバーあたり毎秒数十万行に達することがあります。COUNT 操作は分散されているため、クラスター内のサーバーの数が増えるにつれて速度が向上します。
次のコードを実行して、テーブルの行数をカウントします。
SELECT COUNT(*) FROM table;次の結果が返されます:
+--------+
| EXPR$0 |
+--------+
| 16000 |
+--------+行数をカウントするには、全表スキャンが必要です。この操作は注意して実行してください。テーブルに 100 万行を超える行が含まれている場合は、検索インデックスを使用してクエリを高速化します。詳細については、「検索インデックスを使用してワイドテーブルのデータをクエリする」をご参照ください。
推定行数をカウントする
この機能には、LindormTable バージョン 2.8.2.6 以降と Lindorm SQL バージョン 2.8.2.6 以降が必要です。
次の SQL 文を実行して、テーブル内の推定行数をカウントします:
SHOW ESTIMATED ROWS FROM table;次の結果が返されます:
+---------------------+
| ESTIMATED_ROW_COUNT |
+---------------------+
| 15000 |
+---------------------+クラスター管理システムを使用して推定行数を表示する
開始する前に、クラスター管理システムにログインします。
Lindorm クラスター管理システムでは、[概要] ページでテーブルの推定行数を表示できます。この値は、各データファイルの行数メタデータを加算して計算されます。この値は不正確な場合があります。データを更新または削除すると、同じ行が複数のファイルに存在する可能性があります。行数メタデータは、データファイルが作成されるときに収集されます。生存時間 (TTL) 機能を使用する場合、これらのファイル内の一部のデータは期限切れになっている可能性があります。したがって、この値は単なる推定値です。ただし、テーブルに TTL による更新、削除、または期限切れのデータがない場合、表示される行数は完全に正確です。データ移行の完了後に、この値を使用してデータ整合性を確認できます。
Lindorm クラスター管理システムで、左側のナビゲーションウィンドウにある [概要] をクリックします。[現在の IDC] エリアで、ターゲットテーブルを見つけます。次に、[EstimateRowCount] 列の [表示] をクリックして、推定行数を表示します。
テーブルにデータが含まれているにもかかわらず、推定行数が 0 の場合、LindormTable のマイナーバージョンが古すぎる可能性があります。この場合、LindormTable のマイナーバージョンをアップグレードできます。詳細については、「マイナーバージョンをアップグレードする」をご参照ください。