Denodo から Snowflake を参照時、利用するウェアハウスを動的に指定する

2024.03.27

こんにちは、川田です。前回の投稿では、Denodo から Snowflake 上のテーブルを参照する方法について確認しました。

Denodo にて Snowflake 上テーブル向けのビューを作成する

今回は、Denodo から Snowflake へのアクセス時、利用する Snowflake ウェアハウスを動的に指定する方法について確認してみます。

結論

Denodo Community にて同様の質問があり、Denodo Team にて回答してくれていました。

I would make use of the initial SQL sentence funtionality in Denodo 8.0 to execute a initial sentence before actual query is executed against the snowflake datasource. Virtual DataPort only allows static connection in the JDBC connection URL, so you can leverage the snowflake command USE WAREHOUSE as your initial SQL if you want to switch between the warehouses.

Snowflake connection - change warehouse based on e.g. a particular role

initial SQL の機能を利用しろ、とのことです。以下にて実際に試してみます。

環境

  • Denodo Platform 8.0 (Denodo Express)
  • Snowflake 8.11.4

利用する Denodo 環境は、無償版にあたる Denodo Express を利用しています。

事前準備

事前の作業として、Snowflake 側より動的に利用させるウェアハウスを作成しておきます。

USE ROLE SYSADMIN;

CREATE WAREHOUSE DENODO_SUB_WH
WITH
    WAREHOUSE_SIZE = XSMALL
    MAX_CLUSTER_COUNT = 1
    AUTO_SUSPEND = 60
    INITIALLY_SUSPENDED = TRUE;

Denodo からのアクセス時に利用しているロール(今回の環境では DENODO_ROLE)に、作成したウェアハウスへの USAGE 権限を与えておきます。

USE ROLE SECURITYADMIN;

GRANT USAGE ON WAREHOUSE DENODO_SUB_WH TO ROLE DENODO_ROLE;

Denodo 側で initial SQL の設定

Snowflake 向け JDBC data Source 設定の Advanced タブにて、Initial SQL sentences のテキストフォームに USE WAREHOUSE コマンドを記載します。

@xxxx と記述することで、その値を変数として定義でき、動的な値を設定することができるようになります。

USE WAREHOUSE @warehouse

Initial SQL Statements

実際に利用する場合、以下のように CONTEXT 句を利用した SELECT 文を記述することなります。

以下の例では、DENODO_SUB_WH という値が変数 warehouse に与えられ、Initial SQL sentences で記述したコマンドが SELECT 文の前に実行されるようなります。

SELECT
    sum(col1)
FROM snowflake.test01
CONTEXT('var warehouse' = 'DENODO_SUB_WH');

実行結果の確認として、Snowflake 側で Query History を確認します。SELECT 文の実行前に、USE WAREHOUSE コマンドが実行されていることを確認できます。