こんにちは、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に゙興味がある、導入済みだけどもっとうまく活用したい等々ありましたら、ぜひこちらからご相談ください!