`
blueoxygen
  • 浏览: 1191352 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

基于HANA的universe最佳实践之JOIN_BY_SQL

阅读更多

在将HANA作为数据库创建universe建模时,有一条最佳实践,利用JOIN_BY_SQL特性。

 

这要从头说起,从一个另外相关的设置 - "Multiple SQL statements for each measure"。它的作用如同名字所表示的,对于使用的每一个measure单独生成一条SQL语句。目的是什么的?在基于数据库表设计universe建模的时候,有时候会遇到CHASM。在某些特殊场合下,报表的结果会不准确,比如产生笛卡尔积。解决方案之一便是将分别存在于不同表中的measure单独取出并在WEBI里面进行UNION操作。仅仅勾选这样一个选项,很棒。

我们看下面这样的例子来更好地理解(这里没有CHASM或者FAN,只是为了演示这个参数)

这是一个很简单的data foundation,而measure存在于两张表中

 

1.png

如果在WEBI的query panel里选择了这两个measure,而没有勾选这个选项,那么生成的SQL是什么样的呢?

 

 
  1. SELECT  
  2.   sum(Table__2."Quantity"),  
  3.   sum(Table__1."GrossAmount"),  
  4.   Table__1."OrderId",  
  5.   Table__2."OrderItem"  
  6. FROM  
  7.   "OPENSAP.workshop::header"  Table__1 INNER JOIN "OPENSAP.workshop::item"  Table__2 ON (Table__1."OrderId"=Table__2."OrderId")  
  8.     
  9. GROUP BY  
  10.   Table__1."OrderId",   
  11.   Table__2."OrderItem"  

 

我们看到是一条SQL语句,利用INNER JOIN来连接的,这就是可能产生CHASM的SQL。

那么我们勾选这个选项,再次运行同样的WEBI,结果如何呢?我们发现WEBI生成了两条SQL,然后用自己的UNION操作将他们组合起来。

 

2.png

 

但是如果每个查询返回的数据很多会怎样?在WEBI里面做UNION效率一定不高,这时就可能产生性能问题。

这时候我们就可以借助JOIN_BY_SQL,将操作推到数据库层面去做。那么问题是,这与最开始没有勾选‘Multiple SQL statements for each measure“默认产生INNER JOIN语句时的区别在哪呢?我们先去universe里设置一下看看结果再说。

 

3.png

再次运行同样的WEBI报表,获得的SQL语句:

 

 
  1. SELECT  
  2.   COALESCE( F__1.Axis__1,F__2.Axis__1  ),  
  3.   COALESCE( F__1.Axis__2,F__2.Axis__2  ),  
  4.   F__1.M__3,  
  5.   F__2.M__3  
  6. FROM  
  7.      (   
  8.      SELECT  
  9.        Table__1."OrderId" AS Axis__1,  
  10.        Table__2."OrderItem" AS Axis__2,  
  11.        sum(Table__1."GrossAmount"AS M__3  
  12.      FROM  
  13.        "OPENSAP.workshop::header"  Table__1 INNER JOIN "OPENSAP.workshop::item"  Table__2 ON (Table__1."OrderId"=Table__2."OrderId")  
  14.          
  15.      GROUP BY  
  16.        Table__1."OrderId",   
  17.        Table__2."OrderItem"  
  18.        )  
  19.       F__1  
  20.       FULL OUTER JOIN   
  21.      (   
  22.      SELECT  
  23.        Table__1."OrderId" AS Axis__1,  
  24.        Table__2."OrderItem" AS Axis__2,  
  25.        sum(Table__2."Quantity"AS M__3  
  26.      FROM  
  27.        "OPENSAP.workshop::header"  Table__1 INNER JOIN "OPENSAP.workshop::item"  Table__2 ON (Table__1."OrderId"=Table__2."OrderId")  
  28.          
  29.      GROUP BY  
  30.        Table__1."OrderId",   
  31.        Table__2."OrderItem"  
  32.        )  
  33.       F__2  
  34.       ON ( F__1.Axis__1=F__2.Axis__1  AND  F__1.Axis__2=F__2.Axis__2  )  

 

我们看到操作是通过数据库的FULL OUTER JOIN进行的。这样既保证了单独为每一个measure取数又能够保证整个操作在数据库层面进行,提高效率。

由于HANA处理的高效率,所以在基于HANA建模时,我们都建议利用这样的设置进行操作。

 

不过没有万能的设计。如果取回的数据量足够小,小到WEBI可以很快速的处理UNION,而数据库本身处理UNION操作又造成了一定的问题,比如大量内存的消耗,CPU时间的消耗,这个时候就不要坚持JOIN_BY_SQL了。

分享到:
评论

相关推荐

    SAP_HANA_SQL_Reference_Guide_en.pdf

    标题中提到的"SAP_HANA_SQL_Reference_Guide_en.pdf"是关于SAP HANA平台的SQL参考指南,文档版本为2.0SPS04,发布日期为2019年10月31日。SAP HANA是一个高性能的数据库,它支持复杂的分析处理,并且能够处理大量的...

    SAP_HANA_SQL_Script_Reference_en.pdf

    本文主要基于提供的文件《SAP_HANA_SQL_Script_Reference_en.pdf》的内容,详细介绍了SAP HANA SQL脚本的相关知识点。 SQL脚本是SAP HANA中用于编写和执行数据库过程的脚本语言。它包含了一系列的声明和指令,可以...

    HANA数据库检查脚本

    1. **HANA_Configuration_Parameters_1.00.90+.txt**:这个文件可能包含了HANA系统配置参数的检查脚本,版本号1.00.90及以上,用于检查和对比HANA实例的配置是否符合最佳实践和安全标准。 2. **HANA_Configuration_...

    SAP_HANA_STUDIO_X64_2.3.37.zip

    3. **开发工具**:HANA Studio支持开发基于HANA的应用程序,包括使用XS Advanced应用程序开发、ABAP开发和SQLScript。开发者可以使用内置的编辑器、调试器和测试工具来构建和测试应用程序。 4. **生命周期管理**:...

    SAP_HANA_SQL_and_System_Views_Reference_en

    在SAP HANA系统中,SQL(Structured Query Language)是用来管理和操作数据库的标准编程语言。SAP HANA SQL及系统视图参考手册是该平台下详尽的SQL语言和系统视图资源文档。这份文档不仅提供SQL语句大全,还包括了...

    HANA_SQL语句和系统视图

    HANA中的表达式是由一个或多个常量、列名、函数、运算符和括号组成的式子,用于构造SQL语句中的WHERE、ORDER BY和HAVING等子句,为数据库系统提供操作指令。 函数是数据库操作中不可或缺的一部分,HANA支持多种SQL...

    HANA Hot News: HANA建模时关于使用join的限制

    这个限制背后的逻辑是,如果某个表在join路径中被重复引用,那么在构建SQL查询时,可能会产生无法正确解析的循环连接,造成查询错误,或者在执行查询计划时产生大量的数据冗余和不必要的计算开销。例如,如果数据库...

    SAP_HANA_Administration_Guide_2.0SPS5_v1.0.pdf

    SAP HANA Studio是另一个重要的管理工具,提供了一个更全面的视图,允许执行SQL语句、管理SAP HANA系统并配置管理偏好。 管理员在部署SAP HANA时还需要考虑硬件和云测量工具的使用,确保满足SAP的Tailored Data ...

    HANA数据库备份和还原.rar_HANA SAP_HANA数据库备份_deeplyqv7_hana恢复数据库_hana数据库

    8. **HANA数据库备份和还原.pdf**:这个PDF文件很可能是详细的教程或文档,涵盖了HANA数据库的备份和恢复步骤、最佳实践以及可能遇到的问题解决方案。 总的来说,理解和实施HANA数据库的备份和恢复策略是确保业务...

    HANA培训_基础架构_201607_V1.0.pptx

    HANA培训_基础架构,技术架构,组件,配置,日志,存贮点,介绍分布式体系架构

    HANA_ABAP_ApplicationLog_OrphanRecords.txt

    HANA SQL Statement - HANA_ABAP_ApplicationLog_OrphanRecords

    SAP-HANA数据库SQL参考手册.pdf(中文版)

    在SAP HANA体系中,SQL语言的使用规则十分关键,它规定了如何在SAP HANA中执行数据的增加、删除、修改和查询操作。 在SAP HANA中,SQL语句的编写遵循一定的规则,包括标识符的使用、注释的书写方式、数据类型的确切...

    HANA_SQL_EN

    ### SAP HANA数据库SQL参考手册知识点解析 #### 一、SAP HANA 概述 - **SAP HANA**(High Performance Analytic Appliance)是SAP公司开发的一款高性能分析应用平台,它将数据库、数据处理和分析功能集成到一个...

    SAP_HANA_ODBC_Driver_hdb_client_windows_x86_64.zip

    https://help.sap.com/viewer/e9146b36040844d0b1f309bc8c1ba6ab/3.2/en-US/734759c0c1c9440c857da0d366e47dda.html

    HA200_ZH_Col16_SAP_HANA_2.0_SPS04_安装和管理.rar

    标题中的"HA200_ZH_Col16_SAP_HANA_2.0_SPS04_安装和管理"表明这是一个关于SAP HANA 2.0 Service Pack 4 (SPS04)的中文教程,专注于系统的安装与管理工作。SAP HANA是一款高性能的数据处理平台,专为实时分析和...

    SAP_HANA_CLIENT64

    标题“SAP_HANA_CLIENT64”表明我们讨论的是64位版本的SAP HANA客户端,这通常适用于64位操作系统。在描述中提到的“Power BI连接sap hana数据库所需的ODBC驱动”,提示了SAP HANA客户端的一个关键功能,即通过ODBC...

    HANA SQLStatements ALL

    4. HANA_SQL_StatementHash_DataCollector_2.00.034+.txt、2.00.040+.txt:这些文件可能包含 SAP HANA SQL 语句哈希数据收集器的输出,该工具用于追踪和分析系统中执行的 SQL 语句,以便于性能优化和资源管理。...

    SAP_HANA_CLIENT_32bit.zip

    【描述】"SAP_HANA_CLIENT_32bit.zip" 的描述简单明了,意味着压缩包内含有32位架构的 SAP HANA 客户端组件。这通常包括驱动程序、安装程序和其他必要的支持文件,以确保在32位操作系统上顺利运行和配置 SAP HANA ...

    SAP_HANA_STUDIO_2.3.15_X64

    SAP HANA Studio是SAP公司为开发和管理SAP HANA数据库系统提供的一款集成开发环境(IDE)。这个2.3.15_X64版本是专为64位操作系统设计的,它集成了多种工具,帮助开发者进行高效的数据模型设计、应用程序开发以及...

Global site tag (gtag.js) - Google Analytics