🚅

Cortex Framework for SAP をDeployしてみた

2024/02/25に公開

本記事ではSAP cortex Frameworkを使用してSAPのデータをBigQueryでデータ分析できるようにしていきたいと思います!!

とは言いつつも、正直自分はSAPに関する知識はほぼ皆無、なんとなくSAPのデータをBigQueryでデータ分析しやすくできるFrameworkがあるという噂を聞きつけ、実際にはどんな感じで使えるのかを試行錯誤しながらその実態を掴んでいきたいと思います。

まずは、ざっくりSAP cortex Frameworkとは?

まだ触れてもないので、よくわかっていない前提ですが、

SAP cortex frameworkはSAPのぱっと見わかりにくいデータを人間が見ても分かるようにするためのFrameworkと理解しています!

めちゃくちゃ雑な例えですが、以下のような記号があったときに人間は「何じゃこの英単語の羅列」となりますよね。
bsk
sccr
swm

それを人間が見てもわかりやすく変換するもの。
bsk → バスケットボール
sccr → サッカー
swm → スイミング

ここまではOKデスネ?恐ろしくざっくりな説明です。
実際にはここのER図のようになります。
https://github.com/GoogleCloudPlatform/cortex-data-foundation/blob/main/docs/erd_ecc.pdf

そしてなぜそれがフレームワークと呼ばれるのか?というと
そのデータの変換をするために、GCPのサービスが色々とパッケージ化された形で詰まっているからです。

これがCortex Frameworkの中身です。

で、す、が!!!
ここではまだこのアーキテクチャは頭の隅にも置いておくだけでOKです。
何となくBigQueryやCloud Composerなどのコンポーネントが組み合わされたものと言うところまでの理解でOKです。

Cortex frameworkの使い方

Cortex frameworkはGithub上で公開されているフレームワークなので、自身のGCP環境にテンプレートを展開してBuildすることができます。
https://github.com/GoogleCloudPlatform/cortex-data-foundation

Google Cloud Cortex Framework for SAPを実際に使ってみる

⓪ 前提条件 - Prerequisites -

-必要なもの-
GCPのプロジェクトを最低限一つ作成しておく (*本番環境では、Rawデータを入れるプロジェクトとデータ加工後のデータを入れるプロジェクトを分けておくのが推奨)
BigQueryのDatasetを作れる状態にしておく (おそらくDefaultで使える状態)

-不要なもの-
k9 deployer等でデータソースごとの設定をするようだが、テストデータを使用する場合には不要らしい。← 今回やってみて結果不要だった。

git cloneでrepositoryをclone

まずはGCPのコンソールに入って、Cloud Shellをオープン!!

以下のコマンドを実行します。

git clone --recurse-submodules https://github.com/GoogleCloudPlatform/cortex-data-foundation

cortex-data-foundationというフォルダーが自身のGCP環境にコピーされました。
では、そのフォルダーの配下に移動してみましょう。

cd cortex-data-foundation

lsコマンドで覗いてみると、以下のようにいくつかデプロイするためのファイルが確認できますね。

$ ls
1_click.sh  cloudbuild.yaml  config  deploy.sh  docs  images  LICENSE  README.md  RELEASE_NOTES.md  requirements.in  requirements.txt  src  support.sh

① GCP環境の設定

必要なGCPコンポーネントをEnableする

Cloud Shellで一気にコンポーネントをEnableしていきます。
以下のコマンドでBigQuery、Cloud Build、Cloud Composer、Cloud Storage、Cloud resource manager、DataflowをEnableにしています。

gcloud config set project <SOURCE_PROJECT>

gcloud services enable bigquery.googleapis.com \
                       cloudbuild.googleapis.com \
                       composer.googleapis.com \
                       storage-component.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       dataflow.googleapis.com

出力例
Updated property [core/project].
Operation "operations/acat.p2-598927097921-1e5c0737-b04b-4cdc-81b2-adf1c9317d19" finished successfully.

必要な権限の付与

念の為、Cortex frameworkを実行するユーザーに必要な権限をここに記載しておきます。
Service Usage Consumer
Storage Object Viewer for the Cloud Build default bucket or bucket for logs
Object Writer to the output buckets
Cloud Build Editor
Project Viewer or Storage Object Viewer

ちなみにService Accountを作成して、そのSAに実行権限を付与して実行するということも可能です!

Cloud Buildアカウントの設定

Cloud Buildのサービスアカウントに必要な権限を付与していきます。

必要な権限は以下の三つ
BigQuery Data Editor
BigQuery Job User
Storage Object Admin (ログをGCSのバケットに出力するために必要)

上記のように権限がついていたらOK!!

DAG関連のファイルを入れておくためのGCSのバケット作成

BigQueryのデータセット同じリージョンにBucketを作成する。
DAG関連のデータがこのバケットに入ります。

ログの管理のためGCSのバケット作成

BigQueryのデータセット同じリージョンにBucketを作成する。
Cloud Buildのプロセスの過程で出力されたログが入ります。

RawデータとCDCデータが入るBigQuery Datasetを作成

Rawデータが入るようのDatasetを作成しておく。リージョンはasia-northeast1 (Tokyo)

CDCの転送先のDatasetを作成しておく。リージョンはasia-northeast1 (Tokyo)

Data Meshを作成する (Data Meshが不要の場合はスキップ可能)

一旦このステップはテストなのでスキップして実行してみます。
今後実施した際にはここを埋めたいと思います!

②Deploymentの設定

config.jsonファイルの確認

Cortex Frameworkのdeploymentはconfig.jsonふぁいるで管理されています。
./cortex-data-foundation/config/config.json ← の中に入っています。
なのでまずはそのディレクトリーに移動してみましょう!

$ cd cortex-data-foundation/config

$ ls
config_default.json  config.json

config.jsonの説明

config.jsonは以下のように二つのパートに分かれています。

① Global Deployment ParametersがSAPに限らず、Cortex Framework全体のパラメータを設定する項目です
② Workload Specific ParametersはSAPなどのWorkload個別のパラメータを設定する項目です

config.jsonのDefaultパラメータの項目

config.jsonのパラメータの中身は以下のリンク先から確認できます。
https://github.com/GoogleCloudPlatform/cortex-data-foundation?tab=readme-ov-file#global-deployment-configuration

パラメータ 意味 デフォルト値 説明
testData テストデータの配置 true ソースデータが配置され、ビルドが実行されるプロジェクト
deploySAP SAPの展開 true SAPワークロード(ECCまたはS/4HANA)の展開を実行するか
deploySFDC Salesforceの展開 true Salesforceワークロードの展開を実行するか
deployMarketing マーケティングの展開 true マーケティングソース(Google Ads、CM360、TikTok)の展開を実行するか
deployDataMesh Data Meshの展開 true Data Meshの展開を実行するか。詳細はData Mesh READMEを参照
turboMode ターボモード true すべてのビューを単一のCloud Buildプロセス内の1ステップとして並行して、高速に展開する。falseに設定されている場合、各レポートビューは個々のシーケンシャルビルドステップで生成される。テストデータを使用する場合、またはレポート列とソースデータ間の不一致が修正された場合にのみ、trueに設定することを推奨
projectIdSource ソースプロジェクトID - ソースデータセットが存在し、ビルドが実行されるプロジェクト
projectIdTarget ターゲットプロジェクトID - ユーザー向けのデータセット(レポート用と機械学習用)のプロジェクト
targetBucket ターゲットバケット - DAGスクリプトの保存先(Dataflowの一時ファイルも)。事前に作成されたバケットを指定する。実際のAirflowバケットの使用は避ける
Location ロケーションまたはリージョン "US" BigQueryデータセットやGCSバケットが存在するロケーション
languages フィルタリング言語 [ "E", "S" ] テストデータを使用しない場合は、ビジネスに関連する単一言語(例:「[ "E" ]」)または複数言語(例:「[ "E", "S" ]」)を入力する。SQLの中でプレースホルダを置き換えるために使用される(現在はSAPのみ対応 - 詳細はERDを参照)
currencies フィルタリング通貨 [ "USD" ] テストデータを使用しない場合は、ビジネスに関連する単一通貨(例:「[ "USD" ]」)または複数通貨(例:「[ "USD", "CAD" ]」)を入力する。SQLの中でプレースホルダを置き換えるために使用される(現在はSAPのみ対応 - 詳細はERDを参照)
testDataProject テストデータ用プロジェクト kittycorn-public デモ用配置のテストデータのソース。testDataがtrueの場合に適用
k9.datasets.processing K9 データセット – 処理 "K9_PROCESSING" K9設定ファイルで定義されているクロスワークロードテンプレート(例:日付項目)を実行する。通常、これらは下流のワークロードで必要となる
k9.datasets.reporting K9 データセット – レポーティング "K9_REPORTING" K9 設定ファイルで定義されているクロスワークロードテンプレートおよび外部データソース(例:天気)を実行する。デフォルトではコメントアウト
DataMesh.deployDescriptions Data Mesh – アセットの説明 true BigQueryアセットスキーマの説明を展開する
DataMesh.deployLakes Data Mesh – レイクとゾーン false 処理レイヤーによってテーブルを整理するDataplexのレイクとゾーンを展開する。有効にする前に設定が必要
DataMesh.deployCatalog Data Mesh – カタログのタグとテンプレート false BigQueryアセットやフィールド上のカスタムメタデータを許可するData Catalogタグを展開する。有効にする前に設定が必要
DataMesh.deployACLs Data Mesh – アクセス制御 false BigQuery アセットに対するアセット、行、または列レベルのアクセス制御を展開する。有効にする前に設定が必要
SAP独自のパラメータ項目
パラメータ 意味 デフォルト値 説明
SAP.deployCDC CDC展開 true Cloud Composer内でDAGとして実行するためのCDC処理スクリプトを生成する
SAP.datasets.raw 生データセット - CDCプロセスによって使用され、SAPからのデータをレプリケーションツールが格納する場所。テストデータを使用する場合は、空のデータセットを作成する
SAP.datasets.cdc CDC処理済みデータセット - レポートビュー用のソース、および処理済みDAGのターゲットとなるデータセット。テストデータを使用する場合は、空のデータセットを作成する
SAP.datasets.reporting レポーティングデータセット "REPORTING" エンドユーザーがレポート作成に利用できるデータセット名。ビューやユーザー向けのテーブルが配置される
SAP.datasets.ml MLデータセット "ML_MODELS" 機械学習アルゴリズムやBQMLモデルの結果をステージングするデータセット名
SAP.SQLFlavor ソースシステムのSQL形式 "ecc" s4またはecc。テストデータの場合はデフォルト値(ecc)のままにする。Demand Sensingでは、現時点ではeccテストデータのみが提供されている
SAP.mandt MandantまたはClient "100" SAPのデフォルトのMandantまたはClient。テストデータの場合はデフォルト値(100)のままに。Demand Sensingでは、900を使用する

config.jsonファイルを編集

デフォルト値は前段で説明しました。
editコマンドで以下のようにconfig.jsonファイルを編集します。

edit config/config.json
{
    "testData": true,
    "deploySAP": true,
    "deploySFDC": false,
    "deployMarketing": false,
    "deployDataMesh": false,
    "turboMode": true,
    "projectIdSource": "myproject-363708",
    "projectIdTarget": "myproject-363708",
    "targetBucket": "cortex_dag_bucket01",


    "location": "asia-northeast1",
    "languages": [
        "E",
        "S"
    ],
    "currencies": [
        "USD"
    ],
    "testDataProject": "kittycorn-public",
    "k9": {
        "datasets": {
            "processing": "K9_PROCESSING",
            "reporting": "K9_REPORTING"
        }
    },
    "DataMesh": {
        "deployDescriptions": true,
        "deployLakes": false,
        "deployCatalog": false,
        "deployACLs": false
    },
    "SAP": {
        "deployCDC": true,
        "datasets": {
            "cdc": "SAP_CDC_Data",
            "raw": "SAP_RAW_Data",
            "ml": "ML_MODELS",
            "reporting": "REPORTING"
        },
        "SQLFlavor": "ecc",
        "mandt": "100"
    },
    "SFDC": {
        "deployCDC": true,
        "createMappingViews": true,
        "createPlaceholders": true,
        "datasets": {
            "cdc": "",
            "raw": "",
            "reporting": "REPORTING_SFDC"
        }
    },
    "marketing": {
        "deployGoogleAds": true,
        "deployCM360": true,
        "deployTikTok": true,
        "deployLiveRamp": true,
        "dataflowRegion": "",
        "GoogleAds": {
            "deployCDC": true,
            "lookbackDays": 180,
            "datasets": {
                "cdc": "",
                "raw": "",
                "reporting": "REPORTING_GoogleAds"
            }
        },
        "CM360": {
            "deployCDC": true,
            "dataTransferBucket": "",
            "datasets": {
                "cdc": "",
                "raw": "",
                "reporting": "REPORTING_CM360"
            }
        },
        "TikTok": {
            "deployCDC": true,
            "datasets": {
                "cdc": "",
                "raw": "",
                "reporting": "REPORTING_TikTok"
            }
        },
        "LiveRamp": {
            "datasets": {
                "cdc": ""
            }
        }
    }
}

③ Deploymentの実行

config.jsonが修正できたので、これをbuildしていきます。

$ cd cortex-data-foundation
$ gcloud builds submit --project <データソース側のプロジェクト> \
    --substitutions=_GCS_BUCKET=<Cloud Buildのログ格納用のBucket>
$ cd cortex-data-foundation
$ gcloud builds submit --project myproject-363708 \
    --substitutions=_GCS_BUCKET=cortex_log_bucket01

実行した後、ログのリンクが出力される。リンク先から実行状況を確認する

成功した場合にはこのようになる!

BigQueryで作成しておいたDatasetにデータが格納されていることを確認する。
Rawデータ側のテーブルにサンプルデータが格納されていることが確認できる。

CDCのデータセットにもテーブルが格納されていることを確認。

まとめ

ということで、ひとまずはサンプルデータを用いてシンプルにDeployするところまでをやりました。
SAP以外のデータソース以外やパラメータを変更してみるとより理解が深まるかもしれません。

Discussion