Technical Articles
オンプレSAP HANAのCalculation ViewをSAP HANA Cloudに移行してみる – Part 3
0. はじめに
本ブログでは特に現在オンプレミスでSAP HANAをご利用いただいているお客様向けに、既存の資産をSAP HANA Cloudに移行するための方法をシリーズでご紹介します。
Part 1ではオンプレミスのSAP HANAのCalculation ViewをHDI化し、Part 2では変換したオブジェクトをSAP HANA Cloudに移行しました。このPart3では、データをオンプレミスのSAP HANAからSAP HANA Cloudに移行します。
Part1: オンプレミスHANAでCalculation ViewをHDIコンテナーのオブジェクトに変換する
Part 2: 変換したオブジェクトをSAP HANA Cloudにインポートする
Part 3: データをオンプレミスHANAからSAP HANA Cloudに移行する
なお、SAP HANA Cloudでは既存SAP HANAからSAP HANA Cloudへの移行ツールのご提供を予定しているため、将来的には本ブログの内容がツールでよりシンプルに行えるようになる可能性がある点、あらかじめご了承ください。(現時点ではSAP Cloud Platform, HANA Service (HANA as a Service / HaaS) からの移行ツールが最初に提供される予定です。)
では、はじめていきます。データの移行には大きく以下のステップで進めます。
- Data Provisioning Agent(DP Agent)を設定する
- 仮想テーブルを作成する
- データを移行する
本ブログでは、データの移行は仮想テーブルを使用してSQL(Insert – Select文)で行います。もちろんSDIのフローグラフでデータを移行することも可能ですが、これはまた別の機会にご説明しようと思います。
1. DP Agent設定する
1.1 DP Agentをインストールする
オンプレミスのSAP HANAとクラウドのSAP HANA Cloudをつなぐために、オンプレミス側にDP Agentをインストールします。本ブログでは、オンプレミスSAP HANAと同じネットワーク内のWindowsサーバーにDP Agentをインストールします。インストールの詳細はSAPヘルプやこのブログの「Download DP agent from SAP Service Marketplace as a ZIP file」を参照ください。
1.2 DP Agentの設定を行う
SAPヘルプに沿って設定を行います。
1.2.1 Agent Admin用HANAユーザーの作成
SAP HANA CloudのSAP HANA Cockpitより、以下の権限を持つHANA DBユーザーを作成します。
Application Privilege : sap.hana.im.dp.admin::Administrator
System Privilege : AGENT_ADMIN, ADAPTER_ADMIN
1.2.2 DP Agent設定ツールの起動
まず管理者としてコマンドプロンプトを起動します。以下のように環境変数を設定し、DP Agent設定ツールを起動します。
setx DPA_INSTANCE "C:\usr\sap\dataprovagent"
cd %DPA_INSTANCE%
cd bin
agentcli.bat --configAgent
1.2.3 Agentの起動
オプション1(Start or Stop Agent)を選択し、次にオプション1(Start Agent)を選択するとDP Agentが起動します。
1.2.4 SAP HANA接続設定
DP AgentからSAP HANA Cloudに接続します。まずオプション6(SAP HANA Connection)を選択します。次に、オプション3(Connect to SAP HANA via JDBC)を選択します。その後、以下のように入力していきます。
Use encrypted JDBC connection : true
Use WebSocket to connect : false
Host Name (for Direct SQL) : SAP HANA Cloud InstanceのEndpoint(*)
Port Number (for Direct SQL) : SAP HANA Cloud InstanceのEndpoint(*)
Agent Admin HANAユーザーとパスワード : 1.2.1で作成したユーザー・パスワード
Use HTTP Proxy Server : false (環境に応じて変更してください)
HANA User for Agent Messaging : 任意のユーザー名・パスワード、true (新規にユーザーを作成)
これで、SAP HANA CloudとDP Agent間の接続が完了しました。
(*) ホスト名とポート番号はSAP Cloud Platform Cockpitより確認します。SAP HANA InstancesのEndpointです。(以下の枠内)
1.2.5 DP Agentの登録
DP Agentを登録します。DP Agent設定ツールのトップに戻り、オプション7(Agent Registration)を選択し、その後オプション1(Register Agent)を選択します。
Agent Name : 任意の名前
Agent Host : DP AgentがインストールされているサーバーのIPアドレス
1.2.6 Adapterの登録
SAP HANAと接続するためのAdapter「HanaAdapter」を登録します。DP Agent設定ツールのトップに戻り、オプション8(Adapter Registration)を選択し、次にオプション2(Register Adapter)を選択して以下のように入力します。
Adapter Name : HanaAdapter
1.2.7 確認
Database Explorerにアクセスし、AgentとAdapterが登録されていることを確認します。
2. 仮想テーブルを作成する
SAP HANA CloudとオンプレミスSAP HANAを繋ぐDP Agentの設定が終わりました。次に、SAP HANA CloudにオンプレミスSAP HANAのテーブルを参照する仮想テーブルを作成します。
2.1 リモートソースを作成する
Database Explorerにて「Remote Source」を右クリックし「Add Remote Source」を選択します。
リモートソース名を入力し、アダプター名として「HanaAdapter」を選択します。オンプレミスSAP HANAのホスト名、ポート番号、接続ユーザー・パスワードなどを入力し、保存します。
作成されたリモートソースを開きます。スキーマが表示され、スキーマを開くとテーブルが表示されます。今回ソースとなるオンプレミスSAP HANAのHDIコンテナが管理するスキーマは「SALES_1」ですので、その中を確認するとPart2で作成したテーブル(SALES::HDI_MD_PRODUCTS, SALES::HDI_SO_HEADER, SALES::HDI_SO_ITEM)が確認できます。
2.2 仮想テーブルを作成するための権限を付与する
リモートソースが作成できました。次に仮想テーブルを作成します。その前に仮想テーブルを作成するための権限をHDIコンテナーの管理ユーザーに与えます。
ここでは、.hdbgrantsファイルを使用して権限を付与します。SAP HANA Cockpitで直接HDIコンテナーの管理ユーザーに権限を与えることも可能ではあります。
2.2.1 権限付与のためのUser-Provided Serviceを作成する
まず、権限付与のためのサービスを作成します。SAP Cloud Platform Cockpitにて、「New Instance」より新しいサービス(ここではgrant-service)を作成します。
{
"driver": "com.sap.db.jdbc.Driver",
"tags": [
"hana"
],
"user": "SYSTEM",
"password": "XXXXXX"
}
2.2.2 mta.yamlを編集する
作成したサービスをmta.yamlに登録します。以下の枠内を更新します。ここで、TARGET_CONTAINERは複数のHDIコンテナーが存在しているため設定しています。(SAP Cloud Platform CockpitのService Instancesより確認できます。)
2.2.3 .hdbgrantsファイルを作成しビルドする
権限付与のための.hdbgrantsファイルを作成し、ビルドします。ここでは、先ほど作成したリモートソースに対して「CREATE VIRTUAL TABLE」権限を付与します。
{
"grant-service": {
"object_owner": {
"global_object_privileges": [
{
"name": "OPHANA",
"type": "REMOTE SOURCE",
"privileges":[
"CREATE VIRTUAL TABLE"
]
}
]
}
}
}
2.3 仮想テーブルを作成する
ここまででリモートソースが作成でき、さらに仮想テーブルを作るための権限も付与できました。次に仮想テーブルを作成します。
SAP Web IDE for Full-Stackにて、右クリックでVirtualTableを新規作成します。
仮想テーブル名、リモートソース名、参照先のスキーマ名、テーブル名を入力します。DB名は「<NULL>」と入力します。保存してビルドすると仮想テーブルが作成されます。他のテーブルも同様に仮想テーブルを作成します。
Database Explorerで仮想テーブルを確認します。Tableに行くと、仮想テーブルが作成されていることが確認できます(ここではVT始まりのテーブル)。SQLのSELECT文を発行し、データが正常に取得できることを確認します。(SQL実行のたびにクラウドのSAP HANA CloudからオンプレミスのSAP HANAへデータを取得しに行きます。)
3. データを移行する
オンプレミスのSAP HANAのテーブルを参照する仮想テーブルがSAP HANA Cloud上に作成できました。この仮想テーブルを使用して、SAP HANA Cloudのテーブルにデータを移行します。移行方法は主に以下の2つが考えられます。
- SQLのInsert – Select文でデータを移行する
- Smart Data Integration(SDI)のFlowgraphでデータを移行する
本ブログでは、1のSQLでデータを移行します。
3.1 データを移行する
Database ExplorerでHDIコンテナーに接続します。以下のようなSQLを全てのテーブルに対して実行します。
insert into "SALESDB_1"."SALES::HDI_MD_PRODUCTS" select * from "SALESDB_1"."SALES::VT_MD_PRODUCTS";
SQLが正常に実行完了したらデータの移行は完了です。
3.2 データを確認する
Calculation Viewにアクセスし、Viewとデータが正常に移行されてることを確認します。Database ExplorerよりColumn Viewを表示します。ここにCalculation Viewのランタイムオブジェクトが表示されます。CUBE型のView「CV_SALES」を開きデータのプレビューを行うと、正常にデータが表示されることが確認できます。
以上でオンプレミスのSAP HANAからSAP HANA CloudへのCalculation Viewおよびテーブル・データの移行が完了しました。
他にもより効率的な方法があるかもしれませんが、一つの方法としてご参考になれば幸いです。