Snowflakeのステージは外部ステージしか使ったことがありません。
そんな状況でSnowPro Coreのための勉強で内部ステージについて調べていたら、内部ステージは以下3種類があると。
公式ドキュメント:ローカルファイルに対する内部ステージの選択
- user stage(ユーザーステージ)
- table stage(テーブルステージ)
- named stage(名前付きステージ)
ドキュメントを読んで触りながらまとめました。
user stage(ユーザーステージ)
各ユーザーには、デフォルトでファイルを保存するためのSnowflakeステージが割り当てられています。このステージは、ファイルが1人のユーザーのみによってアクセスされるが、複数のテーブルにコピーする必要がある場合に便利なオプションです。
ユーザーステージには、次の特性と制限があります。
・ユーザーステージは @~ を使用して参照されます。たとえば、 LIST @~ を使用して、ユーザーステージのファイルを一覧表示します。
・名前付きステージとは異なり、ユーザーステージは変更またはドロップできません。
・ユーザーステージは、ファイル形式オプションの設定をサポートしていません。代わりに、 COPY INTO <テーブル> コマンドの一部としてファイル形式とコピーオプションを指定する必要があります。
なるほど。やってみます。
list @~; --listの部分はlsでも可
name | size | md5 | last_modified |
---|---|---|---|
worksheet_data/2ff67368-5339-46b3-9b9b-cf29f2650263 | 240 | bbfcac20153975136b379d304f686ec0 | Wed, 9 Nov 2022 09:23:59 GMT |
worksheet_data/metadata | 432 | 262df0fc198efaa3fb2413e253d23311 | Wed, 9 Nov 2022 09:24:03 GMT |
ワークシートのデータが入っているみたい。
でもワークシートの数だけあるわけではない。(実際ワークシートはいっぱいあるので。)
table stage(テーブルステージ)
各テーブルには、デフォルトでファイルを保存するためのSnowflakeステージが割り当てられています。このステージは、複数のユーザーがファイルにアクセスでき、単一のテーブルにコピーするだけでよい場合に便利なオプションです。
テーブルステージには、次の特性と制限があります。
・テーブルステージの名前はテーブルと同じです。たとえば、 mytable という名前のテーブルには、 @%mytable として参照されるステージがあります。
・名前付きステージとは異なり、テーブルステージは変更またはドロップできません。
・テーブルステージは、ロード中のデータの変換をサポートしません(つまり、クエリを COPY コマンドのソースとして使用)。
なるほど。やってみます。
list @%TEST_TABLE; --listの部分はlsでも可
name | size | md5 | last_modified |
---|
クエリで結果が生成されませんでした
このテーブルステージにファイルをアップロードしたことがないので結果0件でOK。
named stage(名前付きステージ)
名前付きステージは、データのロードに最大限の柔軟性を提供するデータベースオブジェクトです。
・ステージで適切な権限を持つユーザーは、任意のテーブルにデータをロードできます。
・ステージはデータベースオブジェクトであるため、すべてのオブジェクトに適用されるセキュリティ/アクセスルールが適用されます。ステージを使用する権限は、ロールから付与または取り消すことができます。さらに、ステージの所有権は、別のロールに移譲することができます。
なるほど。やってみます。
Snowsightでステージを開くと「TEST_INTERNAL_STAGE」という内部ステージがありました。
多分1年くらい前に自分で作ったやつです。
list @TEST_INTERNAL_STAGE; --listの部分はlsでも可
name | size | md5 | last_modified |
---|---|---|---|
test_internal_stage/test.csv | 32 | 65af850f5d11e29af7cece20dad1afba | Wed, 2 Aug 2023 01:31:38 GMT |
1年くらい前にアップロードしたcsvが出てきました。
感想
ドキュメントを読むだけじゃなくて自分で触ってみると完全に理解できます。
補足
SnowPro Core試験対策メモ。
ステージ参照の正解を選ばせる問題が来たら「show」じゃなくて「list」「ls」を選ぶべし。
show @TEST_INTERNAL_STAGE;
SQLコンパイルエラー:
位置 6 の構文エラー行 1 、予期しない「@TEST_INTERNAL_STAGE」。