0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Snowflakeでお手製データカタログを作成する方法3(semantic-model-generatorのYAMLファイルを活用したデータカタログ自動生成)

Last updated at Posted at 2025-06-22

はじめに

前回の記事では,semantic-model-generatorを使用してセマンティックモデルのYAMLファイルを生成する方法について紹介した.今回は,そのYAMLファイルを入力として活用し,より実用的なデータカタログを自動生成する改良版について解説する.

改良版の特徴

主な改善点

  1. YAMLファイルの直接活用: semantic-model-generatorで生成されたYAMLファイルを直接入力として使用
  2. 設定の柔軟性向上: 環境に応じた設定変更
  3. ローカル実行対応: 閉域での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
    )

出力結果

image.png

まとめ

semantic-model-generatorのYAMLファイルを活用した改良版データカタログ生成について紹介した.今回紹介した改良版システムを活用することで,閉域環境においても,より効率的なデータ管理とガバナンスの実現が期待できる.

参考資料

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?