Directory Tables(ディレクトリテーブル)は、Snowflakeのステージ上にあるファイルの メタデータ(パス・サイズ・更新日時・チェックサムなど)をSQLで照会できる機能です。 データレイク上のファイル管理をSnowflakeのSQL操作に統合でき、 ファイル一覧の取得・差分検出・Streamによるファイル到着イベント駆動処理を実現します。
-- 既存ステージに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);| 列名 | 型 | 説明 |
|---|---|---|
| RELATIVE_PATH | VARCHAR | ステージのルートからの相対ファイルパス |
| SIZE | NUMBER | ファイルサイズ(バイト) |
| LAST_MODIFIED | TIMESTAMP_LTZ | ファイルの最終更新日時 |
| MD5 | VARCHAR | ファイルのMD5ハッシュ(External Stageのみ) |
| ETAG | VARCHAR | クラウドストレージのETag |
| FILE_URL | VARCHAR | Snowflake内部でファイルにアクセスするためのURL |
-- ステージ内の全ファイル一覧を取得
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 S3 | SNSトピック + S3イベント通知 | SYSTEM$GET_AWS_SNS_IAM_POLICY()でポリシーを取得し、SNSに設定 |
| Azure Blob | Event Grid | SYSTEM$GET_AZURE_SAS_TOKEN()でSASトークンを生成し、Event Gridを構成 |
| GCS | Pub/Sub通知 | SYSTEM$GET_GCP_SERVICE_ACCOUNT()でサービスアカウントを取得し、Pub/Subに設定 |
-- 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)
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');Data Loading
問題 1
S3上のExternal StageでDirectory Tablesを有効化し、AUTO_REFRESH = TRUEを設定した。新しいファイルがS3にアップロードされたがDIRECTORY()関数の結果に反映されない。最も可能性の高い原因はどれか。
正解: 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 を手動実行してメタデータを更新する必要があります。
NicheeLab編集部
データエンジニアリング・クラウド資格の専門家。Databricks・Snowflake等の認定資格を保有し、実務経験に基づいた問題作成・解説を行っています。NicheeLab運営。
Snowflake資格一覧|全11試験(SnowPro)の難易度・費用
Snowflake認定資格(SnowPro)全11試験の一覧・難易度・費用・出題範囲を徹底解説。...
Snowflake試験の難易度ランキング|全11資格を徹底比較
Snowflake(SnowPro)認定全11試験の難易度をランキング形式で比較。学習時間・合格に必要なスキルから分析。...
Snowflake資格の勉強方法|効率的な学習ルートと合格のコツ
Snowflake認定資格(SnowPro)に最短で合格するための勉強方法。公式リソース・学習スケジュールを徹底ガイド。...
SnowPro Core試験完全解説|出題範囲・問題例・合格戦略
SnowPro Core Certification(COF-C03)を徹底解説。出題範囲・100問の試験形式・合格ライ...
SnowPro Platform Associate完全解説|入門試験の攻略
SnowPro Associate: Platform Certification(SOL-C01)を徹底解説。最も簡単...