HANA 的 calculation view出现模糊关联 ambiguous join

news2024/12/24 2:19:54

一旦我们用了join,那就会有个Analytic Engine分析引擎来确保不是唯一连接的时候,关键值不会被重复。

啥是模糊关联?
一般来讲关联基数是1:n, 或者n:1,或者 m:n都是。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
以上两个关联,结果集如下:
在这里插入图片描述
这时候,结果集连带着关键值了。
那query来了,说要看这个C1客户的quantity。
很显然,应该是5,不能给人家个10。也就是系统不能搞个sum。

这个就是分析引擎干的活了。
需要Analytic Engine.
用RSOHCPR检查有模糊join的CP,就会看到这个警告。
在这里插入图片描述
这是个警告。就是告诉你有这个模糊join。但是不是说基于这个CP的query就跑不起来了。
而是说,分析引擎待会来处理这个模糊关联的时候,它会引起性能问题,会导致超高的内存消耗。
在这里插入图片描述
在这里插入图片描述
如果你的底层ADSO数据量特别大,比如我们这个,几十亿条的数据,那么会用掉几百个G的内存。因为与此同时有大量数据被传送到Analytic Engine。然后最后还有可能跑不出来,导致一个memory allocation error。

所以,为了防止query的性能和内存问题。就要避免这个模糊关联。
那万一实在避免不了呢?那就不要再在模糊关联之外再搞join了。
要是还是避免不了多重join,那就说,能不能用一样的join字段吧。
要是说又有模糊关联,又在这个上面还有好几个join,另外其他的join还都不是一样的join字段。那就有可能最后分析引擎跑出来的数据它不对。

所以就是说,定义join的时候要特别小心。

文章目录

    • 1. 定义关联基数
    • 2. CP上的query运行时间过长
    • 3. 高内存消耗

1. 定义关联基数

一旦CP上出现了模糊关联,那为了防止关键值重复,分析引擎就需要拿到所有的join字段,而不是只拿query里需要的字段,这就导致内存消耗了。
举个例子来说,下面的这个模型,关联基数都是n:m
在这里插入图片描述
原因是这个ADSO对应关联的两个infoset,确实是多对多的关系。
在这里插入图片描述
在这里插入图片描述
系统会自动给我们选择关联基数,这个不用改,自己强行改那可能会出错。

在这两个INFOSET里,ZQUANT2的sum值是41 , ZPOPULAT 值是37.
如果用listcube去直接查看这个CP的值,那么值显然是错的。
这个值是咋来的?怎么就变成了82和74就翻倍了呢?
在这里插入图片描述
因为第一个inner join由于DE和US把QUANT2的值都翻了倍。
第二个inner join,也是因为ADSO的MAT主键把数据给翻倍了。两个在ADSO里的关联字段都出现了两次,导致关键值翻倍。
但是如果我们去建一个query去跑。
在这里插入图片描述
虽然最后并没有把country和MAT这两个字段加到自由特性里。但是query还是会去拿这两个字段。并且获取到正确的值。
在这里插入图片描述
这个就是分析引擎在起作用。分析引擎在这里做了group by的操作了。
在这里插入图片描述

2. CP上的query运行时间过长

当然以上如果是数据量少,那没问题,但是如果数据量巨大。就可能出现query运行时间超长。

当然咱知道一个CP上的query运行时间长一般有几种可能,一个是它里面的join太多了。
二个是运行时要关联导航属性。所以说导航属性也不能搞太多的。影响性能。

当有很多个join的时候,就要对数据要有明确的了解了,关联的键值关系是啥样的,最后跑query的时候,拿关键值的时候,join是不是会按照你建模顺序来执行的。先取哪个join,后取哪个join,会不会来回取值。都是个问题。

一旦join多了,而且还有模糊关联了,那analytic engine也会晕,搞不了group by 就会把数据搞错。

所以说,一般CP里面不要搞太多join。

在CP里面有个本地分组。local grouping的特性,如果是只有一个模糊关联的join,那就能在另一个表里先进行grouping,这样就让analytic engine只拿group过的记录。会少很多。比如像文章开头的表,第一个表如果被分组了,analytic engine就会只拿一条数据,如果没有被分组,那就会拿两条数据,也就是内存就得耗费的多点。

没有被用作关联字段的其他特性,比如像customer 和 calmonth,都会被拿到分析引擎去。
在这里插入图片描述
而本地分组的功能。
比如对于下面这个例子,一个CP里面有两个inner join的ADSO,用物料编号做关联。最后只展示关键值STPEQUANT2。但是由于物料编号不是唯一主键,所以实际上这个内连接关联基数是个m:n.
在这里插入图片描述
在这里插入图片描述
内连接的结果如下:
在这里插入图片描述
11这个值由于第一个ADSO的联合主键会出现三次,有三条M001,但是我们query会只要一个customer和quantity,那么系统还得要在country和material上面做聚集。最后给出正确答案46。
下面这个query的值能看出来,query并不是简单粗暴的直接加得到57,而是给出总计值46.
在这里插入图片描述
这一系列操作是怎么做的?
让我们捋一捋:
第一步内连接之后,值是这样的。
在这里插入图片描述
由于只有这一个join,那么本地分组就起作用了,数据库会自动给0country做聚集。把重复值去掉。
在这里插入图片描述
接下来就需要分析引擎来操作了,分析引擎就需要关联字段来做下钻,最后其实只需要一条11.
到RSRT去看:
在这里插入图片描述
在这里插入图片描述
虽然说query里没把material加到自由特性,但是query在执行的时候还是选择了material。
到RSRT看query的技术信息,也能看到,虽然我们字query里只选了quantity和customer,其实几乎所有的字段都被当成非可见的下钻字段了,后台都去把他们查了一遍。这也就是为啥这种ambiguous join耗费时间了。
在这里插入图片描述
但是如果我们把行上的customer移除掉,那就只有一个select的字段是unit这个单位值,因为我们要拿的是个关键值,会自动带上单位。这时候也不会去select任何特性了,不会去做join啥的,就只把这个quantity值拿来就行了。
在这里插入图片描述

3. 高内存消耗

所以说一旦join的基数不是1:1的,那分析引擎就说得要把两边join的数据都拿来分析,到底啥聚集值才是正确的。要是俩边m:n值太多,那分析引擎就得狂跑。
如果有时候join了好几层,join字段也不一样,数据库不能提前做本地分组,把活都甩给分析引擎,那分析引擎会看你query里要啥字段,然后决定把所有的join字段和非join字段都取过去分析计算。
在这里插入图片描述
此时,如果你的query里面还有一些规定的filter值,那就回需要把这个filter的值也取到分析引擎做分析计算。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/157769.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php学习笔记-php会话控制,cookie,session的使用,cookie自动登录和session 图书上传信息添加和修改例子-day07

php学习笔记-php会话控制及web常用的预定义变量-day071、$_REQUEST2、$_SERVER3、$_COOKIE3.1 cookie的内容3.2 cookie的分类3.3 php中cookie的使用3.4 cookie自动登录小demo4、$SESSION4.1 session的工作原理4.2 session的使用4.2.1 修改php.ini中的session配置4.2.2 开启sess…

Android 深入系统完全讲解(13)

3 编译过程讲解 1 系统的编译过程 Android 的编译使用的 Makefile,推荐大家使用《GNU make 中文手册》,这本书有电子版,非常方便,主要是要理解清楚 Makefile 的规则,编译策略,可以通过写简单的编译机制&am…

【Java项目推荐】值得写到简历上的项目--黑马点评

优惠卷秒杀前言优惠券秒杀实现优惠券秒杀下单超卖问题一人一单分布式锁redis中加锁的一些特殊情况手动实现分布式锁分布式锁误删情况1分布式锁误删情况2lua脚本解决多条命令的原子性问题Redisson秒杀优化异步秒杀思路基于redis完成秒杀资格判断基于阻塞队列实现异步下单总结Red…

70、SSDNeRF: Semantic Soft Decomposition of Neural Radiance Fields

简介 官网:https://www.siddhantranade.com/research/2022/12/06/SSDNeRF-Semantic-Soft-Decomposition-of-Neural-Radiance-Fields.html SSDNeRF,将语义信号与场景的辐射信号联合编码,提供了场景的软分解为语义部分,能够正确编码…

【HCIA-openEuler】实验手册—09【openEuler综合实践】

文章目录一、实验介绍1、关于本实验2、实验目的二、实验任务配置1、配置思路2、配置步骤步骤1:挂载系统ISO,并配置好本地dnf源步骤2:配置软件安装源步骤3:安装文件共享服务三、设置文件共享用户与权限1、实验介绍(1&am…

【Linux】编辑器 - vim 的使用与配置

目录 1、vim的基本概念 2、vim的基本操作 2.1、vim 编辑器的进入与退出 2.2、插入模式 2.3、命令模式 2.4、底行模式 3、vim的配置 3.1、自定义配置 3.2、自动化配置 vim 的前身是 vi,vi/vim的区别简单点来说,它们都是多模式编辑器,…

Java对时间的处理

Date用的最多这里主要介绍该类。java.util 包提供了 Date 类来封装当前的日期和时间。 Date 类提供两个构造函数来实例化 Date 对象。 package com.company; import java.util.Date;public class Main {public static void main(String[] args) {// write your code hereSyste…

阿里云Docker仓库操作

为什么用阿里云docker有自己的仓库服务器,但是对没掏钱的(白嫖)用户并不是那么友好,有两个很大的限制:免费用户,在6个月之内如果没有任何操作,将会被自动删除,真的很糟糕啊。匿名用户…

港科夜闻|广州市花都区与香港科大(广州)合作建设科研智库,发展AI智慧农业...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、广州市花都区与香港科大(广州)合作建设科研智库,发展AI智慧农业。1月8日,广州市花都区人民政府和香港科大(广州)在广州举行签约仪式,根据协议,香港科大(广州)和花都区人民政府…

JS案例:接口加解密与防重放

目录 前言 功能设计 客户端的功能点(client) 服务端的功能点(server) 功能实现 工具函数 client.js(客户端) server.js(服务端) 实现效果 写在最后 前言 在网络通信中&am…

远程会计人员如何通过数字工作流程完成工作

远程会计人员如何通过数字工作流程完成工作 当大多数员工居家办公时,会计部门通常会敏锐地感受到挑战。如果您的组织开始数字化转型或只迈出了第一步,您会发文档管理系统现在已成为必备品,而不是可有可无的。现在是时候实施数字工作流程&…

论文投稿指南——中文核心期刊推荐(地理学)

【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…

Mysql操作指令

Mysql操作指令 创建数据库 下面写具体案列一步步学 这里基本上线在sqlyog里面写sql,因为关于java程序和mysql数据库的连接还没有学 图形化操作数据库之前的可视化有 这里只讲指令凑在哦 注意 默认创建库 用uft8字符集,校对规则的uf8_general_ci不区分大…

< Linux >:环境变量

目录 环境变量 常见的环境变量 基本概念 查看环境变量内容的方法 测试环境变量PATH 与环境变量相关的命令 Linux操作系统下C/C程序代码中获取环境变量的方式 环境变量的组织方式 环境变量通常具有全局属性 环境变量 问题: 注意:可执行程序 等价于 命令/指…

Flutter 开发一个自己的 package(纯Dart)并提交到pub.dev上

小提示第一步:创建一个 package第二步:实现我们的package第三步:发布到 pub.dev 上。END发布的准备工作小提示 Flutter 轮子库。本文是为大家讲述怎么自己写个轮子发布到到上面。 https://pub.flutter-io.cn/packages 第一步:创建…

P2P僵尸网络-家族类别

Pink Pink 家族曾在中国境内感染了超过百万级的设备,其非实效性指令通过 P2P 传递,实效性强的指令通过集中控制的方式发布。是一个设计巧妙的 P2P 僵尸网络家族 Pink 僵尸网络概述 Pink 主要针对基于 mips 的光纤路由器,并且具有非常强大的和…

如何使用人力资源软件识别保留优秀员工

在企业信息化的时代,越来越多的年轻员工开始追求他们的激情,辞掉那些乏味的工作,而选择加入重视员工生活质量的企业。他们不再追随那些以牺牲员工福利为代价追求利润的公司。 员工认可度有助于加强组织中的团队合作关系,反过来&a…

VS 17.5 预览版2:/Gw链接开关的标准一致性改进

/Gw 链接开关可以告诉链接器优化代码中的全局数据,从而减小最终生成的二进制文件的大小。在 Visual Studio 17.5 预览版2中,我们新增了一个新的标志:/Zc:checkGwOdr[-] ,目的是在使用 /Gw 开关的时候改进对 C 标准的一致性支持。 …

表情包也能用 AI 生成?如何借助 AIGC 自定义专属表情包 #Memix

随着我们越来越离不开社交媒体,表情包也已经成为我们日常生活中的必备单品。有着个人鲜明风格的「表情包」,不仅是独特的「社交名片」,也能给人留下耳目一新的印象!谁的收藏夹里没有一堆私藏表情包呢!Memix借助 AI 技术…

画中画怎么制作?教你如何录制画中画视频,图文教学

很多小伙伴在录制视频的时候,都需要录制摄像头,以画中画的方式放置在视频当中。在网上眼花缭乱的录屏软件里,有不少的录屏软件是无法做到画中画视频的。画中画怎么制作?今天小编分享2个录制画中画视频的方法,一起来看看…