0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SnowflakeAdvent Calendar 2022

Day 11

【Snowflake】(小ネタ)クエリやコマンドの結果に対してクエリを投げる

Last updated at Posted at 2022-12-10

はじめに

Snowfakeに数多ある便利機能でお気に入りのものを紹介していこうと思います。
今回はクエリやコマンドの結果に対してのクエリ実行です。
他のDBにはなかなかない機能かなと思います。覚えておくと地味に便利です。

概要

Snowflakeではクエリの結果やコマンドの結果に対してさらにクエリを投げて結果の絞り込みや編集をすることができる。

クエリの結果にクエリを投げる

まずは適当にクエリを投げる

SELECT * FROM INFORMATION_SCHEMA.TABLES;

image.png

上記の結果に対してさらにSELECTを実行しようと思います。
前回のquery_idの結果セットを呼び出してそれに対するSELECTを行うため、
FROM句にFROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))と指定して
SELECTを行います。LAST_QUERY_ID()の部分はquery_id指定でも構いません。

-- 前回の結果に対してさらにSELECTを実施
SELECT * 
  FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()))
 WHERE TABLE_OWNER IS NOT NULL;

image.png

イメージをつかんでいただくために簡単なSQLを2回に分けて実行した感じになりましたがここからが応用です。

コマンドの結果にクエリを投げる

通常SQLでは取得ができないもの、例えばパラメータ一覧の結果を出力し、その結果からさらにデフォルトから変更されたパラメータに絞り込む、というのをやってみます。

まずはパラメータ一覧を出力

-- アカウントレベルのパラメータ一覧の表示
SHOW PARAMETERS IN ACCOUNT;

image.png
その後、さらにアカウントレベルかつdefaultから変更されたパラメータに絞り込む
(showコマンドの結果はヘッダが小文字なので項目指定の場合は「"」で囲む必要があります。)

-- アカウントレベルのパラメータかつdefaultから変更されたパラメータを表示
SELECT * 
  FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) 
 WHERE "value" <> "default"  -- デフォルトから変更されているもの
   AND "level" = 'ACCOUNT';  -- アカウントレベルのパラメータ

image.png
私のアカウントではタイムゾーン(TIMEZONE)とタイムトラベル期間(DATA_RETENTION_IN_DAYS)をデフォルトから変更していたので想定の通りの結果となりました。

おわりに

これを利用すれば上記のようにコマンドの結果の絞り込みやCOPY文の結果をサマリした結果を指定テーブルに保存するなど、SQLだけでは実現できなかったことも一部できるようになるので頭の片隅においておけばいつか幸せになれるときが来るかもしれません。どこかの誰かのお役に立つ日が来ればうれしいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?