Snowflake Knowledge - INSIGHT LAB

Digdagを使ってSnowflakeでクエリを実行してみた

作成者: BI LAB編集室|2021年12月16日

この記事はSnowflake Advent Calendar 2021の16日目の記事になります!

こんにちは!最近親知らずを抜いたLeonです!

虫歯治療ってことで歯医者にいったところとりあえず抜いちゃいます?って軽い感じで聞かれそのまま抜いてしまいました。
抜歯後は多少出血しましたがそれほど痛みもなく腫れも無く治っていってるようで恵まれてるようです。。。よかった。。。

一生モノの歯は大事にしていきたいですね…

ということでタイトルにもある通り、今回は有名なワークフローエンジンDigdagでSnowflakeを扱うサードパーティプラグインがあり気になったので触ってみたいと思います!

Digdagとは?

TreasureData社がオープンソースソフトウェアとして公開しているワークフローエンジンで複雑なデータパイプラインを構築・実行・スケジュール・管理がしやすいツールになっています。

yamlで処理をシンプルに記載できるので慣れていない方も取っつきやすく、
Python/Rubyも対応しているのでそちらに慣れている方も扱いやすいかと思います。

定番なワークフローエンジンの一つであり具体的な内容については色んな方々が記事にされていると思いますので今回は省きます。
是非気になる方はググってみてください!
公式サイトはこちら!

プラグインを触る

それではDigdagを使ってSnowflakeに繋いでみます!
Digdagを試してみたい方はGetting startedを参考にインストールしてお試しください。

早速設定を作成していくのですが
DigdagでSnowflakeに接続する場合公式のオペレータが存在しておりません。。。

ですがサードパーティプラグインとして有志の方々が開発されております!
digdag_operator_snowflake
作成された皆様、素晴らしいプラグインをありがとうございます!

シークレット設定

まずは接続するためにパスワード情報のsecretsを設定します。
secretsについては以下を参照してください。
https://docs.digdag.io/command_reference.html#secrets
secretsはコマンドラインから設定します。
今回はお試しなのでローカルシークレットで試します。

digdag secrets --local --set snow.password

こちらにはSnowflakeにログインする際のパスワードを入力しましょう。

入力できたら以下のコマンドでセットされたか確認します。

digdag secrets --local


snow.passwordが表示されていればOKです。

digファイル作成

続いてdigファイルの中身を作ります。
サンプルとしてテスト用のSQLファイルを実行させることにします。

_export:
  plugin:
    repositories:
      - https://jitpack.io
    dependencies:
      - com.github.flinters:digdag_operator_snowflake:v0.1.3
  snow:
    host: xxxxxxx.ap-northeast-1.aws.snowflakecomputing.com
    user: xxxxx
    warehouse: DEMO_WH


+run_task:
  snow>: test.sql

内容を見ていきましょう。

host:
Snowflakeにアクセスする際のURLを見ていただければ例のような部分があると思います
詳細→https://docs.snowflake.com/ja/user-guide/organizations-connect.html

user:
ログインする際のユーザー名

warehouse:
クエリを実行する際に利用するウェアハウス

Snowflakeの接続設定はこれでOKです。

クエリ作成・実行

run_taskにはtest.sqlを指定し、同じディレクトリにtest.sqlを作成しましょう。
今回は以下の簡単なクエリを記載します。

SELECT
    123234 as test

これでOKです!

それではコマンドでdigdag runをしましょう!

digdag run -a snowflake.dig

Successになりました!

Snowflake側の履歴を見ると…

実行できてます!!楽ちんです!!

パラメーターを確認してみる

簡単にクエリ作って実行してみましたが他にも様々なパラメーターが用意されているので
実際に触って確認してみます!

create_table

こちらは実行されたクエリの結果でテーブルを作成するパラメーターです。
実行する際は作成先情報をdatabaseパラメーターとschemaパラメーターに記載し、
テーブル名をcreate_tableに記載します。


実行したところちゃんとテーブルが作成されていました!

create_or_replace_table

こちらはその名の通りテーブルがない場合は作成、存在する場合は置き換えをするパラメーターです。
クエリの内容を変えて実行してみましょう。


CREATE OR REPLACE TABLEで実行され…


テーブルも想定通りの内容になっていました!

create_table_if_not_exists

こちらは存在しない場合にテーブルを作成するパラメーターです。
まずは上で作成したテーブルと同じテーブル名で実行してみます。

当然ですが存在しているので作成されません。

次にテーブル名を変えて実行してみます。

作成されました!

insert_into

こちらはテーブルにクエリ結果を挿入するパラメーターです。早速実行してみます。


対象テーブルにレコードが追加されていました!

session_unixtime_sql_variable_name

Digdagのsession_unixtimeを格納する変数名です。
こちらのパラメーターはexportのsnow:に設定するパラメーターなので注意が必要です。

変数はクエリ側に[$変数名]と記載することで利用できます。

テーブル作成を実行してみます。

session_timeが格納されました!

変数を使う

パラメーターとは違いますがもちろんDigdagなので変数も使えます。
試しにクエリに組み込み変数であるsession_dateを使ってカラムを作ってみます。

無事日付も取れました!

まとめ

簡単にですがDigdagのSnowflakeプラグインを紹介させていただきました!
他にもSnowflake Advent Calendar 2021ではAirflowなどのワークフローエンジンを使った記事や
その他Snowflakeのとても参考になる情報がたくさん紹介されています。
気になる方は是非確認してみてください!

気づけば12月も半ばですね。
皆様、良いお年を~!