Technical Articles
オンプレSAP HANAのCalculation ViewをSAP HANA Cloudに移行してみる – Part 1
0. はじめに
0-1. 本ブログについて
2020年3月27日にSAP HANA Cloudがリリースされました。インメモリデータベースSAP HANAの高速性をより手軽に利用したい、リレーショナルデータレイクを利用してより大容量のデータを取り扱いたい、、低TCOや伸縮性といったクラウドのメリットを享受したい、といった客様にとっては非常に魅力的な選択肢になるのでは、と思います。
SAP HANA Cloudの魅力や最初の始め方は別ブログに任せるとして、本ブログでは特に現在オンプレミスでSAP HANAをご利用いただいているお客様向けに、既存の資産をSAP HANA Cloudに移行するための方法をシリーズでご紹介します。
なお、SAP HANA Cloudでは既存SAP HANAからSAP HANA Cloudへの移行ツールのご提供を予定しているため、将来的には本ブログの内容がツールでよりシンプルに行えるようになる可能性がある点、あらかじめご了承ください。(現時点ではSAP Cloud Platform, SAP HANA Service (HANA as a Service / HaaS) からの移行ツールが最初に提供される予定です。)
0-2. 本ブログのシステム環境
On Premise : SAP HANA 2.0 SPS04 Revision 42
Cloud: SAP HANA Cloud 4.00.000.00.1583243463 (Last Update March 3, 2020)
0-3. 全体流れ
クラシカルなDBスキーマ「SALES」に3つのテーブル(SO_HEADER, SO_ITEM, MD_PRODUCTS)があり、パッケージ「SALES」に2つのCalculation View(CV_SALES, CV_PRODUCTS)があります。これらを以下のようなステップでSAP HANA Cloudに移行していきます。
Part1: オンプレミスHANAでCalculation ViewをHDIコンテナーのオブジェクトに変換する
Part 2: 変換したオブジェクトをSAP HANA Cloudにインポートする
Part 3: データをオンプレミスHANAからSAP HANA Cloudに移行する
それでは、早速Part1の説明に入っていきます。以下のような流れで進みます。
- データモデルの確認
- 移行ツールの準備
- XSAモデル(HDI)への変換
- HDIコンテナーへのモデルのインポート(移行)
- HDIコンテナーへのテーブルの移行
1. データモデルの確認
スキーマ「SALES」に3つのテーブルがあります。
パッケージ「SALES」に2つのCalculation Viewがあります。DIMENSIONタイプの「CV_PRODUCTS」とCUBE(Star Join)タイプの「CV_SALES」です。
パッケージ「SALES」はDelivery Unit「SALES」に割り当てられています。
2. 移行ツールの準備
SAPヘルプに沿って、移行ツールをダウンロードし、設定を行います。
まず、SAP Support Portalより、「XSAC Migration 1」をダウンロードします。
ダウンロードしたZIPファイルを任意のフォルダーに解凍します。
環境変数を設定します。
3. XSAモデル(HDI)への変換
インストールしたMigrationツールを使用し、Calculation ViewをXSAモデルに変換します。
まず、変換後のオブジェクトがエクスポートされるフォルダを作成します。今回は「C:\tmp\xs-migration」とします。
フォルダを作成したら、以下のコマンドで変換を実行します。
ここで、ターゲットフォルダは存在していない必要があります。また、「SALES,SAP_JAPAN」はDelivery Unitの名前とそのベンダーです。(つまり、このツールはDeliver Unitごとに変換を行います。)
xs-migration --target-dir "C:\tmp\xs-migration\Sales" SALES,SAP_JAPAN
(中略)
無事成功しました。指定したフォルダを見ると、ファイルが生成されています。
ここで、「report.html」を見てみましょう。生成されたファイルの情報などが確認できます。
最後に、生成されたソースファイル(フォルダ→db→src)を1つのZIPファイルに圧縮します。
4. HDIコンテナーへモデルの移行(インポート)
4.1 HDIコンテナーへ変換後オブジェクトをインポート
Web IDE for SAP HANAでHANA Cloudにログインし、インポート先のProject(ここでは「Sales」)を作成します(本ブログでは手順は割愛します)。このProject「Sales」の「src」に前のステップでエクスポートした変換後オブジェクトのZIPファイルをインポートします。
ファイルを選択します。
Importを押下します。
無事HDIコンテナーにモデルがインポートされました。
4.2 シノニムの設定
ここまでで新しいCalculation ViewはHDIコンテナーにインポートされましたが、テーブルは何も変換されていません。つまり、クラシカルなスキーマ「SALES」にテーブル・データはあります。このため、HDIコンテナーのCalculation Viewからスキーマ「SALES」にアクセスすための設定(シノニムを作成する)を行う必要があります。詳細はSAPヘルプやブログを確認いただければと思いますが、ここでは手順のみ説明します。
4.2.1 ロールの作成
HANA Studioより、2つのロールを作成します。次にGrantサービス用のDBユーザーを作成し、このロールを割り当てます。
CREATE ROLE "sales::source_schema";
GRANT SELECT, EXECUTE ON SCHEMA SALES TO "sales::source_schema";
CREATE ROLE "sales::source_schema_g";
GRANT SELECT, EXECUTE ON SCHEMA SALES TO "sales::source_schema_g" WITH GRANT OPTION;
CREATE USER USR_GRANTOR password XXXXXXX no force_first_password_change;
GRANT "sales::source_schema","sales::source_schema_g" to USR_GRANTOR with admin option;
4.2.2 XSAへGrantorサービスの登録
XS CLIを使用し、XSAにgrantorサービスを登録します。ここではDBサーバーにログインし、以下のコマンドを実行します。
xs cups EPM_XXX-table-grantor –p "{"host":"hostname.com","port":"30015","user":"USR_GRANTOR","password":"XXXXXX","driver":"com.sap.db.jdbc.Driver","tags":["hana"]}"
4.2.3. mta.yamlファイルの編集
mta.yamlファイルをCode Editorで開き、先ほど登録したgrantor-serviceを追加します。(枠内)
4.2.4 .hdbgrantsファイルの作成
「src」の下に新規に拡張子「.hdbgrants」のファイルを新規作成します。
以下のように記載し、保存、ビルドします。
{
"grantor-service": {
"object_owner": {
"roles": [
"sales::source_schema_g"
]
},
"application_user": {
"roles": [
"sales::source_schema"
]
}
}
}
4.2.5 シノニムの設定
シノニムを設定するための.hdbsynonymファイルを開きます(このファイルはMigrationツールが自動生成しています)。ここで、Object Name列の「…」を押下します。
「External Services」で先ほど登録したサービスを選択し、テーブル名(の一部)を入れ、表示された候補の中から、実テーブルを選択します。(今回はSALESスキーマのテーブルMD_PRODUCTを選択)
他のテーブルも同様に登録し、ファイルを保存、ビルドします。
Database Explorerより、シノニムが作成され、SQLでデータアクセスも可能であることが確認できます。
4.3 インポートしたモデルのビルド
最後に、インポートしたモデルをビルドします。
Database Explorerより、Calculation Viewが作成され、アクセスも可能であることが確認できます。これにて無事Calculation ViewがXSA HDIコンテナーへ移行できました。
5. HDIコンテナーへのテーブルの移行
テーブルはクラシカルなスキーマに置いたままでも問題ありませんが、本ブログではさらにテーブルもHDIコンテナーの中(コンテナーが管理するスキーマ)に移行してみます。
5.1 テーブル(.hdbtable)の作成
hdbtableの文法に従いテーブル定義を作成し、ビルドします。
(注:CDSはSAP HANA Cloudでは利用できないため、テーブルはhdbcdsではなくhdbtableで作成ください。)
5.2 データの移行
クラシカルスキーマのテーブル(シノニム)からHDIコンテナー内のテーブルにSQLでデータを移行します。
insert into "SALES_1"."SALES::HDI_MD_PRODUCTS" select * from "SALES_1"."SALES::MD_PRODUCTS";
5.3 シノニムの編集
4.2.5と同様、.hdbsynonymファイルを編集します。5.1で作成したテーブルを参照するようにし、保存、ビルドします。
Calculation Viewを再度確認し、データが正常に参照できていることを確認します。
以上で、Calculation ViewをHDI化することができました。次のブログで、今回HDI化したモデルをSAP HANA Cloudに移行します。
ご紹介ありがとうございます。
一つ質問させていただきたいです。
古いバージョンのHANA(HANA1.0 SPS7)で作ったAnalytic View,anttribute viewやcalculation viewも
Migrationツールを使用し、Calculation ViewをXSAモデルに変換できますでしょうか?
よろしくお願いいたします。
Analytic ViewやAttribute ViewをCalculation ViewにMigrationするツールはHANA1 SP12以降でご利用可能となっています。(SAP Note 2325817、SP11からご利用可能ですが機能制約あり)
よろしくお願いいたします。
Hi Takao,
Its a nice blog and very helpful as it meets my requirement.
My Case Scenario: - We have developed Custom tables and Calculation Views in HANA DB on Premise and Calculation views are consumed in SAC using a live connection.
Requirement:- Moving HANA Artifacts like Tables and Calculation Views with data to Cloud Platform and Consuming in SAC.
Problem Statement: - As per your blog I need more clarity on step 4.
Guidance on STEP 4
4. Migrate model to HDI container (import)
4.1 Import objects after conversion to HDI container
Log in to XSA with Web IDE for SAP HANA and import the zip file of the converted
objects exported in the previous step into the "src" of Project "Sales".
Hi Hansraj,
Thank you for your comment,
Sorry, it was wrong and I have corrected this blog.
In this blog I used HANA Cloud (running on SAP CP CF) and I created HDI container in it.
Thank you,
Takao