はじめに
前回の記事では,semantic-model-generatorを使用してセマンティックモデルのYAMLファイルを生成する方法について紹介した.今回は,そのYAMLファイルを入力として活用し,より実用的なデータカタログを自動生成する改良版について解説する.
改良版の特徴
主な改善点
- YAMLファイルの直接活用: semantic-model-generatorで生成されたYAMLファイルを直接入力として使用
- 設定の柔軟性向上: 環境に応じた設定変更
- ローカル実行対応: 閉域でのSnowflake環境で実行可能
実装方法
1. 環境設定
まず,プログラムの設定部分を環境に合わせて変更する必要がある.
# 設定: 出力先データベース、スキーマ、テーブル名を指定
OUTPUT_DATABASE = "OUTPUT_DATABASE" #環境に合わせて書き換え
OUTPUT_SCHEMA = "OUTPUT_SCHEMA" #環境に合わせて書き換え
OUTPUT_TABLE = "OUTPUT_TABLE" #環境に合わせて書き換え
# ステージ情報の設定
SOURCE_DATABASE = "SOURCE_DATABASE" #環境に合わせて書き換え
SOURCE_SCHEMA = "SOURCE_SCHEMA" #環境に合わせて書き換え
SOURCE_STAGE = "SOURCE_STAGE" #環境に合わせて書き換え
SOURCE_FILE = "XXXX.yaml" #環境に合わせて書き換え
これらの設定値は,semantic-model-generatorの環境構築時に作成したSnowflake環境と対応している.具体的には,create_snowflake_objects_local.sqlで定義したデータベース,スキーマ,ステージ情報と一致させる必要がある.
例えば,create_snowflake_objects_local.sqlで以下のように定義している場合:
-- データベースとスキーマの作成例
CREATE DATABASE IF NOT EXISTS CORTEX_ANALYST_LOCAL;
CREATE SCHEMA IF NOT EXISTS CORTEX_ANALYST_LOCAL.cortex_analyst;
-- ステージの作成例
CREATE STAGE IF NOT EXISTS CORTEX_ANALYST_LOCAL.cortex_analyst.raw_data;
対応するPython設定は以下のようになる:
SOURCE_DATABASE = "CORTEX_ANALYST_LOCAL"
SOURCE_SCHEMA = "cortex_analyst"
SOURCE_STAGE = "raw_data"
SOURCE_FILE = "semantic_model.yaml" # アップロードしたYAMLファイル名
2. YAMLファイルの準備
semantic-model-generatorで生成されたYAMLファイルを,指定したSnowflakeステージにアップロードする.
3. プログラムの実行
改良版プログラムでは,以下の流れでデータカタログを生成する:
ステップ1: YAMLファイルの読み込み
def load_yaml_from_stage():
"""ステージからYAMLファイルを読み込み"""
query = f"""
SELECT parse_json($1) as yaml_content
FROM @{SOURCE_DATABASE}.{SOURCE_SCHEMA}.{SOURCE_STAGE}/{SOURCE_FILE}
"""
return session.sql(query).collect()
ステップ2: メタデータの解析
def parse_semantic_model(yaml_content):
"""セマンティックモデルのYAMLを解析してメタデータを抽出"""
models = []
for model in yaml_content.get('semantic_models', []):
model_info = {
'model_name': model.get('name'),
'description': model.get('description', ''),
'entities': model.get('entities', []),
'dimensions': model.get('dimensions', []),
'measures': model.get('measures', [])
}
models.append(model_info)
return models
ステップ3: データカタログテーブルの生成
def create_catalog_table(catalog_data):
"""解析したメタデータからカタログテーブルを作成"""
df = pd.DataFrame(catalog_data)
# Snowflakeテーブルとして保存
session.write_pandas(
df,
table_name=OUTPUT_TABLE,
database=OUTPUT_DATABASE,
schema=OUTPUT_SCHEMA,
auto_create_table=True,
overwrite=True
)
出力結果
まとめ
semantic-model-generatorのYAMLファイルを活用した改良版データカタログ生成について紹介した.今回紹介した改良版システムを活用することで,閉域環境においても,より効率的なデータ管理とガバナンスの実現が期待できる.