汇总具有13亿条记录的表的基本方法。

2020-09-03 19:38发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们有一个Sap表MARD,记录数为13亿。

这里的数据来自站点,文章和位置(lgort)级别

Sloc是最低的粒度列。

所以我想为我当前正在使用该查询的每个站点获取一条记录

选择

 site,matnr,min(lgort)sloc

 来自MARD

 其中lgort <>'1000'; 

此查询大约需要20分钟才能执行,并消耗200GB的内存。

除了聚合整个数据集之外,还有没有更好或更快速的方法来从表中获取单个站点,逐条显示的行?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我们有一个Sap表MARD,记录数为13亿。

这里的数据来自站点,文章和位置(lgort)级别

Sloc是最低的粒度列。

所以我想为我当前正在使用该查询的每个站点获取一条记录

选择

 site,matnr,min(lgort)sloc

 来自MARD

 其中lgort <>'1000'; 

此查询大约需要20分钟才能执行,并消耗200GB的内存。

除了聚合整个数据集之外,还有没有更好或更快速的方法来从表中获取单个站点,逐条显示的行?

付费偷看设置
发送
3条回答
CPLASF-自律
1楼-- · 2020-09-03 20:14

对此应该有一个GROUP BY子句。 任何聚合都应使用GROUP BY将数据正确分组在一起。

选择
 site,matnr,min(lgort)sloc
 来自MARD
 lgort <>'1000'
 GROUP BY站点,matnr; 

进行聚合时,我建议您将这种逻辑类型放入计算视图中,以便从该引擎中受益。

最后,您可能需要考虑在现场进行分区,也可以考虑在matnr进行分区。 请记住,如果该表没有分区,HANA的每个表限制为20亿行。 如果已分区,则每个分区的行数限制为20亿。 参见 SAP注释2212518

暮风yp
2楼-- · 2020-09-03 20:15

Hello Mark,

这是我正在使用的查询

(
 选择WERKS网站,MATNR文章,来自MARD的最小(LGORT)SLOC
 按工作组,MATNR
 MIN(LGORT)<>'1000'
 ); 

对不起,那是我的坏事。 我正在按条款使用分组。 只是忘了在查询中提及相同的内容。

我的表也被哈希分区在您提到的列上。

在计算视图中执行此操作是否可以加快我的处理时间?

因为这是我较大的查询的一部分。

黑丝骑士
3楼-- · 2020-09-03 20:34

您是否正在使用HANA 2.0并使用Web IDE? 然后在SQL Console中可以对SQL查询使用"分析"按钮,该按钮为您提供有关查询执行的性能详细信息以及一些可能的建议。

和分析

一周热门 更多>