SAP HANA 信息建模(Information Modeler)

SAP HANA信息建模(Information Modeler);也称为HANA数据建模是HANA系统的核心。它使能够在数据库表的顶部创建建模视图,并实现业务逻辑以创建有意义的报告以进行分析。本文主要介绍SAP HANA 信息建模(Information Modeler)。

1、Information Modeler信息建模的特性

  • 提供存储在HANA数据库物理表中的交易数据的多个视图,以用于分析和业务逻辑目的。
  • 信息建模仅适用于基于列的存储表。
  • 信息建模视图由基于Java或HTML的应用程序或SAP Lumira或Analysis Office之类的SAP工具用于报告。
  • 也可以使用第三方工具(例如,MS Excel)连接到HANA并创建报告。
  • SAP HANA建模视图充分利用了SAP HANA的强大功能。

信息视图有三种类型,定义为:

  • 属性视图
  • 分析视图
  • 计算视图

2、行与列存储

SAP HANA Modeler视图只能在基于列的表的顶部创建。在列表中存储数据并不是什么新鲜事。早先假定以基于Columnar的结构存储数据需要更多的内存大小,而不是性能优化。


随着SAP HANA的发展,HANA在信息视图中使用了基于列的数据存储,并展示了基于列的表比基于行的表的真正优势。

1)列存储

在列存储表中,数据垂直存储。因此,类似的数据类型如上例所示。它借助内存中计算引擎提供更快的内存读写操作。

在常规数据库中,数据被存储在基于行的结构中,即水平存储。 SAP HANA以基于行和列的结构存储数据。这可以在HANA数据库中提供性能优化,灵活性和数据压缩。

将数据存储在基于列的表中具有以下好处:

  • 数据压缩
  • 与传统的基于行的存储相比,对表的读写访问速度更快
  • 灵活性和并行处理
  • 更快地进行汇总和计算

有多种方法和算法可以将数据存储在基于列的结构中,字典压缩,运行长度压缩等。

在“字典压缩”中,单元格以数字的形式存储在表中,并且与字符相比,数字单元格始终对性能进行优化。

在压缩的运行长度中,它将乘数与单元格值保存为数字格式,并且乘数在表中显示重复值。

3、行与列存储函数的区别

如果SQL语句必须执行聚合函数和计算,则始终建议使用基于列的存储。当运行汇总函数(例如Sum,Count,Max,Min)时,基于列的表始终会表现更好。

当输出必须返回完整的行时,首选基于行的存储。下面给出的示例很容易理解。


在上面的示例中,在带有Where子句的sales列中运行聚合函数(总和)时,它将仅在运行SQL查询时使用Date和Sales列,因此如果它是基于列的存储表,则将对其性能进行优化,数据的速度更快仅需要两列。

在运行简单的Select查询时,必须在输出中打印完整的行,因此在这种情况下建议将表存储为Row。

4、信息建模视视图(Information Modeling View)

1)属性视图(Attribute View)

属性是数据库表中不可测量的元素。 它们代表主数据,与BW的特征相似。 属性视图是数据库中的维,或用于在建模中连接维或其他属性视图。

重要功能是:

  • 在Analytic和Calculation视图中使用属性视图。
  • 属性视图代表主数据。
  • 用于在 "Analytic和Calculation" 视图中过滤维表的大小。


2)分析视图(Analytic View)

Analytic Views利用SAP HANA的强大功能对数据库中的表执行计算和聚合功能。 它至少具有一个事实表,该事实表具有度量值和维表的主键,并且被维表包围,其中包含主数据。

重要功能是:

  • 分析视图主要在执行Star模式查询。
  • 分析视图至少包含一个事实表和具有主数据的多维表,并执行计算和汇总
  • 它们类似于SAP BW中的信息多维数据集和信息对象。
  • 可以在Analytic View和Fact表的顶部创建分析视图,并执行计算,例如,售出的单位数量,总价等。

3)计算视图(Calculation View)

Calculation Views用于“分析”和“属性”视图之上,以执行复杂的计算,而“分析”视图则无法实现。 计算视图是基础列表,属性视图和分析视图的组合,以提供业务逻辑。

重要功能是:

  • 计算视图可以使用HANA建模功能以图形方式定义,也可以在SQL中编写脚本。
  • 创建它是为了执行复杂的计算,这是其他视图(SAP HANA modeler的属性视图和分析视图)无法做到的。
  • 在计算视图中,一个或多个属性视图和分析视图是在诸如Projects, Union, Join, Rank等内置功能的帮助下使用的。
推荐阅读
cjavapy编程之路首页