![見出し画像](https://assets.st-note.com/production/uploads/images/127220370/rectangle_large_type_2_08d6295b25fca3963985398891b385b6.png?width=1200)
SnowflakeでS3のクエリを実行してみた
分析屋の中田(ナカタ)です。
SnowflakeのEXECUTE IMMEDIATE FROM文を試してみました。
EXECUTE IMMEDIATE FROMとは
EXECUTE IMMEDIATE FROM | Snowflake Documentation
ステージに配置したsqlファイルを読み込み、実行することができます。
現在はパブリックプレビュー版の機能です。
今回やること
Amazon S3のバケットにsqlファイルを配置します。
その後、Snowflakeワークシートからsqlファイルを呼び出して実行します。
環境
Snowflakeのエディション:エンタープライズ版
クラウド:AWS(東京リージョン)
前提
拡張子sqlのファイルについて
正体はただのテキストファイルで、テキストエディタ(メモ帳、サクラエディタ、VSCode等)で編集可能です。
拡張子sqlとすることで、SQL文が書かれている目印になります。
事前準備
外部ステージを作成します。
今回はこちらの手順は割愛します。
AWS側、Snowflake側それぞれでの設定内容が多く書ききれないのと
参考になる解説記事がWeb検索で容易に見つかるためです。
今回は以下の画像の通り外部ステージを作成しました。
![](https://assets.st-note.com/img/1704857611693-FwlObV9sIG.png?width=1200)
DB名:TRAIN
スキーマ名:KNAKATA
外部ステージ名:KNAKATA_AWS_S3_EX_STAGE
連携先のS3バケットURI:S3://for_snowflake_backet/
また、S3に配置するsqlファイルを作成します。
テーブル作成、データ挿入、テーブル表示のシンプルな3文です。
CREATE OR REPLACE TABLE TRAIN.KNAKATA.EXE_TEST (
col1 INT,
col2 INT
);
INSERT INTO TRAIN.KNAKATA.EXE_TEST VALUES
(1,100),
(2,200),
(3,300)
;
SELECT * FROM TRAIN.KNAKATA.EXE_TEST;
①S3に配置する
作成したsqlファイルを、外部ステージと連携したS3バケットにアップロードします。
![](https://assets.st-note.com/img/1704857666302-egnv3IEJSj.png)
ちなみに余談ですが
アップロードしたファイルの内容を確認したい場合はS3 SELECT機能が便利です。
xlsxなどのバイナリ形式は閲覧できませんが、単純なテキストファイルであればS3からダウンロードすることなくSQL文で閲覧できます。
閲覧したいファイルのチェックボックスをONにして
「アクション」>「S3 Selectを使用したクエリ」をクリック
![](https://assets.st-note.com/img/1704857691251-gmIqIpGbPk.png?width=1200)
いろいろ設定項目がありますが今回はスルーして
「SQLクエリ」のエディタにSELECT文を書きます。
デフォルトで書かれている文のLIMIT 5を削除して「SQL クエリの実行」をクリック
![](https://assets.st-note.com/img/1704857731149-Eo716OebQA.png?width=1200)
画面を少し下にスクロールすると、実行結果が表示されます。
![](https://assets.st-note.com/img/1704857740335-lRok6YJ519.png)
想定通りのアップロードができています(そりゃそうですね)。
②実行してみる
Snowflakeワークシートで以下のクエリを実行します。
EXECUTE IMMEDIATE FROM @KNAKATA_AWS_S3_EX_STAGE/sample_query.sql;
想定通り、テーブル作成・データ挿入・テーブル表示までなされたであろうことが分かります。
![](https://assets.st-note.com/img/1704857789414-fAXeYa5nph.png?width=1200)
構文は
EXECUTE IMMEDIATE FROM @ステージ名(/途中のパス)/ファイル名.sql;
という書き方です。
EXECUTE IMMEDIATE自体はこれまでSnowflakeでも使用可能でした。
直後に文字列リテラルで指定したクエリを実行してくれます。
OracleやBigQueryで、動的なクエリを実行したい場合によく使う方もいらっしゃると思います。
参考:SnowflakeのEXECUTE IMMEDIATE
最後に
・sqlファイルをS3に配置、GitやAWS CodeCommitでコード管理させる
・EXECUTE IMMEDIATE FROMを実行するSnowflakeタスクを作成
・タスクをスケジュール実行
のような構成もできそうです!
ここまでお読みいただき、ありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです!
これまでの記事はこちら!
株式会社分析屋について
弊社が作成を行いました分析レポートを、鎌倉市観光協会様HPに掲載いただきました。
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。