目次
この記事はSnowflake Advent Calendar 2021の20日目の記事になります!
今回はSnowflakeの超便利関数「GET_OBJECT_REFERENCES」をPythonで物理テーブル化してみました。
PythonでSnowflakeに初めてつないでみましたが、
ドキュメントがすごく親切で簡単にできました~🙇
(PythonでのSnowflakeへの接続については端折ってます。詳しくはこちら)
GET_OBJECT_REFERENCESとは
こちらはViewが参照しているオブジェクトのリストを返してくれる関数です。
詳しくはこちらをご覧ください。
ここでは以下のテストデータで簡単に見ていきたいと思います。
- TEST_A/B
- テーブル
- TEST_C
- TEST_Aを参照するビュー
- TEST_D
- TEST_Bを参照するビュー
- TEST_E
- TEST_C/Dを参照するビュー
- TEST_C/Dを参照するビュー
ではTEST_Eが参照しているオブジェクトのリストを出力してみます。
上図のようにTEST_Eが参照しているオブジェクトが縦に並びます。
VIEWを参照している場合、そのVIEWが参照しているオブジェクトまでリスト化してくれるので超便利ですね!
この関数はViewにしか対応していませんが、ドキュメントには「現在、入力はビューの名前に制限されています」とあるので、ゆくゆくはタスクとして登録されているクエリにも使えるようにならないかなーと期待しております(笑)
物理化してみた
実施環境
- Python 3.8.0
- snowflake-connector-python 2.6.2
以下Pythonコードです。
Python用Snowflakeコネクタのオブジェクトやメソッドについてはこちらをご確認ください。
処理の流れとしては、
- Snowflakeに接続
- insert先のテーブルをtruncate
- show viewsコマンドでviewの一覧を取得
- for文で全viewのget_object_referencesを作成
- 結果を配列に追加
- 配列を一括挿入
- 接続終了
です。
では実行結果を見てみましょう。
データを確認できました👏
おわりに
いかがだったでしょうか。
Snowflakeはいろいろなことができて面白いですね。
次回は今回作成したPythonの処理をSnowflakeのprocedureに置き換えてみようと思います。(処理の内容が結構変わりました)
最後まで読んでくださり、ありがとうございました!