在SAP HANA中使用OData(一)

1 OData 介绍

       OData 全称是Open Data Protocol, 即开放数据协议,由微软公司最初提出,它的主要用途便是通过Web来对数据库中的数据进行查询与更新。在SAP HANA 的XS Engine中提供了OData的实现,所以在开发基于XS Engine的应用程序时,如果使用OData来访问数据,将会十分方便与快捷。另外,OData也可以作为其他应用的数据源,不一定需要ODBC或者JDBC去访问SAP HANA中的数据。

       在当前的SAP HANA XS Engine中只提供OData 2.0 的支持,字符编码限制为UTF-8, 提供的数据以XML或者JSON格式返回,对于修改操作,例如CREATE, UPDATE 只提供JSON格式。

2 OData 基本使用

以下将通过具体的实例来说明OData的使用情况。

2. 1 数据准备

在SAP HANA Studio中建立一个PRODUCT表(测试用的schema:WEIYY),SQL 语句如下:

CREATE COLUMN TABLE "WEIYY"."PRODUCT" ("id" INTEGER CS_INT NOT NULL ,

      "category_id" INTEGER CS_INT,

      "name" NVARCHAR(50),

      "color" NVARCHAR(50),

      "length" INTEGER CS_INT,

      "width" INTEGER CS_INT,

      "height" INTEGER CS_INT,

      "price" DECIMAL(10,

     2) CS_FIXED,

      "desc" NVARCHAR(500),

      "desc_cn" NVARCHAR(500),

      PRIMARY KEY ("id"));

向其中插入的数据如下:

             我们将利用OData来暴露这个表中的数据,从而通过Web进行访问。

2.2 建立XS Project

因为OData是基于XS Engine的,所有需要建立一个XS Project。打开SAP HANA  Studio, 选择File->new->Project, 如下图所示:

选择XS Project , 再Next, 输入Project Name :weiyy.testodata,

然后添加两个文件

  • (1) 文件名.xsapp,文件内容为空。
  • (2) 文件名.xsaccess,文件内容如下:

                   {

     "exposed":true

     }

然后新建一个product.xsodata文件,用来暴露我们准备数据表,其中的内容如下:

   service{

     "WEIYY"."PRODUCT" as "product";

}

表示在OData服务中,将暴露"WEIYY"."PRODUCT"这个数据表。

此时项目结构如下:

然后share这个project, 再commit, 最后选择activate. 在repository中,能看到对应的项目,

到此,OData最基本的部署就算完成了,打开浏览器,输入如下地址信息:

http://<hana.server.name>:80<HANA_instance_number> /weiyy/testodata/product.xsodata

2.3    OData 的URI 规范

在此本文只介绍基本的查询规范,更多URI规范见URI Conventions (OData Version 2.0) · OData - the Best Way to REST, 这里需要注意的是,这里的约定不是SAP HANA官方规定的,因此有可能不被SAP HANA支持(仅少数,比如endswith函数),但是SAP HANA的Develop Guide里面又没有相关的URI介绍,所以此约定仅供参考。

  • (1) 选择product表中id=1的记录,并以json格式返回(默认以XML格式返回)

http://<IP>:8000/weiyy/testodata/product.xsodata/product?$filter=id%20eq%201%20&$format=json

{"d":{"results":[{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(1)","type":"weiyy.testodata.product.productType"},"id":1,"category_id":1,"name":"ABC Table","color":"Black","length":140,"width":80,"height":80,"price":"2000","desc":"This is the ABC Table. It is black.","desc_cn":"这是ABC桌子。它是黑色的。"}]}}

  • (2) 选择product表中前3条记录

http:// <IP>:8000/weiyy/testodata/product.xsodata/product?$top=3

<结果集稍微有点长,此处忽略>

  • (3) 只选择id这一列

http:// <IP>:8000/weiyy/testodata/product.xsodata/product?$select=id&$format=json

{"d":{"results":[{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(1)","type":"weiyy.testodata.product.productType"},"id":1},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(2)","type":"weiyy.testodata.product.productType"},"id":2},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(3)","type":"weiyy.testodata.product.productType"},"id":3},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(4)","type":"weiyy.testodata.product.productType"},"id":4},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(5)","type":"weiyy.testodata.product.productType"},"id":5},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(6)","type":"weiyy.testodata.product.productType"},"id":6},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(7)","type":"weiyy.testodata.product.productType"},"id":7},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(8)","type":"weiyy.testodata.product.productType"},"id":8},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(9)","type":"weiyy.testodata.product.productType"},"id":9},{"__metadata": {"uri":"http://10.128.80.235:8000/weiyy/testodata/product.xsodata/product(10)","type":"weiyy.testodata.product.productType"},"id":10}]}}

            URI的约定还有很多,能够实现一些基本的类似SQL的选择与投影操作,但对于多表join这类复杂的还没有办法单独利用URI来完成,这时可以在SAP HANA中建立查询对应的视图,再用OData对这个视图进行暴露。

参考资料:

SAP Help Portal

URI Conventions (OData Version 2.0) · OData - the Best Way to REST

[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值