[新機能]CREATE OR ALTERコマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応しました
さがらです。
先日のアップデートで、SnowflakeのCREATE OR ALTER
コマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応しました。(パブリックプレビュー)
これまではテーブルのみがCREATE OR ALTER
コマンドに対応していたのですが、今回のアップデートでSnowflakeでもよく使用する各オブジェクトに対応するようになったため、CREATE OR ALTER
コマンドを用いた宣言的なアプローチで、Snowflakeのリソースの一部のIaCを担う事ができます。(ユーザーや他のスキーマオブジェクトもいつか対応してほしい…!)
実際にどのような挙動となるか試してみたので、本記事でその内容をまとめてみます。
データベースに対するCREATE OR ALTERコマンド
まず、データベースに対するCREATE OR ALTER
コマンドを試してみます。
データベースを作成後にスキーマとテーブルを追加してみて、その後にCREATE OR REPLACE
とCREATE OR ALTER
でどう挙動が異なるかを見てみます。
従来のCREATE OR REPLACEの場合
以下のクエリを実行して、データベースを作成後にスキーマとテーブルを追加してみます。
create or replace database sagara_tmp;
use database sagara_tmp;
create schema tmp_schema;
use schema tmp_schema;
create table tmp_table as select 1 as num_col;
この状態で、もう一度CREATE OR REPLACE
を実行してみます。すると、REPLACEしてしまうため作成したスキーマとテーブルが消えてしまいます。
create or replace database sagara_tmp;
新機能のCREATE OR ALTERの場合
以下のクエリを実行して、データベースを作成後にスキーマとテーブルを追加してみます。
create or alter database sagara_tmp;
use database sagara_tmp;
create schema tmp_schema;
use schema tmp_schema;
create table tmp_table as select 1 as num_col;
この状態で、もう一度CREATE OR ALTER
を実行してみます。すると、CREATE OR REPLACE
とは違って、作成したスキーマとテーブルは残ったままとなります。
create or alter database sagara_tmp;
ロールに対するCREATE OR ALTERコマンド
次に、ロールに対するCREATE OR ALTER
コマンドを試してみます。
ロールを作成後に権限をGRANTしてみて、その後にCREATE OR REPLACE
とCREATE OR ALTER
でどう挙動が異なるかを見てみます。
従来のCREATE OR REPLACEの場合
以下のクエリを実行して、ロールを作成後に権限をGRANTしてみます。
use role securityadmin;
create or replace role sagara_tmp_role;
grant usage on database sagara_tmp to role sagara_tmp_role;
grant usage on schema sagara_tmp.tmp_schema to role sagara_tmp_role;
grant select on table sagara_tmp.tmp_schema.tmp_table to role sagara_tmp_role;
show grants to role sagara_tmp_role;
この上で、もう一度CREATE OR REPLACE
を実行してみます。すると、REPLACEしてしまうためGRANTした権限が全てなくなってしまいます。
create or replace role sagara_tmp_role;
show grants to role sagara_tmp_role;
新機能のCREATE OR ALTERの場合
以下のクエリを実行して、ロールを作成後に権限をGRANTしてみます。
use role securityadmin;
create or alter role sagara_tmp_role;
grant usage on database sagara_tmp to role sagara_tmp_role;
grant usage on schema sagara_tmp.tmp_schema to role sagara_tmp_role;
grant select on table sagara_tmp.tmp_schema.tmp_table to role sagara_tmp_role;
show grants to role sagara_tmp_role;
この状態で、もう一度CREATE OR ALTER
を実行してみます。すると、CREATE OR REPLACE
とは違って、GRANTした権限はそのまま残っています。
create or alter role sagara_tmp_role;
show grants to role sagara_tmp_role;
最後に
SnowflakeのCREATE OR ALTER
コマンドがロール・データベース・スキーマ・ステージ・ビュー・ウェアハウスに対応したので、データベースとロールで試してその内容をまとめてみました。
CREATE
やCREATE OR REPLACE
だと実行のたびにエラーが起きたり作り直しが起きてしまうため、同じクエリを何度も実行するということが容易にできなかったのですが、CREATE OR ALTER
ならば何度実行してもすでにオブジェクトがある場合にはそれを残しつつ指定した内容の変更だけが行えます。
Terraformとかを導入せずともワークシートベースで宣言的なアプローチによるIaCが行えるため、とても熱い機能だと思います!!