[小ネタ] 対象のテーブルがクローンされたものか知りたい #SnowflakeDB

2024.02.22

先日Snowflakeハンズオン中に以「テーブルがクローンされたものかどうか知る方法はありますか?」という質問をいただきました。

すぐに思い浮かんだのはテーブル定義(下図)を確認することだったのですが、もっといけてる方法があるだろうなと思って検索をしたところ、日本語の記事が見つからなかったので共有します。

上の記事の通り、インフォメーションスキーマにあるtable_storage_metricsビューのidclone_group_idが同じ値であれば、そのテーブルはクローンされていなくて、違う値の場合にはクローンされているということになります。

実践

existed_horiというテーブルをクローンして、hori_cloneというテーブルを作成します。

create table hori_clone clone existed_hori;

インフォメーションスキーマにあるtable_storage_metricsビューで先ほどクローンして作成したhori_cloneテーブルのidclone_group_idを調べてみます。

select id, clone_group_id
from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS
where table_name = 'HORI_CLONE';

上図の通り、idとclone_group_idが異なっています。

それでは、hori_cloneテーブルのclone_group_idと一致するidを持つテーブルを探してみます。

select table_name 
from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS
where ID = (
  select clone_group_id 
  from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS
  where table_name = 'HORI_CLONE'
);

上図の通り、hori_cloneテーブルのクローン元のテーブルであるexisted_horiテーブルが該当しました。

それでは、クローンされたテーブルを再度クローンした場合はどうなるのでしょうか?

# hori_cloneをクローンしてhori_clone_cloneテーブルを作成
create table hori_clone_clone clone hori_clone;

# hori_clone_cloneテーブルのclone_group_idと一致するidを持つテーブルを割り出す
select table_name 
from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS
where ID = (
  select clone_group_id 
  from HORIHORI.INFORMATION_SCHEMA.TABLE_STORAGE_METRICS
  where table_name = 'HORI_CLONE_CLONE'
);

結果は、大元の(クローン元のhori_cloneテーブルのクローン元である)existed_horiテーブルがヒットしました。

まとめ

Snowflakeで対象のテーブルがクローンされたものかどうかを確認する方法についてご紹介しました!