Snowflake

Snowflake Query Acceleration Service (QAS) 完全ガイド: SCALE_FACTOR設計とコスト最適化

2026-03-26
更新: 2026-03-27
NicheeLab編集部

Query Acceleration Service(QAS)は、大量データのスキャン後にフィルタリング・集約で出力が大幅に絞られるクエリに対して、 Snowflakeが自動的にサーバーレスのコンピュートリソースを追加割り当てして実行時間を短縮する機能です。 ウェアハウス単位で有効化し、Enterprise Edition以上で利用可能です。

QASの仕組み

QASが有効なウェアハウスでクエリが実行されると、Snowflakeはクエリプランを分析し、 スキャン→フィルタリング→集約の処理パターンを検出します。 適用可能と判断されたクエリに対して、ウェアハウスのクラスタとは別にサーバーレスのコンピュートノードが一時的に割り当てられ、 スキャン処理が並列化されます。

QASはクエリの実行形態を変更するのではなく、スキャン部分のリソースを増やして ボトルネックを解消するアプローチです。 そのため、既にスキャン量が少ないクエリや出力行が入力とほぼ同じクエリには効果がありません。

QASの有効化SQL

QASはウェアハウス単位で有効化します。ENABLE_QUERY_ACCELERATIONをTRUEに設定し、 QUERY_ACCELERATION_MAX_SCALE_FACTORでリソース上限を指定します。

-- QASを有効化(SCALE_FACTOR = 8)
ALTER WAREHOUSE analytics_wh SET
  ENABLE_QUERY_ACCELERATION = TRUE
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = 8;

-- SCALE_FACTORを変更
ALTER WAREHOUSE analytics_wh SET
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = 4;

-- QASを無効化
ALTER WAREHOUSE analytics_wh SET
  ENABLE_QUERY_ACCELERATION = FALSE;

-- ウェアハウスの設定確認
SHOW WAREHOUSES LIKE 'ANALYTICS_WH';

SCALE_FACTORの設計

QUERY_ACCELERATION_MAX_SCALE_FACTORはQASが使用できるサーバーレスリソースの上限を制御するパラメータです。 ウェアハウスサイズのN倍までのリソースを使用可能にします。

SCALE_FACTOR意味推奨ケース
0上限なし(無制限)コスト上限を別途管理できる場合
1〜4ウェアハウスの1〜4倍までコスト重視、効果を限定的に使いたい場合
8(デフォルト)ウェアハウスの8倍までバランスの取れた設定
16〜100大規模な並列化を許容分析クエリが多く性能重視の場合

QAS適用クエリの判断

すべてのクエリにQASが適用されるわけではありません。 QASが効果的なクエリと効果がないクエリの違いを理解することが重要です。

クエリ特性QAS効果理由
大量スキャン → 少量出力(集約/フィルタ)高いスキャン並列化の効果大
GROUP BY + SUM/COUNT/AVG高いスキャン→集約パターンに合致
ORDER BY ... LIMIT N高い大量スキャン→少量結果
LIKE '%keyword%' 検索中程度スキャン量が多い場合に有効
SELECT *(フルスキャン・全行返却)なし出力が入力とほぼ同量
INSERT / UPDATE / DELETEなしDMLは対象外
少量データのSELECTなし元々高速なため効果なし

加速効果の事前見積もり

特定のクエリIDに対してQASの効果を事前に見積もるにはSYSTEM$ESTIMATE_QUERY_ACCELERATION関数を使用します。

-- 特定クエリの加速効果を見積もり
SELECT PARSE_JSON(
  SYSTEM$ESTIMATE_QUERY_ACCELERATION('01abc123-0001-0002-0003-00000000abcd')
) AS estimate;

-- 結果例:
-- {
--   "estimatedQueryTimes": {
--     "1":  120,   -- SCALE_FACTOR=1 での推定時間(秒)
--     "2":  75,
--     "4":  50,
--     "8":  35,
--     "16": 30
--   },
--   "originalQueryTime": 180,
--   "status": "eligible",
--   "upperLimitScaleFactor": 16
-- }

-- QASが適用されたクエリの履歴
SELECT
  QUERY_ID,
  QUERY_ACCELERATION_BYTES_SCANNED,
  QUERY_ACCELERATION_PARTITIONS_SCANNED,
  QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE QUERY_ACCELERATION_BYTES_SCANNED > 0
  AND START_TIME >= DATEADD('DAY', -7, CURRENT_TIMESTAMP())
ORDER BY QUERY_ACCELERATION_BYTES_SCANNED DESC;

コストモデル

QASのコストはサーバーレスクレジットとして課金されます。 ウェアハウスの通常クレジットとは別枠で、QASが実際にリソースを割り当てたクエリの分のみ発生します。

-- QASのクレジット消費履歴
SELECT
  START_TIME,
  END_TIME,
  WAREHOUSE_NAME,
  CREDITS_USED,
  NUM_FILES_SCANNED,
  NUM_BYTES_SCANNED
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE START_TIME >= DATEADD('DAY', -30, CURRENT_TIMESTAMP())
ORDER BY CREDITS_USED DESC;

-- ウェアハウス別のQASコスト集計
SELECT
  WAREHOUSE_NAME,
  SUM(CREDITS_USED) AS total_qas_credits,
  COUNT(*) AS accelerated_queries
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
WHERE START_TIME >= DATEADD('DAY', -30, CURRENT_TIMESTAMP())
GROUP BY WAREHOUSE_NAME
ORDER BY total_qas_credits DESC;

マルチクラスタウェアハウスとの使い分け

QASとマルチクラスタウェアハウスは異なる課題を解決します。

  • QAS: 単一の重いクエリのスキャン部分を並列化して高速化する。 クエリの「深さ」の問題を解決
  • マルチクラスタ: 同時実行クエリ数が多くキュー待ちが発生する問題を解決する。 クエリの「幅」の問題を解決

QUEUED_OVERLOAD_TIMEが大きい場合はマルチクラスタ化を、 個々のクエリのTOTAL_ELAPSED_TIMEが長くスキャン量が多い場合はQASを検討します。

試験で問われるポイント

  • QASはウェアハウス単位で有効化し、ENABLE_QUERY_ACCELERATION = TRUEで設定
  • SCALE_FACTORのデフォルト値は8、0は上限なし
  • 効果があるクエリ:大量スキャン→少量出力(集約/フィルタ)パターン
  • 効果がないクエリ:SELECT *、DML、少量データのクエリ
  • SYSTEM$ESTIMATE_QUERY_ACCELERATION関数で事前見積もりが可能
  • Enterprise Edition以上が必要

問題で確認

SnowPro

問題 1

アナリストが大規模なファクトテーブル(50億行)に対するGROUP BY集計クエリの実行に15分以上かかると報告しています。ウェアハウスはXLARGEで同時実行は1クエリのみです。実行時間を短縮するための最も適切なアクションはどれですか?

  1. マルチクラスタウェアハウスを有効にしてMIN_CLUSTER_COUNT = 3に設定する
  2. ALTER WAREHOUSE SET ENABLE_QUERY_ACCELERATION = TRUE を実行してQASを有効化する
  3. ウェアハウスをSMALLにリサイズしてクラスタ数を増やす
  4. Resource Monitorを設定して実行時間を制限する

正解: B

単一の重いGROUP BY集計クエリが大量のデータをスキャンして集約するパターンは、QASの適用対象として最適です。マルチクラスタは同時実行のキュー待ち解消が目的であり、1クエリしか実行していないこのケースでは効果がありません。Resource Monitorはコスト制限であり性能改善にはなりません。

よくある質問

Query Acceleration ServiceのSCALE_FACTORはどの値を設定すべきですか?

SCALE_FACTORは1〜100の整数を指定し、ウェアハウスサイズの何倍までQASにサーバーレスリソースを割り当てるかの上限を制御します。デフォルトは8です。値が大きいほど並列処理に多くのリソースを投入できますが、コスト上限も高くなります。まず4〜8程度で開始し、QUERY_ACCELERATION_HISTORYでクレジット消費を確認しながら調整するのが推奨です。0を指定すると上限なし(無制限)になります。

QASはどのようなクエリに効果がありますか?

大量のデータをスキャンしたあとにフィルタリングや集約で出力行が大幅に絞られるクエリに最も効果的です。具体的には、大規模テーブルに対するSELECT COUNT/SUM/AVG、GROUP BY、DISTINCT、LIKE検索、ORDER BY ... LIMITなどが該当します。逆に、フルスキャンした結果をほぼそのまま返すクエリ(SELECT *)やDMLには効果がありません。

QASを有効にすると既存のすべてのクエリが自動的に加速されますか?

いいえ。QASはクエリ実行時に自動的に適用対象かを判定し、効果が見込めるクエリにのみサーバーレスリソースを割り当てます。SYSTEM$ESTIMATE_QUERY_ACCELERATION関数で特定のクエリIDに対する加速効果を事前に見積もることもできます。すべてのクエリに適用されるわけではないため、コストは効果のあるクエリ分のみ発生します。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate完全解説|入門試験の攻略

SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.