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

[Snowflake Knowledge - INSIGHT LAB](https://knowledge.insight-lab.co.jp/snowflake)

# [PythonでSnowflakeのGET\_OBJECT\_REFERENCES関数を物理テーブル化する](https://knowledge.insight-lab.co.jp/snowflake/python_snowflake_get_object_references)

 作成者: [bird](https://knowledge.insight-lab.co.jp/snowflake/author/bird)｜2021年12月20日

この記事は[Snowflake Advent Calendar 2021](https://adventar.org/calendars/6220)の20日目の記事になります！

今回はSnowflakeの超便利関数「GET\_OBJECT\_REFERENCES」をPythonで物理テーブル化してみました。

PythonでSnowflakeに初めてつないでみましたが、

ドキュメントがすごく親切で簡単にできました～🙇

（PythonでのSnowflakeへの接続については端折ってます。詳しくは[こちら](https://docs.snowflake.com/ja/user-guide/python-connector.html)）

## GET\_OBJECT\_REFERENCESとは

こちらはViewが参照しているオブジェクトのリストを返してくれる関数です。

詳しくは[こちら](https://docs.snowflake.com/ja/sql-reference/functions/get_object_references.html)<https://docs.snowflake.com/ja/sql-reference/functions/get_object_references.html>をご覧ください。

ここでは以下のテストデータで簡単に見ていきたいと思います。

- TEST\_A/B 
    - テーブル
- TEST\_C 
    - TEST\_Aを参照するビュー
- TEST\_D 
    - TEST\_Bを参照するビュー
- TEST\_E 
    - TEST\_C/Dを参照するビュー

ではTEST\_Eが参照しているオブジェクトのリストを出力してみます。

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

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

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

## 物理化してみた

実施環境

- Python 3.8.0
- snowflake-connector-python 2.6.2

以下Pythonコードです。

Python用Snowflakeコネクタのオブジェクトやメソッドについては[こちら](https://docs.snowflake.com/ja/user-guide/python-connector-api.html)をご確認ください。

処理の流れとしては、

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

です。

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

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

## おわりに

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

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

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

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

[完全な記事を表示](https://knowledge.insight-lab.co.jp/snowflake/python_snowflake_get_object_references)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "bird"
  },
  "dateModified" : "2021-12-20T03:32:46.807Z",
  "datePublished" : "2021-12-20T03:32:46Z",
  "headline" : "PythonでSnowflakeのGET_OBJECT_REFERENCES関数を物理テーブル化する",
  "image" : {
    "@type" : "ImageObject",
    "height" : 400,
    "url" : "https://download.insight-lab.co.jp/hubfs/Snowflake/Shiratori/character_program_fast.png",
    "width" : 400
  },
  "mainEntityOfPage" : "https://knowledge.insight-lab.co.jp/snowflake/python_snowflake_get_object_references",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "snowflakeナレッジ"
  }
}
```