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. Linux c 检测U盘挂载路径方法

    思路: 1.使用df -h |grep mnt shell 命令查找到挂载路径信息 本代码是将结果存入文件中,再从文件中解析出路径信息.也可使用fopen直接从管道中读取信息 2.解析出信息最后的/m ...

  2. linux 高效压缩工具之xz的压缩解压使用

    xz是什么 高压缩率的工具,它使用 LZMA2 压缩算法,生成的压缩文件比传统使用的 gzip.bzip2 生成的压缩文件更小, 不过xz也有一个坏处就是压缩时间比较长,比7z压缩时间还长一些.不过压 ...

  3. 华为云服务器8000通道映射到本地,本地浏览器访问jupyter

    首先你得有个华为云服务器(这不是废话) 第二你得开放它的端口(重点) 第三打开本地cmd 输入ssh -L [客户端IP或省略]:[客户端端口]:[服务器IP]:[服务器端口] [登陆服务器的用户名] ...

  4. centos7连接WIFI

    centos7图形化界面可以直接连接WIFI,命令行会稍麻烦一些 环境: 1.笔记本安装centos7,没有很大的流量,基本都是交互 2.桌子后面的线路太乱,想要省去一根网线 过程: 1.安装软件 y ...

  5. 读Java8函数式编程笔记08_测试、调试和重构

    1. Lambda表达式的单元测试 1.1. 单元测试是测试一段代码的行为是否符合预期的方式 1.2. Lambda表达式没有名字,无法直接在测试代码中调用 1.2.1. 将Lambda表达式放入一个 ...

  6. Win10下yolov8 tensorrt模型加速部署【实战】

    Win10下yolov8 tensorrt模型加速部署[实战] TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10.linux,在20 ...

  7. 六、python基础知识之变量常量、索引取值和PEP8规范

    目录 一.变量与常量 1.什么是变量? 2.什么是常量? 变量的基本使用 变量使用的语法结构与底层原理 变量名的命名规范和命名风格 变量的命名风格 常量的基本使用 二.索引取值 三.PEP8规范 1. ...

  8. 编程哲学之 C# 篇:004——安装 Visual Studio

    工欲善其事必先利其器,本章介绍安装Visual Studio这个号称宇宙最强IDE(Integrated Development Environment[集成开发环境]). 安装 Visual Stu ...

  9. 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题

    解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题 需要检查的步骤: 1.是否map ...

  10. Zstack救急实战记录

    起了这么个标题很容易引起歧义,先说明:是Zstack云架构帮我救急,而不是Zstack系统出了问题被救.具体容我慢慢道来: 使用Docker搭建EPICS的IOC记录 去年暑假时在一台工控机上裸装ce ...