■本記事の目的
Snowflakeのワークシート利用やスクリプト開発における
データベース、スキーマ、ウェアハウス、ロールの4つのオブジェクトを
セッションで使用するときの記述について取りまとめます。
オブジェクト作成における意図しない結果を防ぐための作法として
捉えていただけると幸いです。
■記述法について
以下の2つの記述形式が存在します。
①セッションコンテキスト
説明:USE文を使用し、対象セッションのオブジェクトを指定します。
セッションの利用者(ロール)や利用環境を確定するイメージです。
USE ROLE [ロール名];
USE WAREHOUSE [ウェアハウス名];
USE DATABASE [データベース名];
USE SCHEMA [スキーマ名];
※セッションで各オブジェクト種類ごとで、一つのみ指定可能です。
②完全修飾名
説明:データベース、スキーマをクエリ内部で明示的に記述します。
[データベース名].[スキーマ名].[オブジェクト名]
※オブジェクトは、スキーマオブジェクトのこと
補足事項1:①②の関係性について
②を記述しない場合、①のコンテキストが指定されます。
②を記述した場合、①よりも優先的にオブジェクトを指定します。
補足事項2:PUBLICスキーマ
①からスキーマ名を除くかつ②を記述しない場合、
PUBLICスキーマが適用されることがあります。
PUBLICスキーマは、データベースのデフォルトスキーマとして存在します。
■ロール利用
Snowflakeのオブジェクト作成において、意図しない所有者になることは、ロールおよび作成ルールを理解していないときに起こりがちです。
特に、ACCOUNTADMINですべてのオブジェクトを作成してしまうことはアンチパターンとして、ご留意ください。
以下は、システムロールの初回のベストプラクティスです。※オプションは省略
USERADMINの例
USE ROLE USERADMIN;
CREATE USER [ユーザー名];
CREATE ROLE [ロール名];
SECURITYADMINの例
USE ROLE SECURITYADMIN;
CREATE NETWORK POLICY [ネットワークポリシー名];
SYSADMIN(または各作成権限のあるカスタムロールでも可)の例
USE ROLE SYSADMIN;
CREATE DATABASE [データベース名];
上記の例のように、ワークシート上のオブジェクトを作成では
USE ROLE [ロール名]; を作成クエリの前に配置、使用することが定石です。
意図しない動作を防ぐためにも定型文として覚えましょう。
■データベース・スキーマ利用
Snowflakeのオブジェクト作成において、意図しないデータベースおよびスキーマの所属になることは、複数のデータベース・スキーマをまたがって取り扱っているときに起こりがちです。
時には、データ事故につながるケースもあります。
以下は、データベース・スキーマ作成におけるベストプラクティスです。
いずれかの例で、防ぐことが可能です。
コンテキスト利用の例
USE DATABASE [データベース名];
USE SCHEMA [スキーマ名];
CREATE TABLE [テーブル名](カラム名 データ型,…);
完全修飾名の例
CREATE TABLE [データベース名].[スキーマ名].[テーブル名](カラム名 データ型,…);
上記の例のように、ワークシート上のデータベースオブジェクト作成では、
USE DATABASE [データベース名];、USE SCHEMA [スキーマ名] を作成クエリの前に配置、使用する
または 完全修飾名により明示的にどのオブジェクトを作成・操作することを明確にすることが定石です。
意図しない所属やデータ置換を防ぐためにも定型文として覚えましょう。
■ストアドプロシージャにおけるケース
ストアドプロシージャなどのスクリプトを作成される際は、注意が必要です。
内部のプログラムが複数または別のデータベース・スキーマにまたがって処理されるか整理し、記述法を検討する必要があります。
※ストアドプロシージャの環境間の移行時の考慮なども含む
内部のプログラムで、完全修飾名を利用していない場合、ストアドプロシージャの所属データベース・スキーマが適用される仕様となっています。
■ウェアハウス利用
利用するウェアハウスを指定します。誤指定による重大なデータ事故につながることはありませんが、ワークシート、ジョブ(外部からのクエリ実行)、ストアドプロシージャ、タスクで指定する必要があります。
ウェアハウス利用の例
USE WAREHOUSE [ウェアハウス名];
SELECT * FROM [データベース名].[スキーマ名].[テーブル名];
サイズ(XS,S…)ごとでウェアハウスを定義している場合は、意図しないクレジット利用の過多を防ぐためにも、指定を行いましょう。
■あとがき
今回の記事作成の経緯については、Snowflakeを使い始めた方が
どのようにワークシートを使うかを迷われていた方が多かったため
取りまとめました。
また、ACCOUNTADMINによる各種オブジェクト作成(アンチパターン)を防ぐためにも残した方が良いと考えました。
Snowflake独自のルールが意外と多いため、今後もポイントがあれば
このような記事を作っていきたいと思います。
目次に戻る