SnowflakeのStageをデータベース名から指定する
前置き
こんにちは。さすらいのデータエンジニア、こみぃです。
みなさんSnowflakeのStage使ってますか?
昨日Stageを使ったシステムを触っていて、何故かググっても記事が見つからなくて少し迷った件について簡単にまとめます。
Stageの通常の使い方
StageへのSQLの打ち方は公式のドキュメントにも記載されている通りこんな感じです。
SELECT t.$1, t.$2 FROM @mystage1 (file_format => 'myformat', pattern=>'.*data.*[.]csv.gz') t;
しかし、Stageはスキーマの下にあるオブジェクトなので、このSQLはデータベース名とスキーマ名をuseで事前に指定しているのが前提になります。
※myformatも同じ場所にある前提
先にこういうのが必要
USE DATABASE komiyama_test;
USE SCHEMA stage_test;
StageへのSQLでデータベース名から指定する
今回の用途ではデータベース名とスキーマ名を事前に指定していない状況でデータベースから指定する方法です。
先にuse打ってからやればいいじゃんと思うかもしれませんが、できないこともあります。ツールを使っててSQL一つで指定しなきゃいけなくてかつ接続設定が共通だからデータベースやスキーマを事前に指定できないとか(めっちゃ具体的事例がありそうなフラグ)!!!
結論としてはSQL内で指定できます。具体的にはこう!!
SELECT t.$1, t.$2 FROM @komiyama_test.stage_test.mystage1 (file_format => 'komiyama_test.stage_test.myformat', pattern=>'.*data.*[.]csv.gz') t;
stage、file_formatともにdatabase.schemaをつければいいだけですが、stageが@の後ろに書かないと行けなかったり、file_formatはシングルクオートの中に書かないといけないなど、ちょっと直感的には違和感のある記述になりますね。
本日のまとめ
そんなわけで本日のまとめはこちらです。
StageへのSQLでデータベース名は指定できる
結びの言葉
使っているツールの仕様などで使えるSQLが制限されることはあるのですが、諦めてはいけないという良い例ですね。
今回はサポートに問い合わせようかと思ってましたが、雰囲気で数パターン試したらできたので事なきを得ました。
本日はこのあたりで。
それじゃあ、バイバイ!

Snowlfake データクラウドのユーザ会 SnowVillage のメンバーで運営しています。 Publication参加方法はこちらをご参照ください。 zenn.dev/dataheroes/articles/db5da0959b4bdd
Discussion