什么是SDA?

SDA 全称Smart Data Access(智能数据访问)。SDA使远程数据能够像访问HANA中的本地表一样被访问,而无需将数据复制到SAP HANA。
在SAP HANA中,可以创建指向不同数据源中的远程表的虚拟表。
借助SDA访问SAP HANA,可以从外部数据库(例如Oracle、Mysql、HADOOP等)中的表中检索数据。这减少了将所有访问的数据加载到SAP HANA中的需要。

创建远程源

使用HANA STUDIO或者Eclipse并下载插件;登录HANA服务器,然后创建远程源。

选择连接的数据库系统,并设置好配置文件
该步骤由BASIS配置完成,不详细讲解。

创建虚拟表

SDA官方贴文

设置虚拟表名及库名即可创建。
但由于直接创建虚拟表不但SAP GUI无法看到,查询也无法实现,因此需要进行处理,
目前存在两种方法。

方法一:AMDP方法实现->创建CDS视图->ADBC进行增删改查
该方案是SAP推荐的方案,原文地址如下:SAP官方贴文

AMDP实现
因为虚拟表没有在 ABAP DDIC中注册,所以不能通过 ABAP CDS 技术直接访问。要解决此问题,需要表函数。

@ClientHandling.type: #CLIENT_DEPENDENTdefine table function ZICMR_TFreturns{RCLNT : mandt;method_id : ica_method_id;DOCNR : ica_docnr;DOCLN : ica_docln;GRREF : ica_grref;PSTAT : ica_pstat;CSTAT : ica_cstat;DUE_DATE : ica_due_date;CLEARING_STATUS : ica_clearing_status;rbukrs : bukrs;ref_belnr : belnr_d;gjahr : gjahr;ref_docln : docln6;xopvw : xopvw;augdt : augdt;augbl : augbl;auggj : augbl;bschl : bschl;koart : koart;umskz : umskz;rwcur : waers;wsl   : fins_vwcur12;rhcur : waers;hsl   : fins_vwcur12;zuonr : dzuonr;sgtxt : sgtxt;rcomp : rcomp_d;rassc : rassc;racct : bilkt_ska1;lracct : hkont;kunnr : kunnr;lifnr : lifnr;awtyp : awtyp;awkey : awkey;awsys : awsys;budat : budat;bldat : bldat;blart : blart;xblnr : xblnr1;bktxt : bktxt;xref1_hd : xref1_hd;xref2_hd : xref2_hd;usnam : usnam;cpudt : cpudt;cputm : cputm;aedat : aedat_bkpf;bvorg : bvorg;  xreversing : co_stflg;xreversed : co_stokz;}implemented by method
zicmr_remote_sources=>CALL_01;

数据读取逻辑在 AMDP 方法“zicmr_remote_sources=>CALL_01”中实现。 也可以在 ABAP 开发工具中创建 AMDP方法。只需创建一个普通的 ABAP 类,在其中添加一个静态方法“CALL_01”。只需参考下面的代码。

class zicmr_remote_sources definitionpublicfinalcreate public .public section.interfaces if_amdp_marker_hdb .class-methods call_01for table function zicmr_tf.protected section.private section.
endclass.
class zicmr_remote_sources implementation.method call_01by database function for hdb language sqlscriptoptions read-only.returnselectSESSION_CONTEXT('CDS_CLIENT')                                                 as RCLNT,''                                                                            as method_id,'0000000000'                                                                  as DOCNR,0                                                                             as DOCLN,'000000000000'                                                                as GRREF,'00'                                                                          as PSTAT,''                                                                            as CSTAT,'00000000'                                                                    as DUE_DATE,case when xopvw = 'X'then ( case when augbl <> '' then '3'else '1'end  )else '0'end                                                                        as CLEARING_STATUS,bseg.bukrs                                                                    as rbukrs,bseg.belnr                                                                    as ref_belnr,bseg.gjahr                                                                    as gjahr,concat('000', bseg.buzei)                                                     as ref_docln,bseg.xopvw,bseg.augdt,bseg.augbl,bseg.auggj,bseg.bschl,bseg.koart,bseg.umskz,bkpf.waers                                                                    as rwcur,case when bseg.shkzg = 'H' then 0 - wrbtrelse wrbtr end                                                           as wsl,t001.waers                                                                    as rhcur,case when bseg.shkzg = 'H' then 0 - dmbtrelse dmbtr end                                                           as hsl,bseg.zuonr,bseg.sgtxt,t001.rcomp,bseg.vbund                                                                    as rassc,bseg.altkt                                                                    as racct,bseg.hkont                                                                    as lracct,bseg.kunnr,bseg.lifnr,bseg.awtyp,bseg.awkey,bseg.awsys,bseg.h_budat                                                                  as budat,bseg.h_bldat                                                                  as bldat,bseg.h_blart                                                                  as blart,bkpf.xblnr,bkpf.bktxt,bkpf.xref1_hd,bkpf.xref2_hd,bkpf.usnam,bkpf.cpudt,bkpf.cputm,                   bkpf.aedat,bkpf.bvorg,bkpf.xreversing,bkpf.xreversedfrom "/1BCAMDP/REMOTE_BSEG" as bseg        /* or use "ZHANGVIN"."REMOTE_BSEG" */inner join "/1BCAMDP/REMOTE_BKPF" as bkpf  /* or use "ZHANGVIN"."REMOTE_BKPF" */on bseg.mandt = bkpf.mandtand bseg.bukrs = bkpf.bukrsand bseg.belnr = bkpf.belnrand bseg.gjahr = bkpf.gjahrinner join "/1BCAMDP/REMOTE_T001" as t001  /* or use "ZHANGVIN"."REMOTE_T001" */on bseg.mandt = t001.mandtand bseg.bukrs = t001.bukrswhere bseg.mandt = '910'and bseg.h_monat > '00';endmethod.
endclass.

在上面的代码中,它通过必要的转换和过滤从远程表中读取数据。如果连接的是 SAP 系统,需要提到的一件事是 ABAP 客户端处理。在上面的示例中,我们在远程系统中将客户端固定为“910”。

创建CDS视图

@AbapCatalog.sqlViewName: 'ZICMRBSEGEV'
@EndUserText.label: 'ICMR Entry View Based on remote BSEG'
@ClientHandling.type: #CLIENT_DEPENDENT
@ClientHandling.algorithm: #SESSION_VARIABLE
@ObjectModel.usageType.serviceQuality: #X
@ObjectModel.usageType.dataClass: #MIXED
@ObjectModel.usageType.sizeCategory: #XL
@AbapCatalog.compiler.compareFilter:true
define view ZICMR_BSEG_ENTRY_VIEWas select from ZICMR_TF as Ainner join finsc_fisc_date as Bon A.budat = B.calendar_date{A.rclnt,A.method_id,                                            A.DOCNR,A.DOCLN,A.GRREF,A.PSTAT,A.CSTAT,A.DUE_DATE,A.CLEARING_STATUS,A.rbukrs,A.ref_belnr,A.gjahr,A.ref_docln,B.fiscal_year                                                   as ryear,B.fiscal_period                                                 as poper,cast (B.fiscal_year_period as fis_jahrper_conv preserving type) as fiscyearper,B.fiscal_year_variant                                           as periv,A.xopvw,A.augdt,A.augbl,A.auggj,A.bschl,A.koart,A.umskz,@Semantics.currencyCodeA.rwcur,@Semantics.amount.currencyCode: 'RWCUR'A.wsl,@Semantics.currencyCodeA.rhcur,@Semantics.amount.currencyCode: 'RHCUR'A.hsl,A.zuonr,A.sgtxt,A.rcomp,A.rassc,A.racct,A.lracct,A.kunnr,A.lifnr,A.awtyp,A.awkey,A.awsys,A.budat,A.bldat,A.blart,A.xblnr,A.bktxt,A.xref1_hd,A.xref2_hd,A.usnam,dats_tims_to_tstmp( A.cpudt,A.cputm,abap_system_timezone( $session.client,'NULL' ),$session.client,'NULL' )                                    as timestamp,A.aedat,A.bvorg,                                                                                        A.xreversing,A.xreversed
}

上面的 CDS 视图从表函数中读取数据。您可以加入其他 ABAP DDIC 表,并进行进一步的转换和过滤。在 CDS视图中,它与“FINSC_FISC_DATE”表连接,该表用于根据给定的会计年度变量将过帐日期转换为会计年度和期间。

成功激活CDS视图后,您可以对数据运行预览以进行检查。请通过添加必要的过滤器来避免读取过多的数据。否则,您可能会收到“内存不足”错误。

您可能会问是否可以匹配来自远程系统和 ICMR 服务器的组合数据。答案是肯定的。在上面的 CDS 视图脚本中,您可以通过直接从本地表 BSEG 中选择来合并来自 ICMR 服务器的数据。请参见下面的脚本示例:

define view ZICMR_BSEG_ENTRY_VIEWas select from ZICMR_TF as Ainner join finsc_fisc_date as Bon A.budat = B.calendar_date{<field list>}union allselect from BSEG as Ainner join finsc_fisc_date as Bon A.budat = B.calendar_date{<field list>}

ADBC进行增删改查

DATA: dbname type string value  `"SAPHANADB"."ZAUD_FMS_COMPANY"`.
DATA: sql type ref to cl_sql_statement.if wa_db-zsex is initial.get time.concatenate sy-uzeit+0(2)  ':' sy-uzeit+2(2)  ':'sy-uzeit+4(2)   into   wa_db-zsex.endif.try.create object sql.sql->execute_update(`INSERT INTO ` && dbname && ` ` &&`VALUES ('`&& wa_db-zid && `','`&& wa_db-zname && `','`&& wa_db-zsex && `')` ).catch cx_sql_exception into err.message err type 'I' display like 'E'.endtry.

方法二: DROP语法将列存储表替换为虚拟表->OPEN SQL进行增删改查

首先SE11新建表定义
在命令窗口中输入DROP命令,注意需要指定库名

DROP TABLE SAPHANADB(库名).ZTABLE(表名)

DROP表操作后,SAP GUI端会显示数据库不存在该表,但屏幕还是会有相关信息。
原因是DIALOG中显示的数据是从相关底表(如DD02L,DD03L等)中取数的,而不是HANA端。

可以通过查看表属性来判断是列存储表还是虚拟表。

常见问题

1.虚拟表添加字段
中间库增加字段及SE11增加字段后,DROP表再重新创建虚拟表即可。
2.虚拟表还原为列存储表
首先DROP虚拟表
然后通过HANA SQL语句创建列存储表即可。

CREATE COLUMN TABLE "SAPHANADB"."ZAUD_FMS_COMPANY"("MANDT" NVARCHAR(3),"BUKRS" NVARCHAR(4),"ZFBUKRS" NVARCHAR(5),"ZFTEXT" NVARCHAR(80),"ZACT_FLG" NVARCHAR(1),"ZCLASS" NVARCHAR(40),"ZDATE" NVARCHAR(8),"ZTIME" NVARCHAR(6),"ZRS01" NVARCHAR(40),"ZRS02" NVARCHAR(40),"ZRS03" NVARCHAR(40),primary key("MANDT","BUKRS","ZFBUKRS")
);

SAP HANA SDA实战相关推荐

  1. SAP内存计算--HANA 走近SAP HANA

    第一章 走近SAP HANA 摘要:拿到这本书的读者,相信您对SAP HANA已经有所耳闻.对于这样一个 基于内存计算创新型的高性能数据处理平台,我们应该如何去理解和应用?如何 将它融入到我们现有的企 ...

  2. SAP HANA:持续创新十周年

    SAP HANA:持续创新十周年 今年是 SAP HANA 发布十周年.随着 SAP HANA 的诞生,SAP 成为了世界领先的内存计算数据库厂商.SAP HANA 也是 SAP 历史上成长最快的产品 ...

  3. 使用 SAP HANA Virtual Table 连接外部数据源

    Access Remote Sources with SAP HANA Database Explorer 远程源(Remote sources)是与其他数据库的连接. 虚拟表使用远程源创建指向存储在 ...

  4. SAP HANA企业级培训系列课程第一部分

    No. 课程 备注 1 HANA概述 HANA 特点 2 HANA Server & Studio & Client 认识HANA Server \Client\ Studio, 熟悉 ...

  5. 《SAP HANA平台应用开发》—第2章2.3节熟悉SAP HANA工作台

    本节书摘来自华章出版社<SAP HANA平台应用开发>一书中的第2章,第2.3节熟悉SAP HANA工作台,作者刘刚,更多章节内容可以访问云栖社区"华章计算机"公众号查 ...

  6. 【华为云技术分享】云小课 | SAP HANA高可用之实战演练

    由于华为云"敏捷性高.扩展灵活.便捷运维.高可靠.低成本"等优势,越来越多的企业将SAP系统部署在华为云上.SAP系统是企业的核心系统,对于数据的可靠性的重要性是无可厚非的,因软件 ...

  7. SAP HANA Temporal Table (历史表)

    引自<SAP HANA 实战> 刘刚 舒戈 著  2.4.2.3 除了行.列存储的数据库表外,HANA还提供了 Temporal Table(简称历史表或临时表).它和普通表的区别是所有历 ...

  8. SAP HANA中文技术文档(跟matinal学HANA)

    SAP HANA中文技术文档(跟matinal学HANA) 1.  点击进入:SAP XS HANA专栏 2.  点击进入:SAP UI5上传图片 用XSJS存储在HANA中的方法 3.  点击进入: ...

  9. SAP OData 开发实战教程:从入门到提高

    文章目录 SEGW - Gateway Service Builder 使用 Restful ABAP Programming 编程模型(简称 RAP) 开发 OData 服务 使用 SAP Clou ...

  10. 戴尔公司向SAP HANA明确示爱 发布全新系统设计方案

    Micahel Dell在最近的发言中给出了戴尔公司的主要精力将放在系统设计层面的说法,但语言毕竟无力.今天戴尔公司正式推出一款设备,专门面向运行有SAP HANA方案的企业客户. 这套戴尔-EMC ...

最新文章

  1. FPGA:下一代机器人感知处理器
  2. 最新Angular2案例rebirth开源
  3. 软件工程之系统顺序图
  4. 02(c)多元无约束优化问题-牛顿法
  5. .net调用c++方法时如何释放c++中分配的内存_C/C++常见面试题总结
  6. Linux内核部件分析 设备驱动模型之device-driver
  7. bootdo定时任务
  8. matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图
  9. 五大车载操作(VOS)系统优劣对比
  10. 小米8装magisk
  11. wxpython 操作图片_wxpython 图像编程
  12. Delphi FireDAC SQLite “database is locked“ 解决办法
  13. 数夫,家具行业MES软件和家具MES制造执行系统龙头企业
  14. hdu 6287 口算训练(二分+质因数分解+思维)
  15. 推荐三个图片编辑软件给你
  16. ThreadPool线程池原理
  17. 什么是 Headless CMS?
  18. 厉害了我的“猿”!杭州程序员手工打造波音 737 模拟驾驶舱
  19. sqlmap工具说明
  20. VBScript里msgbox出现中文乱码的解决办法

热门文章

  1. DNS 智能解析功能评测之国内部分总结篇~
  2. ACM779-兰州烧饼
  3. python编程火车票_100行Python代码自动抢火车票!
  4. Timeline调用实质
  5. matlab改变直方图数量级,histogram equalization-MATLAB
  6. powerVR tbdr 硬件架构理解
  7. 苹果3D视觉报告:龙头引领行业大趋势
  8. oracle中imp命令详解
  9. LLVM创始人Chris Lattner回顾展望编译器
  10. win7 install solution for intel SKL and BSW platform