Java の Hello World

このコードサンプルは、Java 用 Bigtable クライアント ライブラリを使用した、Java で記述された「Hello World」アプリケーションです。このサンプルでは、次のタスクを行う方法を説明します。

  • 認証の設定
  • Bigtable インスタンスに接続する
  • 新しいテーブルを作成する
  • テーブルにデータを書き込む
  • そのデータを読み取る
  • テーブルを削除する

サンプルの実行

このコードは、Google Cloud Java 用クライアント ライブラリの Bigtable クライアント ライブラリを使用して Bigtable と通信します。

始める前に、リファレンス ドキュメントに記載されている設定手順を行ってください。

Bigtable での Cloud クライアント ライブラリの使用

このサンプル アプリケーションは Bigtable に接続して、いくつかの基本的なオペレーションを行います。

Bigtable への接続

開始するには、データ API クライアント ライブラリとの通信に使用するデータ クライアントと、管理 API クライアント ライブラリとの通信に使用するテーブル管理クライアントが必要です。

まず、hello world アプリケーションが使用するプロジェクト ID とインスタンス ID を含む BigtableDataSettings オブジェクトをインスタンス化します。次に、BigtableDataClient.create() メソッドにその設定を渡してデータ クライアントを作成します。

同様に、管理クライアントの場合は、まず BigtableTableAdminSettings オブジェクトを作成して設定を行い、その設定を使用して BigtableTableAdminClient オブジェクトを作成します。

Bigtable を使用するときは、常にクライアントを一度作成し、それをアプリケーション全体で再利用することをおすすめします。

// Creates the settings to configure a bigtable data client.
BigtableDataSettings settings =
    BigtableDataSettings.newBuilder().setProjectId(projectId).setInstanceId(instanceId).build();

// Creates a bigtable data client.
dataClient = BigtableDataClient.create(settings);

// Creates a bigtable table admin client.
adminClient = BigtableTableAdminClientV2.create();

テーブルの作成

テーブルを作成するには、CreateTableRequest オブジェクトを作成し、それを管理クライアントの createTable() メソッドに渡します。

// Checks if table exists, creates table if does not exist.
boolean exists = false;
try {
  adminClient.getTable(
      GetTableRequest.newBuilder()
          .setName("projects/" + projectId + "/instances/" + instanceId + "/tables/" + tableId)
          .setView(Table.View.NAME_ONLY)
          .build());
  exists = true;
} catch (NotFoundException e) {
  // ignore
}
if (!exists) {
  System.out.println("Creating table: " + tableId);
  String parent = "projects/" + projectId + "/instances/" + instanceId;
  CreateTableRequest request =
      CreateTableRequest.newBuilder()
          .setParent(parent)
          .setTableId(tableId)
          .setTable(
              Table.newBuilder()
                  .putColumnFamilies(COLUMN_FAMILY, ColumnFamily.getDefaultInstance())
                  .build())
          .build();
  adminClient.createTable(request);
  System.out.printf("Table %s created successfully%n", tableId);
}

テーブルへの行の書き込み

テーブルに書き込むデータのソースとして使用するために、3 つの文言を含む greetings[] 文字列配列を作成します。配列をループ処理します。ループ イテレーションを繰り返す中で、RowMutation オブジェクトを作成し、setCell() メソッドを使用してエントリをミューテーションに追加します。

try {
  System.out.println("\nWriting some greetings to the table");
  String[] names = {"World", "Bigtable", "Java"};
  for (int i = 0; i < names.length; i++) {
    String greeting = "Hello " + names[i] + "!";
    RowMutation rowMutation =
        RowMutation.create(TableId.of(tableId), ROW_KEY_PREFIX + i)
            .setCell(COLUMN_FAMILY, COLUMN_QUALIFIER_NAME, names[i])
            .setCell(COLUMN_FAMILY, COLUMN_QUALIFIER_GREETING, greeting);
    dataClient.mutateRow(rowMutation);
    System.out.println(greeting);
  }
} catch (NotFoundException e) {
  System.err.println("Failed to write to non-existent table: " + e.getMessage());
}

行キーによる行の読み取り

データ クライアントの readRow() メソッドを使用して、最初に書き込んだ行を読み取ります。

try {
  System.out.println("\nReading a single row by row key");
  Row row = dataClient.readRow(TableId.of(tableId), ROW_KEY_PREFIX +