テーブルの作成と管理

このページでは、Google Cloud コンソール、Google Cloud CLI、cbt CLI を使用してオペレーションを作成し、Bigtable テーブルで実行する方法について説明します。

cbt CLI は、このページで説明されていないコマンドをいくつかサポートしています。コマンドの完全なリストについては、cbt リファレンスをご覧ください。

また、Cloud Bigtable クライアント ライブラリまたはサービス API を使用して、プログラムでテーブルを作成して管理することもできます。

テーブルの承認済みビューの作成と管理の手順については、承認済みビューをご覧ください。

始める前に

コマンドライン ツールを使用してテーブルを操作する場合は、このセクションの手順を行ってください。

  1. gcloud CLI をインストールします。

  2. 省略可: cbt CLI を使用する場合は、cbt CLI のインストールの手順に沿って操作します。この手順には、.cbtrc ファイルの作成も含まれます。

    このページで説明する cbt CLI 命令は、.cbtrc ファイルにプロジェクト ID とインスタンス ID がすでに設定されていることを前提としています。あるいは、-project フラグと -instance フラグを使用して、cbt CLI コマンドを実行するたびに、これらの値を設定することもできます。

テーブルを作成する

テーブルを作成するときに、テーブルで使用する列ファミリーを指定する必要はありません。列ファミリーは後で追加または削除できます。

コンソール

インスタンスに新しいテーブルを作成するには:

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。

  4. テーブルのテーブル ID を入力します。

  5. 列ファミリーの追加(省略可)

    列は後から追加することもできます。テーブルにデータを書き込むには、テーブルに少なくとも 1 つの列ファミリーが必要です。テーブルへのデータの書き込みや変更ストリームの読み取りを行うには、テーブルに少なくとも 1 つの列ファミリーが必要です。

  6. 省略可: テーブルの変更ストリームを有効にします。変更ストリームを有効にする前に、ストレージ コストの増加やアプリ プロファイルの使用要件など、その影響を把握しておく必要があります。詳細については、変更ストリームの概要をご覧ください。

    1. [変更ストリームを有効にする] を選択します。

    2. [有効期限] フィールドに、1~7 の数値を入力して、変更ストリーム データの保持日数を指定します。

    3. [作成] をクリックします。

  7. 省略可: Bigtable でテーブルの日次バックアップを作成しない場合は、[自動バックアップを有効にする] の横にあるチェックボックスをオフにします。詳細については、自動バックアップを使用する(プレビュー)をご覧ください。

  8. [テーブルの作成] をクリックします。

gcloud

テーブルを作成するには、次のコマンドを実行します。オプションの一覧は、gcloud bigtable instances tables create をご覧ください。

gcloud bigtable instances tables create TABLE_ID \
    --instance=INSTANCE_ID \
    --project=PROJECT_ID \
    --column-families=COLUMN-FAMILIES

以下のように置き換えます。

  • TABLE_ID: 新しいテーブルの一意の ID
  • INSTANCE_ID: インスタンスの ID
  • PROJECT_ID: 新しいテーブルを含むプロジェクト
  • COLUMN-FAMILIES: 列ファミリー名のカンマ区切りリスト。列ファミリーは後で追加できます。

オプション:

  • テーブルが削除されないように保護するには、コマンドに --deletion-protection を追加します。この設定を適用しない場合、テーブルは削除できます。テーブルの削除を明示的に許可するには、--no-deletion-protection を追加します。

  • テーブルの変更ストリームを有効にするには、変更ストリーム データの保持期間を指定します。変更ストリームを有効にする前に、ストレージ コストの増加やアプリ プロファイルの使用要件など、その影響を把握しておく必要があります。詳細については、変更ストリームの概要をご覧ください。

    --change-stream-retention-period=RETENTION_PERIOD
    

    RETENTION_PERIOD は、Bigtable でテーブルの変更ストリーム データを保持する期間に置き換えます。期間は 1~7 日の範囲で指定する必要があります。使用できる単位は日(d)、時間(h)、分(m)、秒(s)です。例: 48h6d

  • Bigtable でテーブルの日次バックアップを作成できるようにするには、自動バックアップ(プレビュー)を有効にします。

    gcloud bigtable instances tables create TABLE_ID \
        --instance=INSTANCE_ID \
        --project=PROJECT_ID \
        --column-families=COLUMN-FAMILIES \
        --enable-automated-backup
    

cbt

次のコマンドを使用します。TABLE_NAME は、テーブルの名前に置き換えます。cbt CLI を使用して、変更ストリームを有効にしたテーブルを作成することはできません。

cbt createtable TABLE_ID

省略可: テーブルに集計列ファミリーを作成するには、列ファミリー名に集計タイプを追加します。以下の例では、ガベージ コレクション ポリシーが never である集計列ファミリーを作成します。

cbt createtable TABLE_ID families=FAMILY_NAME:never:TYPE

以下のように置き換えます。

  • TABLE_ID: 新しいテーブルの一意の ID
  • FAMILY_NAME: 列ファミリー名のカンマ区切りリスト。列ファミリーは後で追加できます。
  • TYPE: 集計タイプ。intsumintminintmax、または inthll にする必要があります。

その他のオプションについては、cbt CLI リファレンスのテーブルを作成するをご覧ください。

誤ってテーブルを削除した場合は、削除したテーブルを手動で作成しないでください。gcloud CLI コマンド bigtable instances tables undelete を使用してテーブルを復元してください。

省略可: 行キーでテーブルを分割する

パフォーマンスを最適化するため、Bigtable はテーブルを複数のノード間で継続的に分割し、各ノードに格納されるデータ量を均等に分散し、頻繁にアクセスされる行を可能な限り分散させます。この進行中の処理は自動的に行われます。

新しいテーブルを作成するときに、初期テーブル分割を指定できます。Bigtable は、指定された行キーでテーブルを分割します。キースペースが大きすぎる場合、Bigtable はテーブルをさらに分割します。初期分割は、テーブルの作成が完了してから約 24 時間維持されます。最初の分割が行われる行キーを 100 個まで指定できます。

たとえば、テーブルに多数の行を書き込む場合は、特定の行を指定してテーブルを事前分割することもできます。

テーブルの事前分割は必須の作業ではありませんが、テーブルの作成時に、負荷とデータのフットプリントが Bigtable のどこに配置される可能性があるのかがわかるので便利です。事前分割しておくと、Bigtable にデータが到着した際にテーブルを分割して負荷を一度にまとめてバランスよく再配分するという作業が必要なくなります。

コンソール

Google Cloud コンソールを使用してテーブルを作成する場合、行を事前に分割することはできません。

gcloud

行キーでテーブルを分割するには、次のコマンドを実行します。オプションの一覧は、gcloud bigtable instances tables create をご覧ください。

gcloud bigtable instances tables create TABLE_ID\
    --instance=INSTANCE_ID \
    --project=PROJECT_ID \
    --column-families=COLUMN-FAMILIES \
    --splits=SPLITS

以下のように置き換えます。

  • TABLE_ID: 新しいテーブルの一意の ID
  • INSTANCE_ID: インスタンスの ID
  • PROJECT_ID: 新しいテーブルを含むプロジェクト
  • COLUMN-FAMILIES: 列ファミリー名のカンマ区切りリスト。列ファミリーは後で追加できます。
  • SPLITS: テーブルを最初に分割する行キー(例: 10,20)。

cbt

行キーに基づいてテーブルを事前分割するには、次の構文を使用してテーブルを作成します。[TABLE_NAME] はテーブル名で置き換えます。[SPLITS] は、事前分割に使用する行キー接頭辞のカンマ区切りのリストに置き換えます。

```
cbt createtable [TABLE_NAME] splits=[SPLITS]
```

たとえば、10 または 20 で始まる行キーでテーブル my-table を事前分割する場合には、次のように指定します。

```
cbt createtable my-table splits=10,20
```

テーブル内の列ファミリーを変更する

既存のテーブルに列ファミリーを追加できます。テーブルで削除からの保護が有効になっていない場合、テーブル内の列ファミリーを削除できます。

列ファミリーを追加する

コンソール

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。

  4. 変更するテーブルの [ 編集] をクリックします。

  5. 追加する列ファミリーごとに、次の手順を行います。

    1. [Add column family] をクリックします。
    2. 列ファミリーの一意の識別子を指定します。
    3. 列ファミリーのガベージ コレクションを設定します。
    4. [完了] をクリックします。
    5. [保存] をクリックします。

gcloud

gcloud CLI を使用してテーブルに列ファミリーを追加することはできません。

cbt

列ファミリーを表に追加するには、次のコマンドを使用します。

cbt createfamily TABLE_ID FAMILY_NAME

たとえば、テーブル my-table に列ファミリー cf1cf2 を追加する場合には、次のように指定します。

cbt createfamily my-table cf1
cbt createfamily my-table cf2

省略可: テーブルに集計列ファミリーを追加するには、列ファミリー名に集計タイプを追加します。以下の例では、ガベージ コレクション ポリシーが never である集計列ファミリーを持つテーブルを作成します。

cbt createfamily TABLE_ID FAMILY_NAME:never:TYPE

以下のように置き換えます。

  • TABLE_ID: テーブル ID。
  • FAMILY_NAME: 列ファミリー名のカンマ区切りリスト。列ファミリーは後で追加できます。
  • TYPE: 集計タイプ。intsumintminintmax、または inthll にする必要があります。

列ファミリーの削除

削除からの保護が有効になっていないテーブル内の列ファミリーを削除できます。

コンソール

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。

  4. 変更するテーブルの [ 編集] をクリックします。

  5. 削除する列ファミリーごとに、次の手順を行います。

    1. 削除する列ファミリーの行にカーソルを合わせます。
    2. [] をクリックします。
  6. [保存] をクリックします。

  7. 列ファミリーの削除は取り消しができません。また、列ファミリーのデータがすべて削除されます。このことを確認するには、テキスト フィールドに「列ファミリーの削除」と入力します。

  8. [確認] をクリックします。

gcloud

gcloud CLI を使用してテーブルから列ファミリーを削除することはできません。

cbt

テーブルから列ファミリーを削除する場合は、[TABLE_NAME] をテーブル名に、[FAMILY_NAME] を列ファミリー名に置き換えて、次のコマンドを実行します。

cbt deletefamily [TABLE_NAME] [FAMILY_NAME]

たとえば、テーブル my-table から列ファミリー cf2 を削除する場合には、次のように指定します。

cbt deletefamily my-table cf2

テーブルのリストを表示する

コンソール

インスタンス内のテーブルのリストを表示するには:

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。

    • テーブル ID の横にある矢印をクリックして、テーブルの複製のリストを展開します。
    • テーブル名の横にある [指標の表示] をクリックして、テーブルのモニタリング データを表示します。

gcloud

テーブルのリストを表示するには、gcloud bigtable instances tables list コマンドを実行します。

gcloud bigtable instances tables list --instances=INSTANCE_IDS

以下のように置き換えます。

  • INSTANCE_IDS: インスタンス ID のカンマ区切りリスト

cbt

インスタンス内のテーブルのリストを表示するには、次のコマンドを実行します。

    cbt ls INSTANCE_ID

以下のように置き換えます。

  • INSTANCE_ID: インスタンスの永続的な識別子。

C++

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

namespace cbt = ::google::cloud::bigtable;
namespace cbta = ::google::cloud::bigtable_admin;
using ::google::cloud::StreamRange;
[](cbta::BigtableTableAdminClient admin, std::string const& project_id,
   std::string const& instance_id) {
  std::string instance_name = cbt::InstanceName(project_id, instance_id);

  google::bigtable::admin::v2::ListTablesRequest r;
  r.set_parent(instance_name);
  r.set_view(google::bigtable::admin::v2::Table::NAME_ONLY);

  StreamRange<google::bigtable::admin::v2::Table> tables =
      admin.ListTables(std::move(r));
  for (auto& table : tables) {
    if (!table) throw std::move(table).status();
    std::cout << table->name() << "\n";
  }
}

C#

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

// Lists tables in intance.
// Initialize request argument(s).
ListTablesRequest request = new ListTablesRequest
{
    ParentAsInstanceName = s_instanceName
};
try
{
    // Make the request.
    PagedEnumerable<ListTablesResponse, Table> response = bigtableTableAdminClient.ListTables(request);

}
catch (Exception ex)
{
    Console.WriteLine($"Error listing tables {ex.Message}");
}

Java

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

// Lists tables in the current instance.
try {
  List<String> tableIds = adminClient.listTables();
  for (String tableId : tableIds) {
    System.out.println(tableId);
  }
} catch (NotFoundException e) {
  System.err.println("Failed to list tables from a non-existent instance: " + e.getMessage());
}

Node.js

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

// List tables in current project
const [tables] = await instance.getTables();
tables.forEach(table => {
  console.log(table.id);
});

PHP

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

use Google\Cloud\Bigtable\Admin\V2\Client\BigtableInstanceAdminClient;
use Google\Cloud\Bigtable\Admin\V2\Client\BigtableTableAdminClient;
use Google\Cloud\Bigtable\Admin\V2\ListTablesRequest;

/**
 * List tables in an instance
 *
 * @param string $projectId The Google Cloud project ID
 * @param string $instanceId The ID of the Bigtable instance
 */
function list_tables(
    string $projectId,
    string $instanceId
): void {
    $instanceAdminClient = new BigtableInstanceAdminClient();
    $tableAdminClient = new BigtableTableAdminClient();

    $instanceName = $instanceAdminClient->instanceName($projectId, $instanceId);

    printf('Listing Tables:' . PHP_EOL);
    $listTablesRequest = (new ListTablesRequest())
        ->setParent($instanceName);
    $tables = $tableAdminClient->listTables($listTablesRequest)->iterateAllElements();
    $tables = iterator_to_array($tables);
    if (empty($tables)) {
        print('No table exists.' . PHP_EOL);
        return;
    }
    foreach ($tables as $table) {
        print($table->getName() . PHP_EOL);
    }
}

Python

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

tables = instance.list_tables()
print("Listing tables in current project...")
if tables != []:
    for tbl in tables:
        print(tbl.table_id)
else:
    print("No table exists in current project...")

Ruby

Bigtable 用のクライアント ライブラリをインストールして使用する方法については、Bigtable クライアント ライブラリをご覧ください。

Bigtable で認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

# instance_id = "my-instance"
bigtable.tables(instance_id).all.each do |t|
  puts "Table: #{t.name}"
end

テーブルに関する情報を表示する

コンソール

テーブルに関する情報を表示するには:

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。Google Cloud コンソールには、テーブルが保存されているクラスタ数、テーブルのステータス、ストレージの使用率、テーブルの現在のバックアップの ID がテーブルごとに表示されます。

  4. テーブルの列ファミリー名を表示するには、[] をクリックします。[テーブルの編集] ペインを閉じるには、[キャンセル] をクリックします。

  5. テーブルレベルの指標やレプリケーション状態など、テーブルの詳細を表示するには、テーブルの名前をクリックします。

gcloud

テーブルに関する情報を表示するには、gcloud bigtable instances tables describe コマンドを実行します。

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

以下のように置き換えます。

  • TABLE_ID: テーブルの一意の ID
  • INSTANCE_ID: インスタンスの ID

cbt

cbt CLI を使用して、テーブル内の既存の列ファミリーのリストを取得できます。

次のコマンドを使用します。[TABLE_NAME] はテーブル名で置き換えます。

cbt ls [TABLE_NAME]

ガベージ コレクション ポリシーを設定する

ガベージ コレクション ポリシーにより、保持するデータと削除対象のデータを Bigtable に指定します。ガベージ コレクション ポリシーは列ファミリー レベルで設定されます。これらは、テーブルの作成時またはそれ以降に設定できます。

列ファミリーを作成するときに、その列ファミリーのすべての列に含めるセル数を指定できます。この設定を指定しない場合、Bigtable は次のいずれかのデフォルト設定を使用します。

  • 列ファミリーの作成に Java 用 HBase クライアントか HBase shell を使用している場合、あるいは Java 用 HBase クライアントを使用する別のツールを使用している場合、Bigtable が列ファミリーの行 / 列の交差位置ごとに保持するセルは 1 つだけです。このデフォルトの設定は HBase と同じです。

  • Google Cloud コンソール、他のクライアント ライブラリ、または cbt CLI を使用して列ファミリーを作成した場合、Bigtable は各列で無限数のセルを保持します。

ガベージ コレクション ポリシーの表示、設定、更新方法の詳細については、ガベージ コレクション ポリシーを構成するをご覧ください。

テーブルのバックアップと復元を行う

テーブルをバックアップし、バックアップを新しいテーブルに復元する方法については、バックアップを管理するをご覧ください。

テーブルの作成時に自動バックアップを有効にした場合は、テーブルの自動バックアップ構成を変更して、自動バックアップを有効または無効にできます。また、保持期間をバックアップ作成日時から最大 90 日に変更することもできます。詳細については、自動バックアップを使用するをご覧ください。

変更ストリームの有効化、無効化、構成

次のタスクの手順については、変更ストリームを構成するをご覧ください。

  • 既存のテーブルで変更ストリームを有効にする
  • 変更ストリームを無効にする
  • 変更ストリームの保持期間を更新する

テーブルを削除する

テーブルを削除すると、テーブルの承認済みビューもすべて削除されます。テーブルの承認済みビューで削除保護が有効になっている場合は、テーブルを削除できません。

コンソール

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。

  4. 削除するテーブルの [] をクリックします。

  5. [削除] をクリックします。

  6. この操作でインスタンス内のすべてのクラスタからテーブルが削除され、テーブルの削除を取り消す期限があと 7 日間であることを確認するには、テキスト ボックスにテーブル ID を入力します。

  7. [削除] をクリックします。

gcloud

  1. テーブルを削除するには、gcloud bigtable instances tables delete コマンドを実行します。

    gcloud bigtable instances tables delete --instance=INSTANCE_ID
    

    以下のように置き換えます。

    • INSTANCE_ID: インスタンスの ID
  2. ターミナルで「y」と入力して、テーブルの削除を確定します。

cbt

テーブルを削除するには、[TABLE_NAME] をテーブル名に置き換えて次のコマンドを実行します。

cbt deletetable [TABLE_NAME]

テーブルの削除を取り消す

誤ってテーブルを削除した場合は、gcloud CLI コマンド bigtable instances tables undelete を使用して、テーブルの削除を取り消すことができます(テーブルを復元できます)。 これを行う場合は、その前に削除したテーブルを手動で作成しないでください。

テーブルの削除を取り消すには、ターミナルで次のコマンドを実行します。

gcloud bigtable instances tables undelete TABLE_ID --instance=INSTANCE_ID

以下のように置き換えます。

  • TABLE_ID: テーブルの一意の識別子
  • INSTANCE_ID: インスタンスの ID

次の制限が適用されます。

  • テーブルの削除取り消しは、テーブル削除後、約 7 日間行えます。
  • Google Cloud コンソール、Cloud Bigtable クライアント ライブラリ、cbt CLI を使用してテーブルの削除を取り消すことはできません。
  • 削除されたインスタンスからテーブルの削除を取り消すことはできません。
  • CMEK が有効になっているテーブルの削除を取り消すことはできません。
  • テーブルの削除前にテーブルに適用されていた詳細な IAM ポリシー バインディングは、テーブルの削除を取り消しても復元されません。

必要に応じて、監査ログundelete オペレーションのステータスを確認できます。

削除からの保護を変更する

テーブルに対する削除からの保護を有効または無効にするには、roles/bigtable.admin などの bigtable.tables.update 権限を含むロールのプリンシパルである必要があります。削除からの保護は、テーブル、テーブル内のすべての列ファミリー、テーブルを含むインスタンスの削除を防ぎます。

テーブルの削除保護を有効にすることによって、テーブルの承認済みビューでの削除保護は有効にはなりません。同様に、テーブルの削除からの保護を無効にしても、テーブルの承認済みビューの削除からの保護は無効になりません。テーブルの承認済みビューを個別に更新する必要があります。

コンソール

  1. Google Cloud コンソールで Bigtable インスタンスのリストを開きます。

    インスタンスのリストを開く

  2. テーブルを表示するインスタンスをクリックします。

  3. 左ペインで [テーブル] をクリックします。

    [テーブル] ページに、インスタンス内のテーブルのリストが表示されます。

  4. テーブル ID の横にある をクリックします。

  5. 削除からの保護を有効にするには、[削除を防止する] をクリックします。削除からの保護を無効にするには、[削除を有効にする] をクリックします。有効なオプションのみが表示されます。

gcloud

テーブルに対する削除からの保護を有効にするには、gcloud bigtable instances table update コマンドを実行します。

gcloud bigtable instances tables update TABLE_ID \
    --instance=INSTANCE_ID \
    --deletion-protection

テーブルに対する削除からの保護を無効にするには、次のコマンドを実行します。

gcloud bigtable instances tables update TABLE_ID \
    --instance=INSTANCE_ID \
    --no-deletion-protection

以下のように置き換えます。

+ TABLE_ID: the unique identifier for the table
+ INSTANCE_ID: the ID of the instance

cbt

cbt CLI を使用して削除からの保護を有効または無効にすることはできません。