データ統合基盤 CS アナリティクスで Snowflake へのSQLクエリ実行時にUSEコマンドを利用してみた

2020.09.25

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

以前にこちらのエントリで、弊社プロダクトのカスタマーストーリー アナリティクス(Customer Story Analytics:CSA)で「SQLクエリをSnowflakeに対して実行する機能」についてご紹介しました。

こちらのエントリでは単純な「SELECT-INSERT」のSQLについてご紹介しましたが、実際のSQL実行では特定の「ロール」、「ウェアハウス」、「データベース」、「スキーマ」を指定してクエリを実行したい場合があるかと思います。

今回はそんな時に利用できる「USE」コマンドを利用したSQLクエリの実行を、実際に試してみました。

「CSA」の概要についてはこちらの記事をご参照ください。

また、「CSA JMC」バージョン5.0の概要については、こちらの記事で紹介しています。

CSA JMCの挙動確認バージョン

当エントリの内容は以下のCSA JMCバージョンで挙動を確認しています。

  • CSA JMC v5.0.0

Snowflakeの「USE」コマンドとは?

Snowflakeの「USE」コマンドを利用すると、現在のセッションで利用する「ロール」、「ウェアハウス」、「データベース」、「スキーマ」を指定することができます。

例えば「このクエリの実行には少し負荷がかかるので、大きめのサイズのウェアハウスを利用したい」などのケースにおいては、「USE WAREHOUSE」コマンドを利用することにより、大きめのサイズの「ウェアハウス」を指定してクエリを実行することができます。

USE WAREHOUSE LARGE_SIZE_WH;

前提

「CSA JMC」における「Snowflake接続設定」は以下のように設定しています。

また、ユーザに割り当てられているロールCSAは独自に作成したカスタムロールですが、今回の検証のため、以下のようにSYSADMINロールを追加でユーザに割り当てています。

GRANT ROLE SYSADMIN TO USER CSA;

「USE」コマンドを利用してみた

では、実際にそれぞれ試してみたいと思います。SQLファイルを用意して「構成要素」として登録し、それぞれ「CSA JMC」の「ジョブ」で動かしてみます。

USE ROLE

では、まずはROLEからです。SYSADMINロールでしか利用できないデータベース「ROLE_DEMO」にテーブルを作成するクエリで試します。

use_role_sample.sql

USE ROLE SYSADMIN;

CREATE TABLE ROLE_DEMO.PUBLIC.REGION AS
SELECT
  R_REGIONKEY,
  R_NAME,
  R_COMMENT
FROM
  SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION
;

なお、このクエリをCSAロールで実行すると以下のようにエラーとなります。

SQLコンパイルエラー: Database 「ROLE_DEMO」は存在しないか、許可されていません。

実際にCSAのジョブでこのSQLを実行するように設定して実行すると、

成功しました。Snowflake上でも問題なくテーブルが作成されています。

USE WAREHOUSE

次に、WAREHOUSEです。接続設定ではCSA_WHを利用する設定としていますが、別のXSMALL_WHを指定してSELECTクエリを投げてみます。

use_warehouse_sample.sql

USE WAREHOUSE XSMALL_WH;

SELECT
  R_REGIONKEY,
  R_NAME,
  R_COMMENT
FROM
  SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION
;

成功しました。こちらは、Snowflakeの「履歴」から結果を確認します。ちゃんとXSMALL_WHが利用されていますね。

USE DATABASE

続いて、DATABASEです。接続設定ではCSAを利用する設定ですが、DEMO_DBを指定して、DEMO_DB.PUBLIC.REGIONにテーブルを作成するクエリとします。CREATE TABLEでは、データベースを明示していないので、セッションで利用中のデータベース内(ここではDEMO_DB)に作成されるはずです。

use_database_sample.sql

USE DATABASE DEMO_DB;

CREATE TABLE PUBLIC.REGION AS
SELECT
  R_REGIONKEY,
  R_NAME,
  R_COMMENT
FROM
  SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION
;

成功しました。Snowflake上でも想定通りDEMO_DB内にテーブルが作成されています。

USE SCHEMA

最後に、SCHEMAです。まずは事前にCSAデータベースに、CSA_SAMPLEスキーマを作成しておきます。

CREATE SCHEMA CSA_SAMPLE;

その上で、以下のようにCSA_SAMPLEスキーマを指定してからREGIONテーブルを作成します。データベースとスキーマは、接続設定でCSAPUBLICを指定しているので、通常ではCSA.PUBLIC.REGIONにテーブルが作成されるはずですが、CSA_SAMPLEスキーマを指定したのでCSA.CSA_SAMPLE.REGIONにテーブルが作成されます。

use_schema_sample.sql

USE SCHEMA CSA_SAMPLE;

CREATE TABLE REGION AS
SELECT
  R_REGIONKEY,
  R_NAME,
  R_COMMENT
FROM
  SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.REGION
;

成功しました。Snowflake上でも想定通りCSA.CSA_SAMPLE.REGIONにテーブルが作成されています。

まとめ

以上、「USE」コマンドを利用したSQLクエリの実行についてのご紹介でした。接続設定に設定された以外のウェアハウス指定などを行いたい場合には、是非お試しいただければと思います。

お知らせ

2020/09/29(火)にCSアナリティクスが対応している各データウェアハウス(Redshift、BigQuery、Snowflake)と、CSアナリティクスについての紹介を行うウェビナーを開催予定です。ご興味がありましたら是非お申し込みください。