Open7
Snowflakeを理解したい!
Snowflake
データ分析基盤におけるデータベースは、単なるデータの保存先ではなく、各サービスからのデータを統合する大規模DWH(データウェアハウス)サービスを指す。
概念
- ハードウェアの選択、インストール、構成または管理は必要ない
- インストール、構成、または管理するソフトウェアは事実上ありません
- 継続的なメンテナンス、管理、アップグレード、およびチューニングは、Snowflakeによって処理されます
データウェアハウス御三家の比較
Snowflake、BigQuery、Redshift
※引用:2020年当時
接続
- webベースのユーザーインターフェース
- コマンドラインクライアント(例:SnowSQL)
- 他コネクタ
サポート対象のクラウドプラットフォーム
Snowflakeは、すべてがクラウドインフラストラクチャ上で実行される、自己管理によるサービスとして提供される
Snowflakeのアーキテクチャの3つのレイヤーすべて(ストレージ、コンピューティング、およびクラウドサービス)がすべて、選択されたクラウドプラットフォームで展開および管理される
- AWS
- GCP
- Azure
機能
- セキュリティ、ガバナンス、データ保護
- クラウドプラットフォーム内への展開
- 自動データ暗号化
- オブジェクト
- Snowflake Time Travel(1日の標準)
- テーブル内の履歴データのクエリ
- データベース、スキーマ、およびテーブルの履歴データの復元とクローン作成
- Snowflake Fail-safe(7日の標準)履歴データの災害復旧
- オブジェクトのタグ付け→機密データとリソース使用状況の追跡(※Enterprise Edition以上)
- SQLサポート
- DDL, DML
- トランザクション
- 一時テーブル
- ビュー
- 集計関数
- 分析集計
- ツールおよびインターフェイス
- Snowsight
- アカウント管理
- リソースとシステム使用状況のモニター
- データのクエリ
- SnowSQL
- Pythonベースのコマンドラインクライアント
- 仮想ウェアハウスの管理
- ウェアハウスの作成、サイズ変更、一時停止、ドロップ
- Snowflake Extension for Visual Studio Code
- Snowsight
- データのインポートおよびエクスポート
- データの一括ロードのサポート
- 圧縮ファイルからのデータロード
- CSV, TSVなどのファイルロード
- JSON, Avro, ORC, Parquet, XML形式のデータファイルロード
- クラウドストレージ内のファイルまたはローカルファイルからロード
- ファイルからの継続的なデータロードのサポート
- Snowpipeを使用した、内部(Snowflake)ステージまたは外部(Amazon S3, Google Cloud Storage, Microsoft Azure)ステージからのデータロード
- データの一括ロードのサポート
チュートリアル
30日間のトライアルアカウントではじめられる
SnowSQLでチュートリアル(サンプルデータのロードからクエリまで)
- 前提条件
- ユーザーを作成する
- SnowSQLをインストール(各環境ごと)
- サンプルデータファイルをダウンロードする
- SnowSQLにログインする
- コマンドラインウィンドウでSnowSQLを開始する(管理画面でコピー可能、アカウントID〇〇-〇〇)
snowsql -a <account_identifier> -u <user_name>
- Snowflakeユーザーのパスワードを入力する
- ログインに成功すると、SnowSQLは、現在のウェアハウス、データベース、スキーマを含むコマンドプロンプトを表示します(持っていない場合、
no warehouse, no database, no schema
が表示される)
- コマンドラインウィンドウでSnowSQLを開始する(管理画面でコピー可能、アカウントID〇〇-〇〇)
- Snowflakeオブジェクトを作成する
- データベースを作成する
- テーブルを作成する
- 仮想ウェアハウスを作成する
- データファイルをステージする
Snowflakeステージは、テーブルからデータをロードおよびアンロードするために使用するクラウドストレージ内の場所。- 内部ステージ--Snowflake内部でデータファイルを保存するために使用する。
- 外部ステージ--Amazon S3, Google Cloud Storage, Microsoft Azureで外部データファイルを保存するために使用する。
- サンプルデータファイルのステージング(
emp_basic
テーブルの内部ステージにアップロードする)
- データをターゲットテーブルにコピーする
-
COPY INTO
コマンドで、データファイルを含む場所(テーブルの内部ステージ)から作成したテーブルにコピーする
-
COPY INTO emp_basic
-- @<名前空間>%<テーブル名>でステージを指定可能
FROM @%emp_basic
-- csvを指定。文字列を囲む文字として二重引用符を指定。
FILE_FORMAT = (type = csv field_optionally_enclosed_by='"')
-- 正規表現に一致するファイル名からデータロード
PATTERN = '.*employees0[1-5].csv.gz'
-- エラー発生時の処理を指定可能。エラーを含むファイルはスキップされ、次のファイルロードに移る(デフォはデータロードを停止)
ON_ERROR = 'skip_file';
- ロードされたデータをクエリする
- クリーンアップ、追加のリソース
Snowsightでチュートリアル
試用アカウントを使用してデータをロードし、クエリする
<ユーザーを作成してロールを付与する>
- 使用するロールの選択
- ユーザーを作成する
- templateを使用して、実行することが可能
- ユーザーへのシステムロールとウェアハウスのアクセス付与
- アカウントのユーザーとロールを調べる
- ユーザーの削除と重要な点の確認
- アカウントのオブジェクトを作成および管理するには、必要な権限が必要。
- 組織のビジネス機能に合わせてロールの階層を作成すること
- Snowsightのワークシート上でクエリを実行可能
- クエリ行にカーソルを置き、Runすることで、特定のクエリのみ実行することが可能