Udemyの講座でSnowProの模擬試験をやってるとちょいちょい出てくるディレクトリテーブル。
よくわからないので調べて触ってみました。
完全にSnowPro Core試験のための自分用まとめです。
ディレクトリテーブルは、ステージで複数層になった暗黙のオブジェクトで(独立したデータベースオブジェクトではない)、ステージ内のデータファイルに関するファイルレベルのメタデータを格納するため、概念的には外部テーブルに似ています。ディレクトリテーブルには、独自の付与可能な権限はありません。
外部(外部クラウドストレージ)ステージと内部(Snowflake)ステージの両方でディレクトリテーブルをサポートします。ディレクトリテーブルは、ステージの作成時(CREATE STAGE を使用)またはそれ以降(ALTER STAGE を使用)にステージに追加できます。
テーブルやViewのように独立した項目で存在するわけではなくて、内部ステージ・外部ステージに対して設定するもののようです。
やってみる
SQLも見えますね。
デフォルトでディレクトリテーブルはTRUEになってました。
次に作った内部ステージに、適当な画像ファイルをアップロードします。(snowsql.png)
※画面内の「TEST_DB.TEST_SCHEMA」 は一個前の投稿で作ったDBとスキーマ。
アップロードしたらワークシートで内部ステージの中身を見てみましょう。
まずはディレクトリテーブル関係なしのLISTコマンド。
これは今まで外部ステージのファイル確認とかで使ったことあります。
list @TEST_INTERNAL_STAGE;
name | size | md5 | last_modified |
---|---|---|---|
test_internal_stage/snowsql.png | 6000 | 5cf3d36b64e616b0d10a05e07af34b37 | Sat, 31 Aug 2024 01:38:00 GMT |
次にディレクトリテーブルを有効化しているからできるselect文。
これは知らんかった。初。
select * from DIRECTORY(@TEST_INTERNAL_STAGE);
RELATIVE_PATH | SIZE | LAST_MODIFIED | MD5 | ETAG | FILE_URL |
---|---|---|---|---|---|
snowsql.png | 6000 | 2024-08-30 18:38:00.000 -0700 | 5cf3d36b64e616b0d10a05e07af34b37 | 5cf3d36b64e616b0d10a05e07af34b37 | https://xxxxx.snowflakecomputing.com/api/files/TEST_DB/TEST_SCHEMA/TEST_INTERNAL_STAGE/snowsql%2epng |
※FILE_URLの値のドメイン部分だけ伏字に変えています。
まとめ
ディレクトリテーブルのselect文の方が取得できる項目が多いです。
FILE_URLが取得できるのが良いところっぽいです。
公式ドキュメントで書いていた下記はそーゆーことか。
特に、ディレクトリテーブルを使用すると、以下のような非構造化データのタスクを達成できます。
ステージにあるすべての非構造化ファイルのリストをクエリする。ディレクトリテーブルをクエリして、ステージにあるすべてのファイルのリストを取得できます。クエリ出力には、サイズ、最終更新日時のタイムスタンプ、および Snowflakeファイル URL などの各ファイルに関する情報が含まれます。
非構造化データのビューを作成する。非構造化ファイルに関する追加データとメタデータを含んだSnowflakeテーブルとディレクトリテーブルを結合して、非構造化ファイルとその関連データを単一のビューで表示することができます。
ファイル処理パイプラインを構築する。ディレクトリテーブルをSnowpark API または外部関数で使用して、ファイル処理パイプラインを作成できます。
疑問点
ただ、このFILE_URLをブラウザのURL欄にコピペしてもアクセスできない。
ワークシートの結果のURLをクリックするとファイルダウンロードできる。
ここがまだよくわかっていないところ。
「Snowflake経由じゃないとアクセスできないよ」ということ?