【Snowflake】Snowflake ~ TABLE(RESULT_SCAN(LAST_QUERY_ID())) ~

◾️はじめに

小ネタ。

 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