这是 Jerry 2021 年的第 58 篇文章,也是汪子熙公众号总共第 335 篇原创文章。
我们在 SAP 官方网站 help.sap.com 输入关键字 SAP HANA 之后:
会看到很多搜索结果:
这么多和 HANA 相关的解决方案,Jerry 当然不可能每一种都接触过,这里只谈一谈我有过粗浅了解的几款。
SAP HANA Platform
这当然就是 SAP 的王牌产品了,SAP HANA 是一个现代的内存数据库和开发平台,支持本地部署或云端部署。SAP HANA 平台的数据库服务,能够以列的方式提供数据的存储和访问。SAP HANA 允许在同一个系统上进行在线事务处理 (OLTP) 和在线分析处理 (OLAP),而无需冗余数据存储或聚合。从其名称的 Platform 不难看出,SAP HANA 不仅仅是一个内存数据库,而且也是一个应用开发平台,其上可以开发应用程序、运行基于 SAP HANA 构建的自定义应用程序并进行生命周期管理。
SAP HANA Enterprise Cloud
https://www.sap.com/products/hana-enterprise-cloud.html
SAP 官网对 SAP HANA Enterprise Cloud 的定义,有三个关键词:
- Cloud
- Secure
-
Privately managed
SAP HANA 企业云是一个完全可扩展且安全的私有托管云解决方案,能够帮助企业在云环境中充分释放 SAP HANA 的全部价值,通过创新加速增长、推动数字化转型并快速交付业务成果。
SAP HANA Express Edition
SAP HANA Express Edition 是 SAP HANA 的一个简化版本,能够在符合硬件要求的个人电脑和其他主机,例如托管在云服务提供商上的虚拟主机里运行。
SAP HANA Express Edition 可以免费使用最高尺寸为 32GB 的内存数据库,也可以通过购买额外的 License 来扩展到 64GB,96GB 或 128GB 几个档次。
SAP HANA Express Edition 是开发人员极佳的学习 SAP HANA 原生开发技术的途径之一。尽管如此,并不是所有开发人员的电脑,都满足其安装和运行配置要求:
- 至少 16GB 内存,推荐 24 GB
- 推荐 120 GB 的硬盘空间
- 至少双核 CPU,推荐 4 核
SAP HANA Cloud
如果开发人员的电脑配置达不到安装 SAP HANA Express Edition 的最低要求,可以选择本文介绍的 SAP HANA Cloud 的试用版。
SAP HANA Cloud 是一种基于 multi-cloud 的数据库即服务 (DBaaS, Database as-a-Service) 解决方案,使客户能够随时随地对数据进行存储,分层和访问。
SAP HANA Cloud 不仅保留了 SAP HANA 本地部署的所有功能,而且作为一个云原生平台,还具备自动软件更新,弹性伸缩,帮助企业降低 Total Cost of Ownership 等优势。SAP HANA Cloud 既可用作独立的数据库和开发平台解决方案,也能作为企业本地部署环境的扩展方案。
如今开发人员在 SAP 业务技术平台 (SAP Business Technology Platform,下文简称 SAP BTP) 上也可以免费体验 SAP HANA Cloud 的试用版了。
Jerry 之前的文章曾经介绍过 SAP BTP 上如何创建 ABAP, Kyma 和 Workflow 的服务实例:
ABAP 开发者上云的时候到了 - 现在大家可以免费使用 SAP 云平台 ABAP 环境的试用版了
一步步把 SAP UI5 应用部署到 SAP BTP Kyma 运行环境中去
SAP 业务技术平台(BTP) Workflow(工作流)功能介绍
从这些文章描述的步骤能够发现,在 SAP BTP 上的这些操作都是围绕 Services Subscriptions 进行的,具体步骤大同小异,这也降低了 SAP BTP 的学习成本。
目前 SAP HANA Cloud 可以在 cf-eu10 和 cf-us10 这两个 Regions 使用。
在上述两个 Regions 里选其一,创建一个新的 Subaccount,把 SAP HANA Cloud 添加到该子账户的 Entitlements 设置里,即可在 SAP BTP 上创建新的 SAP HANA Database 实例:
给新建的数据库实例命名,并维护 DBADMIN 用户的初始密码。
因为本文稍后会演示如何使用 Node.js 代码读取该数据库实例包含的数据库表数据,因此在允许连接设置里,选择“Allow all IP addresses”:
实例创建成功后,我们可以使用各种工具,监控其运行状态并进行各种开发。
其中一种开发方式,就是点开下图的“Open in SAP HANA Database Explorer”,打开这个在线开发工具。
在 SAP HANA Database Explorer 里,可以使用 SQL 语句创建新的数据库表,并插入数据:
当然对于海量数据,也可以通过从其他云存储服务提供商比如 Amazon,Azure 和阿里云或者本地 csv 文件的方式来导入。
如下图所示,我在名为 PLAIN 的 schema 下面的数据库表 REGIONS 里,创建了 4 条测试数据。稍后我会使用 Node.js 程序将这些数据读取出来。
除了使用 SAP HANA Database Explorer 操作 SAP HANA Cloud 之外,我们还可以使用 SAP Business Application Studio (下文简称 BAS)进行 HANA 相关的开发。
为此,我们必须先在 BAS 里创建一个类型为 SAP HANA Native Application 的 Dev Space:
因为 BAS 毕竟只是一个在线开发工具,编辑的全是 Design Time 的资源,这些资源最终需要部署到 SAP BTP 上的某个运行环境里去才能执行,比如 ABAP, CloudFoundry 或 Kyma 等等。
本文选择将 BAS 里的资源同 CloudFoundry 环境进行绑定。点击下图这个图标,将当前 Dev Space 绑定到 SAP BTP CloudFoundry 环境。
注意此时的面板显示:no targets, 因此我们需要指定一个 CloudFoundry endpoint:
点击加号图标,选择 CloudFoundry 对应 Region 的 API endpoint,按提示输入用户名和密码即可完成登录。
之后就能在 Business Application Studio 里看到之前在 SAP BTP Cockpit 里创建的 HANA Cloud 实例:
接下来我们可以基于模板创建一个新项目或者从 Github 上克隆一个项目到 BAS 里:
之后就能在 SAP BAS 里创建和 HANA 数据库相关的资源了,比如通过新建后缀为 .hdbtable 的文件来定义 HANA 数据库表。
点击 Deploy 图标,将 BAS 里创建的数据库表定义,部署到对应的 CloudFoundry 环境去。
部署成功之后,SAP BAS 里创建的 HANA 数据库表定义,就同步到 SAP HANA Database Explorer 里去了,并能够继续通过后者进行读写操作。
如果想使用编程语言比如 Node.js 访问 HANA Cloud 数据库表里的数据,首先从右键菜单里,选择 Copy SQL Endpoint, 得到该 HANA Cloud 数据库实例的 Endpoint:
然后命令行 npm install --save @sap/hana-client,安装基于 Node.js 的 HANA Client 工具库。
使用 Node.js 访问 SAP HANA Cloud 数据的一个例子的源代码如上图所示。
执行结果,能够成功打印出数据库表 REGION 里的内容。
这个 hana-client 库的使用方式类似 ADBC (ABAP Database Connectivity) 和 JDBC (Java Database Connectivity):
关于 ADBC 和 JDBC 的类比,参考我的 SAP 社区博客:
ADBC and JDBC
总结
本文首先介绍了几种名称包含 HANA 的 SAP 解决方案,接着分享了使用 SAP HANA Database Explorer 和 SAP Business Application Studio 在 HANA Cloud 实例中进行数据库开发的两种方式。最后,给出了使用 hana-client 读取 SAP HANA Cloud 数据库表内容的源代码。
感谢阅读。
Jerry 的 ABAP 专题
Jerry的ABAP, Java和JavaScript乱炖
ABAP开发人员未来应该学些什么
Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
Jerry的ABAP原创技术文章合集
300行ABAP代码实现一个最简单的区块链原型
使用Java+SAP云平台+SAP Cloud Connector调用ABAP On-Premise系统里的函数
在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务
ABAP vs Java, 蛙泳 vs 自由泳
聊聊C语言和ABAP
动手使用ABAP Channel开发一些小工具,提升日常工作效率
我用ABAP做过的那些无聊的事情
不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
使用Visual Studio Code编写和激活ABAP代码
你的ABAP程序给佛祖开过光么?来试试Jerry这个小技巧
在SAP云平台ABAP编程环境上编写第一段ABAP程序
SAP官方发布的ABAP编程规范
ABAP Code Inspector那些隐藏的功能,您都知道吗?
还在用ABAP进行SAP产品的二次开发?来了解下这种全新的二次开发理念吧
ABAP Netweaver体内的那些寄生式编程语言
从SAP社区上的一篇博客开始,聊聊SAP产品命名背后的那份情怀
云端的ABAP Restful服务开发
如何在SAP云平台ABAP编程环境里把CDS view暴露成OData服务
使用abapGit在ABAP On-Premises系统和SAP云平台ABAP环境之间进行代码传输
30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用
Jerry带您了解Restful ABAP Programming模型系列之二:Action和Validation的实现
Jerry带您了解Restful ABAP Programming模型系列之三:云端ABAP应用调试
SAP云平台上的ABAP编程环境里如何消费第三方服务
ABAP开发者上云的时候到了 - 现在大家可以免费使用SAP云平台ABAP环境的试用版了
学而不思则罔 - SAP云平台ABAP编程环境的由来和适用场景
SAP云平台里的三叉戟应用
如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
SAP 2019 TechEd Key Note解读:云时代下SAP从业人员如何做二次开发?
有哪些ABAP关键字和语法,到了ABAP云环境上就没办法用了?
ABAP开发环境终于支持以驼峰命名法自动格式化ABAP变量名了
利用ABAP 740的新关键字REDUCE完成一个实际工作任务
一段让人瑟瑟发抖的ABAP代码
昨日万圣节ABAP怪兽级代码谜团,公布答案啦
介绍一种在ABAP内核态进行内表高效拷贝的方法
使用SAP Cloud Application Programming模型开发OData的一个实际例子
当ABAP遇见普罗米修斯
使用ABAP绘制可伸缩矢量图
ABAP开发环境语法高亮的那些事儿
SAP错误消息调试之七种武器:让所有的错误消息都能被定位
使用ABAP操作Excel的几种方法
SAP GUI里的收藏夹事务码管理工具
SAP GUI和Windows注册表
有了Debug权限就能干坏事?小心了,你的一举一动尽在系统监控中
ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
实现ABAP条件断点的三种方式
使用SAT跟踪监控从浏览器打开的SAP应用的性能和调用栈
一个13年ABAP老兵的建议:了解这些基础知识,对ABAP开发有百利而无一害
SAP ABAP Netweaver容器化, 不可能完成的任务吗?
SAP产品增强技术回顾
SAP API开发方法大全
浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试
SAP ABAP应用服务器的HTTP响应状态码(Status Code)
SAP ABAP里存在Java List这种集合工具类么?CL_OBJECT_COLLECTION了解一下
ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序
SAP ABAP Netweaver服务器的标准登录方式讲解
SAP ABAP关键字语法图和ABAP代码自动生成工具Code Composer
SAP ABAP SM50的另类用途 - ABAP工作进程对数据库表读取操作的检测
关于SAP ABAP字符变量和字符串变量字符个数的一个知识点,和一个血案
SAP ABAP一组关键字 IS BOUND, IS NOT INITIAL和IS ASSIGNED的用法辨析
SAP ABAP和Java里的弱引用(WeakReference)和软引用(SoftReference)
SAP AMDP介绍 - ABAP托管的HANA数据库过程
给你的ABAP对象打上标签(Tag)
历史上的今天:编程语言中null引用的十亿美元错误
ABAP Development Tool 代码模板和其他一些实用技巧汇总
SAP ABAP Development Tool 提高开发效率的十个小技巧
如何在 SAP BTP 平台 ABAP 编程环境里消费基于 SOAP 的 Web Service
ABAP 真的会过时吗?聊聊 ABAP 的过去,现在和未来
更多Jerry的原创文章,尽在:"汪子熙":