10分でできる!Snowflakeコスト最適化ツール”SELECT”の設定方法を徹底解説!

10分でできる!Snowflakeコスト最適化ツール”SELECT”の設定方法を徹底解説! | Tableau-id Press -タブロイド-
Select,Snowflake

こんにちは!Chinenです。

先のブログでご紹介したSELECTについて、日本語で設定方法の説明を載せてみます。(運営会社がアメリカなので今は英語しかありません。)元のドキュメントはこちら⇒Welcome to SELECT

AIと協力しながら翻訳をしている箇所が多いので、口調が変わっているのとかはご容赦を笑

1.SELECT用のSnowflakeユーザーを作成する

SELECT用の新規ユーザーを作成し、Snowflakeアカウントのメタデータデータベースへの読み取り専用アクセス権限を与える必要があります。

SELECT公式のフルスクリプトで一度に実行してもOKですが、以下、ステップごとにコードを含め説明します。(あくまで2024年3月時点での公式説明とコードです。)設定時のユーザーはACCONTADMINを保有している必要があります。また、設定するアカウントは、ORGADMINが有効になっている必要があります。

ステップ1:新規ユーザーとロールの作成

まず、SELECT専用の新規ユーザーとロールを作成します。コード内の”PASSWORD_HERE”を任意のパスワードにしてから実行してください。また、このパスワードは後でSELECTのWebアプリケーションに入力する必要がありますので、メモをしておいてください。

【解説】SELECT用特有のSQLというより、ユーザー追加の際の標準的なSQLです。SELECTというユーザーを追加し、デフォルトのロールやウェアハウスを作成・設定していきます。

use role accountadmin;--アカウントアドミンで作業する
create user if not exists select_user--'select_user'というユーザー名のユーザーを作成
password = 'PASSWORD_HERE'--'select_user'用のパスワードを設定
default_role = select_user--デフォルトのロールを'select_user'に指定
default_warehouse = select_user--デフォルトのウェアハウスを'select_user'に指定
comment = 'Used by select.dev';--ウェアハウスの使用用途をコメントで説明
create role if not exists select_user comment = 'Used by select.dev';--'select_user'というロールを作成しコメントで用途を説明
grant role select_user to user select_user;--'select_user'というユーザーに'select_user'というロールを与える

ステップ2:新規ウェアハウスの作成

次に、SELECT用の新規ウェアハウスを作成します。SELECTはこのウェアハウスを使用して、1日1回Snowflakeのメタデータをクエリします。

【解説】ここもウェアハウスを新規作成する際の標準的なSQLです。ウェアハウスのサイズや自動停止までの時間などを設定し、どのロールがどのような権限でこのウェアハウスを使用できるのかを設定します。

use role accountadmin;--アカウントアドミンで作業する
create warehouse if not exists select_user--'select_user'というウェアハウスを作成する
warehouse_size=xsmall--ウェアハウスのサイズを指定する
auto_suspend=60--ウェアハウスの自動停止までの時間を設定する
initially_suspended=true--ウェアハウスの作成時にはウェアハウスを停止したままにする
comment = 'Used by select.dev';--用途をコメントで説明
grant monitor, operate, usage, modify
on warehouse select_user to role select_user;--'select_user'というロールに'select_user'というウェアハウスにおいてmonitor, operate, usage, modifyの
権限を与える

ステップ3:ストレージ統合の作成

Google Cloud StorageをSELECTのSnowflakeアカウントと顧客のアカウントの間の中継地として使用するため、アカウントのメタデータをGoogle Cloud Storage(GCS)バケットにエクスポートするよう設定します。’select_user’ロールがSnowflakeメタデータをSELECTのGCSバケットに書き込むことを許可します。Snowflakeによってデータ外部転送費用が課せられますが、最高で年間20ドル程度です。

【解説】GCPにバケットを用意し、select_userロールが使用できるようにします。

use role accountadmin;--アカウントアドミンで作業する
create storage integration if not exists select_export-'select_export'というストレージ統合を作成する
type = external_stage--場所は外部ステージ
storage_provider = 'GCS' -- プロバイダーはGCSを使用する。(自分のSnowflakeアカウントがGCS以外でも必ずGCSを指定する)
enabled = true--ストレージ統合を有効化する
storage_allowed_locations = ('*');--ストレージが許可される場所を指定する。ここでは、すべての場所が許可されているが、制限したい場合はSELECTチームに連絡
grant usage on integration select_export to role select_user;--作成したストレージ結合を'select_user'ロールが使えるようにする

ステップ4:SELECTロールにSnowflakeメタデータへの読み取り専用アクセスを付与

次に、’select_user’ロールにSnowflakeメタデータデータベースへの読み取り専用アクセスを付与します。また、ウェアハウスの使用状況をモニタリングするための’show_warehouses’コマンドを実行する許可を与えます。

grant imported privileges on database snowflake to role select_user;--'select_user'ロールがメタデータにクエリする権限を与える
grant monitor usage on account to role select_user;--'select_user'ロールがウェアハウスの使用状況をモニターすることを許可する

ステップ5:設定用アカウントがORGADMINアクセスを持っていることを確認

SELECTはメタデータ(SnowflakeDB)のsnowflake.organization_usageスキーマなど、ORGADMINアクセスを必要とするいくつかのビューを参照しています。

まず、設定用のアカウントで以下のSQLステートメントを実行して、レコードが返されるか確認します。

use role accountadmin; --アカウントアドミンで作業する
select * from snowflake.organization_usage.rate_sheet_daily ;--レコードが返されるか確認する

レコードが返された場合は、次のステップに進んでください。

※レコードが返されなかった場合

アカウントにORGADMINロールが有効になっていない可能性があります。これを有効にするには、ORGADMINが有効になっている組織内のSnowflakeアカウントにログインし、サイドバーのAdmin -> Accountsへ移動します。次に、接続しているアカウントのORGADMINを有効にします。

※変更が反映されるまで最大1日かかることがあります。

※Snowflakeクレジットをリセラーから購入している場合、上記の対応をしてもビューへのアクセスができません。最新のSnowflakeの請求書のコピーをSELECTチーム(チャットまたはsupport@select.devにメールを送る)に共有する必要があるそうです。

ステップ6:SELECTロールがウェアハウスを調整する権限を付与

最後に、’select_user’ロールがウェアハウスをの使用を調整する権限を与えます。

grant manage warehouses on account to role select_user;--'select_user'ロールがウェアハウスの使用を調整する'manage'権限を付与

これでSnowflake側の設定は終了です!

2.SELECTで設定をする

いよいよSELECTの画面で接続設定を行います。

ステップ1: 「アカウントを追加」をクリック

ホームページの「アカウントを追加」ボタンをクリックするか、設定 -> Snowflake -> 新規追加へと移動します。

ステップ2: Snowflakeアカウント詳細を入力

Enter Snowflake account info into SELECT

以下は各フィールドの詳細です:

・Friendly Account Name: 何でも構いません。一つしかSnowflakeアカウントを持っていないのであれば、会社名を入れるのが一般的です。複数のSnowflakeアカウントをSELECTに接続するつもりであれば、アカウント切り替え機能を使って区別できるように命名してください。

・Account Identifier: アカウント識別子は、組織内のSnowflakeアカウントを一意に識別します。アカウントロケータではないので注意してください。

・Username: 前半「ステップ1:新規ユーザーとロールの作成」でSELECTのために作成した新しいSnowflakeユーザーの名前になります。’select_user’のはずです。

・Password: 新しいユーザーに指定したパスワードです。

・[OPTIONAL] Role: 入力は必須ではありません。何も入力しなければ新しいユーザーに指定されたデフォルトのロール(select_user)になります。

・[OPTIONAL] Warehouse: 入力は必須ではありません。何も入力しなければ新しいユーザーに指定されたデフォルトのウェアハウス(select_user)になります。

ステップ3: あとはSELECTが同期してくれます!

アカウントの追加が成功すると、ホーム画面にアカウントの初期同期が進行中であることを示すメモが表示されます。初回実行時に通常1-2時間かかります。

3.おわりに

お疲れさまでした!ぜひSELECTを活用してくださいね。

truestarではSnowflakeの検討、導入支援や環境構築からアプリ開発まで幅広くサポート可能です。

Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらからご相談ください。

ではまた~。