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

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 権限も必要です。

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

パラメータ化されたビューは、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 パラメータを表示または操作できなくなり、明確な論理分離が実現します。

次のステップ