转:【ABAP】Code push downを実現する方法- Part1 Overview

Code push downとは

ABAPにおけるCode push downとは、データを使って行う処理をできるだけデータベース側でさせるという考え方のことです。Code to data paradigmとも呼ばれます。


ABAP for HANA and “Code Push-Down”より

集計処理を書くときに、従来はDBからデータを取ってきて内部テーブルに格納し、それをループしながら計算を行う、といったことをしていました。なぜなら、複雑なSELECTをするとDBアクセスの負荷が大きくなり、パフォーマンスのボトルネックになってしまうからです。

しかし、HANA DBが登場したことによってDBアクセスはボトルネックではなくなり、むしろDB側でやったほうが速くできるようになりました。(インメモリー、カラムストア、データの圧縮、等々・・・)。

そこで、データ取得・編集にかかわる処理をDBレイヤでやってしまおうというCode push downが推奨されるようになりました。

Code push downを実現する方法

Code push downを実現する方法として、大きく2通りあります。以下では、これら2通りの方法について説明します。今回は概要編で、具体的な実装方法は別の回に書きたいと思います。

①Open SQLを使う
②DBレイヤにあるビューやプロシージャを使う(AMDP, CDS)

Open SQLを使う

Open SQLとは、ABAPで使えるSQLのことです。DBが直接理解できるNative SQLに対してOpen SQLと呼ばれます。
NetWeaver AS ABAP 7.4 SP5からOpen SQLに新しい機能が導入され、できることが増えました。(公式リファレンスはこちら
新しいOpen SQLの機能を使うために、以下ののルールに従う必要があります。

  • 複数の列を並べて書くときはカンマで区切る
  • SQLの中で変数を使うときは先頭に@をつける
SELECT matnr, ersda, mtart
FROM mara
into table @data(itab_mara) up to 10 rows.

新しいOpen SQLでできること(一例)

  • 計算式を使って計算した結果を受け取ることができる
  • 文字列操作のファンクションを使うことができる

Open SQLを使ってCode push downを実現する5つの方法

以下のブログより翻訳、引用します。
Code Push Down for HANA Starts with ABAP Open SQL

  1. 新しいOpen SQLの構文を使う
  2. DBレイヤの集計機能が使えるときはそちらを使う(ABAPレイヤで集計しない)
  3. 計算式や文字列操作もDBレイヤで行う (ABAPレイヤでループして計算、操作しない)
  4. 計算をDBレイヤにpush downするために、計算結果を列で受け取るようにする(computed columnとして)
  5. CASEやIF..ELSEの条件分岐もOpen SQLの中で行うようにする

DBレイヤにあるビューやプロシージャを使う(AMDP, CDS)

もう一つは、DBレイヤに作られたビューやプロシージャをABAPレイヤから使用する方法です。同じ集計結果を何度も利用する場合はこちらのアプローチがよいと思われます。

SAP NetWeaver AS ABAP 7.4 SP5からTop-downと呼ばれる方法が導入され、ビューやプロシージャをABAPレイヤから作成することができるようになりました(実際のビュー等はDBレイヤに作られる)。これによって移送の問題(※)や、DB側とABAP側のオブジェクトの同期の問題が解決しました。
※以前のButtom-upと呼ばれる方法ではABAP側とDB側をそれぞれ移送する必要があった


ABAP for HANA and “Code Push-Down”から引用

Top-downアプローチの方法

AMDP, CDSという2つの方法があります。

AMDP(ABAP Managed Database Procedures)

AMDPはABAP側からSQLスクリプトを使ってプロシージャを作成する方法です。
プロシージャとは、DBにアクセスしてデータを取ってきたり、DBを更新したりする一連の手続きを記述したプログラムです。
AMDPはSQLスクリプトをラッピングするクラスで、初回実行時にDB側にプロシージャが作られます。AMDPクラスとして定義するには、if_amdp_marker_hdbというインターフェースを使用する必要があります。

CDS(Core Data Services)

CDSを使うと、ABAP側からDBレイヤにビューを作ることができます。ABAPプログラムからはCDSビューを通常のテーブルやビューのように取得することができます。
CDSの特徴として、Annotationによって機能をつけたり、FioriのUIを定義できるということがあります。これによって、ABAPプログラムからだけでなく様々な用途でCDSを使うことができます。

AMDP VS CDS

CDSのほうが様々な用途で使えるので、今後はCDSが主流になっていくのかなと思いましたが、以下のブログを読むとAMDPにしかできないこともあることがわかります(2019年5月時点の情報)。

 AMDPCDS
複数の結果セットを返せるか× CDSは単一の結果のみ
データの読み込み
データの更新×
ストアドプロシージャを使えるか×

Understanding evolution of CDS and AMDP in most simple wayをもとに作成

CDSは結合などで取ってこられる範囲のビューであり、更新や複雑なロジックが必要なときはAMDPを使う、という使い分けだと理解しました。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值