在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规范见http://www.odata.org/documentation/odata-version-2-0/uri-conventions, 这里需要注意的是,这里的约定不是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对这个视图进行暴露。
参考资料:
http://help.sap.com/hana/SAP_HANA_Developer_Guide_en.pdf
http://www.odata.org/documentation/odata-version-2-0/uri-conventions
[本文的测试案例所使用的SAP HANA版本为SAP HANA SPS7 Revision 70.00]
想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!
转载本文章请注明作者和出处http://scn.sap.com/community/chinese/hana/blog/2014/07/23/%E5%9C%A8sap-hana%E4%B8%AD%E4%BD%BF%E7%94%A8odata%E4%B8%80,请勿用于任何商业用途。
不错 适合初学者