こんばんは、しーまんです。
最近 Snowflake を使用してデータ活用することが多くなりました。
どのシステムを使う場合でも新しく使う場合は、新しい用語だったり概念を理解するところから始めると思います。
今回はSnowflakeで使用するオブジェクトの説明と「オーガナイゼーション(組織)」の概念について説明します。これから導入をしていく際や、理解を深めたい・説明をしたいなどの場合の参考にしていただければと思います。
Snowflakeとは
Snowflake とは企業向けデータ活用のためのクラウドデータプラットフォームです。
よくAWSの RedShift やGCPの Bigquery などと比較されるSaaSです。
Snowflakeの特徴として以下の点があげられます。
- コンピュートとストレージが完全分離
- 大規模並列処理可能
- バックエンドがマルチプラットフォームに対応(AWS, GCP, Azure)
- 課金体系はコンピュートの時間課金とストレージ料金
- Snowpipeによるデータストリーミング
- ロールベースアクセス制御
Snowflakeはこの他にも多くの特徴・メリットがあり、膨大な量のデータの扱いに苦労されている企業から注目を集めています。
プラットフォームに縛られずに活用出来るように設計されているので、マルチプラットフォーム時代のデータ基盤として選択するには良い選択かもしれませんね。
Snowflakeの管理オブジェクト
さて今回はSnowflake内で扱うオブジェクトについて解説していきます。
Snowflakeのオブジェクトには以下のものが存在します。
- User(ユーザ)
- Role(ロール)
- Warehouse(ウェアハウス)
- Database(データベース)
- Schema(スキーマ)
- Table(テーブル)
- ExternalTable(外部テーブル)
- View(ビュー)
- Materialized View(マテリアライズド ビュー)
- Schema(スキーマ)
他にも細かいものはありますので興味がある方は ドキュメント を確認ください。
主だったものは上記のオブジェクトになるのでまずはこちらを理解しましょう。
User(ユーザ)
まずはUserです。こちらはそこまで説明しなくても分かると思いますが、Snowflake上で操作を行うユーザです。Snowflakeにはユーザ数に応じた課金はないので、行動ログなどの観点から共通ユーザを使用せず、1人1ユーザを発行しましょう!
Role(ロール)
次はRoleです。こちらは権限情報のことで、このロールをユーザに割り当てることでユーザの行動に権限をつけます。
Warehouse(ウェアハウス)
次はWarehouseになります。こちらはSnowflake内の処理を行うコンピュータになります。
ウェアハウスにはサイズ(スペック)の概念がありサイズを大きくすると、それだけ処理が早くなり、それに伴って料金も上がる仕組みです。
用途や環境などにより複数のウェアハウスを使い分けるようにしましょう。
Database(データベース)
次はDatabaseです。こちらはイメージがあると思いますが、簡単に言うとデータを扱うための一番大外の箱のようなイメージです。
Schema(スキーマ)
データベースの中にはSchemaという中間に位置する箱のようなものが存在します。こちらがSnowflake独自だなと少し思った概念ですが、特に難しい事はありません。ただの分類用のオブジェクトです。
Table(テーブル)
スキーマの中に最下層として存在するのがTableです。これは分かると思いますが、実データを持った箱です。このテーブルを操作するのがデータ活用の基本です。
External Table(外部テーブル)
テーブルと同じ階層にあるのがExternal Tableです。これは実データは外部に持ち、Snowflake上で外部を参照して処理をすることが出来るテーブルになります。外部参照先としてはS3やGCSなどが選択できます。
メリットとしては下記があります。
- Snowflakeにデータを流す手間がない
- Snowflake上にデータを持たなくてよい
- (Snowflake上の)ストレージ料金がかからない
またデメリットは下記です。
- データ処理に時間がかかる
- データを加工できない
外部テーブルに関してはメリット・デメリットを把握した上で使用を検討しましょう。
View(ビュー)
同じくテーブルと同じ階層にあるのがViewです。
こちらはクエリ結果にアクセス出来るテーブルです。実体はテーブル側ですので、ビューはクエリ保存と理解してもらえばよいと思います。参照しているテーブルの中身が変更されればビューの中身も変更されます。
Materialized View(マテリアライズド ビュー)
同じくテーブルと同じ階層にあるのがMaterialized Viewです。こちらは「エンタープライズ プラン」から使用可能です。プランに関しては ドキュメント を参照ください。
マテリアライズド ビューに関しては実体を持ったビューになります。ビューと比べてクエリ結果データをSnowflakeのストレージ上に保存されるので、処理速度が高速になります。
また実体は持ちますが、元の参照しているテーブルのデータが変更になった際はマテリアライズド ビューの実体データも同期して変更されます。ここは勘違いされやすいので注意しましょう。
オーガナイゼーションとアカウント
Snowflake内のオブジェクトに対する権限の説明の前に「オーガナイゼーション(組織)」と「アカウント」の権限について軽く説明します。
基本的に最初に意識するのは「アカウント」でしょう。アカウント内に先で紹介したオブジェクトが存在するイメージです。ですが実はSnowflakeにはその上位の概念として組織という概念が存在します。
これはどういうタイミングで使うかと言うと、ただの分け方の問題なので、いろいろなパターンが存在しますが、いくつか例を上げて紹介します。
「組織」を1つの会社とした場合
- 子会社毎にアカウントを持つ場合
- 部署ごとにアカウントを持つ場合
- チームごとにアカウントを持つ場合
上記のような組分けをしたい場合に「組織」という概念は役に立ちます。
基本的には最初1つの「アカウント」としてSnowflakeを使用していると思いますが、内部的には「組織」も存在しています。
ただし、その「組織」を操作したり「アカウント」を増やしたりする場合は「ORGADMIN」というデフォルトロールの権限が必要です。これは2021年10月現在では Snowflakeサポート に問い合わせることで付与していただけます。このあたりの詳しい説明は ドキュメント を参照ください。
組織を活用することで請求をまとめたり、アカウント毎に使用量を管理できたりするのでうまく利用しましょう。
アカウントの作成
サポートに問い合わせして無事「ORGADMIN」の権限をいただいたら、早速アカウントを作成してみましょう。
下記のクエリを投げることで新しいアカウントを発行することができます。
-- オーガナイゼーションを操作出来るロールに変更.
use role orgadmin;
-- オーガナイゼーション一覧取得.
show organization accounts;
-- アカウント作成.
create account <アカウント名>
admin_name = <アカウント管理者名>
admin_password = '<アカウント管理者パスワード>'
email = '<アカウント管理者メールアドレス>'
edition = standard
region = aws_ap_northeast_1;
editionとregionはご自身の環境で適切なものを選択しましょう。
まとめ
今回はSnowflakeで使用するオブジェクトについてまとめてみました。
データを扱ったことがある方なら聞き慣れた用語も多く、そこまで認識に差異はないので理解しやすいと思います。
またアカウントの上位概念であるオーガナイゼーション(組織)についても説明しました。
こちらをうまく使用することで、管理が楽になりますので、管理者の方は理解しておきましょう。
以上、Snowflakeの導入や理解に少しでも役立ちましたら幸いです。
コメント