SnowflakeCoreProを受験
snowflakeの認定試験の登竜門であるSnowPro Core
を受けてきた際の後学の為の備忘メモを残しておきます。
振り返りが必要な項目について
フェデレーション認証とは?
定義:
SAML/OAuth 経由で Okta, Azure AD など IdP と Snowflake を連携する方式
特徴:
ユーザー認証は Snowflake ではなく IdP が行う
ログイン時は IdP の認証画面に遷移する(SSO、外部ブラウザ認証など)
SnowSQL では --authenticator externalbrowser を指定して起動
セキュアビューとは?
意図:
データのロジックやメタデータを秘匿化
ビューの中身を他ユーザーが確認できない(EXPLAIN でも不可)
違い:
通常ビューは内部構造や参照テーブルが見える
セキュアビューはセキュリティ上安全なマスキングの一種
PUT / COPY INTO / GET の違い
コマンド | 用途 |
---|---|
PUT | ローカル → ステージ(アップロード) |
COPY INTO | ステージ → テーブル or テーブル → ステージ |
GET | ステージ → ローカル(ダウンロード) |
Snowflakeからのアンロード/エクスポート
COPY INTO @stage FROM table_name を使用
例:
COPY INTO @my_stage/data_
FROM my_table
FILE_FORMAT = (TYPE = 'CSV');
GET でローカルにダウンロード可能
OPERATE と USAGE の違い
権限 | 内容 |
---|---|
USAGE | オブジェクトの「存在確認・参照」が可能。操作はできない |
OPERATE | Warehouse や Task などの実行操作(Resume/Suspend や開始/停止)が可能 |
FLATTEN と LATERAL の使い方
FLATTEN:ARRAY や VARIANT のネストデータを行単位に展開
LATERAL:FLATTEN した行を他の列と一緒に結合するために使う
SELECT id, f.value
FROM json_table,
LATERAL FLATTEN(input => json_table.data) f;
浮動小数が扱えるフォーマット
Parquet, Avro, ORC
Snowflake が扱うデータ形式のうち、浮動小数点数に適した形式
アンロード時の FILE_FORMAT に指定可能
クエリプロファイルの見方(重要)
項目 | 内容 |
---|---|
Time (ms) | ステップごとの処理時間(遅延特定に重要) |
Rows | 処理された行数(大量に処理される箇所を特定) |
Bytes scanned | スキャンされたデータ量(マイクロパーティションの無駄確認) |
Partitions scanned | クラスタリングとフィルタの効き具合の指標 |
VARIANT の最大値
1セルあたり最大 16MB(非圧縮)
深いネストは最大 100 階層まで
ドライバーのバージョン確認方法
snowflakeのバージョンを格にする方法もあるので、下記に整理しておく。
ツール | 方法 |
---|---|
SnowSQL | snowsql -v |
JDBC |
SnowflakeDriver.class.getVersion() など Java コードで確認 |
Web UI | Snowsight > Help > About(バージョン確認) |
仮想ウェアハウスが詰まる原因と対処法
症状:
複数プロセスが同時に実行 → キューが溜まり遅くなる
時間が経てば自然回復することもあるが、それは一時的な対応に過ぎない
正しい対応方法:
対処方法 | 推奨度 |
---|---|
JOINの見直し・クエリ最適化 | ◎ |
ウェアハウスのサイズを上げる | ◎ |
マルチクラスターを設定しクラスター追加 | ◎ |
SELECT句の最適化(不要列削除) | ◯ |
放置して時間解決を待つだけ | ✕ |
非相関・相関のサブクエリ
Snowflakeにおいてもサブクエリ発行時に非相関・相関のサブクエリの考え方がもちろんあるのでサブクエリの考え方は押さえておきたい。
簡単にイメージで説明すると
非相関サブクエリは、呼び出し元とサブクエリ内で参照しあっていない(=相関がない
)、一方で相関サブクエリは、サブクエリ内で呼び出し元のテーブルなどが参照されている(=相関しあっている
)と言うイメージになるかと思う。
下記がわかりやすくまとめられている。
タグについて
snowflakeには、スキーマレベルのオブジェクトとしてタグをつけることができるとのことで、概念については覚えておきたい。
https://docs.snowflake.com/ja/user-guide/object-tagging