◾️はじめに
小ネタ。 Snowflakeの SELECT ... FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) について学んだので、メモっておく。 知っておくと、Snowflakeでのエビデンスや調査のTipsとして役立ちそう。
目次
【1】SELECT ... FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) 【2】各関数の説明 1)TABLE関数 2)RESULT_SCAN関数 3)LAST_QUERY_ID関数 【3】サンプル 例:SHOW TABLESコマンドとの併用
【1】SELECT ... FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
* 前回の結果に対してさらにSELECTを実施できる * 「前回の結果」は、SELECTだけでなく、SHOWコマンドに対しても可能 => これにより、SHOWコマンドでは単体では行えない細かいコントロールが可能
SQLイメージ
-- SHOWコマンド実行 SHOW ...; -- SELECT ... TABLE(RESULT_SCAN(LAST_QUERY_ID())) で -- 欲しい結果のみを抽出や並び替えが可能 SELECT ... FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE ... ORDER BY ...;
【2】各関数の説明
1)TABLE関数
* テーブル(オブジェクト)として返してくれる関数(くらいに思っている)
https://docs.snowflake.com/ja/sql-reference/functions-table
より抜粋 ~~~~~~ テーブル関数は、入力行ごとに行のセットを返します。 返されるセットには、0行、1行、またはそれ以上の行を含めることができます。 各行には、1つ以上の列を含めることができます。 テーブル関数は、「表形式関数」と呼ばれることがあります。 ~~~~~~
2)RESULT_SCAN関数
* 引数のクエリIDの結果を結果セットとして返す => この結果セットをテーブル関数の引数にして、テーブルとして出力するイメージ
構文
RESULT_SCAN ( { '<query_id>' | <query_index> | LAST_QUERY_ID() } )
https://docs.snowflake.com/ja/sql-reference/functions/result_scan
より抜粋 ~~~~~~ 結果がテーブルであるかのように、 以前のコマンドの結果セット(クエリを実行した24時間以内)を返します。 これは、次のいずれかからの出力を処理する場合に特に便利です。 * SHOW または、実行した DESC[RIBE] コマンド。 * Snowflake Information Schema または Account Usage などのメタデータ またはアカウントの使用情報で実行したクエリ。 * 呼び出した ストアドプロシージャの結果。 RESULT_SCAN を使用する代わりに、 SELECT ステートメントの FROM 句 で、 表形式データを返すストアドプロシージャを呼び出すことができます。 ~~~~~~
3)LAST_QUERY_ID関数
* 現在のセッションの最終クエリIDを返却する関数
https://docs.snowflake.com/ja/sql-reference/functions/last_query_id
より抜粋 ~~~~~~ 現在のセッションで指定されたクエリの ID を返します。 クエリが指定されていない場合、最後に実行されたクエリが返されます。 ~~~~~~
【3】サンプル
例:SHOW TABLESコマンドとの併用
https://docs.snowflake.com/ja/sql-reference/sql/show-tables
-- SHOW TABLESコマンド SHOW TABLES; -- 実行 SELECT * FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE created_on BETWEEN '2025-04-01 00:00:00.000' AND '2025-04-04 23:59:59.000' ORDER BY created_on DESC;
参考文献
https://dev.classmethod.jp/articles/snowflake-result-scan/
関連記事
Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world ~
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / データ型 ~
https://dk521123.hatenablog.com/entry/2021/12/16/095524
Snowflake ~ 基本編 / キャスト ~
https://dk521123.hatenablog.com/entry/2021/12/15/162658
Snowflake ~ 日時関連 ~
https://dk521123.hatenablog.com/entry/2022/06/17/113003
Snowflake ~ 日時関連 / 日時取得関数 ~
https://dk521123.hatenablog.com/entry/2022/09/02/092144
Snowflake ~ Timezone ~
https://dk521123.hatenablog.com/entry/2024/10/10/002436
Snowflake ~ 文字列操作関連 ~
https://dk521123.hatenablog.com/entry/2022/10/01/000000
Snowflake ~ QUERY_HISTORY ビュー ~
https://dk521123.hatenablog.com/entry/2024/10/09/155708
Streamlit in Snowflake ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/12/12/214557