Snowflake

Snowflake Directory Tablesでステージ内ファイルのメタデータを管理する方法

2026-03-26
更新: 2026-03-27
NicheeLab編集部
目次
  1. Directory Tablesの有効化
  2. Directory Tablesのメタデータ列
  3. Directory Tablesへのクエリ
  4. メタデータの手動リフレッシュ
  5. 自動リフレッシュのクラウド別設定
  6. Streamとの連携でファイル到着駆動処理
  7. ファイルURL関数
  8. コスト見積もり
  9. ベストプラクティス
  10. 問題で確認
  11. よくある質問

Directory Tables(ディレクトリテーブル)は、Snowflakeのステージ上にあるファイルの メタデータ(パス・サイズ・更新日時・チェックサムなど)をSQLで照会できる機能です。 データレイク上のファイル管理をSnowflakeのSQL操作に統合でき、 ファイル一覧の取得・差分検出・Streamによるファイル到着イベント駆動処理を実現します。

Directory Tablesの有効化

-- 既存ステージにDirectory Tablesを有効化
ALTER STAGE raw_data_stage SET DIRECTORY = (ENABLE = TRUE);

-- 新規ステージ作成時に有効化(External Stage / S3の例)
CREATE OR REPLACE STAGE landing_stage
  URL = 's3://my-bucket/landing/'
  STORAGE_INTEGRATION = s3_integration
  DIRECTORY = (ENABLE = TRUE);

-- 自動リフレッシュも同時に有効化
CREATE OR REPLACE STAGE landing_stage
  URL = 's3://my-bucket/landing/'
  STORAGE_INTEGRATION = s3_integration
  DIRECTORY = (
    ENABLE = TRUE
    AUTO_REFRESH = TRUE
  );

-- Internal Stageの場合
CREATE OR REPLACE STAGE internal_landing
  DIRECTORY = (ENABLE = TRUE);

Directory Tablesのメタデータ列

列名型説明
RELATIVE_PATHVARCHARステージのルートからの相対ファイルパス
SIZENUMBERファイルサイズ(バイト)
LAST_MODIFIEDTIMESTAMP_LTZファイルの最終更新日時
MD5VARCHARファイルのMD5ハッシュ(External Stageのみ)
ETAGVARCHARクラウドストレージのETag
FILE_URLVARCHARSnowflake内部でファイルにアクセスするためのURL

Directory Tablesへのクエリ

-- ステージ内の全ファイル一覧を取得
SELECT * FROM DIRECTORY(@landing_stage);

-- 特定の拡張子でフィルタ
SELECT relative_path, size, last_modified
FROM DIRECTORY(@landing_stage)
WHERE relative_path LIKE '%.parquet';

-- 過去24時間以内に追加されたファイル
SELECT relative_path, size, last_modified
FROM DIRECTORY(@landing_stage)
WHERE last_modified >= DATEADD(HOUR, -24, CURRENT_TIMESTAMP());

-- ファイル数とサイズの集計
SELECT
  SPLIT_PART(relative_path, '.', -1) AS file_extension,
  COUNT(*) AS file_count,
  SUM(size) / (1024 * 1024) AS total_size_mb
FROM DIRECTORY(@landing_stage)
GROUP BY file_extension
ORDER BY total_size_mb DESC;

メタデータの手動リフレッシュ

-- ステージ全体のメタデータをリフレッシュ
ALTER STAGE landing_stage REFRESH;

-- 特定のサブパスのみリフレッシュ(大量ファイル時に効率的)
ALTER STAGE landing_stage REFRESH SUBPATH = '/2026/03/';

自動リフレッシュ(AUTO_REFRESH = TRUE)が有効な場合、クラウドストレージ側のイベント通知をトリガーにメタデータが自動更新されます。Internal Stageでは自動リフレッシュが利用できないため、手動リフレッシュが必須です。

自動リフレッシュのクラウド別設定

クラウドイベント通知設定手順
AWS S3SNSトピック + S3イベント通知SYSTEM$GET_AWS_SNS_IAM_POLICY()でポリシーを取得し、SNSに設定
Azure BlobEvent GridSYSTEM$GET_AZURE_SAS_TOKEN()でSASトークンを生成し、Event Gridを構成
GCSPub/Sub通知SYSTEM$GET_GCP_SERVICE_ACCOUNT()でサービスアカウントを取得し、Pub/Subに設定

Streamとの連携でファイル到着駆動処理

-- Directory TableにStreamを作成
CREATE OR REPLACE STREAM landing_file_stream
  ON STAGE landing_stage;

-- Streamから新着ファイルを検出
SELECT *
FROM landing_file_stream
WHERE METADATA$ACTION = 'INSERT';

-- Taskと連携して新着ファイルを自動処理
CREATE OR REPLACE TASK process_new_files
  WAREHOUSE = etl_wh
  SCHEDULE = '5 MINUTE'
  WHEN SYSTEM$STREAM_HAS_DATA('landing_file_stream')
AS
  COPY INTO raw_data
  FROM @landing_stage
  FILES = (
    SELECT RELATIVE_PATH
    FROM landing_file_stream
    WHERE METADATA$ACTION = 'INSERT'
  )
  FILE_FORMAT = (TYPE = 'PARQUET');

ファイルURL関数

-- スコープ付きURL(セッション内で有効な一時URL)
SELECT BUILD_SCOPED_FILE_URL(@landing_stage, relative_path)
FROM DIRECTORY(@landing_stage)
WHERE relative_path LIKE '%.pdf';

-- ステージURL(Snowflake内部参照用)
SELECT BUILD_STAGE_FILE_URL(@landing_stage, relative_path)
FROM DIRECTORY(@landing_stage);

-- 署名付きURL(外部共有用、有効期限付き)
SELECT GET_PRESIGNED_URL(@landing_stage, relative_path, 3600)
FROM DIRECTORY(@landing_stage)
WHERE relative_path = 'reports/2026-Q1.pdf';

コスト見積もり

-- 自動リフレッシュのコスト見積もり
SELECT SYSTEM$ESTIMATE_AUTOMATIC_REFRESH_COST('landing_stage');

ベストプラクティス

  • 自動リフレッシュはExternal Stageでのみ有効化:Internal Stageでは手動リフレッシュを定期Taskで実行するパターンが一般的
  • サブパス別リフレッシュで効率化:日付パーティション単位でREFRESH SUBPATHを指定し、不要なスキャンを回避する
  • Streamと組み合わせてCDCパターンを構築:Directory Table上のStreamでファイル到着を検知し、Taskで自動ロードを実行する
  • LIST @stageとの使い分け:LIST @stageはリアルタイムの一覧取得だがキャッシュされない。Directory Tablesはメタデータがキャッシュされ高速だが、リフレッシュまでのラグがある

問題で確認

Data Loading

問題 1

S3上のExternal StageでDirectory Tablesを有効化し、AUTO_REFRESH = TRUEを設定した。新しいファイルがS3にアップロードされたがDIRECTORY()関数の結果に反映されない。最も可能性の高い原因はどれか。

  1. Directory Tablesは Internal Stageでのみ利用可能であり、External Stageでは動作しない
  2. S3バケットからSnowflakeへのSNSイベント通知の設定が完了していない
  3. AUTO_REFRESH機能にはEnterprise Edition以上が必要である
  4. DIRECTORY()関数ではなくLIST @stageコマンドを使用する必要がある

正解: B

S3のDirectory Tablesの自動リフレッシュには、S3バケットのイベント通知→SNSトピック→Snowflakeという通知パイプラインの設定が必要です。この設定が不完全だとファイル追加イベントがSnowflakeに到達せず、メタデータが自動更新されません。Directory TablesはExternal/Internal両方のStageで利用可能で、Standard Editionでも使用できます。

よくある質問

Directory Tablesの自動リフレッシュではクレジットが発生しますか?

はい。自動リフレッシュはイベント通知(AWS SNS / Azure Event Grid / GCP Pub/Sub)を契機にメタデータを更新するサーバーレス処理であり、Serverless Creditとして課金されます。ファイルの追加・削除頻度が高いステージではコストが増加するため、SYSTEM$ESTIMATE_AUTOMATIC_REFRESH_COST()関数で事前にコストを見積もることが推奨されます。

Directory Tablesのメタデータにカスタム列を追加できますか?

Directory Tables自体にカスタム列を追加することはできません。固定のカラム(RELATIVE_PATH, SIZE, LAST_MODIFIED, MD5, ETAG, FILE_URL)のみが提供されます。カスタム属性が必要な場合は、Directory Tablesの結果と外部メタデータ管理テーブルをJOINするパターンが一般的です。

Internal StageとExternal StageのどちらでもDirectory Tablesは使えますか?

はい、どちらのステージタイプでもDirectory Tablesを有効化できます。ただし自動リフレッシュはExternal Stage(S3/GCS/Azure Blob)でのみサポートされます。Internal Stageの場合はALTER STAGE REFRESH を手動実行してメタデータを更新する必要があります。

クラウドの基礎から読む

資格の話をしない、クラウドそのものの入門 8 章があります。登録なしで全部読めます。

第 0 部・無料

クラウド自体がはじめての方へ

サーバー・ネットワーク・データベースの前提知識なしで読める 8 章。登録不要・無料。

この記事で学んだ内容を問題で確認しましょう

16,000問以上の問題で実力チェック

無料で問題を解いてみる
この記事の著者

NicheeLab編集部

データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。


関連記事
Snowflake

Snowflake資格一覧|全11試験(SnowPro)の難易度・費用

Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。SnowparkとDat...

Snowflake

Snowflake試験の難易度ランキング|全11資格を徹底比較

Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...

Snowflake

Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ

Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...

Snowflake

SnowPro Core試験完全解説|出題範囲・問題例・合格戦略

SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...

Snowflake

SnowPro Platform Associate(SOL-C01)完全解説|現在は予約不可・試験内容と次の受験先

SnowPro Associate: Platform(SOL-C01)は2026年10月時点でSnowflakeの公式...

Snowflakeの記事一覧 (102件)
© 2026 NicheeLab All rights reserved.