【Snowflake】Snowflake ~ 基本編 / ゼロコピークローン ~

■ はじめに

https://dk521123.hatenablog.com/entry/2021/11/02/130111
https://dk521123.hatenablog.com/entry/2021/11/22/212520

の続き。

Snowflake の特徴の一つでもある「ゼロ コピー クローン」について扱う。

目次

【1】ゼロコピークローン
【2】構文
【3】サンプル

【1】ゼロコピークローン(Zero-copy Cloning)

* Snowflake は、「論理テーブル(メタ情報)」と「物理ストレージ」が分離されている
 => Cloneの場合、データが物理的にはコピーされず、同じデータを参照
 => 物理的にはコピーされないので、めっちゃ早い(だから「ゼロコピー」)

動画

* イメージしづらい場合、以下の動画を見てみるといいかも。

https://www.youtube.com/watch?v=yQIMmXg7Seg

【2】構文

https://docs.snowflake.com/ja/sql-reference/sql/create-clone.html

CREATE [ OR REPLACE ] { DATABASE | SCHEMA | TABLE | STREAM } [ IF NOT EXISTS ] <object_name>
  CLONE <source_object_name>
  ...

-- テーブルをクローンする場合
CREATE TABLE clone_table CLONE source_table;

【3】サンプル

-- 使用するロール/ウェアハウスを指定
USE ROLE sysadmin;
USE WAREHOUSE compute_wh;

-- 専用のDBを作成
CREATE DATABASE demo_bank;

-- 使用するDB/Schemaを指定
USE DATABASE demo_bank;
USE SCHEMA public;

-- データロード用のテーブルを用意
CREATE OR REPLACE TABLE demo_trips
(tripduration integer, 
  starttime timestamp, 
  stoptime timestamp, 
  start_station_id integer, 
  start_station_name string, 
  start_station_latitude float, 
  start_station_longitude float, 
  end_station_id string, 
  end_station_name string, 
  end_station_latitude string, 
  end_station_longitude string, 
  bikeid integer, 
  membership_type string, 
  usertype string, 
  birth_year string, 
  gender integer);

-- ロード用のステージを作成
CREATE STAGE demo_stage
 URL = 's3://snowflake-workshop-lab/citibike-trips/';

-- データファイルの一覧表示
LIST @demo_stage;

-- データロード
COPY INTO demo_trips
  FROM @demo_stage
  FILE_FORMAT = (
    TYPE=CSV,
    FIELD_OPTIONALLY_ENCLOSED_BY = '"',
    EMPTY_FIELD_AS_NULL = TRUE,
    ERROR_ON_COLUMN_COUNT_MISMATCH = FALSE
);

-- ★ここ★
CREATE TABLE clone_trips CLONE demo_trips;

参考文献

https://dev.classmethod.jp/articles/snowflake-advent-calendar-2019-24/
https://www.intage-ts.com/entry/2020/12/21/145500

関連記事

Snowflake ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/02/130111
Snowflake ~ 入門編 / Hello world
https://dk521123.hatenablog.com/entry/2021/11/22/212520
Snowflake ~ 基本編 / データロード ~
https://dk521123.hatenablog.com/entry/2021/11/15/221245
Snowflake ~ 基本編 / アクセス制御 ~
https://dk521123.hatenablog.com/entry/2021/11/16/231010
Snowflake ~ テーブルの簡易バックアップを考える ~
https://dk521123.hatenablog.com/entry/2022/11/07/224328