full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序

fcde140580c7466f0478842a0bc720c8.png

这是在实现多表关联时想到的。

我们现在这套体系,实现多表关联比较复杂。如果Superset能官方支持多表关联,不知道会是什么样的方案,复杂度如何。


  • 在公式这个层面,没有关联条件,只有两个列、或者多个列,相互之间该如何计算(+-*/)。

->由此可知,在展开公式之前,结果集要先进行join,以保证列计算时,每一行被正确的对齐了。

->查找基础KPI、分组、查询的操作不需要改变。在获取df之后,merge各个df,要提前到展开公式之前。

  • 如果没有定义join条件呢?

join是在结果集层面定义的,两个结果集如何关联起来。

如果查询的结果集是单结果集,完全不影响在公式里引用来自其他结果集的KPI,这个时候是没有join条件的。

--在程序中,要把这种情况当成错误来处理,即,KPI公式中出现的其他KPI,不能来自join定义之外。

->在逐层嵌套的KPI定义体系中,可能存在需要到本层join定义之外,再去下层获取join条件的情况(假设KPI有4层,第1层的join条件,很可能无法把第4层的数据集关联起来)。所以,join条件也需要迭代处理。每一层都需要join操作。

  • 当前的策略是独立查询各个table的数据,关联条件作用在pandas.DataFrame之间,每个DataFrame中可能包含不需要的数据,即,不满足join条件的数据也可能会被加载到DataFrame中。再考虑到每个查询中limit的存在,会有部分满足条件的数据不会出现在join之后的结果集中。

--这个问题没找到完善的解决方案

  • pandas的merge行成一个独立的DataFrame,存在列名重复的可能。

--参见这个讨论:https://stackoverflow.com/questions/19125091/pandas-merge-how-to-avoid-duplicating-columns

--来自两个DataFrame的列如果重名,可以用suffixes函数控制列名加什么后缀。

--https://blog.csdn.net/brucewong0516/article/details/82707492

--所以,这个问题至少是可以解决的。

  • 过滤条件(如果有的话),应该和join一起处理。

细节待定

展开公式的逻辑

->从KPI到换算成列

2019-08-06补充:

  • Context

写二叉树代码的时候,就在想,拼接公式时要不要加一个上下文。

今早模糊想到,的确需要一个上下文(Context)。拼接公式是从叶子节点开始,如果叶子节点是KPI,要查到对应的KPI属于哪个数据集,一旦涉及两个或多个KPI之间的运算,就有可能需要join才能计算,否则,不对齐的行之间运算没有意义。

join之后呢,就需要有个地方保存这个join出来的数据集,而且,还要供公式树上的上一级节点使用。

假设有Dataset_1/Dataset_2/Dataset_3三个数据集。

Dataset_1 : 『KPI_1/KPI_2/KPI_3』

Dataset_2 : 『KPI_4/KPI_5』

Dataset_3 : 『KPI_6/KPI_7』

KPI_2 = KPI_5 + KPI_7

KPI_3 = KPI_6 + KPI_7

对KPI_3来说,KPI_6/KPI_7属于同一个数据集,不需要先join再计算。

对KPI_2来说,KPI_5/KPI_7不属于同一个数据集,需要先join Dataset_2、Dataset_2再计算,否则两个数据集的行没对齐,计算得到的结果没有实际意义。

公式展开的过程,就是计算得到pandas.core.series.Series的过程;同一个数据集的各个KPI即是多个pandas.core.series.Series,数据集是pandas.core.series.Series的集合,也就是一个pandas.DataFrame。

对完全由公式KPI构成的数据集,遍历KPI,展开公式,就是计算Series,保存到DataFrame。即,在查询数据时,一个数据集,和一个DataFrame对应。

把Series加到DataFrame,可以参考:https://stackoverflow.com/questions/12555323/adding-new-column-to-existing-dataframe-in-python-pandas

见joaquin的回答,2017年更新的方法,是调用assign,把Series加入到DataFrame。

2019-08-08补充:如果需要动态命名新增列,可以参考 https://stackoverflow.com/questions/39767718/pandas-assign-with-new-column-name-as-string

23b2a87a7b4223caf8ad88b0ffba8a85.png

--从2019年3月开始重新做Superset二次开发,快五个月了,像是把2017年想要实现但没条件实现的功能,都实现了。是不是又要告一段落了呢?

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

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

相关文章

异构计算助力客户春节webp图片编码

摘要: 背景与挑战 技博客 GigaOM 曾报道:YouTube 的视频略缩图采用 WebP 格式后,网页加载速度提升了 10%;谷歌的 Chrome 网上应用商店采用 WebP 格式图片后,每天可以节省几 TB 的带宽,页面平均加载时间大约…

发动机压缩比怎么计算公式_怎么判断发动机有积碳,发动机积碳多的症状有哪些...

经过时间的积累,积碳作为发动机的通病几乎无处不有,很多车主也对此十分头疼。不过,很多车主小白并不了解车辆积碳是如何产生的,更不知道如何判断发动机是否有积碳,其实发动机积碳多的症状很容易让车主误以为车辆出现其…

Kubernetes之路 1 - Java应用资源限制的迷思

摘要: 随着容器技术的成熟,越来越多的企业客户在企业中选择Docker和Kubernetes作为应用平台的基础。然而在实践过程中,还会遇到很多具体问题。本文分析并解决了Java应用在容器使用过程中关于Heap大小设置的一个常见问题。随着容器技术的成熟&…

你家的饮水机,到底可以有多脏?

戳蓝字“CSDN云计算”关注我们哦!作者 | 胡巍巍出品 | CSDN(ID:CSDNnews)几年前,笔者在一所培训学校工作。因为学生多、学校大,老师也多,自然办公室也多。这种情况下,学校为了省事&a…

java http get_我是如何进入阿里巴巴的-面向春招应届生Java面试指南(九)

基础篇基本功面向对象的特征1.final, finally, finalize 的区别 final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为f…

链表的快慢指针思想的解决

看接下来的一道题目 1、给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 例子:[1,2,3,4,5] 返回中间节点3 [1,2,3,4,5,6] 返回中间节点4 我们该如何做呢,首先这里用到了快慢…

使用Helm 在容器服务k8s集群一键部署wordpress

摘要: Helm 是啥? 微服务和容器化给复杂应用部署与管理带来了极大的挑战。Helm是目前Kubernetes服务编排领域的唯一开源子项目,做为Kubernetes应用的一个包管理工具,可理解为Kubernetes的apt-get / yum,由Deis 公司发起&#xff…

Jupyter Notebook数据科学高效技巧

摘要: 本文有一些关于Jupyter Notebook的干货,希望看完文章可以给你带来收获当我学习有关深度学习的优秀的fast.ai课程时,我学到了很多适用于通用软件工程的干货。我写这篇文章是为了总结这些技巧并与你分享。1.Jupyter Notebook拓展标准的Ju…

格罗方德起诉台积电侵犯16项专利、影响巨大;中兴通讯与印尼Smartfren展开合作;网传FB开发新通讯应用Threads……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 索尼将于9月5日在IFA 2019上…

JS之前台参数提交到后台,双引号转义为解决办法

问题描述 var param $("#searchForm").serializeJson(); 前台封装好了键值对形式的字符串,使用了EasyUI的treeGrid控件,传到后台后,双引号转义为" 解决办法 apache工具包common-lang中有一个很有用的处理字符串的工具类&am…

MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

摘要: 回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术。在云栖社区2017在线技术峰会大数据技术峰会上,阿里云大数据计…

MaxCompute与OSS非结构化数据读写互通(及图像处理实例)

摘要: MaxCompute作为阿里巴巴集团内部绝大多数大数据处理需求的核心计算组件,拥有强大的计算能力,随着集团内外大数据业务的不断扩展,新的数据使用场景也在不断产生。在这样的背景下,MaxCompute(ODPS&…

装mysql最后一步没响应_每天14点遭遇惊魂时刻,如何一步一步揪出真凶?

“ 笔者所在的公司有一款大 DAU(日活)的休闲游戏。这款游戏的后端架构很简单,可以简单理解为通讯-逻辑-存储三层结构。其中存储层大量使用了 Redis 和 MySQL。图片来自 Pexels随着存量用户的增加,Redis 就隔三差五的出现问题。所以笔者打算把遇到的一系列…

form表单提交,后台实体类接收转义问题

问题:前台表单用ajax提交,data为validateForm.serializeArray(),后台用实体类接收参数,&符号被转义为&但是从request中直接取值是没问题的,请问如何解决实体类接收到的参数的转义问题。 代码如下:…

AI落地谁最强?AI Top 30+案例评选等你来秀

人工智能历经百年发展,如今迎来发展的黄金时期。目前,AI 技术已涵盖自然语言处理、模式识别、图像识别、数据挖掘、机器学习等领域的研究,在汽车、金融、教育、医疗、安防、零售、家居、文娱、工业等行业获得了令人印象深刻的成果。在各行业宣…

NAT网关之SNAT进阶使用(二)构建ECS级别SNAT出网方式

摘要: NAT网关是云上VPC ECS访问Internet的出入口。阿里云NAT网关控制台创建SNAT条目默认只支持交换机粒度。如何设置ECS粒度的SNAT规则呢,本文将为您揭晓。 背景 NAT网关是云上VPC ECS访问Internet的出入口。阿里云NAT网关控制台创建SNAT条目默认只支持…

java下载json需要的包_jenkins 获取插件,下载插件提速,配置国内镜像

jenkins 是目前比较流行的自动化运维工具,由于 jenkins 的镜像源是国外的所以在下载插件的时候会非常慢,甚至会超时,所以本文就重点介绍如何解决这个问题。正确的做法自然是修改为国内的镜像源,本文使用的是清华大学的镜像源站 清华大学开源软…

使用NAT网关轻松为单台云服务器设置多个公网IP

摘要: 背景 在应用中,有时会遇到用户询问如何使单台云服务器具备多个公网IP的问题。 具体如何操作呢,有了NAT网关这个也不是难题。 配置单云主机多公网IP功能流程 1、为ECS实例配置多块网卡。 2、创建NAT网关。 背景 在应用中,有时…

如何把手变成手控_手把手教您如何在生产环境直接web级设计图形报表

相信很多从事数据分析的兄弟姐妹,对于数据报表的设计,图形化的设计等等,都是停留在后台进行模板设计,设计好模板后,再上传到前台,发布进行显示,这也是目前绝大多数工具的模式。也难怪&#xff0…

老兵戴辉:华为操作系统28年史

戳蓝字“CSDN云计算”关注我们哦!来源 | 内容来自「最牛博弈」作者 | 老兵戴辉8月9日,东莞松山湖沸腾的一天,华为消费者业务CEO余承东发布了鸿蒙操作系统,中文来自山海经,英文叫HarmonyOS,不是以前传说的Oa…