Snowflakeでテーブル一覧/カラム一覧を確認する方法

Snowflakeでテーブル一覧/カラム一覧を確認する方法 | Tableau-id Press -タブロイド-
snowflake_logo

こんにちは、Buchiです!

やりたいこと

Snowflake内に入ってるデータが増えてくると、

・アカウント内にある全てのテーブルを一覧化したい
・テーブル定義書をつくるためにカラムを一覧化したい

…なんてことありますよね。
どこに何の情報が入っているか分かるようにデータカタログ化したい、とかも。
こういったメタデータ情報ってどうしたら取得できるかな?ということで、記事にしてみました。

やってみた

方法は2通りあります。

1)SHOW <object>を使う
2)Information Schemaを使う

それぞれ見ていきます!

1)SHOW <objects>を使う

SQLコマンド、SHOW <objects> を使用すると指定したオブジェクトのメタ情報を出力してくれます(公式ドキュメントはこちら)。

例えば

SHOW TABLES IN ACCOUNT

を実行すると、アカウント内の全てのDB、全てのスキーマ内のテーブル情報を出力してくれます。便利!

テーブル情報として出力されるカラムの一部を以下に載せておきます。
テーブルのコンテキスト情報はもちろん、レコード数やクラスタリングキーなんかも確認できます。

created_on テーブル作成日時
name テーブル名
database_name テーブルが保存されているデータベース名
schema_name テーブルが保存されているスキーマ名
kind テーブルタイプ: TABLE  or TEMPORARY、 TRANSIENT
コメント テーブルのコメント
cluster_by テーブルのクラスタリングキー
rows テーブル内の行数。外部テーブルの場合はNULL

などなど…他にもあるので、そのほかの出力カラムは公式ドキュメントをご参照ください。

上記は全テーブルを対象にしていますが、特定のDBやスキーマで確認したい場合は

SHOW TABLES IN DATABASE {database_name}

という形で{database_name}に確認したいDBの名前を入れて実行することで実現できます。
更に、LIKE句やSTART WITH句でテーブル名をあいまい検索することもできますよ!

また、ビューやカラムを確認したい場合、上記クエリの’TABLES’の部分をVIEWSやCOLUMNSに変更することで同様にメタデータ情報が出力可能です。

2)INFORMATION SCHEMAを使う

INFORMATION SCHEMAとは、各DBごとのメタ情報がまとまっているスキーマで、自動的に生成されます。
さきほどSHOW <objects>でクエリしたような情報がビューとしてまとまっているイメージです。
弊社がSnowflake marketplaceで無料提供してるオープンデータ「PODB」の日本のカレンダーデータで、
INFORMATION SCHEMAのCOLUMNSビューをプレビューしてみます。

このDB内のテーブルに含まれるカラムが出てきました!
今回カラム情報を見てみましたが、
テーブル情報はTABLESビュー、スキーマ情報はSCHEMASビュー、といった形で分かれており、欲しい情報に応じてビューを呼び出して使用できます。

ちなみに、INFORMATION_SCHEMAのTABLESビューで出てくる情報はこんな感じ。

TABLE_CATALOG テーブルが保存されているデータベース名
TABLE_SCHEMA テーブルが保存されているスキーマ名
TABLE_NAME テーブル名
TABLE_OWNER テーブルを所有者ロール名
TABLE_TYPE テーブルタイプ: BASE TABLE or TEMPORARY TABLE or EXTERNAL TABLE or  EVENT TABLE or VIEW or MATERIALIZED VIEW
IS_TRANSIENT 一時テーブルか否か
CLUSTERING_KEY テーブルのクラスタリングキー
ROW_COUNT テーブル内の行数

などなど…続きは公式ドキュメントで。

出力される情報は、SHOW TABLESと変わりないですね。

SHOW TABLESと異なる部分として、INFORMATION SCHEMAのTABLESビューにはVIEWの情報も含まれます!
SHOW TABLESでクエリできるのはテーブル情報のみであり、ビュー情報を取得したい場合はSHOW VIEWSを使う必要がありますが、
INFORMATION SCHEMAのTABLESビューを見れば、そのDB内のテーブルもビューも含めてすべて一覧化することができます!
こういった違いも含めて使い分けていくと便利ですね。

コメント活用のススメ

ここまで見てきて…、テーブル名やカラム名って英語表記だったり、コード表記だったりということがほとんどかと思います
(SnowflakeではDB・スキーマ・テーブル名にアルファベットや数字しか使えないため)。

テーブル一覧出力してみたけど、パッと意味が分かりにくかったりして、どんな情報が入っているのかよく分からん。ということもありませんか?(ありますよね?)
そんなときお薦めなのが、コメントを入れておくことです。

SHOW <object>でもINFORMATION SCHEMAでも、commentを出力して確認することができます。
手前みそで恐縮ですが、オープンデータ「PODB」はばっちりコメントが入っているので、例としてお見せします。

Information_schemaのtablesで、DB名、スキーマ名、テーブル名、テーブルのコメントを引っ張ってきてみたのが以下です。

コメントがあるだけで、どんな情報が入っているテーブルなのか分かりやすいですよね!
コメントはDB、スキーマ、テーブル(ビュー)、カラム、それぞれコメントを入れることができます。

コメントの入れ方(Snowsightから)

コメントの入れ方はめちゃめちゃ簡単です!
DB、スキーマ、テーブル(ビュー)はsnowflakeのUI操作(Snowsight)から入力することができます
(カラムはSnowsightからコメントできないので、SQLで入れてくださいね)。
コメントを入れたいDBなどを選択して、3点リーダーのEditをクリック

でココに入力してSaveするだけ!

コメントの入れ方(SQL)

SQLでコメントを入れるクエリは以下の通りです!

DB

ALTER DATABASE {database_name} SET COMMENT = 'コメント';

テーブル

ALTER TABLE {table_name} SET COMMENT = 'コメント’;

スキーマ

ALTER SCHEMA {schema_name} SET COMMENT = 'コメント’;

カラム

ALTER TABLE {table_name} MODIFY COLUMN {column_name} COMMENT 'コメント';

そして、超地味なTipsですが、コメント内で改行したい場合は"\n"で実現できます。
こんな感じ。

ALTER TABLE test MODIFY COLUMN {column_name} COMMENT 'コメント\nいれます';

これはSnowsight上でコメントを見てもスペースにしか見えないのですが、
CSVなどに出力した場合にはきちんと改行されます。

INFORMATION SCHEMAをBIツールにつなげてデータカタログつくりたい、なんてときに使えるかも。

さいごに

今回はSnowflakeでメタデータ情報を確認する方法を紹介しました!

truestarではSnowflakeの検討、導入支援や環境構築からアプリ開発まで幅広くサポート可能です。
Snowflakeに゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらからご相談ください!