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. 使用阿里云产品搭建PHPWIND

    2.4 安装PhpWind论坛网站 1.     本小节主要是在ECS云主机中快速安装PhpWind论坛网站的基础环境. 2.     远程登录到 PhpWind 主机服务器 ECS实例.请使用本实验 ...

  2. 洛谷 P1094纪念品分组 题解

    一道典型的贪心算法题. 题目内容不多说了,大致说一下代码的思路: 给定的所有纪念品中可以先用sort排一下顺序,然后从价格最高和最低的开始向中间靠拢(可以看做是指针),这样保证每组的搭配都是最优的. ...

  3. mysql中的列类型

    创建数据表的时候,指定的列可以存储的数据类型: CREATE TABLE book ( bid  列类型); ① 数值类型--可以不加引号 TINYINT 微整型,占一个字节  范围-128~127 ...

  4. 深度剖析 Linux 伙伴系统的设计与实现

    在上篇文章 <深入理解 Linux 物理内存分配全链路实现> 中,笔者为大家详细介绍了 Linux 内存分配在内核中的整个链路实现: 但是当内核执行到 get_page_from_free ...

  5. 【分析笔记】Linux 4.9 backlight 子系统分析

    相关信息 内核版本:Linux version 4.9.56 驱动文件:lichee\linux-4.9\drivers\video\backlight\backlight.c 驱动作用 对上,面对应 ...

  6. 使用VMware Converter Standalone P2V(物理机转换虚拟机)

    使用VMware Converter Standalone P2V(物理机转换虚拟机) 环境说明: 1.P2V软件:VMware-converter-en-6.3.0-20575345  下载地址:v ...

  7. springboot返回数据null参数设为空字符串或空数组

    package com.ruoyi.framework.config.ResponseVoConfig.WebConfig; /** * @Classname MyJsonMapper * @Desc ...

  8. ROS多机通讯

    1.主机: sudo /etc/hosts 写入从机的地址和用户名: 192.168.31.14    raspi2 2.从机 sudo /etc/hosts 写入主机的地址和用户名 192.168. ...

  9. .Net Core中使用NEST简单操作Elasticsearch

    C#中访问Elasticsearch主要通过两个包NEST和Elasticsearch.Net,NEST用高级语法糖封装了Elasticsearch.Net可以通过类Linq的方式进行操作,而Elas ...

  10. 微信小程序更新机制

    微信小程序更新机制的说明 官方文档地址:https://developers.weixin.qq.com/miniprogram/dev/framework/runtime/update-mechan ...