パラメータ化されたビューを作成して管理する

Bigtable の論理ビューからパラメータ化されたビューを作成し、パラメータ化されたビューに対してオペレーションを実行できます。

このページを読む前に、 パラメータ化されたビューの概要を理解しておいてください。

始める前に

Google Cloud CLI を使用する場合は、次の手順を行います。

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

  2. フェデレーション ID(連携 ID)を使用するように gcloud CLI を構成します。

    詳細については、連携 ID を使用して gcloud CLI にログインするをご覧ください。

  3. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init

必要なロール

パラメータ化されたビューの作成と管理に必要な権限を取得するには、インスタンスに対する Bigtable 管理者(roles/bigtable.admin)ロールを付与するよう管理者に依頼してください。

または、インスタンス レベルで次の権限をリクエストすることもできます。

  • 作成: bigtable.logicalViews.create
  • 更新: bigtable.logicalViews.update
  • 削除: bigtable.logicalViews.delete
  • リスト: bigtable.logicalViews.list

パラメータ化されたビューを作成するには、ソーステーブルに対する bigtable.tables.readRows 権限も必要です。

パラメータ化されたビューを作成する

パラメータ化されたビューは、SQL SELECT ステートメントによって定義される仮想テーブルです。このステートメントには VIEW_PARAMETERS() 関数を含めることができます。

パラメータ化されたビューを作成するには、 gcloud bigtable logical-views create コマンドを使用します。

gcloud bigtable logical-views create VIEW \
  --instance=INSTANCE \
  --query="SELECT * FROM TABLE_ID WHERE STARTS_WITH(_key, CAST(VIEW_PARAMETERS('VIEW_PARAMETERS') AS BYTES))"

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

  • VIEW: 新しいパラメータ化されたビューの ID(最大 128 文字)。ID は、インスタンス内のテーブル ID とビュー ID の間で一意である必要があります。
  • INSTANCE: パラメータ化されたビューを作成するインスタンスの ID。
  • TABLE_ID: ソーステーブルの ID。
  • VIEW_PARAMETERS: VIEW_PARAMETERS() 関数に引数として渡す、ビューのパラメータの名前(一重引用符で囲みます) 。

オプション:

  • パラメータ化されたビューが削除されないようにするには、コマンドに --deletion-protection フラグを追加します。この設定を適用しない場合、ビューは削除される可能性があります。--no-deletion-protection を追加して、ビューの削除を明示的に許可することもできます。詳細については、このドキュメントの パラメータ化されたビューを更新するをご覧ください。

構造化された行キーを使用してパラメータ化されたビューを作成する

テーブルで構造化された行キーを使用している場合は、 行キーの特定のセグメントでフィルタできます。

たとえば、購入履歴テーブルの行キーに、ユーザー、購入日のタイムスタンプ、注文 ID が # 記号で区切られて保存されている場合は、次のように行スキーマを指定できます。

field {
    field_name: "user_id"
    type: { bytesType { encoding { raw {} } } }
  }
  field {
    field_name: "reversed_timestamp"
    type: { timestampType { encoding { unixMicrosInt64 { encoding: {           orderedCodeBytes: {} } } } } }
  }
  field {
    field_name: "order_id"
    type: { stringType { encoding { utf8Bytes {} } } }
  }
  encoding {
    delimitedBytes { delimiter "#" }
  }

次に、ユーザー ID フィールドでフィルタするビューを作成できます。

gcloud bigtable logical-views create VIEW \
    --instance=INSTANCE \
    --query="SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)"

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

  • VIEW: 新しい パラメータ化されたビューの ID(最大 128 文字)。ID は、インスタンス内のテーブル ID とビュー ID の間で一意である必要があります。
  • INSTANCE: パラメータ化されたビューを作成するインスタンスの ID。
  • TABLE_ID: ソーステーブルの ID。

パラメータ化されたビューを更新する

パラメータ化されたビューは、論理ビューを更新するのと同じ方法で 更新します

パラメータ化されたビューを削除する

パラメータ化されたビューは、論理ビューを削除するのと同じ方法で 削除します

パラメータ化されたビューに関する情報を表示する

パラメータ化されたビューのリストは、 インスタンスの論理ビューのリストを表示するのと同じ方法で表示します。

パラメータ化されたビューに対するクエリを実行する

パラメータ化されたビューに対するクエリは、通常のテーブルと同様に実行しますが、リクエストで view_parameters マップを指定します。

次の例は、ユーザー ID に基づいてデータをフィルタする purchase_history_pv という名前のパラメータ化されたビューに対してクエリを実行する方法を示しています。

// Assumes 'purchase_history_pv' was created with the definition:
// SELECT * FROM purchases WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)

String query = "SELECT customer_info[email], order_details[status], order_info[items] from purchase_history_pv";
PreparedStatement preparedStatement = dataClient.prepareStatement(query);
BoundStatement boundStatement = preparedStatement.bind().build();

// The user ID is now passed out-of-band in a view parameters map.
Map<String, Value> viewParameters = new HashMap<>();
viewParameters.put("user_id", Value.newBuilder().setType(stringType()).setStringValue(userId).build());

// Execute the query, passing the view parameters using a proto field in the request.
ResultSet rs = dataClient.executeQuery(
    boundStatement,
    viewParameters
);

これにより、ユーザーはクエリ自体の中で user_id パラメータを表示または操作できなくなり、明確な論理分離が実現します。

次のステップ