Cortex Framework for SAP をDeployしてみた
本記事では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図のようになります。
そしてなぜそれがフレームワークと呼ばれるのか?というと
そのデータの変換をするために、GCPのサービスが色々とパッケージ化された形で詰まっているからです。
これがCortex Frameworkの中身です。
で、す、が!!!
ここではまだこのアーキテクチャは頭の隅にも置いておくだけでOKです。
何となくBigQueryやCloud Composerなどのコンポーネントが組み合わされたものと言うところまでの理解でOKです。
Cortex frameworkの使い方
Cortex frameworkはGithub上で公開されているフレームワークなので、自身のGCP環境にテンプレートを展開してBuildすることができます。
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のパラメータの中身は以下のリンク先から確認できます。
パラメータ | 意味 | デフォルト値 | 説明 |
---|---|---|---|
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