Open7

Snowflakeを理解したい!

rakudaCaserakudaCase

Snowflake

https://www.snowflake.com/ja/
データ分析基盤におけるデータベースは、単なるデータの保存先ではなく、各サービスからのデータを統合する大規模DWH(データウェアハウス)サービスを指す。

概念

  • ハードウェアの選択、インストール、構成または管理は必要ない
  • インストール、構成、または管理するソフトウェアは事実上ありません
  • 継続的なメンテナンス、管理、アップグレード、およびチューニングは、Snowflakeによって処理されます
rakudaCaserakudaCase

接続

  • webベースのユーザーインターフェース
  • コマンドラインクライアント(例:SnowSQL)
  • 他コネクタ

サポート対象のクラウドプラットフォーム

Snowflakeは、すべてがクラウドインフラストラクチャ上で実行される、自己管理によるサービスとして提供される
Snowflakeのアーキテクチャの3つのレイヤーすべて(ストレージ、コンピューティング、およびクラウドサービス)がすべて、選択されたクラウドプラットフォームで展開および管理される

  • AWS
  • GCP
  • Azure
rakudaCaserakudaCase

機能

  • セキュリティ、ガバナンス、データ保護
    • クラウドプラットフォーム内への展開
    • 自動データ暗号化
    • オブジェクト
    • Snowflake Time Travel(1日の標準)
      • テーブル内の履歴データのクエリ
      • データベース、スキーマ、およびテーブルの履歴データの復元とクローン作成
    • Snowflake Fail-safe(7日の標準)履歴データの災害復旧
    • オブジェクトのタグ付け→機密データとリソース使用状況の追跡(※Enterprise Edition以上)
  • SQLサポート
    • DDL, DML
    • トランザクション
    • 一時テーブル
    • ビュー
    • 集計関数
    • 分析集計
  • ツールおよびインターフェイス
    • Snowsight
      • アカウント管理
      • リソースとシステム使用状況のモニター
      • データのクエリ
    • SnowSQL
      • Pythonベースのコマンドラインクライアント
    • 仮想ウェアハウスの管理
      • ウェアハウスの作成、サイズ変更、一時停止、ドロップ
    • Snowflake Extension for Visual Studio Code
  • データのインポートおよびエクスポート
    • データの一括ロードのサポート
      • 圧縮ファイルからのデータロード
      • CSV, TSVなどのファイルロード
      • JSON, Avro, ORC, Parquet, XML形式のデータファイルロード
      • クラウドストレージ内のファイルまたはローカルファイルからロード
    • ファイルからの継続的なデータロードのサポート
      • Snowpipeを使用した、内部(Snowflake)ステージまたは外部(Amazon S3, Google Cloud Storage, Microsoft Azure)ステージからのデータロード
rakudaCaserakudaCase
SnowSQLでチュートリアル(サンプルデータのロードからクエリまで)
  1. 前提条件
    1. ユーザーを作成する
    2. SnowSQLをインストール(各環境ごと)
    3. サンプルデータファイルをダウンロードする
  2. SnowSQLにログインする
    1. コマンドラインウィンドウでSnowSQLを開始する(管理画面でコピー可能、アカウントID〇〇-〇〇) snowsql -a <account_identifier> -u <user_name>
    2. Snowflakeユーザーのパスワードを入力する
    3. ログインに成功すると、SnowSQLは、現在のウェアハウス、データベース、スキーマを含むコマンドプロンプトを表示します(持っていない場合、no warehouse, no database, no schemaが表示される)
  3. Snowflakeオブジェクトを作成する
    1. データベースを作成する
    2. テーブルを作成する
    3. 仮想ウェアハウスを作成する
  4. データファイルをステージする
    Snowflakeステージは、テーブルからデータをロードおよびアンロードするために使用するクラウドストレージ内の場所。
    • 内部ステージ--Snowflake内部でデータファイルを保存するために使用する。
    • 外部ステージ--Amazon S3, Google Cloud Storage, Microsoft Azureで外部データファイルを保存するために使用する。
    1. サンプルデータファイルのステージング(emp_basicテーブルの内部ステージにアップロードする)
  5. データをターゲットテーブルにコピーする
    1. 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';		
  1. ロードされたデータをクエリする
  2. クリーンアップ、追加のリソース
rakudaCaserakudaCase
Snowsightでチュートリアル
試用アカウントを使用してデータをロードし、クエリする

<ユーザーを作成してロールを付与する>

  1. 使用するロールの選択
  2. ユーザーを作成する
    1. templateを使用して、実行することが可能
  3. ユーザーへのシステムロールとウェアハウスのアクセス付与
  4. アカウントのユーザーとロールを調べる
  5. ユーザーの削除と重要な点の確認
    • アカウントのオブジェクトを作成および管理するには、必要な権限が必要。
    • 組織のビジネス機能に合わせてロールの階層を作成すること
    • Snowsightのワークシート上でクエリを実行可能
      • クエリ行にカーソルを置き、Runすることで、特定のクエリのみ実行することが可能