Snowflakeにおいてクレジットを使用しないクエリを試してみた

2021.03.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!DA(データアナリティクス)事業本部 インテグレーション部の大高です。

Snowflakeでクエリを実行すると、通常はウェアハウスが起動し、ウェアハウスを利用した分だけクレジットが使用されて課金対象となります。一方で、クエリによってはウェアハウスを利用せず、クレジットを使用しないクエリもあります。

今回はそんなクエリを改めてまとめてみました。

SHOW コマンド

まずはSHOWコマンドです。SHOWコマンドには、SHOW DATABASESSHOW ROLESなどの多くのコマンドがありますが、いずれもウェアハウスの起動を必要としません。また、LIKE句を利用してフィルタリングすることもできます。

検証

クエリとその実行結果プロファイルです。

SHOW DATABASES LIKE 'OOTAKA%';

Metadata operationとなっており、すべてメタデータだけでの処理なのでクレジットは消費していません。

MIN / MAX 関数

つぎはMINMAX関数です。値のMIN/MAXもSnowflakeの内部でメタデータとして保存されていますので、ウェアハウスの起動は不要となります。

検証

クエリとその実行結果プロファイルです。

SELECT MIN(C_CUSTKEY) FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER;
SELECT MAX(C_CUSTKEY) FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER;

こちらはMINのクエリプロファイルですが、MAXも同様です。METADATA-BASED RESULTになっていますね。

COUNT 関数

COUNT関数です。MIN/MAXと同様にレコードのカウント数もメタデータとして保存されていますので、ウェアハウスの起動は不要です。

検証

クエリとその実行結果プロファイルです。

SELECT COUNT(C_CUSTKEY) FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER;

MINMAXのクエリプロファイルと同様にMETADATA-BASED RESULTになっています。

一方で、以下のようにGROUP BYで集約するようなクエリの場合はウェアハウスの起動が必要なので注意が必要です。

SELECT COUNT(C_CUSTKEY) FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.CUSTOMER
GROUP BY C_CUSTKEY;

CREATE TABLE ... LIKE ..., DROP TABLE

CREATE TABLE ... LIKE ...DROP TABLEもウェアハウスの利用は不要です。試してみましょう。

検証

クエリとその実行結果プロファイルです。

CREATE TABLE REGION LIKE SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION;
DROP TABLE REGION;

こちらはCREATE TABLE ... LIKE ...のクエリプロファイルですが、DROP TABLEも同様です。コンピュートを利用しないクエリとなります。

一方でCREATE TABLE ... AS SELECT ...(CTAS)の場合には、ウェアハウスの起動が必要となります。

まとめ

以上、Snowflakeにおいてクレジットを使用しないクエリを試してみました。

今回検証したクエリは、Snowflakeの処理レイヤにおけるクラウドサービスレイヤーのみを利用するクエリであったため、ウェアハウスを利用する必要がなく、また、高速に動作するクエリとなっています。

自分自身の知識の整理として、改めて実際に試しつつまとめてみました。

どなたかのお役に立てば幸いです。それでは!