#はじめに
この記事は SAP Advent Calendar 2019 の12月20日分の記事として執筆しています。
株式会社KYOSOで開発マネージャをしております長嶋と申します。
よろしくお願いいたします。
今回は、SAP Analytics Cloudへ既存のオンプレミスHANAからデータをインポートするという作業を行った中で、遭遇した事実や事象についてご紹介したいと思います。
#概要
まず、今回の実施内容についての概要を簡単に図で表すと以下のようになります。
はい、要するにOnPremiseのHANAのデータをSACでの分析に使用するという要件ですね。
SACにインポートするデータ(今回はViewをターゲットにしています)はOnPremiseのHANAにあり、中間サーバーとしてAWS上でEC2を利用してCloudConnectorを設定し、SACへのデータインポートを行います。
図には記載していませんが、EC2上にはCloudConnectorと併せてSACAgentもインストールしています。
あと、ネットワーク構成の細かい話は今回割愛しております。
#作業手順
主な作業手順としては以下の流れで行いました。
(1) OnPremiseのHANAにて、インポート対象のViewをoDataサービスに設定する。
(2) AWSのEC2上にCloudConnectorとSACAgentをインストールし、設定する。
(3) SACにてCloudConnectorとの接続を設定する。
(4) CloundConnectorとOnPremiseのHANAの接続を設定する。
(5) SACにてインポートを実行する。
#本編
ここから具体的に内容を記載していきます。
長いです。
##(1)OnPremiseのHANAにて、インポート対象のViewをoDataサービスに設定します
まず、作業環境としてSYSTEMユーザーにてHANA StudioでOnPremiseのHANAに接続できていることが前提です。
###・oData設定用のユーザーを追加する
最初にSYSTEMユーザーをCOPYし、oData設定を行うためのユーザーとしてDEMO_USERを作成します。
GrantedRoleに以下を設定しておきます。
###・XS Projectを作成する
はい、次に対象のView(Table)をoDataサービスに設定しますので以下の要領でXS Projectを作成します。
・メニュー→[Window]→[Perspective]→[Open Perspective]→[SAP HANA Development]を選択します。
・メニュー→[File]→[New]→[XS Project]を選択します。
・プロジェクト名を入力します。
・Workspaceを選択します。
[Add Workspace...]から、現在のDEMO_USERの接続を選択して[Finish]を押下します。
・以下を参考に次へ進め、XS Projectの作成を完了します。
###・XS OData Fileを追加し、oDataサービスを設定する。
次に、作成したXS ProjectにXS OData Fileを追加します。
・作成したプロジェクトを右クリックし、以下の様に選択します。
[New]→[XS OData File]
・ファイル名を入力します。
・[Finish]を選択すると作成が完了します。
次に、作成したXS OData Fileを開き、対象のViewをサービスに登録する記述を反映します。
書式としては以下のようになります。
service {
"スキーマ名"."View(Table)名" as "サービス名称";
}
・XS OData Fileの編集を保存したら、Activateを行います。
プロジェクト名を右クリックし、以下の様に選択します。
[Team]→[Activate All...]
・作成したXS OData Fileを選択し、[OK]を選択します。
・Activateが完了します。
###・遭遇した事象二つ
はい、実はここで対応が必要な内容に2つ遭遇しました。
####まず一つ目
各種データベースの運用歴をある程度お持ちの方は、Tableのカラム名に「PG言語の予約語にありそうな名称」や「数字で始まる名称」は避けるよう設計していると思います。データベースあるあるの一種ですが、こういう名称を持たせると不都合に遭遇することがしばしばあります。
で、まさに今回数字で始まるカラム名が対象のViewに存在したことで、oDataをActivateできないという事象が発生しました。
先の手順の最後の方で、XS OData FileのActivateを実行した際に以下のエラーが発生しました。
Unsupported property name
対策としては単純で以下となります。
・Viewであれば、View定義で対象のカラムにエイリアス名を設定する
・TABLEの場合は、Viewを定義してそこでエイリアス名を設定する
XS OData Fileの記載の中でエイリアス名的な対処ができれば、元のView(Table)での変更は不要なので対応しやすいのですが、残念ながらそれが可能かどうかについて現時点ではわかりませんでした。
####そして、二つ目
対象のView(Table)にキーが無い場合、前述の[XS OData File]の記載だけではoDataをActivateしようとするとエラーが発生するのです。
oDataの設定では当たり前の話なんだと思いますが、実は私今回この設定初めてなのでここで知りました。
で、実は今回のViewってキーとして指定できる(一意になる)カラムの組み合わせが無いんですよね。
書式としては、
service {
"スキーマ名"."View(Table)名" as "サービス名称"
with (
"対象とするカラム名",
・・・
"対象とするカラム名"
)
key (
"キーに指定するカラム名",
・・・
"キーに指定するカラム名"
);
}
なのですが、key項目の指定が今回記載できません。
対処としては、自動でkey列を別で生成する設定を記載します。
service {
"スキーマ名"."View(Table)名" as "サービス名称"
with (
"対象とするカラム名",
・・・
"対象とするカラム名"
)
key generate local "ID";
}
ただ、これはこれで別の問題がありそうなのですが今回は割愛します。
##(2)AWSのEC2上にCloudConnectorとSACAgentをインストールし、設定する
ここは淡々と手順を以下に記載します。
###・CloudConnectorとJVMをインストールする
・SAP Development ToolsよりCloudConnectorとJVMをダウンロードします。
・ダウンロードしたsapjvm-x.x.xxx-windows-x64.zipを解凍し、任意の場所に設置。
例としてここでは D:\ 直下とします。
・Winsowsのシステムの詳細設定にてシステム環境変数に以下内容を追加します。
変数:JAVA_HOME
値:上記解凍パス + [\bin]
・Visual C++ Redistributable Packages for Visual Studio 2013より、Visual Studio 2013 Visual C++ 再頒布可能パッケージをダウンロードし、インストールします。
・次に、CloudConnectorをインストールする前に、SACにて「SAP Cloud Platform アカウント」を確認します。
SACにログインし、[システム]→[管理]を選択します。
データソース設定タブにて、SAP Cloud Platform アカウントに使用するアカウントユーザーを登録するとアカウント情報が表示されるようになります。
・ダウンロードしてあったCloudConnectorをインストールします。
・Windowsのサービス一覧に「SAP Cloud Connector」が追加されていることを確認します。
・CloundConnectorの管理画面にアクセスしてログインします。
管理画面のURLは
https://localhost:8443
です。
また、初期状態での管理アカウントは以下の設定になっています。
ID : Administrator
Pass:manage
※適宜パスワードを変更して運用しましょう。
SACで確認した「SAP Cloud Platform アカウント」情報を登録し、以下の画面が表示されたら初期設定は完了です。
###・TomcatとSACAgentをインストールする
続いて、SACAgentに必要なTomcatをインストールします。
・Apache TomcatよりTomcatのインストーラをダウンロードし、インストールします。
・インストールしたTomcatフォルダより、「Tomcat8w.exe」を起動してメモリ設定を調整します。
・次にSAP Softwear DownloadよりSACAgent(「C4AAgent」)をダウンロードします。
・ダウンロードした「C4AAgent」のwarファイルを、「Tomcatx.x>webapps」の直下に移動します。
・「Tomcatx.x>conf」フォルダ直下の「tomcat-users.xml」をエディタで開き、C4AAgentの設定を追記して保存します。
・Windowsのシステム環境変数に以下を追加します。
変数:JRE_HOME
値:jreのインストールパス
・Tomcatを起動します。
> cd C:\Program Files\Apache Software Foundation\Tomcat 8.5\bin
> startup.bat
以下のように表示されます。
###・CloudConnectorでSACAgentとの連携を設定する
次に、CloudConnectorの管理コンソールにて、「Clound to On-premise」を選択し、「+」をクリックして新規追加を行います。
Internal Host:Tomcat稼働環境のホスト名
Internal Port:Tomcatインストール時に設定したhttpポート番号
Virtual Host:新規のホスト名
Vitual Port:新規のポート番号 ※他の設定と被らないよう注意が必要
・続けて、Resources Of sacagentの新規追加を行います。
URL Pathは固定値で、「/C4A_AGENT/」を入力します。
##(3) SACにてCloudConnectorとの接続を設定する。
続いてここも淡々と手順を以下に記載します。
・SACにログインし、[システム]→[管理]を選択します。
データソース設定タブにて、「オンプレミスデータソース」の設定でエージェント追加を行います。
ホスト、ポート:CloudConnectorで設定した、Virtual Host情報
ユーザ名、パスワード:tomcat-users.xmlに追記したID/PW情報
これで、SACとSACAgent、CloudConnectorは接続できました。
##(4)CloundConnectorとOnPremiseのHANAの接続を設定する
続いて続いてここも淡々と手順を以下に記載します。
・CloudConnectorの管理コンソールで、「Cloud To On-Premise」にて Mapping Virtual To Internal Systemのエントリを追加します。
「+」をクリックします。
Internal Host:OnPremise HANAのIPアドレス
Internal Port:8000
Virtual Host:Internal Hostと同じ
Vitual Port:Internal Portと同じ
・次に、登録したエントリのResoucesを登録します。
今追加したMapping Virtual To Internal Systemのエントリを選択し、下段のResouces Of *** にある「+」をクリックします・
URL Pathは固定値「/」を入力します。
これで、CloudConnectorとOnPremiseのHANAが接続できました。
##(5) SACにてインポートを実行する。
ここまでに作成した接続を使用して、OnPremiseのHANAからSACにデータインポートを行います。
・まず、SACにログインし、メニューから[接続]を選択します。
・次にデータソースの選択で[Odataサービス]を選択します。
(画像に「あ」って入っちゃってました・・・)
・oDataサービス接続情報を入力します。
データサービスURLは以下内容です。
http://"オンプレHANAのIP":8000/"XS Project名"/"XS OData Fileのファイル名"
・次にメニューから[作成]→[データセット]を選択します。
「+」をクリックします。
データソースからのデータを選択します。
Odataサービスを選択します。
先ほど作成した接続が選択できるので、指定します。
「OK」をクリックするとインポートがスタートします。
完了すると以下のようになります。
これで要件の通り、OnPremiseのHANAのデータをCloudConnectorを介してSACへのデータインポートを行う事が実現できました。
あー長かった。
データインポートでの注意点
で、実はこのデータインポートには注意点が二点あります。
SACでデータを取り扱うには Live Connectionを使用するか、今回の様にデータインポートを行うかのどちらかになりますが、
データインポートの場合、一回あたりのデータ転送のレコード数上限が 80万件 なのです。
また、インポートのクエリを作成するときに指定できるカラムは 100個 が上限になります。
貯めに貯めたERPのデータなどで数千万件などデータがある場合や、100個以上のカラムがあるテーブルをインポートする場合は、事前に対象のスコーピングとクレンジングが必須となりますので良く検討しましょう。
(技術的には対象のView(Table)を複数のODataサービスに分割し、多重並列インポート等を行う等色々工夫が可能です。)
#終わりに
文才が無いので無駄に長い記事になってしまいましたが、SAP Advent Calendar 2019 の12月20日分の記事となります。
万一内容に間違い・齟齬がありました場合は適宜修正させていただきます。
なお最後になりますが、
(2) AWSのEC2上にCloudConnectorとSACAgentをインストールし、設定する。
(3) SACにてCloudConnectorとの接続を設定する。
の内容においては、@iwa_ginoに資料提供の協力をいただきました。
この場でお礼を申し上げたいと思います。ありがとうございました!