0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflakeのディレクトリテーブルについてメモ

Last updated at Posted at 2024-08-31

Udemyの講座でSnowProの模擬試験をやってるとちょいちょい出てくるディレクトリテーブル。
よくわからないので調べて触ってみました。
完全にSnowPro Core試験のための自分用まとめです。

公式ドキュメント:ディレクトリテーブル

ディレクトリテーブルは、ステージで複数層になった暗黙のオブジェクトで(独立したデータベースオブジェクトではない)、ステージ内のデータファイルに関するファイルレベルのメタデータを格納するため、概念的には外部テーブルに似ています。ディレクトリテーブルには、独自の付与可能な権限はありません。
外部(外部クラウドストレージ)ステージと内部(Snowflake)ステージの両方でディレクトリテーブルをサポートします。ディレクトリテーブルは、ステージの作成時(CREATE STAGE を使用)またはそれ以降(ALTER STAGE を使用)にステージに追加できます。

テーブルやViewのように独立した項目で存在するわけではなくて、内部ステージ・外部ステージに対して設定するもののようです。

やってみる

内部ステージを作ってみます。
GUIから作成します。
GUI内部ステージ作成.png

SQLも見えますね。
デフォルトでディレクトリテーブルはTRUEになってました。

次に作った内部ステージに、適当な画像ファイルをアップロードします。(snowsql.png)
スクリーンショット 2024-08-31 103752.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

スクリーンショット 2024-08-31 104013.png
4項目が取得できました。

次にディレクトリテーブルを有効化しているからできる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の値のドメイン部分だけ伏字に変えています。

スクリーンショット 2024-08-31 104126.png
6項目が取得できました。

まとめ

ディレクトリテーブルのselect文の方が取得できる項目が多いです。
FILE_URLが取得できるのが良いところっぽいです。

公式ドキュメントで書いていた下記はそーゆーことか。

特に、ディレクトリテーブルを使用すると、以下のような非構造化データのタスクを達成できます。

ステージにあるすべての非構造化ファイルのリストをクエリする。ディレクトリテーブルをクエリして、ステージにあるすべてのファイルのリストを取得できます。クエリ出力には、サイズ、最終更新日時のタイムスタンプ、および Snowflakeファイル URL などの各ファイルに関する情報が含まれます。

非構造化データのビューを作成する。非構造化ファイルに関する追加データとメタデータを含んだSnowflakeテーブルとディレクトリテーブルを結合して、非構造化ファイルとその関連データを単一のビューで表示することができます。

ファイル処理パイプラインを構築する。ディレクトリテーブルをSnowpark API または外部関数で使用して、ファイル処理パイプラインを作成できます。

疑問点

ただ、このFILE_URLをブラウザのURL欄にコピペしてもアクセスできない。
ワークシートの結果のURLをクリックするとファイルダウンロードできる。
ここがまだよくわかっていないところ。
「Snowflake経由じゃないとアクセスできないよ」ということ?

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?