お問い合わせ
2 分で読むことができます

PythonでSnowflakeのGET_OBJECT_REFERENCES関数を物理テーブル化する

執筆者 bird 更新日時 2021年12月20日

Topics: Python snowflake

目次

この記事は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_Eが参照しているオブジェクトのリストを出力してみます。

テストデータ2

上図のようにTEST_Eが参照しているオブジェクトが縦に並びます。

VIEWを参照している場合、そのVIEWが参照しているオブジェクトまでリスト化してくれるので超便利ですね!

この関数はViewにしか対応していませんが、ドキュメントには「現在、入力はビューの名前に制限されていますとあるので、ゆくゆくはタスクとして登録されているクエリにも使えるようにならないかなーと期待しております(笑)

物理化してみた

実施環境

  • Python 3.8.0
  • snowflake-connector-python 2.6.2

以下Pythonコードです。

Python用Snowflakeコネクタのオブジェクトやメソッドについてはこちらをご確認ください。

処理の流れとしては、

  1. Snowflakeに接続
  2. insert先のテーブルをtruncate
  3. show viewsコマンドでviewの一覧を取得
  4. for文で全viewのget_object_referencesを作成
  5. 結果を配列に追加
  6. 配列を一括挿入
  7. 接続終了

です。

では実行結果を見てみましょう。

実行結果2

データを確認できました👏

おわりに

いかがだったでしょうか。

Snowflakeはいろいろなことができて面白いですね。

次回は今回作成したPythonの処理をSnowflakeのprocedureに置き換えてみようと思います。(処理の内容が結構変わりました)

最後まで読んでくださり、ありがとうございました!

Snowflakeを体験してみませんか?

INSIGHT LABではSnowflake紹介セミナーを定期開催しています。Snowflakeの製品紹介だけでなく、デモンストレーションを通してSnowflakeのシンプルなUI操作や処理パフォーマンスの高さを体感いただけます。

詳細はこちら

bird

執筆者 bird

4 分で読むことができます。
Snowflakeの料金体系|クレジットと費用最適化のポイントをご紹介
5 分で読むことができます。
【禁断の比較?】SnowflakeとTreasure Dataを比べてみました
1 分で読むことができます。
誤ってupdateしてしまったレコードをtime travelで復元する
5 分で読むことができます。
【Snowflake】新機能「Streamlit in Snowflake」とは何者か!?
3 分で読むことができます。
AWS Lambdaを使ってSnowflakeとSFTPサーバーを連携してみた