远程访问 HANADB 读取指定客户端的数据

作者:郑德鼎 约 5 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:SD, 销售分销
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图

** 本文参考: **

https://blogs.sap.com/2014/02/14/sap-hana-smart-data-

access-%E4%B8%80-%E5%88%9D%E8%AF%86sda/

https://help.sap.com/docs/SAP_HANA_PLATFORM/0eec0d68141541d1b07893a39944924e/109397c2206a4ab2a5386d494f4cf75e.html?version=2.0.03&locale=en-

US

HANA

DB中,有一些视图通过函数SESSION_CONTEXT来限定客户端号的读取,其中参数CDS_CLIENT会在读取数据时获取指定的客户端号。但如果不指定,那么取到的值就为空。

远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图

我们现在通过SDA(Smart Data Access)的方式来指定客户端号。

SDA是SAP HANA访问SAP HANA Database以外数据源的一种数据访问技术。利用SDA,SAP HANA可以建立虚拟表(virtual

table)映射到远程数据源,进而通过虚拟表访问远程数据源中的数据。SAP

HANA可以像操作本地表一样操作虚拟表,如查询、更新、插入、删除等操作均适用于虚拟表。SDA支持本地表和虚拟表的连接,查询优化器将相关操作发送到远程数据源,远程数据源完成操作后将结果数据集返回给SAP

HANA做进一步处理。

SDA在SAP HANA SPS06版本中被引入,最初支持的数据源有:SAP HANA、SAP Sybase ASE、SAP Sybase

IQ、Teradata

database以及Hadoop。SPS06中的SDA仅支持对虚拟表的读操作。SPS07版本丰富了SDA的数据源类型,增加了对MSSQL

Sever、Oracle等数据源的支持,且允许对虚拟表的写操作。

本次操作是HANA远程访问自己,并带上指定客户端号的语句来实现取到指定客户端数据的需求。

警告!本次操作需要最大权限账号 **SYSTEM** ,请谨慎操作!

第一步,配置远程访问账号的权限

登录要远程访问的HANA DB,打开 **Security** \- **Users**

,找到稍后要进行远程登录的账号,给予要读到的数据库表的权限,比如本次的目标,是 **SAPHANADB** 这个数据库中的视图 **FAAV_ANLC**

。这里因为是方便外围系统读取数据,所以只给读取权限。

设置完成后F8保存。

远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图

第二步,创建数据源

使用 **SYSTEM** 账号登录我们本地的系统,右键点击 **Provisioning** \- **Remote Sources** ,选择

**New Remote Source...** 。

远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图

下面介绍一下需要填写的项目

Source Name:远程连接的名称,大小写都可以

Adapter Name:选择远程数据库的类型,本次访问的是HANA数据库,所以选择HANA(ODBC)

Server:远程Hana数据库的地址

Port:远程Hana数据库的地址端口

DML Mode:允许远程方式读写或只读

Extra Adapter Properties:可以输入一些特定的参数指定,本次需要指定CDS_CLIENT的值,所以填写:

**SESSIONVARIABLE:CDS_CLIENT=_ < _ _你要指定的客户端号 > _ **

User Name和Password:登录远程数据库的账户和密码。我们这里配置第一步的账户密码。

设置完成后F8保存。之后我们就可以在下拉菜单中看到我们访问的远程数据库。

远程访问 HANADB 读取指定客户端的数据 - 封面图
远程访问 HANADB 读取指定客户端的数据 - 封面图

第三步,创建虚拟表

在HANA Studio中建好数据源后,可以将数据源中的表映射为SAP HANA中的虚拟表。

因为大概率在下拉中你是看不到你要映射的表,这里直接介绍语句创建的方法。

*

CREATE VIRTUAL TABLE <table_name> <remote_location_clause>

示例:

*

CREATE VIRTUAL TABLE SAPHANADB.VT_ANLC AT“REMOTE_SOURCE”.”NULL”.” SAPHANADB”.” FAAV_ANLC”;

解释:

SAPHANADB.VT_ANLC:这里点左边的部分是远程数据库服务器上的指定数据库,右边是表名。语句执行后会在指定数据库中创建这个虚拟表。表明不可以和现有的表重复,数据库是要求指定已经存在的。

“REMOTE_SOURCE”.”NULL”.” SAPHANADB”.”

FAAV_ANLC”:这一部分和你创建的远程源有关系,按照菜单的层级抄下来就可以,用双引号括起来,用.分隔。

F8执行语句,虚拟表就创建好了。使用的时候,我们可以直接访问虚拟表,系统会系统从远程数据库取数、输出结果。

那么现在我提问,如何使用JDBC指定CDS_CLIENT读取HANA数据库?

答案很简单,在调用的地址上附加: ** &sessionVariable:CDS_CLIENT=<你要指定的客户端号> **

** 你学废了吗? **

郑德鼎

关于作者:郑德鼎

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「远程访问HANADB读取指定客户端的数据.md」整理生成,仅用于内部技术分享与学习交流。