第1章 Snowflake AI Data Cloudの特徴とアーキテクチャ(Features & Architecture, 31%)
🎯 この節の学習目標
Snowflake のすべてのオブジェクトは、明確な階層構造の中に位置づけられています。まず全体像を図で押さえましょう。
図:Snowflake のオブジェクト階層。Organization → Account → Database → Schema → スキーマオブジェクト
Organization(組織)は複数のアカウントを束ねる最上位の概念で、アカウントの作成やアカウント横断の管理・請求の把握などに使われます。1-2 で学んだとおり、クラウド・リージョン・エディションはアカウント単位で決まるため、たとえば「AWS 東京リージョンのアカウント」と「Azure のアカウント」を1つの組織の下にぶら下げる、といった構成が可能です。
オブジェクトには、アカウント直下に存在するものと、スキーマの中に存在するものの2種類があります。この区別は権限管理(第2章)の土台にもなるため、正確に押さえましょう。
| 区分 | 主なオブジェクト |
|---|---|
| アカウントレベルオブジェクト | ユーザー、ロール、ウェアハウス、データベース、リソースモニター、インテグレーション、シェア |
| スキーマオブジェクト | テーブル、ビュー、ステージ、ファイルフォーマット、シーケンス、パイプ、ストリーム、タスク、関数(UDF)、ストアドプロシージャ など |
📝 試験のポイント
「ウェアハウスはどのデータベースに属するか」という問いは引っかけです。ウェアハウスはアカウントレベルのオブジェクトであり、特定のデータベースやスキーマには属しません。同様に、ユーザー・ロール・リソースモニター・シェアもアカウントレベルです。一方、ステージやパイプ、タスクは「スキーマの中」に作られる点に注意しましょう。オブジェクトがどのレベルに属するかは、試験で問われやすい論点です。
スキーマオブジェクトは データベース名.スキーマ名.オブジェクト名 の形式で一意に指定できます。これを完全修飾名と呼びます。一方、セッションには「いま、どのロール・ウェアハウス・データベース・スキーマを使っているか」というコンテキストがあり、USE コマンドで切り替えます。
💡 具体例:コンテキストの設定と完全修飾名
-- セッションのコンテキストを設定する
USE ROLE analyst_role; -- 使用するロール
USE WAREHOUSE analytics_wh; -- 使用するウェアハウス
USE DATABASE sales_db; -- 既定のデータベース
USE SCHEMA public; -- 既定のスキーマ
-- コンテキストが設定されていれば、短い名前で参照できる
SELECT * FROM orders;
-- 完全修飾名なら、コンテキストに関係なく一意に参照できる
SELECT * FROM sales_db.public.orders;
共有するスクリプトやタスクの定義では、実行時のコンテキストに依存しない完全修飾名で書いておくと、意図しないオブジェクトを参照する事故を防げます。
なお、USE ROLE は「どの権限で操作するか」、USE WAREHOUSE は「どの計算資源でクエリを実行するか」を決めるもので、データベース・スキーマの選択とは役割が異なります。4つの USE をセットで覚えておきましょう。
スキーマオブジェクトの中でも、ビューには3つの種類があり、それぞれ目的が異なります。
| 種類 | 特徴 | 主な用途 |
|---|---|---|
| 標準ビュー | クエリ定義を保存したもの。参照のたびに定義の SQL が実行される | ロジックの再利用、列の絞り込みによる簡易的なアクセス制御 |
| セキュアビュー | ビュー定義が他のユーザーから見えないよう秘匿され、定義を推測されうる内部最適化も制限される | 定義や元データを隠したい場合。データ共有(シェア)でビューを公開する際は必須級 |
| マテリアライズドビュー | クエリ結果を事前計算して保存し、参照時は保存済み結果を使う。元テーブルの変更は自動でメンテナンスされる(Enterprise 以上、1-2参照) | 繰り返し実行される集計クエリの高速化(詳細は 4-4) |
📝 試験のポイント
「ビューの定義(SQL)を他のロールから隠したい」→ セキュアビュー、「集計結果を事前計算して速くしたい」→ マテリアライズドビュー、という使い分けが問われることがあります。また、セキュアビューは定義の秘匿と引き換えに、オプティマイザの一部の最適化が適用されなくなるため、同じ定義の標準ビューより性能面で不利になる場合があるという性質も覚えておきましょう。
✅ この節のまとめ
問1. Snowflake のオブジェクト階層として正しいものはどれか。
正解:C
正しい階層は Organization(組織)> Account(アカウント)> Database > Schema > スキーマオブジェクト(テーブル等)です。Aは Organization と Account が逆、Bは Database と Schema が逆、Dは Account の位置が誤っています。「組織が複数アカウントを束ね、アカウントの中にデータベース、その中にスキーマ、その中にテーブル」という入れ子を確実に覚えましょう。
問2. アカウントレベルのオブジェクトはどれか(2つ選べ)。
正解:A・C
仮想ウェアハウスとリソースモニターはアカウントレベルのオブジェクトで、特定のデータベースやスキーマには属しません。Bのステージと Dのストリームはスキーマの中に作られるスキーマオブジェクトです。ウェアハウスがスキーマオブジェクトだと誤解しやすいので、「計算資源や管理系(ユーザー・ロール・リソースモニター・シェア)はアカウントレベル」と整理しておきましょう。
問3. セッションで使用する仮想ウェアハウスを切り替えるコマンドはどれか。
正解:B
ウェアハウスの切り替えは USE WAREHOUSE です。USE DATABASE / USE SCHEMA は名前解決の既定(どの db.schema を省略時に補うか)を決めるもの、USE ROLE はどの権限セットで操作するかを決めるものです。4つの USE コマンドはそれぞれ役割が異なるため、対象(ロール/ウェアハウス/データベース/スキーマ)とセットで覚えましょう。
問4. データ共有(シェア)で社外にビューを公開する際、ビューの定義を受領側から秘匿したい。使用すべきビューはどれか。
正解:B
セキュアビューは定義(SQL)を権限のないユーザーから秘匿し、定義を推測されうる最適化も制限されるビューで、データ共有でビューを公開する場面では必須級の選択です。Aの標準ビューは権限があれば定義を参照できてしまいます。Cのマテリアライズドビューは結果の事前計算による高速化が目的で、秘匿の仕組みではありません。Dは誤りで、秘匿はセキュアビューを明示的に選んだ場合の性質です。