テーブルの統計情報

Bigtable は、テーブルの統計情報(テーブルに関するメタデータ)を提供します。これにより、テーブルの概要情報(列あたりの行数や平均セル数など)を確認できます。

このドキュメントでは、テーブルの統計情報と、Google Cloud CLI を使用してテーブルを取得する方法について説明します。このページを読む前に、Bigtable ストレージ モデルを理解し、スキーマ設計のベスト プラクティスガベージ コレクションを把握している必要があります。

テーブルの統計情報は、Bigtable テーブルにオブザーバビリティを提供します。これらは、パフォーマンスやストレージに関する問題のトラブルシューティングを行う場合や、ストレージ コストの原因を特定する場合に役立ちます。また、必要以上に多くのデータを保存しているかどうか確認することもできます。

期待される精度

テーブルのテーブル統計情報を取得すると、取得されるデータは近似値になります。テーブルの統計情報には、最新の圧縮時のインスタンス クラスタ内のテーブルの状態が反映されます。

テーブルの統計情報の完全なセットは、最初の圧縮(通常はテーブルの作成から約 1 週間後)まで利用できません。テーブルの統計情報は、最新の圧縮で正確です(1 週間程前のものである場合があります)。

テーブルの統計情報フィールド

テーブルのテーブル統計のリクエストは、次のフィールドを返します。詳細と例については、次のセクションで説明します。

テーブルの統計情報フィールド API 名 説明
行数 row_count テーブル内の行数詳しくは、行数をご覧ください。
1 行あたりの平均列 average_columns_per_row テーブル全体における各行の平均列数。詳細と例については、行あたりの平均列数をご覧ください。
1 列あたりの平均セル数 average_cells_per_column すべての行のすべての列に格納されるセルの平均数。詳しくは、列あたりの平均セル数をご覧ください。
バイト単位の論理データ logical_data_bytes テーブルが占有するスペースの量。詳しくは、バイト単位の論理データをご覧ください。

テーブル統計情報には、テーブルの各列ファミリーに関する次のフィールドも含まれます。

列ファミリーの統計情報フィールド API 名 説明
1 行あたりの平均列 average_columns_per_row 列ファミリー内の 1 行あたりの平均列数。詳細と例については、行あたりの平均列数をご覧ください。
1 列あたりの平均セル数 average_cells_per_column 各列のセル数。列ファミリーで列を持つすべての行の平均値。詳細と例については、列あたりの平均セル数をご覧ください。
バイト単位の論理データ logical_data_bytes 列ファミリーが占有するスペースの量。詳しくは、バイト単位の論理データをご覧ください。

テーブルの統計情報フィールドの詳細

行数

行数はテーブル内の行数です。各行は行キーによって識別されます。

1 行あたりの平均列

Bigtable は、テーブルの行あたりの平均列数を求めるために、テーブル全体の列数をカウントし、その値をテーブル内の行数で割ります。

例として、次のテーブルを検討してください。最初の行には 3 つの列があり、2 番目の行には 2 つの列があります。

行キー 列ファミリー family-A 列ファミリー family-B
行キー 1 family-A:qualifier-W family-A:qualifier-X family-B:qualifier-Y
行キー 2 family-A:qualifier-W family-B:qualifier-Z

このテーブルには 5 つの列と 2 つの行があるため、1 行あたりの平均列数は 2.5 です。

このテーブルの統計情報を見ると、テーブルが縦長か横長(1 行あたり数列ほど)か、短くて横長(各行に複数の列)かを簡単に把握できます。

1 列あたりの平均セル数

Bigtable は、テーブルの各列の平均セル数を得るために、テーブルに保存されているセルの合計数をテーブルの列数で割ります。

スキーマ設計とガベージ コレクション ポリシーに応じて、テーブルの列内に複数のセルがある場合もあります。また、1 つのセルしかない場合もあります。保存できるセルの数は、テーブル内のデータサイズに示された割り当てと上限ページに記載されているデータサイズの制限によって制限されます。

この数が予想よりも大きい場合は、ガベージ コレクション ルールを調べて、必要以上のセルを保持しているかどうか確認します。スキーマと書き込みのパターンを調整するかどうかを確認することもできます。

論理データ(バイト単位)(テーブル)

この値は、テーブル全体の読み取りに必要なおおよそのバイト数を表します。このテーブル統計情報は、テーブルに格納されているバイト数を表します。バイト単位の論理データを知ることで、テーブルに対する圧縮の影響を把握できます。たとえば、Cloud Monitoring で報告されるテーブルサイズが、テーブルの論理データのサイズと同じかそれより大きい場合、容易に保存できない形式でデータが保存されている可能性があります。

列ファミリーの統計情報フィールドの詳細

テーブル統計情報には、テーブルの各列ファミリーに次のフィールドが含まれます。

1 行あたりの平均列

この数値は、列ファミリー内の列数を取得し、その数をテーブル内の行数で割って計算します。

例として、次のテーブルを検討してください。このテーブルには、列ファミリー family-Afamily-B の列がある 3 つの行があります。

行キー 列ファミリー family-A 列ファミリー family-B
行キー 1 family-A:qualifier-W family-A:qualifier-X family-B:qualifier-Y
行キー 2 family-A:qualifier-W
行キー 3 family-A:qualifier-W family-A:qualifier-X family-B:qualifier-Y family-B:qualifier-Z

列ファミリー family-A には、テーブルの中に合計 5 つの列があります。これを行数(3)で割ると、family-A の 1 列あたりの平均セル数は 1.67 となります(小数点以下 2 桁に四捨五入)。

列ファミリー family-B には、テーブルの中に合計 3 つの列があります。行数(3)で割ると、family-A の 1 行あたりの平均列数は 1 列になります。

1 列あたりの平均セル数

列ファミリーの列あたりの平均セル数を求めるため、Bigtable では、テーブルのすべての行で列ファミリー内のセルの合計数を取得し、その値をテーブルの行数で割ります。

たとえば、列ファミリー family-D 内の次の行について考えてみましょう。

行キー 列ファミリー family-D
行キー 1 family-D:qualifier-W(3 つのセル) family-D:qualifier-X(1 つのセル)
行キー 2 family-D:qualifier-x (10 個のセル)
行キー 3 family-D:qualifier-W(7 つのセル) family-D:qualifier-Y(6 つのセル)

列ファミリーのセル数は、3 + 1 + 10 + 7 + 6 = 27 になります。この値を 3(行数)で割ると、列ファミリー family-D の平均列セル数は 9 になります。

バイト単位の論理データ(列ファミリー)

論理データ(バイト単位)は、列ファミリーが占有するスペースを表します。この値は、テーブル統計情報が返された時点で列ファミリー内のすべてのデータの読み取りに必要なおおよそのバイト数です。

gcloud CLI の使用例

sample-table というテーブルのテーブル統計情報を取得するには、bigtable instances table describe コマンドを使用します。

gcloud bigtable instances tables describe TABLE_ID \
    --instance=INSTANCE_ID --view stats

次のように置き換えます。

  • TABLE_ID: テーブルの永続的な識別子
  • INSTANCE_ID: インスタンスの永続的な識別子

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

  columnFamilies:
    my-family:
     stats:
       averageCellsPerColumn: 12.34
       averageColumnsPerRow: 56.78
       logicalDataBytes: 314159
  name: projects/my-project/instances/INSTANCE_ID/tables/TABLE_ID
  stats:
    averageCellsPerColumn: 12.34
    averageColumnsPerRow: 56.78
    logicalDataBytes: 314159
    rowCount: 271828

次のステップ