パラメータ化されたビューを作成して管理する
Bigtable の論理ビューからパラメータ化されたビューを作成し、パラメータ化されたビューに対してオペレーションを実行できます。
このページを読む前に、パラメータ化されたビューの概要を理解しておいてください。
始める前に
Google Cloud CLI を使用する場合は、次の操作を行います。
-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
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 ステートメントによって定義される仮想テーブルです。
コンソール
Google Cloud コンソールで、Bigtable インスタンスのリストを開きます。
リストからインスタンスを選択します。
ナビゲーション パネルで [Bigtable Studio] をクリックします。
[ 新しいタブ メニュー] をクリックして新しいタブを開き、[エディタ] を選択します。
クエリエディタで 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 の場合は、「有効」というメッセージが表示されます。
省略可: ステートメントを SQL スタイルでフォーマットするには、[フォーマット] をクリックします。
[保存] をクリックし、[論理ビューとして保存] を選択します。
[論理ビューを保存] ダイアログで、ビューの名前を入力し、[保存] をクリックします。
ビューが [エクスプローラ] ペインの [論理ビュー] リストに、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 フィールドでフィルタするビューを作成します。
コンソール
Bigtable Studio で、クエリエディタを開き、行キー セグメントでフィルタする SQL クエリを入力します。
SELECT * FROM TABLE_ID WHERE user_id = CAST(VIEW_PARAMETERS('user_id') AS BYTES)TABLE_IDは、ソーステーブルの ID に置き換えます。[保存] をクリックし、[論理ビューとして保存] を選択します。
[論理ビューを保存] ダイアログで、ビューの名前を入力し、[保存] をクリックします。
ビューは、[エクスプローラ] ペインの [論理ビュー] リストに、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。
パラメータ化されたビューを更新する
パラメータ化されたビューは、論理ビューを更新する場合と同じ方法で更新します。
パラメータ化されたビューを削除する
パラメータ化されたビューは、論理ビューを削除する場合と同じ方法で削除します。
パラメータ化されたビューに関する情報を表示する
パラメータ化されたビューのリストは、インスタンスの論理ビューのリストを表示する場合と同じ方法で表示します。
コンソール
Google Cloud コンソールで、Bigtable インスタンスのリストを開きます。
リストからインスタンスを選択します。
ナビゲーション パネルで [Bigtable Studio] をクリックします。
[エクスプローラ] ペインで、[論理ビュー] を開きます。
パラメータ化されたビューは、標準の論理ビューと区別するための variable_add パラメータ化されたビュー アイコンとともにリストに表示されます。
インスタンスに 10 個を超えるビューがある場合は、[もっと見る] をクリックして次の 10 個を読み込みます。
gcloud
インスタンスの論理ビューのリストを表示するには、gcloud bigtable logical-views list コマンドを使用します。
gcloud bigtable logical-views list --instance=INSTANCE
INSTANCE は、インスタンス ID に置き換えます。
パラメータ化されたビューに対するクエリを実行する
パラメータ化されたビューのクエリは通常のテーブルと同様に行いますが、リクエストで view_parameters マップを指定します。
コンソール
Google Cloud コンソールで、Bigtable インスタンスのリストを開きます。
リストからインスタンスを選択します。
ナビゲーション パネルで [Bigtable Studio] をクリックします。
[エクスプローラ] ペインで、[論理ビュー] を開きます。
クエリするパラメータ化されたビューの横にある more_vert [アクションを表示] メニューをクリックし、[ビューをクエリ] をクリックします。
[パラメータ] ペインが開き、ビュー パラメータ名が事前入力されます。
[パラメータを表示] で、必要な各パラメータのランタイム値を [値] フィールドに入力します。
パラメータ値は文字列として渡されます。ビュー定義のパラメータが別の型(整数やバイトなど)にキャストされている場合は、未加工の文字列値を入力します。
省略可: パラメータを追加するには、[パラメータを追加] をクリックし、パラメータ名と値を入力します。パラメータ名はビュー パラメータ内で一意である必要があります。
[保存] をクリックします。
クエリエディタで [実行] をクリックします。
クエリの結果が [結果] テーブルに表示されます。
必要なビュー パラメータを指定せずにクエリを実行すると、結果セクションにエラー メッセージが表示され、[パラメータを編集] ボタンが表示されます。[パラメータを編集] をクリックして [パラメータ] ペインを開き、不足しているパラメータ値を入力します。
パラメータ値は、クエリ エディタのタブごとに構成されます。セッション中に 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 パラメータを表示または操作できなくなり、明確な論理分離が実現します。