SAP HANA开发指南

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SAPHANA™数据库–开发指南–如何使用SQL和SQLScript数据建模SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模1.简介1.1什么是SAPHANA1.2相关文档2.SAPHANA数据库概念2.1基本概念2.1.1现代化硬件对数据库系统架构的影响2.1.2基于列式和行式的存储2.1.3列式表的优势2.2架构概览2.3SAPHANA数据库概念:表,模型和视图处理2.3.1表,试图和星型结构2.3.2SAPHANA模型视图2.3.3SAPHANA视图处理3.教程3.1使用SAPHANAstudio3.2如何使用SAPHANAmodeler3.2.1如何建立分析试图3.2.2查看表3.2.3建立分析试图3.2.4MANDT属性3.2.5过滤器的应用3.2.6创建属性试图3.2.7创建简单的星型架构3.2.8计算属性3.2.9多语种属性视图(文本视图)3.2.10图形化计算视图3.2.11如何创建脚本计算视图3.3使用SAPHANAstudio执行SQL和SQLScript语句3.4如何显示查询计划3.4.1查询计划中的列3.4.2查询计划中的OPERATOR_NAME列3.5使用jdbc驱动3.5.1安装驱动3.5.2系统必备3.5.3jdbc驱动的整合3.5.4加载jdbc驱动3.5.5连接地址3.5.6jdbc4.0标准扩展api3.5.7jdbc跟踪记录3.5.8匹配SQL和java类型4.最佳实践4.1列式存储引擎的特点4.2SQL查询代价的估算4.2.1行式搜索代价模型SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模4.2.2列式搜索代价模型4.3SQL查询列引擎的优化技巧4.3.1表达式4.3.2联接4.3.3EXISTS/IN运算符4.3.4set操作4.4SQLScript推荐实践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避免使用动态SQL4.4.11跟踪和调试免责声明本文档为预览版本,文档中的内容均不是来自SAPAG公司发布的任何关于SAP的产品,策略,或未来的发展的官方声明。文档中的信息可能是不完整或是不正确的。SAP公司不假设,不保证,对本文档为您的商业用途或利用它产生的任何损失不承担责任。本文档应当在您已授权SAPHANA许可下使用,并受其条款指导您使用SAPHANA。SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模1.简介1.1什么是SAPHANA?SAPHANA是由SAP带给您的一项令人兴奋的新技术。其核心利用了创新型的内存技术来存储数据,特别适合处理数据量非常大的表格型或关系型的数据,具有前所未有的性能。常见的数据库以行方式存储表格数据,例如,描述一个地址的所有数据都存储在内存中相互毗邻的位置。如果你的需求只是访问一个地址,程序会运行的很快,因为所有的数据是连续存储的。然而,试想这样的场景,你的程序需要计算有多少已储存的地址与特定的国家,城市或邮编对应?这种情况下,就可能不得不扫描整张表,选出每一行,然后检查国家或城市是否是需要的。由于所有的大容量存储设备,例如硬盘,以一种与感兴趣的数据相比很大的一整块形式访问数据,例如512字节的硬盘,很可能该设备读取一至多行的数据只是为了查找几个字符,比如“巴西”或是“旧金山”。业务数据表经常含有很多偶尔使用的数据字段或列,例如和其他表相关联的数据,或者控制其他字段使用的数据字段。你能想象如果你的程序可以绕开不必要的列而访问真正需要的信息所带来的效率提升吗?如果使用这种数据存储方式,你将会体验到数据库或程序明显更快的响应。SAPHANA通过高效的列式存储方式组织表来让你绕开读取不需要的数据。除了常见的行式存储架构之外,同样可以使用列式存储。这意味着你的程序无须等待数据库获取不需要的数据,因为列式表中的所有数据都是以相邻方式储存。因此,在我们的地址表例子中,扫描列字段“国家”或“城市”比读取行式存储快很多。但是,如果你的数据库系统已经把所有数据缓存到内存或是靠近处理器的快速读取内存中,列式内存布局是否仍然可以加速访问?来自SAP和位于波茨坦市的哈索-普拉特纳研究所进行的测量证明,当访问每一行数据的子集时,以列方式重新组织内存中的数据可以带来显著的速度提升。由于SAPHANA把数据都缓存至内存中,硬盘几乎很少使用,只是为了数据持久化而对数据库的改变进行记录。SAPHANA为了保持数据库尽可能小的变化,采用只对原始数据库的增量变化记录的方式。数据是增加或插入到一个表列而不是就地修改,这种方式提供了很多的好处,不只是速度上的提升。由于保留了所有的旧数据,你的程序可以高效地在数据间“时空穿梭”,并提供随时间变化的数据的视图。现代数据库系统把数据管理和数据应用分隔至两个独立的体系结构层:数据库层和数据应用层。这种分隔方式迫使数据在被分析或是修改前,不得不从数据库“漫游”到应用层,很多时候,数据量非常大。SAPHANA通过下放数据密集的应用逻辑到数据本来的地方,即数据库本身,来避免这种常见的瓶颈。为了在数据库启用这种内置的应用逻辑,SAP开发了标准SQL的扩展(结构化查询语言)名为SQLScript。SQLScript允许编程的方式使得在数据库层执行数据密集型业务,也允许你扩充SQL语句来包含高水平的计算,从而提升了数据库的数据处理能力。本文档阐述了如何利用SQLScript在SQLHANA数据库中实现高效的密集型数据处理。1.2相关文档还有其他相关文档,说明了程序员工具的细节和可以使用的编程语言,包含如下:SAPHANADatabase–AdministrationGuide–如何使用SAPHANAStudio以及管理SAPHANA数据库.SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模SAPHANAModelingGuide–如何利用HANAModeler在SQLScript编程语言的基础上创建OLAP分析试图和计算试图。SAPHANADatabase–SQLReferenceGuide(PDF)SAPHANADatabase–SQLReferenceGuide(HTML)–SAPHANA查询语言完整参考SAPHANADatabase–SQLScriptGuide–有关如何在SAPHANA程序,包括ABAP程序中使用SQLScript和存储过程的教程。SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模2SAPHANA数据库概念SAPHANA数据库概念上来说是通过利用内存数据存储提升速度,增加数据库查询的执行速度,以及提高程序开发速度。查询在SAPHANA数据库中可以快速,并行的执行。这代表不再需要复杂的编程技巧,如提前计算值(物化聚集),用来维护传统数据库性能,因为你可以利用HDB实时地查询巨大的数据集。消除了开发的复杂性,程序可以以更直接和清晰的方式创建,因此实现了更快的开发时间。SAPHANA也能很好胜任传统数据库的存储和访问,例如基于行式存储的表可供使用。这种传统和创新型技术的结合使得开发人员可以为程序选择最好的技术,并且在需要时二者可以并用。2.1基本概念2.1.1现代化硬件对数据库系统架构的影响从历史角度来看,数据库系统曾被设计运行在有限内存的计算机系统,主要由于缓慢的磁盘输入输出是数据吞吐量的主要瓶颈。因此,这些系统结构的设计成关注于优化磁盘访问,例如通过最小化读入内存的磁盘块(或页)来处理查询语句。近年来,计算机体系结构已经发生变化。现在多核处理器(多个处理器集中在一个芯片上或是一个包)已成为标准,伴随着因处理器内核之间的快速通信而实现的并行处理。主存已经不再是有限的资源,现代服务器能拥有达到2TB的系统内存,可以使整个数据库进驻在内存中。目前服务器处理器有多达64个内核,并且128个核心即将问世。随着内核数量的增加,处理器在每次时间间隔可以处理更多的数据。这样把性能瓶颈从磁盘输入输出转移到了处理器缓存和内存数据传输上。(见图1)。图1硬件体系:现在和过去的性能瓶颈传统的数据库联机事务处理没有有效地利用当前的硬件。1999年Alamaki等人证明,当数据库加载所有数据到内存时,处理器会停滞一半的执行时间,如等待数据从主存加载到处理器缓存中。那么,运行在现代化硬件上的数据库系统的理想特点是什么?SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模内存数据库。所有有关的数据都在内存中。这一特点避免了硬盘读写的性能损失。由于所有的数据都在内存中,不再需要减少磁盘读写的磁盘索引。磁盘存储仍然要用来持久化,例如遇到断电事件。缓存优化的内存结构。设计必须尽量减少一些缓存未命中以及避免因内存访问处理器造成的停滞。达到这个目的的普遍机制是最大限度地提高数据的空间局部性,例如需要连续访问的数据应当存放在邻近的内存中。支持并行执行。通过增加更多的内核到处理器中是时下实现更高的处理器执行速度的方法。早前,通过在芯片上应用更高的包装密度,优化电子式电流路径得到改善。利用这些技术取得的速度上的提升已经不明显了。多处理器需要新的并行算法,用来在数据库中充分利用现有的计算资源。2.1.2基于列式和行式的存储正如上文提到,列式存储组织结构在特定场景下能减少内存的未命中,因此,更少的处理器停滞。这在处理器需要扫描整列时特别有用,比如执行查询时,索引搜索无法满足或者对于列进行的聚合运算,如求和或是求平均数。索引行是加速访问基于行的表的传统方法,这在列式存储中也是行之有效的,但索引树的空间局部性很低,因此明显增加了高速缓存未命中。除此之外,每次数据插入表之后,索引必须重新组织。因此,数据库开发人员必须了解两个存储技术的优点和缺点,以便找到一个合适的平衡点。从概念上讲,数据库表是一个二维的数据行和列组织的单元结构;而计算机内存是线性结构。为了在线性的内存中存储表,存在两个选择,如图2所示。基于行存储按照记录的顺序储存表,每条记录包含了行的所有列。相反,列式存储把一列的条目都放在连续的内存空间中。图2行式存储和列式存储列式存储的概念已经使用了相当长的时间。从历史上看,它主要用于聚合功能发挥重要作用的分析和数据仓库。在联机事务处理中,使用列式存储需要以平衡的方式插入索引列的数据,以减少缓存的未命中。SAPHANA数据库可以让开发人员指定一张表是否以行存储或列存储,也可以修改已有的表结构从列式转换成行式,反之亦然。有关详细信息,请参阅SAPHANASQL参考。SAPHANA数据库开发指南如何使用SQL和SQLScript数据建模列式存储表的优势体现在下列情况中:通常只对单列或几列进行计算基于表中几列字段进行的搜索表中有大量的列表中有大量的行,并且需要进行列操作(聚合,扫描等)大多数的列只包含几个不同的值,可以实现高压缩率行式存储表的优势体现在下列情况中:程序需要在同一时间内只处理单个记录(很多select和/或单个记录的更新)程序通常需要访问整个记录(或行)大多数列的值都不相同,压缩率很低既不需要聚合也不需要快速搜索表中只含有少数行(例如配置表)为了利用快速动态聚合、特别报告,以及受益于压缩机制,建议将业务数据存储在列式表中。SAPHANA能联接列式表和行式表,但是,相同存储方式表的联接更为高效。例如,需要经常和业务数据表联接的主数据表也应当采用列式存储。2.1.3列式表的优势如果上文提到的准则都能满足,本节将解释列式存储表的优势。这不代表列式存储表总是最佳选择,还有很多情况下,行式存储有优势。优势:更高的数据压缩率利用压缩可以达到以更少的代价,保证所有相关数据都存放在内存中的目标。列式数据存储可以进行非常高效的数据压缩,特别是如果对列进行排序,一般都会有几个连续的

1 / 67
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功