Query Acceleration Service(QAS)は、大量データのスキャン後にフィルタリング・集約で出力が大幅に絞られるクエリに対して、 Snowflakeが自動的にサーバーレスのコンピュートリソースを追加割り当てして実行時間を短縮する機能です。 ウェアハウス単位で有効化し、Enterprise Edition以上で利用可能です。
QASが有効なウェアハウスでクエリが実行されると、Snowflakeはクエリプランを分析し、 スキャン→フィルタリング→集約の処理パターンを検出します。 適用可能と判断されたクエリに対して、ウェアハウスのクラスタとは別にサーバーレスのコンピュートノードが一時的に割り当てられ、 スキャン処理が並列化されます。
QASはクエリの実行形態を変更するのではなく、スキャン部分のリソースを増やして ボトルネックを解消するアプローチです。 そのため、既にスキャン量が少ないクエリや出力行が入力とほぼ同じクエリには効果がありません。
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';QUERY_ACCELERATION_MAX_SCALE_FACTORはQASが使用できるサーバーレスリソースの上限を制御するパラメータです。 ウェアハウスサイズのN倍までのリソースを使用可能にします。
| SCALE_FACTOR | 意味 | 推奨ケース |
|---|---|---|
| 0 | 上限なし(無制限) | コスト上限を別途管理できる場合 |
| 1〜4 | ウェアハウスの1〜4倍まで | コスト重視、効果を限定的に使いたい場合 |
| 8(デフォルト) | ウェアハウスの8倍まで | バランスの取れた設定 |
| 16〜100 | 大規模な並列化を許容 | 分析クエリが多く性能重視の場合 |
すべてのクエリに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とマルチクラスタウェアハウスは異なる課題を解決します。
QUEUED_OVERLOAD_TIMEが大きい場合はマルチクラスタ化を、 個々のクエリのTOTAL_ELAPSED_TIMEが長くスキャン量が多い場合はQASを検討します。
SnowPro
問題 1
アナリストが大規模なファクトテーブル(50億行)に対するGROUP BY集計クエリの実行に15分以上かかると報告しています。ウェアハウスはXLARGEで同時実行は1クエリのみです。実行時間を短縮するための最も適切なアクションはどれですか?
正解: 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に対する加速効果を事前に見積もることもできます。すべてのクエリに適用されるわけではないため、コストは効果のあるクエリ分のみ発生します。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...