SnowPro Core資格への道 ~Part10:ディレクトリテーブル~
はじめに
9月のSnowflake World Tour TokyoまでにSnowPro Coreをとります!
試験を8月28日(木)に受けようと思います。あと33日。
全然進歩している感じがしない・・・。5月に一度心折れたときは49%だったのが今65%という感じ。合格ラインに達するためにはまだまだ修行が必要そう😢
現在こちらのUdemyの問題を解いています。
Snowflake SnowPro Core Certification Practice Tests COF-C02
今日のテーマはディレクトリテーブルです。
ディレクトリテーブルとは
ディレクトリテーブルは、ステージで複数層になった暗黙のオブジェクトで(独立したデータベースオブジェクトではない)、ステージ内のデータファイルに関するファイルレベルのメタデータを格納するため、概念的には外部テーブルに似ています。ディレクトリテーブルには、独自の付与可能な権限はありません。
Snowflakeのディレクトリテーブルは、ステージングされたファイルに関するメタデータを表形式で提供し、データロードプロセスを効率化するための機能です。主な特徴は以下の通りです。
ファイルメタデータの自動検出とクエリ
自動検出: ステージ(内部または外部)に追加されたファイルを自動的に検出し、そのメタデータ(ファイル名、サイズ、最終更新日時など)をテーブルに記録します。
クエリ機能: SQLクエリを使用して、ステージ内のファイルの一覧を取得したり、特定の条件でファイルをフィルタリングしたりできます。これにより、ロードするファイルを正確に把握できます。
データロードの効率化
選択的なロード: ファイル名や更新日時などのメタデータに基づいて、ロードするファイルを柔軟に選択できます。例えば、特定の期間に更新されたファイルのみをロードすることが可能です。
パイプラインの自動化: ディレクトリテーブルとSnowpipeを組み合わせることで、新しいファイルがステージに追加された際に自動的にデータロードを実行するパイプラインを構築できます。
アクセス制御とセキュリティ
権限設定: ディレクトリテーブルへのアクセスは、ステージに対する権限によって制御されます。読み取り(READ)や書き込み(WRITE)などの権限をロールに付与することで、セキュリティを確保できます。
コスト管理
更新方法による課金:
自動更新: Snowpipeを利用して自動でメタデータを更新する場合、Snowpipeの料金が発生します。
手動更新: 手動でメタデータを更新する場合、標準のクラウドサービス料金が適用されます。
ディレクトリテーブルのメタデータを更新する場合、通知経由または手動(ALTER STAGE <ステージ名> REFRESH 経由)を問わず、少額のメンテナンス費用が発生します。この少額のメンテナンス費用は、クラウドサービスの料金に含まれます。
さらに、クラウドプラットフォーム通知をご利用の場合、追加料金が発生します。これは、請求明細書にSnowpipeの料金として記載されます。Snowpipeの料金は、自動更新をトリガーするイベント通知にSnowpipeが使用されるため発生します。
SQLを動かしてみた
-- 1.データベース作成
create OR replace database db_directory_tbl;
-- 2. Snowflake内部ステージを作成
CREATE OR REPLACE STAGE my_stage
url = 's3://frostyfridaychallenges/challenge_3/'
DIRECTORY = (ENABLE = TRUE);
-- 3. ディレクトリ同期
ALTER STAGE my_stage REFRESH;
-- 4. 確認
SELECT * FROM DIRECTORY( @my_stage );
-- 5.STREAMを作ってみる
CREATE STREAM my_directory_stream
ON STAGE my_stage;
-- 6.STREAMで変更履歴の確認が可能
select * from my_directory_stream;
実行してみたところ、Frosty FridayWeek3のディレクトリテーブルの確認ができます。

STREAMも同じステージに作成してみました。ファイルに変更等があれば、6のmy_directory_streamをselectすることで、変更履歴が確認可能です。(こちらも結果を確認しましたが、変更がないのでデータは0件です)

まとめ
SnowPro Associateの認定を受けて、Coreも頑張ろう!と意気込んでUdemyを2回目解いてみましたが玉砕しました・・・。引き続きブログへのアウトプットは続けていきます。
Discussion