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

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

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

始める前に

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

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

  2. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 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 権限も必要です。

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

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

コンソール

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

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

  2. リストからインスタンスを選択します。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. [ 新しいタブ メニュー] をクリックして新しいタブを開き、[エディタ] を選択します。

  5. クエリエディタで SQL クエリを作成します。クエリ定義では、VIEW_PARAMETERS() 関数を呼び出して 1 つ以上のビュー パラメータを指定する必要があります。次に例を示します。

    SELECT *
    FROM TABLE_ID
    WHERE STARTS_WITH(_key, CAST(VIEW_PARAMETERS('PARAM_NAME') AS BYTES))
    

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

    • TABLE_ID: ソーステーブルの ID。
    • PARAM_NAME: VIEW_PARAMETERS() 関数に引数として渡すビュー パラメータの名前(単一引用符で囲みます)。これはパラメータ名を定義するものであり、ランタイム値を定義するものではありません。パラメータ化されたビューをクエリするときに、ランタイム値を指定します。

    クエリが有効な SQL の場合は、「有効」というメッセージが表示されます。

  6. 省略可: ステートメントを SQL スタイルでフォーマットするには、[フォーマット] をクリックします。

  7. [保存] をクリックし、[論理ビューとして保存] を選択します。

  8. [論理ビューを保存] ダイアログで、ビューの名前を入力し、[保存] をクリックします。

    ビューが [エクスプローラ] ペインの [論理ビュー] リストに、variable_add パラメータ化されたビュー アイコンとともに表示されます。

    クエリ エディタの使用の詳細については、Bigtable Studio を使用してデータを管理するをご覧ください。

gcloud

パラメータ化されたビューを作成するには、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('PARAM_NAME') AS BYTES))"

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

  • VIEW: 新しいパラメータ化されたビューの ID。最大 128 文字です。ID は、インスタンス内のテーブル ID とビュー ID の間で一意である必要があります。
  • INSTANCE: パラメータ化ビューを作成するインスタンスの ID。
  • TABLE_ID: ソーステーブルの ID。
  • PARAM_NAME: 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 フィールドでフィルタするビューを作成します。

コンソール

  1. Bigtable Studio で、クエリエディタを開き、行キー セグメントでフィルタする SQL クエリを入力します。

    SELECT *
    FROM TABLE_ID
    WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)
    

    TABLE_ID は、ソーステーブルの ID に置き換えます。

  2. [保存] をクリックし、[論理ビューとして保存] を選択します。

  3. [論理ビューを保存] ダイアログで、ビューの名前を入力し、[保存] をクリックします。

    ビューは、[エクスプローラ] ペインの [論理ビュー] リストに、variable_add パラメータ化されたビュー アイコンとともに表示されます。

gcloud

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

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

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

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

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

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

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

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

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

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

コンソール

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

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

  2. リストからインスタンスを選択します。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. [エクスプローラ] ペインで、[論理ビュー] を開きます。

    パラメータ化されたビューは、標準の論理ビューと区別するための variable_add パラメータ化されたビュー アイコンとともにリストに表示されます。

  5. インスタンスに 10 個を超えるビューがある場合は、[もっと見る] をクリックして次の 10 個を読み込みます。

gcloud

インスタンスの論理ビューのリストを表示するには、gcloud bigtable logical-views list コマンドを使用します。

gcloud bigtable logical-views list --instance=INSTANCE

INSTANCE は、インスタンス ID に置き換えます。

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

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

コンソール

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

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

  2. リストからインスタンスを選択します。

  3. ナビゲーション パネルで [Bigtable Studio] をクリックします。

  4. [エクスプローラ] ペインで、[論理ビュー] を開きます。

  5. クエリするパラメータ化されたビューの横にある more_vert [アクションを表示] メニューをクリックし、[ビューをクエリ] をクリックします。

    [パラメータ] ペインが開き、ビュー パラメータ名が事前入力されます。

  6. [パラメータを表示] で、必要な各パラメータのランタイム値を [] フィールドに入力します。

    パラメータ値は文字列として渡されます。ビュー定義のパラメータが別の型(整数やバイトなど)にキャストされている場合は、未加工の文字列値を入力します。

  7. 省略可: パラメータを追加するには、[パラメータを追加] をクリックし、パラメータ名と値を入力します。パラメータ名はビュー パラメータ内で一意である必要があります。

  8. [保存] をクリックします。

  9. クエリエディタで [実行] をクリックします。

    クエリの結果が [結果] テーブルに表示されます。

    必要なビュー パラメータを指定せずにクエリを実行すると、結果セクションにエラー メッセージが表示され、[パラメータを編集] ボタンが表示されます。[パラメータを編集] をクリックして [パラメータ] ペインを開き、不足しているパラメータ値を入力します。

パラメータ値は、クエリ エディタのタブごとに構成されます。セッション中に Bigtable Studio から移動して戻ると、開いているタブ、クエリ、結果、構成されたパラメータが保持されます。

Java

次の例は、ユーザー 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 パラメータを表示または操作できなくなり、明確な論理分離が実現します。

次のステップ