BigQuery の高度なランタイムを使用する

このドキュメントでは、BigQuery の高度なランタイムを有効または無効にする方法と、クエリ パフォーマンスに対する高度なランタイムの影響を評価する方法について説明します。

ロールと権限

構成設定を指定するために必要な権限を取得するには、プロジェクトまたは組織に対する BigQuery 管理者roles/bigquery.admin)IAM ロールの付与を管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

機能

BigQuery プロジェクトで高度なランタイムを有効にすると、クエリ レイテンシとスロット消費量を削減するクエリ プロセッサの機能が追加費用なしで有効になります。

拡張ベクトル化

ベクトル化された実行は、CPU キャッシュ サイズに合わせたブロック単位でデータの列を処理し、単一命令複数データ(SIMD)方式の命令を使用するクエリ処理モデルです。強化されたベクトル化により、BigQuery のベクトル化されたクエリ実行がクエリ処理の次の側面に拡張されます。

  • Capacitor ストレージ形式内の特殊なデータ エンコードを活用することで、エンコードされたデータに対してフィルタ評価オペレーションを実行できます。
  • 特殊なエンコードはクエリプランを通じて伝播されるため、エンコードされた状態のままより多くのデータを処理できます。
  • BigQuery は、式フォールディングを実装して決定論的関数と定数式を評価することで、複雑な述語を定数値に簡略化できます。

短いクエリの最適化

通常、BigQuery はシャッフル中間レイヤを使用して、分散環境でクエリを実行します。短いクエリの最適化では、単一ステージで実行できるクエリを動的に特定し、レイテンシとスロット消費量を削減します。クエリが単一のステージで実行される場合、特殊なエンコードをより効果的に使用できます。これらの最適化は、ジョブの起動、メンテナンス、結果の取得のレイテンシを最小限に抑えるオプション ジョブ作成モードで使用すると最も効果的です。

短いクエリの最適化の対象となるかどうかは動的に決まり、次の要因の影響を受けます。

  • データスキャンの予測サイズ。
  • 必要なデータ移動の量。
  • クエリフィルタの選択性。
  • ストレージ内のデータの種類と物理的なレイアウト
  • クエリの全体的な構造
  • 過去のクエリ実行の履歴統計情報

高度なランタイムを有効にする

プロジェクトまたは組織の高度なランタイムを有効にするには、ALTER PROJECT または ALTER ORGANIZATION ステートメントを使用して、デフォルト構成を変更します。ステートメントで、query_runtime 引数を 'advanced' に設定します。例:

ALTER PROJECT PROJECT_NAME
SET OPTIONS (
  `region-LOCATION.query_runtime` = 'advanced'
);

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

  • PROJECT_NAME: プロジェクトの名前
  • LOCATION: プロジェクトのロケーション

変更が有効になるまで数分かかることがあります。

高度なランタイムを有効にすると、クエリジョブを作成したユーザーに関係なく、プロジェクトまたは組織内の対象となるクエリで高度なランタイムが使用されます。

高度なランタイムを無効にする

プロジェクトまたは組織の高度なランタイムを無効にするには、ALTER PROJECT ステートメントまたは ALTER ORGANIZATION ステートメントを使用して、デフォルト構成を変更します。ステートメントで、query_runtime 引数を NULL に設定します。例:

ALTER PROJECT PROJECT_NAME
SET OPTIONS (
  `region-LOCATION.query_runtime` = NULL
);

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

  • PROJECT_NAME: プロジェクトの名前
  • LOCATION: プロジェクトのロケーション

変更が有効になるまで数分かかることがあります。

クエリのパフォーマンスを評価する

管理ジョブ エクスプローラINFORMATION_SCHEMA ビューを使用すると、高度なランタイムがクエリ実行時間とスロット使用量に与える影響を評価できます。

高度なランタイムを有効にした場合と有効にしていない場合でクエリのパフォーマンスを評価する手順は次のとおりです。

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

    [BigQuery] に移動

  2. クエリエディタで新しいタブを開きます。

  3. そのクエリタブのキャッシュに保存されたクエリ結果の使用を無効にします

  4. テストクエリをクエリタブに入力またはコピーします。

  5. テストクエリを数回実行して、ベースライン パフォーマンスを確立します。実行ごとに、次のようにクエリ パフォーマンス指標を決定します。

    1. 管理ジョブ エクスプローラでクエリ実行の詳細を表示します。
    2. 新しいクエリタブで次のクエリを実行して、INFORMATION_SCHEMA.JOBS_BY_USER ビューからジョブのパフォーマンス データを取得します。

      SELECT
          job_id,
          end_time - start_time AS duration,
          total_slot_ms,
          query
      FROM
        `region-us`.INFORMATION_SCHEMA.JOBS_BY_USER
      WHERE
          creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
          AND job_type='QUERY'
          AND total_slot_ms IS NOT NULL
      ORDER BY
          creation_time DESC,
          query ASC
      LIMIT 1000;
      
  6. 高度なランタイムを有効にします

  7. 手順 5 を繰り返します。

  8. 高度なランタイムを有効にする前後のテストクエリのクエリ レイテンシとスロット使用率の指標を比較します。