Snowflakeのゼロコピークローニングを試してみた
分析屋の中田(ナカタ)です。
Snowflakeのゼロコピークローニング機能を試してみました。
ゼロコピークローニングとは
テーブルやデータベースなどを複製する機能です。
ただし、コピー時に追加で必要になる容量がゼロとなるお得な仕組みです。
クローニング | Snowflake Documentation
今回やること
テーブルやデータベースをコピーしてみます。
環境
Snowflakeのエディション:ビジネスクリティカル版(トライアル期間)
クラウド:AWS(東京リージョン)
サンプルデータ
以下のようなデータベースを使用します。
テーブルコピーの検証
以下のクエリを実行してみます。
Unset
-- テーブルのクローン
CREATE OR REPLACE TABLE SAMPLE_DB.PUBLIC.NEW_TABLE
CLONE SAMPLE_DB.PUBLIC.SOURCE
;
実行結果
ウェアハウス(コンピューティングリソース)はXSサイズ1台ですが
1.2秒程度で完了しました。
テーブルのサイズ次第では時間がかかるかもしれません。
公式ドキュメントでは、コピー中にテーブル定義を変更するとうまくコピーできない可能性がある旨の記述がされています。
******************************************
クローニングは高速ですが、瞬時ではありません。特に大きなオブジェクト(例:テーブル)の場合はそうです。そのため、クローニング操作の進行中にソースオブジェクトで DDL ステートメントが実行される場合(例:スキーマ内のテーブル名の変更)、変更がクローンに反映されない可能性があります。
******************************************
できることなら、コピー実行中はクエリを発行しないことが無難そうです。
データベースコピーの検証
データベースをまるごとコピーしてみます。
Unset
-- データベースのクローン
CREATE OR REPLACE DATABASE NEW_DB
CLONE SAMPLE_DB
;
実行結果
5.2秒で完了です。テーブルよりも時間がかかりました。
容量は小さいはずですが、それでもデータベースまるごとだと5秒くらいはかかります。
たしかにまるっとコピーされています。
ただし、権限については継承されていないようです。
SAMPLE_DBにはPUBLICロールでUSAGE権限を付与しています。
が、コピー後のNEW_DBはPUBLICロールではアクセスできません。
公式ドキュメントにもちらほら記載がありますが
完全なるコピー、というわけではなく、コピーされないものもあるようです。
関数のコピーも検証
UDFもコピーできるか試してみました。
Unset
-- UDFのコピー(?)
CREATE OR REPLACE FUNCTION new_function
CLONE sample_function
;
だめでした。
公式ドキュメントの構文を見ると
対象はデータベース、スキーマ、テーブルのようです。
create-clone | Snowflake Documentation
Unset
CREATE [ OR REPLACE ] { DATABASE | SCHEMA | TABLE } [ IF NOT EXISTS ] <object_name>
CLONE <source_object_name>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
...
注意点
・内部ステージはコピーされない
・権限は継承されない(方法はあるようですが未検証)
・コピー中のDDL実行はNG
最後に
通常、コピーを作成すると容量が倍必要になり、コストがかさみます。
Snowflakeのコピーは同じストレージレイヤーを参照する特殊な仕組みにより、コストを抑えてコピーできます。
バックアップの作成や、テスト環境の作成などで重宝する機能です。
ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!
これまでの記事はこちら!
株式会社分析屋について
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。