DOCUMENTATION
/
はじめるにあたり
ガイド
開発者
参照情報
リリース
チュートリアル
Snowflake Open Catalog
ステータス
  1. 概要
    • Snowflake Horizon カタログ
      • Applications and tools for connecting to Snowflake
      • 仮想ウェアハウス
      • データベース、テーブル、およびビュー
      • データ型
        • データのロード
        • 動的テーブル
        • ストリームおよびタスク
        • データのアンロード
        • クエリ
            1. 結合
            2. サブクエリ
              • 階層データのクエリ
                • 共通テーブル式(CTE)
                  • 半構造化データのクエリ
                    • 全文検索を使用する
                      • 実行時に SQL を構築する
                        • 時系列データの分析
                          • ウィンドウ関数を使ったデータ分析
                            • 一致認識
                              • シーケンス
                                • 永続的なクエリ結果
                                  • 個別カウント
                                  • 類似度推定
                                    • 頻度推定
                                      • パーセンタイル値の推定
                                        • クエリ履歴でクエリのアクティビティをモニターする
                                          • クエリハッシュ
                                            • Top-K pruning
                                              • ステートメントをキャンセルする
                                            • コラボレーション
                                            • Snowflake AI & ML
                                            • アラートおよび通知
                                            • セキュリティ
                                            • データガバナンス
                                            • プライバシー
                                            • 組織およびアカウント
                                            • Business continuity & data recovery
                                            • パフォーマンスの最適化
                                            • コストと請求
                                            ガイドクエリクエリハッシュ

                                            クエリハッシュの使用による、クエリ内のパターンと傾向の識別¶

                                            クエリ履歴にある類似クエリを識別、グループ化、分析するには、クエリテキストのハッシュを使用できます。たとえば、次が可能です。

                                            • クエリハッシュによってクエリをグループ化し、コストのかさむクエリのパターンを識別します。

                                            • パフォーマンス改善(例: クラスタリングキーの変更)が、繰り返されるクエリに及ぼす影響を判断します。

                                            次のビューとテーブル関数では、 query_hash 列と query_parameterized_hash 列を使用してクエリテキストのハッシュを取得できます。

                                            • ACCOUNT_USAGE ビュー(1年間保持)

                                              • QUERY_HISTORY ビュー

                                              • QUERY_ACCELERATION_ELIGIBLE ビュー

                                              • TASK_HISTORY ビュー

                                            • INFORMATION_SCHEMA テーブル関数(7日間保持)

                                              • QUERY_HISTORY テーブル関数

                                              • TASK_HISTORY テーブル関数

                                            このハッシュを使用して、繰り返されるクエリを分析することができます。

                                            クエリのハッシュの使用(query_hash)¶

                                            query_hash 列には、 SQL ステートメントの正規化されたテキストに基づいて計算されたハッシュ値が格納されています。まったく同じクエリテキストを持つ繰り返されるクエリには、同じ query_hash 値があります。

                                            繰り返されるクエリは、クエリテキストが以下のみで異なる場合でも、同じ query_hash になります。

                                            • 大文字と小文字を区別しない識別子、セッション変数、ステージ名

                                              バインド変数で IDENTIFIER()を使用して指定された識別子は含まれないことに注意してください。異なる値を持つバインド変数は、異なるクエリハッシュを生成します。

                                            • 空白

                                            • コメント

                                            2つのクエリのクエリテキストでこれら以外の部分が異なる場合、それらのクエリは異なる query_hash 値を持ちます。

                                            たとえば、以下のクエリはまったく同じクエリテキストを持つため、同じ query_hash 値を持ちます。

                                            SELECT * FROM table1 WHERE table1.name = 'TIM'
                                            
                                            Copy
                                            SELECT * FROM table1 WHERE table1.name = 'TIM'
                                            
                                            Copy

                                            query_hash 値を使用すると、他の方法では明確にならないクエリパフォーマンスのパターンを見つけることができます。たとえば、クエリは1回の実行では過剰にコストがかからないかもしれませんが、頻繁に繰り返されるクエリでは、実行回数に応じてコストが上昇する可能性があります。 query_hash 値を使用すると、最初に最適化に注力するクエリを特定できます。

                                            たとえば、以下のクエリは、 query_hash 値を使用して、上位100個の長く実行されるクエリのクエリ IDs を識別子としています。

                                            SELECT
                                                query_hash,
                                                COUNT(*),
                                                SUM(total_elapsed_time),
                                                ANY_VALUE(query_id)
                                              FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
                                              WHERE warehouse_name = 'MY_WAREHOUSE'
                                                AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 7
                                              GROUP BY query_hash
                                              ORDER BY SUM(total_elapsed_time) DESC
                                              LIMIT 100;
                                            
                                            Copy

                                            パラメーター化されたクエリのハッシュの使用(query_parameterized_hash)¶

                                            query_parameterized_hash には、パラメーター化されたクエリに基づいて計算されたハッシュ値が含まれます。これは、リテラルがパラメーター化された後のクエリのバージョンを意味します。これらのリテラルは、クエリ述語の中で使用する必要があり、以下の 比較演算子 のうちの1つと合わせて使用する必要があります。

                                            • = (等しい)

                                            • != (等しくない)

                                            • >= (より大か等しい)

                                            • <= (より小か等しい)

                                            繰り返されるクエリ(異なるパラメーター値の場合を含む)は、同じ query_parameterized_hash 値を持ちます。

                                            繰り返されるクエリは、クエリテキストが以下のみで異なる場合でも、同じ query_parameterized_hash になります。

                                            • 大文字と小文字を区別しない識別子、セッション変数、ステージ名

                                              バインド変数で IDENTIFIER()を使用して指定された識別子は含まれないことに注意してください。異なる値を持つバインド変数は、異なるクエリハッシュを生成します。

                                            • 空白

                                            • コメント

                                            同じ query_hash 値を持つクエリは、同じ query_parameterized_hash 値を持ちますが、その逆はありません。

                                            たとえば、以下のクエリは、リテラル値がクエリ間の唯一の違いであるため、同じ query_parameterized_hash 値になります。

                                            SELECT * FROM table1 WHERE table1.name = 'TIM'
                                            
                                            Copy
                                            SELECT * FROM table1 WHERE table1.name = 'AIHUA'
                                            
                                            Copy

                                            query_hash 値の場合と同様に、 query_parameterized_hash 値を使用すると、他の方法では明確にならないクエリパフォーマンスのパターンを見つけることができます。

                                            以下のステートメントは、特定の query_parameterized_hash 値(cbd58379a88c37ed6cc0ecfebb053b03)を持つすべてのクエリについて、毎日の平均 total_elapsed_time を計算します。

                                            SELECT
                                                DATE_TRUNC('day', start_time),
                                                SUM(total_elapsed_time),
                                                ANY_VALUE(query_id)
                                              FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
                                              WHERE query_parameterized_hash = 'cbd58379a88c37ed6cc0ecfebb053b03'
                                                AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 30
                                              GROUP BY DATE_TRUNC('day', start_time);
                                            
                                            Copy

                                            ハッシュ生成に使用されたバージョンの確認¶

                                            時間の経過とともに、クエリハッシュを生成するためにSnowflakeが使用するロジックが変更される可能性があります。このロジックを変更すると、同じクエリに対して異なるハッシュが生成される可能性があります。たとえば、あるクエリに対して、ロジックのバージョン1が生成したハッシュと、ロジックのバージョン2が生成したハッシュでは異なる可能性があります。

                                            query_hash と query_parameterized_hash の列を含むビューおよびテーブル関数の出力には、ハッシュの生成に使用されたロジックのバージョンを指定する以下の列も含まれます。

                                            • query_hash_version

                                            • query_parameterized_hash_version

                                            これらの列のバージョン番号は NUMBER (例: ロジックの最初のバージョンは 1、ロジックの2番目のバージョンは 2 など)です。

                                            これらの列に異なる期間の異なるバージョン番号が含まれている場合は、これらのバージョン列を使用して同じクエリの異なるハッシュを識別することができます。例:

                                            ...
                                            WHERE (query_hash = 'hash_from_v1' AND query_hash_version = 1)
                                              OR (query_hash = 'hash_from_v2' AND query_hash_version = 2)
                                            
                                            Copy

                                            このページは役に立ちましたか?

                                            Snowflakeに移動する
                                            会話に参加する
                                            Snowflakeで開発する
                                            フィードバックを共有する
                                            ブログでの最新情報を表示する
                                            独自の認定を取得する
                                            プライバシー通知サイト規約© 2025 Snowflake, Inc. All Rights Reserved.
                                            1. クエリのハッシュの使用(query_hash)
                                            2. パラメーター化されたクエリのハッシュの使用(query_parameterized_hash)
                                            3. ハッシュ生成に使用されたバージョンの確認
                                            言語: 日本語
                                            • English
                                            • Français
                                            • Deutsch
                                            • 日本語
                                            • 한국어
                                            • Português