SAP HANA : CDS
6.SAP HANA CDS
使用SAP HANA Core Data Services(CDS)在SAP HANA Extended Application Services中构建设计时数据持久性模型。
CDS创建持久性Model类型:
tables (entities)
SQL views
associations between entities or views
user-defined structured types
SAP HANA Studio,选择Package,右键New->创建Database Development->DDL Source File;
DDL Source File可以选择创建多种模板;
默认创建空的Context;
代码实例1:
namespace:文件的package路径,package路径的大小写必须一致;
using:通过引用其他package路径下文件中定义的type,实现类型的共享;
@Schema:这个批注表示使用的Schema;
context:上下文,其中可以包含多种持久化结构定义;
//:表示单行注释;
/**/:表示多行注释;
namespace test.tom;
using test.tom::CDS_TEST_TYPE.test_type;
@Schema: 'TEST'
context CDS_TEST {
//单行注释
/*
多行注释
*/
};
同样package路径test.tom下创建CDS_TEST_TYPE.hdbdd文件,
context CDS_TEST_TYPE {
type test_type : Integer;
type test_struct_type{
test_type1 : String(20);
test_type2 : String(30);
};
};
代码实例2:
定义数据类型,可以在Context中定义单个类型,也可以多个类型集合
HANA数据类型和.hdbdd文件定义类型对应关系:
SAP HANA Type (hdbtable) |
CDS Type (hdbdd) |
NVARCHAR |
String |
SHORTTEXT |
String |
NCLOB |
LargeString |
TEXT |
LargeString |
VARBINARY |
Binary |
BLOB |
LargeBinary |
INTEGER |
Integer |
INT |
Integer |
BIGINT |
Integer64 |
DECIMAL(p,s) |
Decimal(p,s) |
DECIMAL |
DecimalFloat |
DOUBLE |
BinaryFloat |
DAYDATE |
LocalDate |
DATE |
LocalDate |
SECONDTIME |
LocalTime |
TIME |
LocalTime |
SECONDDATE |
UTCDateTime |
LONGDATE |
UTCTimestamp |
TIMESTAMP |
UTCTimestamp |
ALPHANUM |
hana.ALPHANUM |
SMALLINT |
hana.SMALLINT |
TINYINT |
hana.TINYINT |
SMALLDECIMAL |
hana.SMALLDECIMAL |
REAL |
hana.REAL |
VARCHAR |
hana.VARCHAR |
CLOB |
hana.CLOB |
BINARY |
hana.BINARY |
ST_POINT |
hana.ST_POINT |
ST_GEOMETRY |
hana.ST_GEOMETRY |
/*定义类型*/
//单个类型
type t1_char200 : String(200);
//类型集
type t1_collection{
field1 : Integer;
field2 : String(20);
}
代码实例3:
嵌套Context, Context中定义类型可以使用;
/*嵌套Context*/
context MyContext1{
//定义type
type t2_char10 : String(10);
//使用上层单个type
type t2_sin_type : t1_char200;
//使用上层类型集中type
type t2_col_type : type of t1_collection.field2;
}
代码实例4:
创建entity(table)类型
/*定义entity(table)*/
context MyContext2{
//定义user table
entity MyUser{
key ID : Integer; //key设置为键值
Name : String(100) not null; //不能为空
Address : String(200) default 'CN'; //设置默认值
Account : Decimal(15,2);
Telephone : String(12);
};
//定义默认值测试table
entity MyDefault{
//generated [always | by default] as identity
//Defining an element with IDENTITY is not supported in XS Classic
//定义自增
//key id : Integer generated always as identity(start with 1 increment by 1);
field1 : Integer default -42;
field2 : Integer64 default 9223372036854775807;
field3 : Decimal(5,3) default 12.345;
field4 : BinaryFloat default 123.456e-1;
field5 : LocalDate default date'2013-04-29';
field6 : LocalTime default time'17:04:03';
field7 : UTCDateTime default timestamp'2013-05-01 01:02:03';
field8 : UTCTimestamp default timestamp'2013-05-01 01:02:03';
//field9 : Binary(32) default x'0102030405060708090a0b0c0d0e0123[...]';
field10 : String(10) default 'foo';
//generated always as <expression>
//Generated calculated elements not supported in XS Classic
//定义公式
//field11 : Decimal(10,3) generated always as field1 + field3;
};
//定义table
//通过批注等配置存储方式,index
@Catalog:{
tableType : #COLUMN,
index : [
{ name:'Index1', order:#DESC, unique:true, elementNames:['ID'] },
{ name:'Index2', order:#DESC, unique:false, elementNames:['name'] }
]
}
entity Books{
key ID : Integer;
name : String(20);
Editor: String(100);
}; //通过technical设置存储方式,index
entity Author{
key ID : Integer;
name : String(20);
Address : String(100);
} technical configuration {
row store;
index MyIndex1 on (name) asc;
unique index MyIndex2 on (ID,name) desc;
};
}
代码实例5:
定义Table之间Associations,Table之间外键关系;
//定义table
//定义Annotation关系,类似于Table直接外键。
context SimpleAssociations{
type StreetAddress{
name : String(80);
number : Integer;
}; type CountryAddress{
name : String(80);
code : String(3);
}; entity Address{
key id : Integer;
street : StreetAddress;
zipCode : Integer;
city : String(80);
country : CountryAddress;
type : String(10); // home, office
}; entity Person{
key id : Integer;
// address1,2,3 are to-one associations
address1 : Association to Address;
address2 : Association to Address { id };
address3 : Association[1] to Address { zipCode, street, country };
// address4,5,6 are to-many associations
address4 : Association[0..*] to Address { zipCode };
address5 : Association[*] to Address { street.name };
address6 : Association[*] to Address { street.name AS streetName,country.name AS countryName };
//对订单关系
orders : Association[*] to SalesOrder on orders.Person_id = id;
}; //订单和人员,Item之间关系
entity SalesOrder{
key Order_id : Integer;
key Item_id : Integer;
key Person_id : Integer;
count : Decimal(18,2);
//对person,item关系,1個張訂單對應一個人,一個訂單對應多個訂單Item
person : Association[1] to Person on person.id = Person_id;
item : Association[*] to Item on item.id = Item_id;
}; //订单item
entity Item{
key id : Integer;
name : String(20);
//对应SalesOrder关系
orders : Association[1] to SalesOrder on orders.Item_id = id;
};
}
代码实例6:
通过CDS,创建View;
View只能通过查询Table生成;
/*定义View*/
Context MyContext3{
//const定义常量
const number1 : Integer = 4; entity test{
name : String(20);
a : Integer;
b : Integer;
};
entity test1{
name : String(20);
a : Decimal(10,2);
b : Integer;
} //定义View,查询MyContext2.SimpleAssociations路径,括号中定义查询字段
view AddressView as select from MyContext2.SimpleAssociations.Address{
id,
street.name,
street.number
}; //表达式,计算+,-,*,/,||连接操作,case when操作
view CalView as select from test{
a + b AS data_sum,
a - b AS data_sub,
a * 1 AS data_mul,
a / 1 AS data_div,
-1 AS data_neg,
a || b AS data_con,
CASE WHEN a > 10 THEN 'large'
WHEN a > 20 THEN 'l large'
ELSE 'none'
END AS data_case
}; //统计function
//AVG,COUNT,MIN,MAX,SUM,STDDEV,VAR
//where条件
//group by分组
//having 统计function条件
//order by 排序,
//limit xx offset xx限制条数
view FuncView as select from test{
name,
AVG(a) AS data_avg,
COUNT(*) AS data_count,
MIN(a) AS data_min,
MAX(a) AS data_max,
SUM(a) AS data_sum,
STDDEV(a) AS data_stddev,
VAR(a) AS data_var
}where name in('tom','jim','tian')
group by name //分组
having AVG(a) > 100
order by name limit 1 offset 30
; //UNION操作
view UnionView as select from test{name,a,b}
union
select from test1{name,a,b};
//Join操作
//[ INNER ] JOIN
//LEFT [ OUTER ] JOIN
//RIGHT [ OUTER ] JOIN
//FULL [ OUTER ] JOIN
//CROSS JOIN
view JoinView as select from test join test1 on test.name = test1.name{
test.name,
test.a + test1.a as a,
test.b + test1.b as b
}; //top 前几条记录,distinct去重
view topView as select from test top 10 {
name,
a,
b
}; view distinctView as select from test distinct{
name
}; //定义具有参数的View
//parameter names :只能由大写字母,数字,下划线组成,不能数字开头
//Views with parameters are not supported in XS Classic
/*
view paramView with parameters PAR1 : Integer,
PAR2 : String(20)
as select from test{
name,
a,
b + $parameters.PAR1 AS b
}where name = $parameters.PAR2;
*/ //查询该Schema下实体Table;
//不能多个Schema Table 混合同时访问;
//@Schema批注指定Schema
view tableView as select from TEST_SFLIGHT distinct{
CARRID,
CONNID
};
/*
view tableView1 as select from SFLIGHT distinct{
CARRID,
CONNID
};
*/ }
参考資料:
https://help.sap.com/docs/SAP_HANA_PLATFORM/09b6623836854766b682356393c6c416/0b1eb07d74ec4f91947ff4cc4f557429.html?locale=en-US
SAP HANA : CDS的更多相关文章
- 【HANA系列】SAP HANA XS使用Data Services查询CDS实体【二】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Dat ...
- 【HANA系列】SAP HANA XS使用Data Services查询CDS实体【一】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Dat ...
- 【HANA系列】【第七篇】SAP HANA XS使用Data Services查询CDS实体【一】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第七篇]SAP HANA XS ...
- 【HANA系列】【第八篇】SAP HANA XS使用Data Services查询CDS实体【二】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第八篇]SAP HANA XS ...
- HANA CDS与ABAP CDS
如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义 ...
- SAP HANA Hint简介
我发现Google和百度上关于HANA DB Hint的中文介绍比较少,所以就写了这一篇.本文部分内容来自SAP note 2142945 – FAQ: SAP HANA Hints. 什么是SAP ...
- SAP HANA学习笔记
SAP HANA:High-Performance Analytic ApplianceSAP HANA XSC:Extended Application Services Classic(SAP推出 ...
- 报表软件FineReport如何连接SAP HANA
1. 环境搭建 1.1 环境准备 首先确认HANA Studio的环境是否允许工程进行NewFile的操作,不行的话要考虑更新Studio的版本. HANAStudio需要依赖Java jdk1.6或 ...
- 学习SAP HANA SQL
学习SAP HANA SQL 语句(创建 EMP,DEPT,BONUS 和 SALGRADE测试表)--像学Oracle一样学习SAP HANA 标签: sap测试oraclesqltableda ...
- SAP HANA专题分析目录
针对HANA的关键技术领域, 做深度解析. 1. HANA开发规范 HANA 各种对象的应用解析.版本管理,开发规范. 2. HANA系统管理 用户.系统权限.数据权限的深度解析. HANA系统配置. ...
随机推荐
- 使用阿里云产品搭建PHPWIND
2.4 安装PhpWind论坛网站 1. 本小节主要是在ECS云主机中快速安装PhpWind论坛网站的基础环境. 2. 远程登录到 PhpWind 主机服务器 ECS实例.请使用本实验 ...
- 洛谷 P1094纪念品分组 题解
一道典型的贪心算法题. 题目内容不多说了,大致说一下代码的思路: 给定的所有纪念品中可以先用sort排一下顺序,然后从价格最高和最低的开始向中间靠拢(可以看做是指针),这样保证每组的搭配都是最优的. ...
- mysql中的列类型
创建数据表的时候,指定的列可以存储的数据类型: CREATE TABLE book ( bid 列类型); ① 数值类型--可以不加引号 TINYINT 微整型,占一个字节 范围-128~127 ...
- 深度剖析 Linux 伙伴系统的设计与实现
在上篇文章 <深入理解 Linux 物理内存分配全链路实现> 中,笔者为大家详细介绍了 Linux 内存分配在内核中的整个链路实现: 但是当内核执行到 get_page_from_free ...
- 【分析笔记】Linux 4.9 backlight 子系统分析
相关信息 内核版本:Linux version 4.9.56 驱动文件:lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上,面对应 ...
- 使用VMware Converter Standalone P2V(物理机转换虚拟机)
使用VMware Converter Standalone P2V(物理机转换虚拟机) 环境说明: 1.P2V软件:VMware-converter-en-6.3.0-20575345 下载地址:v ...
- springboot返回数据null参数设为空字符串或空数组
package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname MyJsonMapper * @Desc ...
- ROS多机通讯
1.主机: sudo /etc/hosts 写入从机的地址和用户名: 192.168.31.14 raspi2 2.从机 sudo /etc/hosts 写入主机的地址和用户名 192.168. ...
- .Net Core中使用NEST简单操作Elasticsearch
C#中访问Elasticsearch主要通过两个包NEST和Elasticsearch.Net,NEST用高级语法糖封装了Elasticsearch.Net可以通过类Linq的方式进行操作,而Elas ...
- 微信小程序更新机制
微信小程序更新机制的说明 官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/update-mechan ...