OSS版OpenMetadataでSnowflakeのメタデータ管理とデータ品質テストをしてみた
こんにちは。Acompany新卒のハルカです。
CEOに同姓の高橋さんがいるので、私はハルカさんと呼ばれています。
先日、OSS版のデータカタログであるOpenMetadataを使ってBigQueryのメタデータ管理を試してみました。今回は、BigQueryと同じくクラウドデータウェアハウスの1つとして有名なSnowflakeのメタデータをOpenmMetadataで管理してみます。
準備
OpenMetadataは、以前の記事を参考に準備してみてください。
こちらの記事では、Dockerを使ってローカル環境でOpenMetadataを立ち上げており、今回も同様にDocker版を使います。
データソースの登録: Snowflake
OpenMetadataの準備が完了しましたら、次にSnowflakeのデータソースの登録に進みます。
Snowflake側の準備
まず、Snowflakeでの準備が必要です。Snowflakeのアカウントを持っていない場合は、公式サイトから無料トライアルを申し込んでください。
Snowflakeのアカウントを取得したら、以下の情報をメモしておきます。
Username
-
Account URL
Acount URLの取得
また、アクセスに使用するアカウントロールをACCOUNTADMIN
かIMPORTED PRIVILEGES
にする必要があります。この権限がない場合はエラーが発生し、メタデータの取得ができません。
Sampleデータの準備
Snowflakeではサンプルデータが用意されているので、それを使います。
「プロジェクト」→「ワークシート」を選択し、以下のクエリを実行してサンプルデータを作成します。
-- Create a database from the share.
CREATE DATABASE SNOWFLAKE_SAMPLE_DATA FROM SHARE SFC_SAMPLES.SAMPLE_DATA;
-- Grant the PUBLIC role access to the database.
-- Optionally change the role name to restrict access to a subset of users.
GRANT IMPORTED PRIVILEGES ON DATABASE SNOWFLAKE_SAMPLE_DATA TO ROLE PUBLIC;
以下のように、データベースにサンプルデータが作成されていることを確認します。
OpenMetadata側の設定
ここから、OpenMetadata側での操作になります。
OpenMetadataのホーム画面から「Settings」→「Services」→「Databases」→「Add New Service」を選択します。
データベースの追加は次の3つのステップで行います。
-
Serviceの選択
Database ServicesからSnowflakeを選択して次へ進みます。
データソースの選択 -
サービス情報の設定
Configure Serviceで、「Service Name」と「Description」を入力して次へ進みます。 -
認証情報を入力
メモして置いた情報を使って、Connection detailsの対応する項目を入力します。
Connection details
各設定項目の詳細は以下から確認できます。
設定項目 | 内容 |
---|---|
Username | Snowflakeに接続するユーザー名。Snowflakeの全メタデータ読み取り権限が必要。 |
Password | Snowflakeに接続するパスワード。 |
Account | Snowflakeアカウント識別子。組織内外のSnowflakeアカウントを一意に識別。URLがhttps://xyz1234.us-east-1.gcp.snowflakecomputing.com の場合、アカウントはxyz1234.us-east-1.gcp 。 |
Role | 取り込み対象のユーザーロールを指定可能。指定なしの場合、ユーザーのデフォルトロールが選択。 |
Database | データソースのデータベース。メタデータ読み取りを単一DBに制限する場合に使用。空白の場合、全DBをスキャン。 |
Warehouse | メタデータ取得クエリ実行用のSnowflakeウェアハウス名。 |
Query Tag | Snowflake使用状況監視用のセッションクエリタグ。使用にはユーザーにセッション変更権限が必要。 |
Private Key | キーペア認証設定時、ユーザー関連の秘密鍵が必要。キーペア認証の詳細はドキュメント参照。 |
Snowflake Passphrase Key | 暗号化キーペア認証設定時、秘密鍵関連のパスフレーズが必要。キーペア認証の詳細はドキュメント参照。 |
Include Transient Tables | Snowflakeの一時テーブル(TRANSIENTテーブル)は、デフォルトで取り込み対象外。フラグでTRANSIENTテーブルのみ抽出。テンポラリテーブル非対応。取り込むにはこの設定を有効化。 |
Client Session Keep Alive | 長時間の取り込みジョブ実行時のセッションキープアライブオプション。 |
Connection Options | 接続時のURL構築用の追加接続オプション。 |
Connection Arguments | 接続時のセキュリティ/プロトコル設定などの追加接続引数。 |
注意すべきは、Account URLの設定です。
URLがhttps://xyz1234.us-east-1.gcp.snowflakecomputing.com
の場合、
アカウントはxyz1234.us-east-1.gcp
の部分となります。
設定が完了したら、Saveをクリックして設定を保存します。
データの取得
データベースの追加が完了したら、Snowflakeのメタデータを取得します。
前回同様、Ingestionsという機能を使います。
作成したDatabase Serviceを選択し、「Ingestions」タブから、
「Add New Ingestion」→ 「Add Metadata Ingestion」
を選択します。
次に、取り込むデータを設定します。
Ingestionの設定
上の例だと、
-
データベースは
SNOWFLAKE_SAMPLE_DATA
を指定(それ以外は無視) -
スキーマは
TPCDS_SF10TCL
を指定(それ以外は無視) -
テーブルは
空(指定無し)
なので、全テーブルを取り込む
という風に、取り込むデータを指定できます。
このあたりの設定は、前回記事のフィルタリングで説明しているので、参考にしてください。
Nextをクリックして、Ingestions一覧の画面に遷移します。
メタデータ取り込み
TYPEが「metadata」の先ほど作成したIngestionを選択して、右の「Run」ボタンをクリックします。
RECENT RUNSが「Running」から「Success」に変われば、メタデータの取り込みが完了です。
Ingestions一覧
エラーが発生した場合
OpenMetadataのIngestionのエラーメッセージや、Snowflakeのログを確認してください。以下のようなエラーの場合は、Snowflakeの権限が不足している可能性があります。
Snowflakeのエラーログ
SQLコンパイルエラー: Schema 「SNOWFLAKE.ACCOUNT_USAGE」は存在しないか、許可されていません。
Docには以下のように書かれているので、SnowflakeのユーザーにはACCOUNTADMINロールか、SNOWFLAKEデータベースに対してIMPORTED PRIVILEGESが付与されている必要があります。
For this the snowflake user should be granted the ACCOUNTADMIN role or a role granted IMPORTED PRIVILEGES on the database SNOWFLAKE
メタデータの確認
Exploreタブから、取り込んだテーブルのメタデータを確認できます。
OpenMetadataのExplore
リネージ
リネージタブから、テーブルのリレーションシップを確認できます。
OpenMetadataのLineage
データ品質のテスト
Profiler & Data Qualityタブから、データの品質テストを行うことができます。
以下のように、テストを追加します。今回はSNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.ITEM
テーブルのI_CURRENT_PRICE
カラムに対してテストを追加します。
テストの追加
「Pipeline」タブからRunを押して実行することで即時テストが実行されます。
テストが完了すると、テスト結果が表示されます。
テスト結果
今回、以下の2つのテストを追加して検証しました。
-
I_CURRENT_PRICE
が0以上か -
I_CURRENT_PRICE
にnullがないか
結果は、Successが50%となり、I_CURRENT_PRICE
は0以上ではあるものの、nullが含まれていることがわかりました。
実際に、SNOWFLAKE_SAMPLE_DATA.TPCDS_SF10TCL.ITEM
テーブルの中を確認すると、I_CURRENT_PRICE
にnullが含まれていることがわかります。
このように、テスト項目を追加してデータの品質を監視することで、データの異常をいち早く検知することができます。
また、データの品質を一定に保つことで、アナリストやデータサイエンティストが信頼できるデータを使って分析を行うことができます。
まとめ
今回は、OSSのデータカタログであるOpenMetadataを使って、Snowflakeのメタデータ管理を行いました。OpenMetadataを使うことで、データエンジニアリングの効率化やデータの品質管理を行うことができます。
おわりに
Acompanyでは、我々と一緒にプライバシーテックの領域で世界を目指してくれるメンバーを募集しています。まずは、カジュアル面談でAcompanyという会社のことを知ってもらいたいです。
また、弊社の他のブログは以下エンジニアブログハブから見られます!
Discussion