クラスタ化テーブルを管理する

このドキュメントでは、BigQuery のクラスタ化テーブルに関する情報を取得し、アクセスを制御する方法について説明します。

詳しくは以下をご覧ください。

始める前に

テーブルに関する情報を取得するには、bigquery.tables.get 権限が必要です。次の事前定義済みの IAM ロールには bigquery.tables.get 権限が含まれています。

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

また、bigquery.datasets.create 権限を持つユーザーがデータセットを作成すると、そのデータセットに対する bigquery.dataOwner アクセス権がユーザーに付与されます。bigquery.dataOwner アクセス権により、データセットのテーブルに関する情報の取得が許可されます。

BigQuery での IAM のロールと権限について詳しくは、事前定義ロールと権限をご覧ください。

クラスタ化テーブルへのアクセスを制御する

テーブルとビューへのアクセスを構成するには、エンティティに次のレベルで IAM ロールを付与します。以下に、各レベルを許可されるリソースの範囲が大きい順に一覧で示します。

  • プロジェクト レベル、フォルダレベル、組織レベルなど、Google Cloud リソース階層の上位レベル
  • データセット レベル
  • テーブルまたはビューレベル

次の方法で、テーブル内のデータアクセスを制限することもできます。

IAM で保護されているリソースを使用したアクセスは追加型です。たとえば、エンティティにプロジェクトなどの上位レベルのアクセス権がない場合は、データセット レベルでアクセス権を付与すると、データセット内のテーブルとビューにアクセスできます。同様に、エンティティに高レベルまたはデータセット レベルでのアクセス権がない場合は、テーブルレベルまたはビューレベルでエンティティにアクセス権を付与できます。

プロジェクト レべル、フォルダレベル、組織レベルなど、Google Cloudリソース階層の上位レベルで IAM ロールを付与すると、エンティティは幅広いリソースのセットにアクセスできるようになります。たとえば、プロジェクト レベルでエンティティにロールを付与すると、そのエンティティには、プロジェクトに含まれるすべてのデータセットに適用される権限が付与されます。

データセット レベルでロールを付与すると、そのエンティティが上位レベルでアクセスできない場合でも、そのデータセットのテーブルとビューで実行できるオペレーションが指定されます。データセット レベルのアクセス制御を構成する方法については、データセットへのアクセスの制御をご覧ください。

テーブルまたはビューレベルでロールを付与すると、エンティティに上位レベルのアクセスがない場合でも、特定のテーブルやビューに対してエンティティが実行できるオペレーションが特定されます。テーブルレベルのアクセス制御の構成については、テーブルおよびビューへのアクセスの制御をご覧ください。

また、IAM カスタムロールを作成することもできます。カスタムロールを作成する場合、エンティティに実行を許可する特定のオペレーションによって、付与する権限は異なります。

IAM で保護されているリソースに「拒否」権限を設定することはできません。

ロールと権限の詳細については、IAM のドキュメント内のロールについてと BigQuery の IAM のロールと権限をご覧ください。

クラスタ化テーブルに関する情報を取得する

次のオプションのいずれかを選択します。

コンソール

  1. Google Cloud コンソールで、[リソース] ペインに移動します。

  2. データセット名をクリックして展開し、表示するテーブル名をクリックします。

  3. [詳細] をクリックします。

    クラスタリング列を含むテーブルの詳細が表示されます。

    テーブルの詳細。

SQL

クラスタ化テーブルの場合、INFORMATION_SCHEMA.COLUMNS ビューCLUSTERING_ORDINAL_POSITION 列をクエリして、テーブルのクラスタリング列内の列の 1 から始まるオフセットを検索できます。

  1. Google Cloud コンソールで、[BigQuery] ページに移動します。

    [BigQuery] に移動

  2. クエリエディタで次のステートメントを入力します。

    CREATE TABLE mydataset.data (column1 INT64, column2 INT64)
    CLUSTER BY column1, column2;
    SELECT
      column_name, clustering_ordinal_position
    FROM
      mydataset.INFORMATION_SCHEMA.COLUMNS;

  3. [実行] をクリックします。

クエリの実行方法については、インタラクティブ クエリを実行するをご覧ください。

クラスタリングの順序位置は、column1 の場合は 1、column2 の場合は 2 です。テーブルに関するその他のメタデータは INFORMATION_SCHEMATABLESTABLE_OPTIONSCOLUMNSCOLUMN_FIELD_PATH の各ビューで取得できます。

bq

すべてのテーブル情報を表示するには、bq show コマンドを発行します。テーブルのスキーマ情報のみを表示するには、--schema フラグを使用します。--format フラグを使用して出力を制御できます。

デフォルト以外のプロジェクトにあるテーブルの情報を取得する場合は、project_id:dataset の形式でプロジェクト ID をデータセットに追加します。

bq show \
    --schema \
    --format=prettyjson \
    PROJECT_ID:DATASET.TABLE

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

  • PROJECT_ID: プロジェクト ID
  • DATASET: データセットの名前。
  • TABLE: テーブルの名前。

例:

次のコマンドを入力して、mydataset にある myclusteredtable に関するすべての情報を表示します。mydataset はデフォルトのプロジェクトにあります。

bq show --format=prettyjson mydataset.myclusteredtable

出力は次のようになります。

{
  "clustering": {
    "fields": [
      "customer_id"
    ]
  },
...
}

API

bigquery.tables.get メソッドを呼び出し、関連パラメータを指定します。

データセット内のクラスタ化テーブルを一覧表示する

クラスタ化テーブルを一覧表示するために必要な権限と、それらを一覧表示する手順は、標準テーブルの場合と同じです。詳細については、データセット内のテーブルの一覧表示をご覧ください。

クラスタリング仕様を変更する

テーブルのクラスタリング仕様の変更や削除を行うことができます。また、クラスタ化テーブル内のクラスタ化列のセットを変更することもできます。クラスタリング列セットを更新するこの方法は、継続的ストリーミング挿入を使用するテーブルに対して有効です。これらのテーブルは他の方法では簡単に入れ替えできません。

パーティション分割されていないテーブルまたはパーティション分割テーブルに新しいクラスタリング仕様を適用する手順は次のとおりです。

  1. bq ツールで、新しいクラスタリングと一致するようにテーブルのクラスタリング仕様を更新します。

     bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE 

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

    • CLUSTER_COLUMN: クラスタリングする列(例: mycolumn
    • DATASET: テーブルを含むデータセットの名前(例: mydataset
    • ORIGINAL_TABLE: 元のテーブルの名前(例: mytable

    tables.update または tables.patch の API メソッドを呼び出して、クラスタリング仕様を変更することもできます。

  2. 新しいクラスタリング仕様に従ってすべての行をクラスタ化するには、次の UPDATE ステートメントを実行します。

    UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true

次のステップ