OpenMetadata SaaSのSnowflake Connectorを試してみた

2023.02.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

さがらです。

OpenMetadata SaaSで、Snowflakeのメタデータを抽出するためのSnowflake Connectorを試してみたので、本記事でまとめてみます。

前提

基本的には、このドキュメントの手順に沿って行っていきます。

また、「OpenMetadata SaaS」とは言っていますが、中身はOSSのOpenMetadataと全く一緒です。クラスタの構築や運用周りをすべて担ってくれるのがSaaS版となっております。

OpenMetadata SaaSのフリートライアル開始手順については、こちらのブログをご覧ください。

各製品のバージョン

  • OpenMetadata SaaS
    • Tokyoリージョン
  • OpenMetadata
    • 0.13.2
  • Snowflake
    • 7.3.2
    • AWS、Tokyoリージョン、Enterpriseエディション

Snowflake上での事前準備

OpenMetadataから正確にメタデータを抽出するために、OpenMetadataの認証に使うユーザーに対して適切な権限を与える必要があります。

OpenMetadataのバージョン0.13.2時点では、以下の情報が必要となります。

  • メタデータ抽出に使用するウェアハウスに対するUSAGE
  • メタデータを抽出したいデータベースに対するUSAGE
  • メタデータを抽出したいスキーマに対するUSAGE
  • メタデータを抽出したいテーブルに対するSELECT
  • snowflake.account_usage.query_historysnowflake.account_usage.tag_referencesをクエリするための、SNOWFLAKEデータベースに対するIMPORTED PRIVILEGES
    • 2023年2月3日時点、Database Roleがパブリックプレビューとなっているため、こちらを用いるのもよいかもしれません。

また、これらの権限を付与するためのサンプルクエリは公式Docに載っていますので、ぜひ参考にしてみてください。

OpenMetadata上でのConnectorの設定

では、OpenMetadata上からSnowflake Connectorの設定をしていきます!

まず、SettingsDatabasesAdd New Database Serviceを順番に押します。

接続先の一覧からSnowflakeを選択し、Nextを押します。

Service NameDescriptionを記入し、Nextを押します。

続いて、Snowflakeに接続するための各種情報を入力する画面が出てきます。ユーザー名とパスワードで登録する場合には、以下の情報が関わってきます。

  • Username:Snowflakeの認証に用いるユーザー名を記入
  • Password:対象ユーザーのパスワードを記入
  • Accountxyz1234.us-east-1.gcpの形式で、アカウント名を記入
  • Role:OpenMetadataがメタデータの取得を行う際に、使用するロールを記入
  • Database:もし特定の1つのデータベースだけ同期させたい場合には、ここにデータベース名を記入。記入しないと、対象のロールが読み取れるすべてのデータベースが同期対象となる
  • Warehouse:OpenMetadataがメタデータの取得を行う際に、使用するウェアハウスを記入
  • Query Tag:OpenMetadataからメタデータの取得を行う際に発行されるQuery Tagを指定したい場合は記入(セッション中にQuery Tagの値を切り替えられる権限を持つロールでないといけません)

これらの情報を入力したら、末尾にあるTest Connectionを押しましょう。接続が問題なければConnection test was successfulと出てきます。

接続に問題なければ、Saveを押します。

これでコネクタは完成ですが、続けてIngestion、つまりはメタデータの抽出に関する設定を行う必要があります。Add ingestionを押します。

すると、Ingestionに関する情報の入力画面が出てきます。オプションとしては、このようなものがあります。

  • Name:この抽出処理の名称を入力、このOpenMetadataのアカウント内でユニークである必要があります
  • Database/Schema/Table Filter Pattern:正規表現で抽出対象のオブジェクトを絞り込める
  • Include Views:Viewも抽出対象に含めるかを切り替える
  • Include Tags:Snowflake上で定義されたタグも抽出対象に含めるかを切り替える
  • Mark Deleted Tables:抽出対象のテーブルが削除されていたら、OpenMetadata上でも削除するかどうかを切り替える

これらの設定を終えたら、右下のNextを押します。

続いて、抽出のスケジュールを選択します。設定を終えたら、Add & Deployを押します。

下図のように表示されたら、抽出の設定は完了です!

ちなみに、対象のIngestionsを手動実行することも出来ます。対象のIngestionのActions列にてRunを押せばOKです!

一度Ingestionをしてみたところ、XSのシングルクラスタウェアハウスを用いて、863個のテーブル・ビューの取得に11分ほどかかりました!これはProfilerなど別機能を実行すると更に時間がかかることが想定されます。

Snowflake特有のメタデータをOpenMetadata上で確認してみる

少しだけ、どのようにSnowflake特有のメタデータがOpenMetadataから見ることができるか、確認してみます。他のDWHでも共通となる各テーブルレベルでどういったメタデータを見ることが出来るかは、こちらのブログや、OpenMetadataのSandboxも参考にしてみてください。

Snowflakeのタグ

Snowflakeにはタグの機能があるのですが、OpenMetadataではSnowflake上で定義されたタグを同期することが出来ます。

実際には、下記のように連携されることが確認できました。Classificationは複数の類似したTagをひとまとめに出来る概念です。

  • SnowflakeのタグのTAG NAMEは、OpenMetadata上のClassificationとして連携される
  • SnowflakeのタグのTAG VALUEは、OpenMetadata上のTagとして連携される

INFORMATION_SCHEMAの扱い

まず気づいた点として、19個のデータベースが同期されたのですが、すべてのデータベースのINFORMATION_SCHEMAも対象であったため、データカタログ上不要なテーブル・ビューがたくさん同期されていました。

Ingestionの設定で対象のスキーマを絞り込むことができるので、INFORMATION_SCHEMAは除外するのが良さそうですね!

最後に

OpenMetadata SaaSで、Snowflakeのメタデータを抽出するためのSnowflake Connectorを試してみました。

INFORMATION_SCHEMAなど抽出対象は注意しないといけないですが、SnowflakeのタグについてTAG NAMETAG VALUEどちらも取得でき、かつ元の階層関係のまま連携できるのは良いなと感じました!