(English version here)
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に移行します。