没有合适的资源?快使用搜索试试~ 我知道了~
SAPHANA数据库.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 91 浏览量
2021-10-02
12:18:26
上传
评论
收藏 88KB PDF 举报
温馨提示
试读
34页
SAPHANA数据库.pdf
资源推荐
资源详情
资源评论
SAP HANA? 数据库 – 开发指南
– 如何使用 SQL和 SQLScript数据建模
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
1.简介 1.1 什么是 SAP HANA 1.2相关文档 2.SAP HANA数据库概念 2.1 基本概念 2.1.1 现代
化硬件对数据库系统架构的影响 2.1.2 基于列式和行式的存储 2.1.3 列式表的优势 2.2 架
构概览 2.3 SAP HANA数据库概念: 表,模型和视图处理 2.3.1 表,试图和星型结构 2.3.2 SAP
HANA 模型视图 2.3.3 SAP HANA视图处理 3. 教程 3.1 使用 SAP HANA studio 3.2 如何使用
SAP HANA modeler 3.2.1 如何建立分析试图 3.2.2 查看表 3.2.3 建立分析试图 3.2.4
MANDT 属性 3.2.5 过滤器的应用 3.2.6 创建属性试图 3.2.7 创建简单的星型架构 3.2.8 计
算属性 3.2.9 多语种属性视图(文本视图) 3.2.10 图形化计算视图 3.2.11 如何创建脚本
计算视图 3.3 使用 SAP HANA studio执行 SQL和 SQLScript 语句 3.4 如何显示查询计划 3.4.1
查询计划中的列 3.4.2 查询计划中的 OPERATOR_NAME列 3.5 使用 jdbc 驱动 3.5.1 安装驱
动 3.5.2 系统必备 3.5.3 jdbc 驱动的整合 3.5.4 加载 jdbc 驱动 3.5.5 连接地址 3.5.6 jdbc
4.0 标准扩展 api 3.5.7 jdbc 跟踪记录 3.5.8 匹配 SQL和 java 类型 4. 最佳实践 4.1 列式存储
引擎的特点 4.2 SQL查询代价的估算 4.2.1 行式搜索代价模型
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
4.2.2 列式搜索代价模型 4.3 SQL 查询列引擎的优化技巧 4.3.1 表达式 4.3.2 联接 4.3.3
EXISTS / IN运算符 4.3.4 set 操作 4.4 SQLScript推荐实践 4.4.1 减少 SQL语句的复杂度 4.4.2
识别共同的子表达式 4.4.3 多层聚集 4.4.4 理解语句执行的代价 4.4.5 充分利用底层引擎
4.4.6 减少依赖性 4.4.7 模拟 SQL语句中的函数调用 4.4.8 避免混合使用计算引擎操作符和
SQL查询 4.4.9 避免使用游标 4.4.10 避免使用动态 SQL 4.4.11 跟踪和调试 免责声明 本文
档为预览版本,文档中的内容均不是来自 SAP AG公司发布的任何关于 SAP的产品,策略,
或未来的发展的官方声明。文档中的信息可能是不完整或是不正确的。 SAP公司不假设,不
保证,对本文档为您的商业用途或利用它产生的任何损失不承担责任。 本文档应当在您已授
权 SAP HANA许可下使用,并受其条款指导您使用 SAP HANA。
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
1. 简介
1.1 什么是 SAP HANA?
SAP HANA是由 SAP带给您的一项令人兴奋的新技术。其核心利用了创新型的内存技术来存
储数据, 特别适合处理数据量非常大的表格型或关系型的数据, 具有前所未有的性能。 常见
的数据库以行方式存储表格数据, 例如,描述一个地址的所有数据都存储在内存中相互毗邻
的位置。 如果你的需求只是访问一个地址, 程序会运行的很快, 因为所有的数据是连续存储
的。然而, 试想这样的场景,你的程序需要计算有多少已储存的地址与特定的国家,城市或
邮编对应?这种情况下, 就可能不得不扫描整张表, 选出每一行, 然后检查国家或城市是否
是需要的。 由于所有的大容量存储设备, 例如硬盘, 以一种与感兴趣的数据相比很大的一整
块形式访问数据, 例如 512 字节的硬盘, 很可能该设备读取一至多行的数据只是为了查找几
个字符, 比如“巴西” 或是“旧金山”。业务数据表经常含有很多偶尔使用的数据字段或列,
例如和其他表相关联的数据, 或者控制其他字段使用的数据字段。 你能想象如果你的程序可
以绕开不必要的列而访问真正需要的信息所带来的效率提升吗? 如果使用这种数据存储方
式,你将会体验到数据库或程序明显更快的响应。 SAP HANA通过高效的列式存储方式组织
表来让你绕开读取不需要的数据。除了常见的行式存储架构之外,同样可以使用列式存储。
这意味着你的程序无须等待数据库获取不需要的数据, 因为列式表中的所有数据都是以相邻
方式储存。因此,在我们的地址表例子中,扫描列字段“国家”或“城市”比读取行式存储
快很多。 但是,如果你的数据库系统已经把所有数据缓存到内存或是靠近处理器的快速读
取内存中,列式内存布局是否仍然可以加速访问?来自 SAP和位于波茨坦市的哈索 -普拉特
纳研究所进行的测量证明, 当访问每一行数据的子集时, 以列方式重新组织内存中的数据可
以带来显著的速度提升。由于 SAP HANA把数据都缓存至内存中,硬盘几乎很少使用,只是
为了数据持久化而对数据库的改变进行记录。 SAP HANA为了保持数据库尽可能小的变化,
采用只对原始数据库的增量变化记录的方式。 数据是增加或插入到一个表列而不是就地修改,
这种方式提供了很多的好处, 不只是速度上的提升。 由于保留了所有的旧数据, 你的程序可
以高效地在数据间 “时空穿梭” ,并提供随时间变化的数据的视图。 现代数据库系统把数据
管理和数据应用分隔至两个独立的体系结构层: 数据库层和数据应用层。 这种分隔方式迫使
数据在被分析或是修改前,不得不从数据库“漫游”到应用层,很多时候,数据量非常大。
SAP HANA通过下放数据密集的应用逻辑到数据本来的地方,即数据库本身,来避免这种常
见的瓶颈。为了在数据库启用这种内置的应用逻辑, SAP开发了标准 SQL的扩展(结构化查
询语言)名为 SQLScript。SQLScript 允许编程的方式使得在数据库层执行数据密集型业务,
也允许你扩充 SQL语句来包含高水平的计算,从而提升了数据库的数据处理能力。 本文档
阐述了如何利用 SQLScript在 SQL HANA数据库中实现高效的密集型数据处理。
1.2 相关文档
还有其他相关文档, 说明了程序员工具的细节和可以使用的编程语言, 包含如下: SAP
HANA Database – Administration Guide –如何使用 SAP HANA Studio以及管理 SAP HANA数据
库.
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
SAP HANA Modeling Guide – 如何利用 HANA Modeler 在 SQLScript编程语言的基础上创建
OLAP分析试图和计算试图。 SAP HANA Database – SQL Reference Guide (PDF) SAP HANA
Database – SQL Reference Guide (HTML) – SAP HANA 查询语言完整参考 SAP HANA
Database – SQLScript Guide –有关如何在 SAP HANA程序,包括 ABAP程序中使用 SQLScript
和存储过程的教程。
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
2 SAP HANA 数据库概念 SAP HANA 数据库概念上来说是通过利用内存数据存储提升速度,
增加数据库查询的执行速度, 以及提高程序开发速度。 查询在 SAP HANA数据库中可以快速,
并行的执行。这代表不再需要复杂的编程技巧,如提前计算值(物化聚集) ,用来维护传统
数据库性能,因为你可以利用 HDB 实时地查询巨大的数据集。消除了开发的复杂性,程序
可以以更直接和清晰的方式创建, 因此实现了更快的开发时间。 SAP HANA也能很好胜任传
统数据库的存储和访问, 例如基于行式存储的表可供使用。 这种传统和创新型技术的结合使
得开发人员可以为程序选择最好的技术,并且在需要时二者可以并用。 2.1 基本概念 2.1.1
现代化硬件对数据库系统架构的影响 从历史角度来看,数据库系统曾被设计运行在有限内
存的计算机系统, 主要由于缓慢的磁盘输入输出是数据吞吐量的主要瓶颈。 因此, 这些系统
结构的设计成关注于优化磁盘访问, 例如通过最小化读入内存的磁盘块 (或页) 来处理查询
语句。 近年来,计算机体系结构已经发生变化。现在多核处理器(多个处理器集中在一个
芯片上或是一个包)已成为标准,伴随着因处理器内核之间的快速通信而实现的并行处理。
主存已经不再是有限的资源, 现代服务器能拥有达到 2TB 的系统内存, 可以使整个数据库进
驻在内存中。目前服务器处理器有多达 64 个内核,并且 128 个核心即将问世。随着内核数
量的增加, 处理器在每次时间间隔可以处理更多的数据。 这样把性能瓶颈从磁盘输入输出转
移到了处理器缓存和内存数据传输上。 (见图 1)。
图 1 硬件体系: 现在和过去的性能瓶颈 传统的数据库联机事务处理没有有效地利用当前的
硬件。 1999 年 Alamaki 等人证明, 当数据库加载所有数据到内存时, 处理器会停滞一半的执
行时间,如等待数据从主存加载到处理器缓存中。 那么,运行在现代化硬件上的数据库系
统的理想特点是什么?
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
内存数据库。 所有有关的数据都在内存中。 这一特点避免了硬盘读写的性能损失。 由于所有
的数据都在内存中, 不再需要减少磁盘读写的磁盘索引。 磁盘存储仍然要用来持久化, 例如
遇到断电事件。 缓存优化的内存结构。设计必须尽量减少一些缓存未命中以及避免因内存
访问处理器造成的停滞。 达到这个目的的普遍机制是最大限度地提高数据的空间局部性, 例
如需要连续访问的数据应当存放在邻近的内存中。 支持并行执行。通过增加更多的内核到
处理器中是时下实现更高的处理器执行速度的方法。 早前,通过在芯片上应用更高的包装密
度,优化电子式电流路径得到改善。 利用这些技术取得的速度上的提升已经不明显了。 多处
理器需要新的并行算法, 用来在数据库中充分利用现有的计算资源。 2.1.2 基于列式和行式
的存储 正如上文提到,列式存储组织结构在特定场景下能减少内存的未命中,因此,更少
的处理器停滞。 这在处理器需要扫描整列时特别有用, 比如执行查询时, 索引搜索无法满足
或者对于列进行的聚合运算,如求和或是求平均数。 索引行是加速访问基于行的表的传统
方法, 这在列式存储中也是行之有效的, 但索引树的空间局部性很低, 因此明显增加了高速
缓存未命中。除此之外,每次数据插入表之后,索引必须重新组织。因此,数据库开发人员
必须了解两个存储技术的优点和缺点,以便找到一个合适的平衡点。 从概念上讲,数据库
表是一个二维的数据行和列组织的单元结构; 而计算机内存是线性结构。 为了在线性的内存
中存储表, 存在两个选择,如图 2 所示。基于行存储按照记录的顺序储存表,每条记录包含
了行的所有列。相反,列式存储把一列的条目都放在连续的内存空间中。
图 2 行式存储和列式存储 列式存储的概念已经使用了相当长的时间。从历史上看,它主要
用于聚合功能发挥重要作用 的分析和数据仓库。在联机事务处理中,使用列式存储需要以
平衡的方式插入索引列的数据, 以减少缓存的未命中。 SAP HANA数据库可以让开发人员指
定一张表是否以行存储或列存储,也可以修改已有的表结构从列式转换成行式,反之亦然。
有关详细信息,请参阅 SAP HANASQL参考。
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
列式存储表的优势体现在下列情况中: 通常只对单列或几列进行计算 基于表中
几列字段进行的搜索 表中有大量的列 表中有大量的行,并且需要进行列操作
(聚合,扫描等) 大多数的列只包含几个不同的值,可以实现高压缩率 行式存储
表的优势体现在下列情况中: 程序需要在同一时间内只处理单个记录(很多 select 和/
或单个记录的更新) 程序通常需要访问整个记录 (或行) 大 多数列的值都不相
同,压缩率很低 既不需要聚合也不需要快速搜索 表中只含有少数行 (例如配置
表) 为了利用快速动态聚合、特别报告,以及受益于压缩机制,建议将业务数据存储在
列式表中。 SAP HANA能联接列式表和行式表,但是,相同存储方式表的联接更为高效。例
如,需要经常和业务数据表联接的主数据表也应当采用列式存储。 2.1.3 列式表的优势 如
果上文提到的准则都能满足, 本节将解释列式存储表的优势。 这不代表列式存储表总是最佳
选择, 还有很多情况下, 行式存储有优势。 优势: 更高的数据压缩率 利用压缩可以达到以
更少的代价, 保证所有相关数据都存放在内存中的目标。 列式数据存储可以进行非常高效的
数据压缩, 特别是如果对列进行排序, 一般都会有几个连续的值放在相邻的内存中。 这种情
况下, 可以使用压缩方法,比如运行长度编码、集群编码或是字典编码,这对于业务程序是
特别有用, 因为表中的很多列包含与记录数相比数量很少的不同值。 极端的例子, 如国家代
码或邮政编码的代码,其他有效的例子包括客户和帐户号码,地区代码,销售渠道的代码,
或状态码。 后者更多的被用作数据库中其他表的外键, 例如表中含有客户订单和会计记录数
据,对于这种高度冗余的列可以有效的压缩数据。 在行式存储中, 连续的内存空间存放了不
同列的数据,因此, 例如运行长度编码的压缩方法就无法使用。在列式存储中,相比传统的
行式存储系统, 压缩因子可以达到 5 倍。 压缩技术的简要讨论如下: 运行长度编码。如果
对一列的数据进行排序, 有两个或两个以上的元素包含相同的值的概率很高。 运行长度编码
方式是计算含有相同值的连续列的个数。 为了实现这一目标, 原有列将被新的两列取代。 第
一列存放的是原有列中的值而第二列存放的是各值出现的次数。 有了这些信息可以很容易地
重建原始列。 集群编码。这种压缩技术的工作原理是寻找原始列的值以相同顺序多次出现
的次数。 压缩后的列由两列组成, 第一列存放的是指定顺序的元素, 第二列存放原始列内该
顺序起始行号。很多常用的数据压缩程序利用这一技术来压缩文本文件。
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
字典编码。 对于列含有相对较少的不同值的表, 可以通过枚举不同值和只存放它们的数字进
行有效的压缩。 这种技术需要额外的一张表, 即字典表, 第一列维护的是原始值而第二列则
是代表原始值的数字。 这种技术的压缩率很高, 例如在国家编码或是客户编码中很常用, 但
是很少作为一种压缩技术。 优势: 更高性能的列操作 在列式数据存储结构中, 对于单列的
操作, 例如搜索或是聚合, 以遍历存放在连续区域的数组的方式实现。 这样的操作具有很高
的空间局部性, 并能有效地在处理器缓存中执行。 在行式存储中, 相同的操作会更慢因为同
一列的值分布在内存中,并且处理器被缓存未命中减低了速度。 假设我们要对图 2 中行式
表的销售总和进行聚合, 从主内存到处理器缓存的数据传输总是发生在被称为 “高速缓存行”
(例如 64 个字节) 的固定大小的块。 行式存储中时常会发生每个缓存行只含有一条 “销售”
值( 4 字节存储),而剩下的字节存放的是该记录的其余字段。对于聚合所需的每个值,每
次需要重新访问内存。 这意味着行式存储结构中, 操作会因导致处理器等待所需数据的缓存
未命中而减速。基于列的存储,所有的销售值存储在连续内存中,因此高速缓存行中的 16
个值都是在总和计算所需要的。 此外, 列存储在连续内存使用内存控制器预读取, 从而进一
步减少缓存未命中数。 正如上文解释的,列式存储结构也允许高效的数据压缩,这不仅节
省了内存空间,同时也因以下原因提升了速度: 压缩后的数据可以更快的加载至处理
器的缓存中。 这是因为限制因素是内存和处理器缓存之间的数据传输, 所以性能增益将超过
需要的额外解压缩时间。 利用字典编码, 列字段以位编码的整数顺序存储, 这意味着
可以对整数判断是否相等 (例如在扫描过程中或是联接操作) ,速度远远快于字符串的比较。
在操作符识别压缩的情况下, 压缩可以加快扫描和聚合等操作。 如果列运行长度编码
和许多相同值的和可以通过一个单一的乘法取代, 鉴于良好的压缩率, 对列中的值求和会快
很多。 最近的科学研究报告显示,对整数编码压缩后的值进行比较操作比未压缩的值快 100
到 1000 倍。 优势:消除额外的索引 很多案例中,列式存储不再需要额外的索引结构,
在功能上,按列存储数据相当于给每一列添加了内置的索引。 由于内存列存储以及压缩机制,
扫描列的速度使得读操作具有非常高的性能, 特别对字典压缩而言。 在许多情况下, 消除额
外的索引降低了复杂性, 减去了定义和维护元数据的工作。 优势: 并行 列式存储利用处理
器的多个内核, 使得并行操作变得容易。 在列式存储中, 数据已被垂直分隔,这就意味着不
同列的操作可以并行的执行。 如果要对多个列进行扫描或者聚合, 这些操作可以分配到不同
的内核中。另外单列上的操作也可以并行分割成多个部分,可以由不同的处理器内核处理。
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
图 3 列式存储并行例子 优势:消除物化聚合 传统的业务应用通过物化聚合来提升读取的
性能。 这意味着程序开发人员需要定义额外的表, 冗余地存放其他表计算出的聚合结果 (如
求和)。物化聚合的计算和存储或是在每次汇总数据的写操作后,或者是按预定的时间,读
取操作则是在每次需要时才进行计算。 随着每毫秒的几个 GB 的扫描速度,内存中的列存
储可以高性能地计算大量数据的聚合结果,这在很多情况下消除了物化聚合的需要。 在财
务应用中, 不同种类的总数及结余通常被物化聚集到不同账簿中, 比如总账,应付账款,应
收账款,现金总账, 材料明细账等。 利用内存列存储不再需要这些物化聚合,因为总账和结
余可以从会计凭证中很快计算出结果。 消除物化聚集有几个好处: 简化的数据模型。 物化
聚集需要使用额外的表,这会使得数据模型变得复杂。例如, SAP Business ByDesign的财务
应用, 持久化总数和结余以星型模式存储, 为总数和结余引入了特定的业务对象, 每个对象
都伴有一张事实表和几张维度表, 如果总数和结余可以一瞬计算出的话, 就可以不需要这些
表了。一个简化的数据模型,使开发更高效、消除编程错误的来源、增加了可维护性。 简
化的业务逻辑。 程序需要在每次聚合新增、 删除或是修改之后更新其值, 或者需要特殊的聚
合运行计划,在一定的时间间隔(例如每天一次)更新聚合值。通过消除持久化聚合,就不
需要额外的逻辑。
更高级别的并发性。 对于物化聚合, 每次执行完写操作后, 需要获得一个读写锁来更新聚合,
这限制了并发性也会导致性能问题。 当不需要物化聚合时, 只有文档项目会被写入, 这可以
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
并发的执行而不用锁。 聚合值的同时性。利用快速的聚合,值总是最新的,而物化的聚合
只在预先定义的时间更新。 2.2 架构概览 图 4(见下图)中的方框给出了 SAP HANA 数据
库的概念结构图。 在方框的顶端可以看到数据库连接着客户端。 一个客户端连接数据库形成
了一个会话,通常这里使用的通信是以 SQL语句的形式。在 SAP HANA的数据库,每条 SQL
语句在一个事务上下文中处理。 新的会话隐式分配到一个新的事务中。 事务管理器是协调数
据库事务、控制事务分离和跟踪运行中,关闭事务的组件。当一个事务被提交或是回滚时,
事务管理器会把该事件通知给参与的存储引擎, 让它们来执行必要的步骤, 并负责协调持久
层完成原子和持久的事务。
图 4 SAP HANA高层体系结构 客户端的请求会被一系列的组件分析并执行, 称作请求处理和
执行控制。 图 4 展示了这层的主要功能: 请求解析器分析客户请求, 然后分发到相应负责的
组件。 例如,事务控制语句会被发送到事务管理器; 数据定义语句会传到元数据管理器而对
象调用则到对象存储器。数据操作语句转发至优化器,生成一个优化的执行计划给执行层。
SAP HANA的数据库有内置的支持特定领域模型 (如财务规划) ,提供脚本功能, 允许在数据
库内运行应用程序特定的计算。 SAP HANA 有自己脚本语言, SQLScript,设计用来优化和并
行操作。 SQLScript是基于无副作用的函数,用 SQL查询语句对表进行集操作。
SAP HANA数据库也包含一个名为规划引擎的组件,允许金融规划程序执行在数据库层的基
本规划操作。 一个基本的操作是创建一个新版本的数据集, 应用过滤和转换, 作为原有数据
的拷贝。 例如, 以上年的数据副本创建新的一年的规划数据, 这就要求根据年份过滤并且更
SAP HANA 数据库开发指南
如何使用 SQL 和 SQLScript 数据建模
新时间维度。另一个例子是,根据分解函数,规划操作把目标值从高聚合层次降到低聚合。
SAP HANA 中的功能诸如 SQLScript和规划操作,都是以内置函数中公共的基础结构实现的。
元数据可以通过元数据管理器访问。 SAP HANA元数据由一系列的对象组成, 如关系表、 列、
剩余33页未读,继续阅读
资源评论
资料大全
- 粉丝: 14
- 资源: 26万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Qt开发知识、经验总结 包括Qss,数据库,Excel,Model/View等
- IV数据.xlsx
- 一些深度学习中的小例子,适合新手学习使用
- foldcraftlauncher_262944.apk
- 珍藏多年的基于matlab实现潮流计算程序源代码集合,包含多个潮流计算程序.rar
- 使用FPGA实现串-并型乘法器
- 基于matlab实现针对基于双曲线定位的DV-Hop算法中误差误差出一种基于加权双曲线定位的DV-Hop改进算法.rar
- 基于matlab实现由遗传算法开发的整数规划,车辆调度问题.rar
- 电视家7.0(对电视配置要求高).apk
- 免费计算机毕业设计-基于JavaEE的医院病历管理系统设计与实现(包含论文+源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功