EXPLAIN¶
指定された SQL ステートメントの論理的実行プランを返します。
説明プランは、Snowflakeがクエリを実行するために実施する操作(テーブルスキャンや結合など)を表示します。
- こちらもご参照ください。
SYSTEM$EXPLAIN_PLAN_JSON 、 SYSTEM$EXPLAIN_JSON_TO_TEXT 、 EXPLAIN_JSON
構文¶
EXPLAIN [ USING { TABULAR | JSON | TEXT } ] <statement>
パラメーター¶
statement
これは、実行計画を作成したいSQLステートメントです。
USING output_format
このオプションの句は、出力形式を指定します。可能な出力形式は次のとおりです。
JSON: JSON出力はテーブルとクエリに保存するのが簡単です。
TABULAR: 通常、人にとって読みやすい出力形式はJSONよりも表形式です。
TEXT:通常、人にとって読みやすい出力形式は JSON よりもフォーマットされたテキストです。
デフォルトは TABULAR です。
出力¶
出力には次の情報が含まれます。
列 |
説明 |
---|---|
|
ほとんどのクエリには単一のステップが含まれていますが、複数の別個のステップとして実行されるステップもあります。この列は、操作が属するステップを示します。 |
|
クエリプランの各操作に割り当てられた一意の識別子。 |
|
操作の親ノード向け識別子の配列。クエリプロファイルでは親が、親と子を接続するリンクと子の上に表示されます。 |
|
操作の名前。例:結果、フィルター、 TableScan、結合など |
|
テーブルスキャン操作によって参照されるオブジェクトの名前(テーブル、マテリアライズドビュー、セキュアビューなど)。 |
|
クエリでオブジェクトにエイリアスが与えられている場合、参照されるオブジェクトのエイリアス。 |
|
フィルター、結合述語、投影、集計など、現在の操作に関連する式のリスト。 |
|
参照されるデータベースオブジェクト内のマイクロパーティションの総数。 |
|
コンパイル時のプルーニング後に残される参照オブジェクトからのパーティションの数、つまりクエリによってスキャンされる可能性のあるパーティションの数。 |
|
assignedPartitionsに含まれるバイト数。 |
使用上の注意¶
EXPLAIN SQL ステートメントをコンパイルしますが、実行はしません。したがって、 EXPLAIN は実行中のウェアハウスを必要としません。
EXPLAIN は計算クレジットを消費しませんが、クエリのコンパイルは、他のメタデータ操作と同様に、クラウドサービスクレジットを消費します。
このコマンドの出力を後処理するには、次の手順に従います。
このコマンドの出力を後処理するには、 RESULT_SCAN 関数を使用できます。この関数は、出力をクエリ可能なテーブルとして扱います。
出力を JSON 形式で生成し、後で分析するために JSON 形式の出力をテーブルに挿入します。出力を JSON 形式で保存する場合は、関数 SYSTEM$EXPLAIN_JSON_TO_TEXT または EXPLAIN_JSON を使用して、 JSON をより読みやすい形式(表形式または書式付きテキスト)に変換できます。
assignedPartitionsおよびassignedBytesの値は、クエリ実行の上限推定値です。結合プルーニングなどのランタイム最適化により、クエリ実行中にスキャンされるパーティションとバイトの数を減らすことができます。
EXPLAIN プランは、「論理的な」説明プランです。実行される操作と、相互の論理的な関係性を示します。プラン内における操作の実際の実行順序は、プランで示される論理的な順序と必ずしも一致しません。
EXPLAIN ステートメントのいずれかのデータベースオブジェクトが INFORMATION_SCHEMA オブジェクトである場合、ステートメントはエラー
EXPLAIN command has insufficient privilege on object <objName>
で失敗します。
例¶
この例は、小さなテーブル2つに対する単純なクエリの EXPLAIN 出力を示しています。
テーブルを作成します。
CREATE TABLE Z1 (ID INTEGER); CREATE TABLE Z2 (ID INTEGER); CREATE TABLE Z3 (ID INTEGER);クエリの EXPLAIN プランを表形式で生成します。
EXPLAIN USING TABULAR SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID; +------+------+-----------------+-------------+------------------------------+-------+--------------------------+-----------------+--------------------+---------------+ | step | id | parentOperators | operation | objects | alias | expressions | partitionsTotal | partitionsAssigned | bytesAssigned | |------+------+-----------------+-------------+------------------------------+-------+--------------------------+-----------------+--------------------+---------------| | NULL | NULL | NULL | GlobalStats | NULL | NULL | NULL | 2 | 2 | 1024 | | 1 | 0 | NULL | Result | NULL | NULL | Z1.ID, Z2.ID | NULL | NULL | NULL | | 1 | 1 | [0] | InnerJoin | NULL | NULL | joinKey: (Z2.ID = Z1.ID) | NULL | NULL | NULL | | 1 | 2 | [1] | TableScan | TESTDB.TEMPORARY_DOC_TEST.Z2 | NULL | ID | 1 | 1 | 512 | | 1 | 3 | [1] | JoinFilter | NULL | NULL | joinKey: (Z2.ID = Z1.ID) | NULL | NULL | NULL | | 1 | 4 | [3] | TableScan | TESTDB.TEMPORARY_DOC_TEST.Z1 | NULL | ID | 1 | 1 | 512 | +------+------+-----------------+-------------+------------------------------+-------+--------------------------+-----------------+--------------------+---------------+クエリの EXPLAIN プランをフォーマットされたテキストとして生成します。
EXPLAIN USING TEXT SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID; +------------------------------------------------------------------------------------------------------------------------------------+ | content | |------------------------------------------------------------------------------------------------------------------------------------| | GlobalStats: | | partitionsTotal=2 | | partitionsAssigned=2 | | bytesAssigned=1024 | | Operations: | | 1:0 ->Result Z1.ID, Z2.ID | | 1:1 ->InnerJoin joinKey: (Z2.ID = Z1.ID) | | 1:2 ->TableScan TESTDB.TEMPORARY_DOC_TEST.Z2 ID {partitionsTotal=1, partitionsAssigned=1, bytesAssigned=512} | | 1:3 ->JoinFilter joinKey: (Z2.ID = Z1.ID) | | 1:4 ->TableScan TESTDB.TEMPORARY_DOC_TEST.Z1 ID {partitionsTotal=1, partitionsAssigned=1, bytesAssigned=512} | | | +------------------------------------------------------------------------------------------------------------------------------------+クエリの EXPLAIN プランを JSON として生成します。
EXPLAIN USING JSON SELECT Z1.ID, Z2.ID FROM Z1, Z2 WHERE Z2.ID = Z1.ID; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | content | |---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | {"GlobalStats":{"partitionsTotal":2,"partitionsAssigned":2,"bytesAssigned":1024},"Operations":[[{"id":0,"operation":"Result","expressions":["Z1.ID","Z2.ID"]},{"id":1,"parentOperators":[0],"operation":"InnerJoin","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":2,"parentOperators":[1],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z2"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512},{"id":3,"parentOperators":[1],"operation":"JoinFilter","expressions":["joinKey: (Z2.ID = Z1.ID)"]},{"id":4,"parentOperators":[3],"operation":"TableScan","objects":["TESTDB.TEMPORARY_DOC_TEST.Z1"],"expressions":["ID"],"partitionsAssigned":1,"partitionsTotal":1,"bytesAssigned":512}]]} | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+