はじめに
DatabricksのUnity CatalogにはInformation Schemaというシステム情報を格納しているテーブルが作成されます。これを利用する事でUnity Catalogのテーブル情報や権限情報などのカタログ情報が取得できるとのこと。
Information Schema について
https://docs.databricks.com/spark/latest/spark-sql/language-manual/sql-ref-information-schema.html
Unity Catalogを利用すると、以下のような構造のテーブルがinformation_schemaというスキーマ下に作成されます。
これをチェックすれば好きな情報が取得できるのです。
Information Schemaを使って情報をチェックしてみる
それでは早速に上記のInformation Schemaを見てどんな事ができるかチェックしてみましょう。
その前にUnity Catalogを利用すると自動的に4つのカタログが表示されます。(hive_metastore, main, samples, system)
この中のsystemというカタログにはメタストアに格納される全カタログの情報が収集されるため、全体をチェックしたい場合はこちらのsystemカタログにあるInformation Schemaを見るといいでしょう。
また、hive_metastoreカタログの情報はUnity Catalogではないため、このInformation Schemaには含まれない点をご注意ください。こちらは従来のHiveカタログにアクセスするためのものになります。
1. 全てのカタログ、スキーマ(データベース)とテーブル一覧の収集
SELECT
table_catalog,
table_schema,
table_name,
table_owner,
comment,
table_type,
data_source_format
FROM
system.information_schema.tables
WHERE
table_schema != 'information_schema'
2. テーブルの権限確認
SELECT
*
FROM
system.information_schema.table_privileges
WHERE
table_schema != 'information_schema'
Databricks SQLでは下記のようにフィルターも作成出来るため特定のカタログやスキーマに絞るのも簡単にできます。
3.最近1時間以内に作成されたテーブル情報
SELECT
table_name,
table_owner,
created_by,
last_altered,
last_altered_by,
table_catalog
FROM
system.information_schema.tables
WHERE
datediff(now(), last_altered) < 1;
4. カラム数の多いテーブルを多い順にリストする
SELECT
table_schema,
table_name,
count(column_name)
FROM
system.information_schema.columns
WHERE
table_schema != 'information_schema'
GROUP BY
table_schema,
table_name
ORDER BY
3 DESC
最後に
Information_schemaのテーブル情報はまだまだあるのでいろんな分析が出来そうです。
また、これらをすぐにチェック出来るようにダッシュボードを作成しておいたり、特定条件のテーブルなどを見つけたらアラートをあげるなどしておけば運用にも役にたちそうですね。
UnityCatalogセットアップについてはこちらもご覧ください。
https://qiita.com/maroon-db/items/57cee03cef202c839b94