カスタム Namespace の設定

カスタム名前空間は、データ基盤と分析データ プロダクト モジュールをパッケージ化して分離するための論理環境として機能します。専用のカスタム Namespace 内で実行すると、構成オプションとデプロイ オプションを個別に管理できるため、環境の分離が実現します。この分離の主なメリットは、カスタム モジュールをオーバーライドしたり破損させたりするリスクを冒すことなく、Google Cloud Cortex Framework の cortex 名前空間から将来の更新や機能強化をシームレスに取得できることです。専用の名前空間内にカスタム モジュールを作成することを強くおすすめします。

カスタム Namespace のフォルダ構造

Cortex Framework の Namespace フォルダは、カスタム モジュール アーティファクトのパッケージ化と分離に使用されます。カスタム名前空間のフォルダ構造は、次の表で定義されています。

ディレクトリ パス 目的と説明
config/ Cortex デプロイ構成(必須)
新しい Namespace を作成するには、config.yaml 内で設定する必要があります。
src/data_modules/custom_namespace/data_foundation/data_foundation_module_type データ基盤モジュール
生データから基盤データセットへの変換。各データ基盤はサブディレクトリに分離され、次の要素で構成されます。
  • annotations/: 列とフィールド レベルの説明。
  • table_settings.default.yaml: テーブル設定の構成
src/data_modules/custom_namespace/data_product/data_product_module_type データ プロダクトの定義
ビジネス ロジックと分析モデルが含まれます。各プロダクトはサブディレクトリに分割され、次の要素で構成されます。
  • Readme: モジュールのドキュメント
  • manifest.yaml: ビルダーのタイプ、依存関係、構成を宣言します。
  • table_settings.default.yaml: テーブル設定の構成
  • annotations/: 列とフィールド レベルの説明。
  • definitions/: Dataform SQLX または JS ソースファイル。
src/data_modules/custom_namespace/includes/ JavaScript ヘルパー
ここに配置された JavaScript ファイルは、自動的にパッケージ化され、コンパイル中に名前空間パス(includes/custom_namespace/ など)の下で Dataform モデルで使用できるようになります。
src/data_modules/custom_namespace/common/ Namespace 共有ツール
Namespace スコープのカスタム ビルダー、デプロイツール、その他のツール。

カスタム Namespace の構成

新しい名前空間 custom_namespace は、config.yaml ファイルの対応するセクションを拡張し、src/data_modules/ の下に新しいディレクトリを作成して、新しいモジュール コード アセットを追加することで定義できます。

Google Cloud Cortex Framework コンパイラがカスタム Namespace とモジュールを認識できるようにするには、グローバル構成ファイル(config/config.yaml など)に登録する必要があります。

ステップ A: 名前空間を登録する

data.namespaces ブロックの下に、名前空間のメタデータを追加します。

data:
  namespaces:
    - name: cortex
      path: cortex/
    - name:  custom_namespace    # <-- Name of custom namespace
      path:  custom_namespace/  # <-- Folder name that is used for custom namespace, points to subdirectory of 'src/data_modules/'

ステップ B: カスタム モジュールを構成する

カスタム モジュールを data.modules.foundation または data.modules.product に登録します。type フィールドには、ドット区切りの形式 custom_namespace.module_type を使用します。

data:
  modules:
    foundation:
      - moduleId:  custom_namespace_data_foundation_module_type
        type: custom_namespace.sap   # Format: <namespace>.<module_type>
        dataSourceId: sap_raw_s4
        dataTargetId: data_foundation_sap_custom_namespace
        moduleSettings:
          sapVersion: s4
          mandt: "100"
        # Default table settings file, relative to configuration file directory
        # tableSettings: "../src/data_modules/custom_namespace/data_foundation/data_foundation_module_type/table_settings.default.yaml"
        # Custom table settings file, relative to 'config/' directory
        tableSettings: "custom_namespace/data_foundation/data_foundation_module_type/table_settings.yaml"
        
    product:
      - moduleId: custom_namespace_data_product_module_type
        type: custom_namespace.data_product_module_type # Format: <namespace>.<module_type>
        dependsOn:
          sapModule: custom_namespace_data_foundation_module_type # References an existing foundation moduleId 
        dataTargetId: product_target
        # Custom table settings file, relative to 'config/' directory
        # tableSettings: "custom_namespace/data_product/data_product_module_type/table_settings.yaml"
        # Default table settings file, relative to configuration file directory
        # tableSettings: "../src/data_modules/custom_namespace/data_product/data_product_module_type/table_settings.default.yaml"

カスタム Namespace の共有コード

カスタム名前空間は、モジュール間のコード アーティファクトの共有をサポートしています。サポートされているアーティファクト タイプは次のとおりです。

  • includes - Dataform アーティファクトで使用可能になる JavaScript ヘルパーが含まれています。src/data_modules/custom_namespace/includes/ フォルダに配置できます。
  • builders - モジュールのソースコードを Dataform アーティファクトにコンパイルできるカスタム ジェネレータ クラス。これらは src/data_modules/custom_namespace/common/ に配置できます。

ビルダーの理解と参照

ビルダーは、モジュール ソースファイルを Dataform 出力にコンパイルする Python ジェネレータ クラスです。Google Cloud Cortex Framework は、柔軟な3 層のビルダー解決シーケンスを使用してモジュールをコンパイルします。

Google Cloud Cortex Framework の拡張性ビルダーの解決シーケンス

図 1. Cortex Framework 拡張機能ビルダーの解決シーケンス。

Tier 1: グローバル フォールバック ビルダー

このフレームワークには、src/common/builders/ にある非常に堅牢なビルダーが含まれています。これらのビルダーはグローバルに登録され、任意のカスタム Namespace で使用できます。

たとえば、カスタム データ プロダクトに標準の SAP データ プロダクト ビルダーを使用するには、manifest.yamlsap_product を参照します。

# src/data_modules/custom_namespace/data_product/data_product_module_type/manifest.yaml
type: data_product_module_type
builder: sap_product     # Automatically resolves to the global SapProductBuilder fallback
dependencies:
  sapModule:
    type: sap
    supportedVersions:
      - ecc
      - s4

Tier 2: Namespace-scoped ビルダー

カスタム名前空間内のモジュールに特殊なコンパイラが必要な場合は、その名前空間のカスタム ビルダーを登録できます。

  1. src/data_modules/custom_namespace/common/builders/my_builder.py の下にビルダー ファイルを作成します。

  2. ビルダー クラスに @builder_registry.register("my_builder") アノテーションを付けます。

     from common.builders.base import ProductBuilder
     from common.registry import builder_registry
    
     @builder_registry.register("my_builder")
     class MyCustomProductBuilder(ProductBuilder):
         # Implement build logic here...
    
  3. builder: my_builder を使用して、プロダクトの manifest.yaml で参照します。

Tier 3: 個々のプロダクト レベルのビルダー

一意性の高いパイプラインの場合は、単一のデータ プロダクトに限定してビルダーを定義できます。

  1. データ プロダクト フォルダ(src/data_modules/custom_namespace/data_product/data_product_module_type/builder.py など)内に builder.py という名前のファイルを作成するだけです。

  2. その中で BaseBuilder または ProductBuilder のサブクラスを定義します。

     from common.builders.base import ProductBuilder
    
     class UniqueSalesPerformanceBuilder(ProductBuilder):
         # Implement unique build logic here...
    
  3. コンパイラは、登録やデコレータを必要とせずに、このクラスを自動的に動的にインポートして実行します。

次のステップ(データ基盤モジュールの作成データ プロダクト モジュールの作成)では、データ モジュールを Namespace に追加する方法について説明します。