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的更多相关文章

  1. 【HANA系列】SAP HANA XS使用Data Services查询CDS实体【二】

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Dat ...

  2. 【HANA系列】SAP HANA XS使用Data Services查询CDS实体【一】

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Dat ...

  3. 【HANA系列】【第七篇】SAP HANA XS使用Data Services查询CDS实体【一】

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第七篇]SAP HANA XS ...

  4. 【HANA系列】【第八篇】SAP HANA XS使用Data Services查询CDS实体【二】

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第八篇]SAP HANA XS ...

  5. HANA CDS与ABAP CDS

    如果你在网络或者SCN上面搜索CDS,即SAP的Core Data Services,你会很容易地找到类似“Core Data Services(CDS)是一个在SAP HANA中用于定义和消费富语义 ...

  6. SAP HANA Hint简介

    我发现Google和百度上关于HANA DB Hint的中文介绍比较少,所以就写了这一篇.本文部分内容来自SAP note 2142945 – FAQ: SAP HANA Hints. 什么是SAP ...

  7. SAP HANA学习笔记

    SAP HANA:High-Performance Analytic ApplianceSAP HANA XSC:Extended Application Services Classic(SAP推出 ...

  8. 报表软件FineReport如何连接SAP HANA

    1. 环境搭建 1.1 环境准备 首先确认HANA Studio的环境是否允许工程进行NewFile的操作,不行的话要考虑更新Studio的版本. HANAStudio需要依赖Java jdk1.6或 ...

  9. 学习SAP HANA SQL

      学习SAP HANA SQL 语句(创建 EMP,DEPT,BONUS 和 SALGRADE测试表)--像学Oracle一样学习SAP HANA 标签: sap测试oraclesqltableda ...

  10. SAP HANA专题分析目录

    针对HANA的关键技术领域, 做深度解析. 1. HANA开发规范 HANA 各种对象的应用解析.版本管理,开发规范. 2. HANA系统管理 用户.系统权限.数据权限的深度解析. HANA系统配置. ...

随机推荐

  1. ua5.4源码剖析:三. C++与Lua相互调用

    概述 从本质上来看,其实说是不存在所谓的C++与lua的相互调用.lua是运行在C上的,简单来说lua的代码会被编译成字节码在被C语言的语法运行.在C++调用lua时,其实是解释运行lua文件编译出来 ...

  2. vue-admin-template 单页面刷新 404 问题

    vue-admin-template (vue-element-admin)是个非常好用的B端UI框架,谁用谁知道! 在使用的过程中,加入权限模块后,刷新后权限控制的页面就默认跳转到404页面了,搞了 ...

  3. Java 进阶P-8.15

    对象串行化 ObjectInputStream类 readObject() ObjectOutputStream类 writeObject() Serializable接口 对象的寿命通常随着生成该对 ...

  4. Nacos配置中心 (介绍与配置)

    Nacos配置中心 当微服务部署的实例越来越多,达到数十.数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错.我们需要一种统一配置管理方案,可以集中管理所有实例的配置. Nacos一方面可以将配置 ...

  5. Nginx13 openresty使用lua-resty-template

    1 简介 https://github.com/bungle/lua-resty-template 如果学习过JavaEE中的servlet和JSP的话,应该知道JSP模板最终会被翻译成Servlet ...

  6. springcloud-alibaba

    1.spring cloud alibaba官网 https://spring.io/projects/spring-cloud-alibaba#overview 2.spring cloud ali ...

  7. C# SMTP发邮件不支持465端口的解决方案

    C# 发邮件帮助类传送门(465端口除外): https://www.cnblogs.com/dennisdong/p/15953790.html 一.问题解惑,为什么465发送失败 查阅资料得知,. ...

  8. Osx10.14升级watchman踩坑记

    背景 使用 watchman 检测文件变化通知非常的好用, 但有些时候会出现 watchman 占用内存和 CPU 特别疯狂, 通过 watch-del 也无济与事, 由于 watchman 的版本 ...

  9. 2.17 win32 按钮事件的处理

    按钮的本质就是窗口 点击查看代码 void CreateButton(HWND hwnd) { HWND hwndPushButton; HWND hwndCheckBox; HWND hwndRad ...

  10. Excel文件 利用MySQL/Python 实现自动处理数据的功能

    目录 问题描述: 解决方案: 一.SQL查询 二.SQL.python处理 三.python处理 四.优化python处理 1.手动执行代码 2.开机自动执行代码 对比四种方案: 总结: 问题描述: ...