SAP Analytics CloudおよびOdata経由でアクセスできるHANA計算ビューやテーブルなどを作成する方法をご紹介します。
SAPシステムに格納されているデータを公開する際はでODataサービスという手法を推奨しています。「
CAPでSAP HANA CloudのテーブルをODataサービスとして公開する」ではSAP Cloud Application Programming Model (CAP)を活用してODataサービスの作成方法をご紹介しています。
xsodataを使用してHANAテーブルをODataサービスとして公開することもできますが、この方法は推奨されなくなりました。
しかし、上記のブログではCAPで作成したテーブル公開しかご紹介していません。
Calculation View、データベースプロシージャやシーケンスなどのデータベースオブジェクトの公開方法については述べていません。本ブログでは
HANA Calculation View、および
データベースプロシージャの公開方法についてご紹介します。
①ODataサービス経由、そして
②SAP Analytics Cloud経由でデータにアクセスしていきます。
開発者は、Business Application Studioを使用してフルスタックアプリケーションを作成し、Cloud Foundryにデプロイします。その後、HDIコンテナをSAP Analytics Cloudに公開できます。 業務担当ユーザーはアプリルーターを介してアプリケーションにアクセスできます。アプリルーターは最初にユーザーを認証し、次にアプリの正しいルートにリダイレクトして、ODataを介して要求されたデータをフェッチします。 ユーザーは、SAP HANA Cloudからのライブデータを表示するSAP Analytics Cloudのストーリーにアクセスすることもできます。
- 実装手順
- Business Application Studioを使用したマルチターゲットアプリケーションの開発
- HDIコンテナ
- データベースアーティファクトの作成(CDS /ネイティブアーティファクト)
- SAP Cloud Application Programming ModelでODataサービスの定義
- データアクセス ( ①SAC ②OData )
- トラブルシューティング
実装手順
本ブログでは、上記のアーキテクチャの詳細な実装手順については述べません。
HDIコンテナ、HANAテーブル、プロシージャ、計算ビュー、およびODataサービスを作成する方法を学ぶために、次の2つのソースをお勧めします。
1. このアーキテクチャを実装するために必要な手順は、Thomas Jungの公式チュートリアル:Combine CAP with SAP HANA Cloud to Create Full-Stack Applicationsで説明されています。CAPをHANA Cloudと組み合わせて、フルスタックアプリケーションを作成します。
GithubでThomasのチュートリアルに従って使用したコードを公開しています。
Thomasのチュートリアルに沿ってご自身で開発を進めることをお勧めします。テクノロジーを実際に学ぶ唯一の方法は、使ってみることです。
本ブログでは、ご自身のサービスを作成する前に、SAP HANA Cloudがどのように機能するかを理解するために必要な情報をご紹介します。
2. SAP HANA AcademyはBTP Extension Generators: CAP - Native HANA を提供します。
CAPサンプルデータを含むHDIコンテナー、ODataサービス、およびフロントエンドを自動的に作ってくれるとても便利な開発ツールです。
Business Application Studioを使用したマルチターゲットアプリケーションの開発
SAP HANA Cloudを開発/管理するときは、次のツールを使用します。
本ブログでは、SAP Business Application Studioを使用して
カスタムビジネスアプリケーションを開発することに焦点を当てています。カスタムビジネスアプリケーションは他の標準SAPアプリケーションと組み合わせて使用され、機能を拡張してユーザーの生産性を向上させます。
さまざまなランタイム環境向けにさまざまなテクノロジーで構築されたいくつかのパーツで構成されています。 たとえば、アプリケーションには、ブラウザで実行される静的Webコンテンツ、Java Enterpriseサーバーで実行されるサーバー側Javaコード、ODataプロビジョニングランタイムのODataサービス定義、およびテーブル、ビューなどの構成要素があります。
これらのパーツはすべて同じビジネスアプリケーションに属しているため、一緒に開発、配信、構成、および展開されます。多くの場合、さまざまなパーツに依存関係があり、その結果、指定されたターゲットに指定された順序でデプロイする必要があります。
したがって、
Cloud Application Programming model (CAP)では
マルチターゲットアプリケーション(MTA)アーキテクチャに従ってカスタムアプリケーションを構築することをお勧めします。 MTAは、論理的には、同じライフサイクルを共有するさまざまなテクノロジーで作成された複数の
モジュールで構成される単一のアプリケーションです。
開発者はアプリケーションに必要なモジュール、リソース、およびそれらの間の相互依存性を
multi-target application descriptor (mta.yaml)で記述します。その後、SAP Cloud Deploymentサービスは、MTAのデプロイメントを検証、調整、および自動化します。
この手順に沿って、Cloud Foundryアプリケーション、サービス、およびSAP固有のコンテンツが作成されます。
MTAモデルにおけるDevelopment to Deployment の流れ
ウィザードを使用してSAP Business Application Studio内でアプリケーションを作成すると、mta.yamlファイルがルートプロジェクトフォルダーに自動的に生成されます。
プロジェクトのプロパティが変更されたとき、またはモジュールが追加 / 削除されたときに更新されます。
ただし、すべての情報を自動的に生成できるわけではありません。リソース、プロパティ、依存関係を定義し、不足している情報を入力するには、mta.yamlを手動で維持する必要があります。
Thomas Jungのチュートリアルアプリケーションは4つのモジュールで構成されています。
Github でmta.yamlの例をあげています。
modules:
- name: Interactions-srv
type: nodejs
path: srv
- name: Interactions-db-deployer
type: hdb
path: db
- name: app
type: approuter.nodejs
path: app
- name: Interactions_ui_deployer
type: com.sap.application.content
path: .
各モジュールには
name,
type, pathがあります。
各モジュールは依存関係を持つことも可能です。
-> 依存するサービスを
requiresで定義します。-> 提供するサービスをprovidesで定義します。
モジュールが依存するリソースは、
resourcesセクションで明示的に詳述する必要があります。 Thomas Jungのチュートリアルでは、下記のようにアプリケーションに4つのリソースが含まれています。
resources:
- name: Interactions-db
type: com.sap.xs.hdi-container
- name: Interactions_html_repo_runtime
type: org.cloudfoundry.managed-service
- name: uaa_Interactions
type: org.cloudfoundry.managed-service
- name: Interactions_html_repo_host
type: org.cloudfoundry.managed-service
HDI コンテナ
上記のresourcesセクションにはcom.sap.xs.hdi-containerというリソースも含まれています。
これは、SAP HANA Cloudデータベースと通信するためにアプリケーションによって使用されるサービスです。
Interactions-srvと呼ばれるNode.jsアプリケーションがデータベースに対して読み取り/書き込みを行う必要があるたびに、Interactions-dbと呼ばれるHDIコンテナサービスが呼び出されます。 Interactions-dbには、SAP HANA Cloudにアクセスするために必要な情報(ホスト、ポート、スキーマ、ユーザー、パスワード)が保存されているCloud FoundryスペースのInteractions-hdiというサービスにバインドされています。
Interactions-dbはInteractions-hdiにどのようにバインドされていますか?
バインドされたサービスの情報はdbフォルダーの.envファイルにあります。Witalij Rudnickiのブログで、dbフォルダーと.envファイルの構造について詳しく学んでください。
SAP BTPコックピットでinteractions-hdiを確認できます。
サービスキー内には、SAP HANA Cloudに接続するために必要なすべての情報があります。
ブログの最初にあるアーキテクチャに戻り、確認してみてください。
Appモジュールと
Srvモジュール、および
DBリソースと
Security(XSUAA)リソースがあります。
HDI Container とは?
SAP HANAデプロイメントインフラストラクチャ(HDI)を使用すると、データベース開発アーティファクト(テーブル、ビュー、プロシージャなど)をSAP HANAのコンテナにデプロイできます。
上記のInteractions-dbで見たように、アプリケーションはデータベーススキーマを直接参照せず、HDIコンテナのみを認識すれば良いです。これをスキーマレス開発と呼びます。これにより、アプリケーションの横展開、サンドボックス化、および強化されたセキュリティオプションが可能になります。
HDIコンテナは、設計時と実行時のアーティファクトを明確に分離します。
バージョン管理とライフサイクル管理はGitを介して管理されます。
HDI Reference ではセットアップ、維持、アクセス許可、およびHDIの使用するために必要なタスクについて説明します。
テーブル単位、スキーマ単位などで
HDIへのアクセスを付与するために必要な権限をどのように組み合わせるかについて説明します。
Calculation Viewを開発する際は、
HDIコンテナ内のローカルオブジェクトへのアクセスのみが許可されていることを覚えておくことが重要です。
アクセスをローカルオブジェクトに制限すると、異なるコンテナバージョンを展開するときに、依存関係がとてもわかりやすくなります。コードは、開発から本番まで簡単に移植できるようになります。
Calculation ViewがHDIコンテナの外部のテーブルやビューにアクセスするようにする場合は、
シノニムを介して依存関係を明確に宣言する必要があります。
HDIコンテナのリモートクラシックスキーマ内のオブジェクトへのアクセスを有効にする方法に関する
公式ドキュメントを参照してください。
他のスキーマのオブジェクトにアクセスするためのセキュリティの概念と手順は、SAP HANA Academyの
HANA Cloud - Access Schema from HDI Containerで説明されています。
データベースアーティファクトの作成(CDS /ネイティブアーティファクト)
Thomasのチュートリアルでは、SAP HANA Cloudでアーティファクトを作成する2つの方法を説明しています。
Core Data Services(CDS)は、SAP Cloud Application Programming Modelのコアです。
サービス定義とデータモデル、クエリ、および式をJSON表記で表現する手段を提供します。
CDS機能は、さまざまなソース言語から解析し、それらをさまざまなターゲット言語にコンパイルします。
この方法では、
- dbフォルダー内の.cdsファイルにすべてのオブジェクトを定義します。
- 次のステップは、cds buildで.cdsファイルをビルドすることにより、データベースネイティブのアーティファクト(HANAで読み取ることができる.hdbtableおよび.hdbviewファイル)を生成することです。
- 最後に、すべてのアーティファクト(.hdbtableファイルと.hdbviewファイル)をHANAにデプロイして、データベースにテーブルとビューを作成します。
チュートリアルの例です:interactions.cds
context app.interactions {
entity Interactions_Header {
key ID : Integer;
ITEMS : Composition of many Interactions_Items on ITEMS.INTHeader = $self;
PARTNER : String(10);
LOG_DATE : DateTime;
};
entity Interactions_Items {
key INTHeader : Association to Interactions_Header;
key TEXT_ID : String(10);
LANGU : String(2);
LOGTEXT : String(1024);
};
}
2つのエンティティ(テーブル)を定義します:Interactions_HeaderとInteractions_Items。
両テーブルは1:n の関係にあります。 ヘッダーでは"
ITEMS : Composition of many Interactions_Items on ITEMS.INTHeader =$self; " と表しています。
アイテムテーブルでは"
INTHeader : Association to Interactions_Header; "と表しています。
準備ができたら
cds buildを実行するだけで、定義したすべてのオブジェクトがgenフォルダ内のHANAネイティブアーティファクトに変換されます。
ネイティブアーティファクトはHANAにデプロイできます。 CAPを最大限に活用して最も単純な開発手法ですが、HANA Calculation viewやprocedureを構築することはできません。
CAPでSAP HANAネイティブ機能を使用するには、デザイン時アーティファクト(.hdbtable、.hdbsynonym、.hdbcalculationview、.hdbprocedure、...)をdb / srcフォルダーに直接作成します。
SAP Business Application Studioは、HANAネイティブアーティファクトを生成するためのUIを提供します。
ネイティブアーティファクトを作成した後、それらをCAPアプリケーションで使用し、ODataを介して公開する場合は、オブジェクトをCDSに認識させる必要があります。
- .cdsファイルで新しく設計されたデータベースオブジェクトまたは既存のデータベースオブジェクトのsignatureと一致するエンティティを定義します。
- アノテーション
@cds.persistence.exists
を追加して、このオブジェクトがデータベースにすでに存在し、生成しなくて良いことをCDSに知らせます。
このエンティティは、データベースオブジェクトのファサードとして機能し、通常のエンティティのようにモデルで使用できます。下記が例です。
@cds.persistence.exists
@cds.persistence.calcview
entity![V_INTERACTION]{
key![ID] : Integer @title : 'ID: ID';
key![PARTNER] : String(10) @title : 'PARTNER: PARTNER';
key![LOG_DATE] : String @title : 'LOG_DATE: LOG_DATE';
key![BPCOUNTRY_CODE] : String(3) @title : 'BPCOUNTRY_CODE: BPCOUNTRY_CODE';
key![TEXT_ID] : String(10) @title : 'TEXT_ID: TEXT_ID';
key![LANGU] : String(2) @title : 'LANGU: LANGU';
key![LOGTEXT] : String(1024)@title : 'LOGTEXT: LOGTEXT';
key![INTHEADER_ID] : Integer @title : 'INTHEADER_ID: INTHEADER_ID'; }
上記のコードを.cdsファイルに追加し、
cds buildコマンドを使用すると、オブジェクトは既存のものとして認識され、CAPアプリケーションで使用できるようになります。
SAP Cloud Application Programming ModelでODataサービスの定義
srvフォルダーでも、.cdsファイル(dbフォルダーと同じ拡張子)でサービスインターフェイスを定義できます。
このファイルは、データを公開するサービスを定義します。データベースにはデプロイされません。
Thomas Jungのチュートリアルで作成するinteractions-srv.cdsファイルは次のとおりです。
using app.interactions from '../db/interactions';
using V_INTERACTION from '../db/interactions';
@requires: 'authenticated-user'
service CatalogService {
entity Interactions_Header
as projection on interactions.Interactions_Header;
entity Interactions_Items
as projection on interactions.Interactions_Items;
function sleep() returns Boolean;
@readonly
entity V_Interaction as projection on V_INTERACTION;
}
usingキーワードは、dbフォルダー.cdsファイルに対する依存関係表しています。
@requiresキーワードは、ユーザーがリソースにアクセスするために必要なロールを制御します。
上記の場合、認証されたユーザーが必要です。
serviceキーワードはODataサービスとして公開されるエンティティを定義します。
@readonlyキーワードは、読み取り専用エンティティ(この場合はHANA Calculation View)を定義します。
.cdsファイルの準備ができたら、cds buildを使用してビルドするだけで、ODataサービスとして公開する準備が整います。これがCAPの利点であり、開発者は時間を大幅に節約できます。 npm startを実行すると、Business Application Studio内からODataサービスをテストできます。
開発が終わるとSAP Business TechnologyPlatformにデプロイして本番環境に移行できます。 プロジェクトをデプロイするには、mta.yamlファイルを右クリックして、[BuildMTAプロジェクト]を選択します。
MTA archive(Interactions_1.0.0.mtar)が作成されたら、それを右クリックして[MTAアーカイブの展開]を選択します。
cf deploy "/home/user/projects/Interactions/mta_archives/Interactions_1.0.0.mtar" コマンドが実行されます。
マルチターゲットアプリケーションはすべての依存関係を考慮した上でSAP Business Technology Platformにデプロイされます。
結果はSAP BTPコックピットで確認できます。ここでは、スペース内のさまざまなサービスとアプリケーションを確認できます。
アプリケーションを開くと、外部アクセスに使用できるデプロイ済みのURLが見つかります。
データアクセス
Calculation ViewとODataサービスがSAP Business Technology Platformにデプロイされます(この画像の緑色の線)。
外部アプリケーションはデータを消費できます(この画像のオレンジ色の線)。
データアクセス方法が二つ:
- 分析クライアント (SAP Analytics Cloud, BusinessObjects BI,...)からCalculation Viewにアクセスできます
- ODataクライアント(Webアプリケーション)からOData serviceにアクセスできます
1. SAP Analytics Cloudを介したデータアクセス
HANA Calculation Viewを作成したら、SAP Analytics Cloudや
BusinessObjects BI Platformなどの分析クライアントに公開できます。
このブログでは、SAP Analytics Cloudからデータにアクセスするための簡単な方法のみ説明します。 データアクセス制御に関してSSOなどの要件がある場合は
A live data connection to SAP HANA Cloud in SAP Analytics Cloudを確認してください。
SACからのデータへのアクセスに使用されるHANAデータベースユーザーを定義します。
今回の例ではHANAデータベースエクスプローラーでSQLコンソールを開き、下記のSQL文を使用して新しいユーザーANALYSTを作成します。
CREATE USER ANALYST PASSWORD "Password1" NO FORCE_FIRST_PASSWORD_CHANGE;
SAP Analytics Cloudへの接続に使用されるデータベースユーザーに分析対象データの
SELECT権限を付与します。詳細に関してはこちらの
ブログでご確認ください。
SAP HANA Database ExplorerでHDI管理者用のSQLコンソールを開きます。
下記のSQLを使用して、HDIコンテナのスキーマを確認します。
SELECT 'Current user' as "Property", Current_User as "Value" FROM DUMMY
UNION ALL
SELECT 'Current schema', Current_Schema FROM DUMMY;
管理者コンソールを使うと、
_DT
ユーザーでデータベースにアクセスしていることを確認できました。
下記のSQLステートメントを使用して、HDIコンテナのスキーマに対するSELECT権限をANALYSTユーザーに付与します。
スキーマを選択した「Current_Schema」+#DIに設定した後、#PRIVILEGES一時テーブルを作成し、付与したい権限とユーザーを入力し、付与プロシージャーを実行します。
SET SCHEMA "95E67E24E3C74783817520CA6D9EC26B#DI";
CREATE LOCAL TEMPORARY COLUMN TABLE "#PRIVILEGES" LIKE "_SYS_DI"."TT_SCHEMA_PRIVILEGES";
INSERT INTO "#PRIVILEGES"("PRIVILEGE_NAME", "PRINCIPAL_SCHEMA_NAME", "PRINCIPAL_NAME")
VALUES ('SELECT', '', 'ANALYST');
CALL "GRANT_CONTAINER_SCHEMA_PRIVILEGES" ("#PRIVILEGES", "_SYS_DI"."T_NO_PARAMETERS", ?, ?, ?);
DROP TABLE "#PRIVILEGES";
SAP Analytics CloudをHANA Cloudに接続します。任意で、
シングルサインオンを設定することも可能です。
HANA ライブ接続を選択し、接続名を挿入して、接続タイプとして「SAP HANA Cloud」を選択します。
443ポートは
入力せず、ユーザーとHANA Cloudホストを入力します。
モデルに移動します。新しいモデルを作成し、システムタイプをSAP HANAに設定して、作成したライブ接続を選択します。
次に、アクセスするCalculation Viewを選択できるようになります。
SACからアクセスできるのは、Calculation View Type CUBEのみであることに注意してください。
データを視覚化するために必要なモデルを使用してストーリーを作成します。
2. ODataを介したデータアクセス
ODataクライアント(Webアプリなど)は、SAP Business Technology PlatformにデプロイされたODataサービスにアクセスできます。
ODataサービスを試す最も簡単な方法は、ブラウザを使用することです。 BTPでアプリに表示されているURLにアクセスし、サービスにアクセスするための正しいパスを入力するだけです。
ODataサービスのユーザやロールによるアクセスコントロールはXSUAA認証で行います。
トラブルシューティング
CAPアプリケーションの構築中で困っていますか?
私は、トラブっているときはSAPコミュニティに
質問をよく投げています。
コミュニティはいつでも誰かが助けてくれます!
ブログを投稿し、オンラインで質問にも答えてみてください。それがご自身の成長にも必ず結びつきます。
CAPについてさらに学ぶためのいくつかのリソースをどうぞ:
最後まで読んでいただきありがとうございます。
Maxime SIMON