full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序
这是在实现多表关联时想到的。
我们现在这套体系,实现多表关联比较复杂。如果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
--从2019年3月开始重新做Superset二次开发,快五个月了,像是把2017年想要实现但没条件实现的功能,都实现了。是不是又要告一段落了呢?
full join 和full outer join_多表关联:公式展开、join、过滤条件的顺序相关推荐
- full join 和full outer join_带你了解数据库中JOIN的用法
前言 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识! 本章主要介绍数据库中Join的的用法,也是我们在使用数据库时非常基础的一个知识点.本次会介绍数据库 ...
- 一文搞懂两表关联时left join 、 on 以及where条件不同写法对结果的影响--文末有结论
一文搞懂两表关联时left join 与 on 以及where条件不同写法对结果的影响–文末有结论 1.数据准备(建议使用本地mysql) a表: b表: 建表语句: Create EXTERNaL ...
- mysql left outer join_关于mysql中的left join和left outer join的区别
关于mysql中的left join和left outer join的区别 LEFT JOIN是LEFT OUTER JOIN的简写版; 内连接(INNER JOIN) :只连接匹配的行; 左外连接( ...
- mysql join on 索引_连接查询,表关联查询join on,索引,触发器,视图
一.连接查询 1.统计每一个部门的人数 "部门名,部门的人数" select department,count(eid) from employee group by depar ...
- Spark性能调优案例-优化spark估计表大小失败 和 小表关联 走 broadcast join
背景 A任务中关联一张表,该表经过过滤和去重,数据量小于10MB,实际任务耗时较长. B任务关联一张小表,实际任务耗时较长 排查思路 A任务排查 查看spark UIsql界面: 问题1:发现并没有走 ...
- oracle表关联问题 -- full join
关于工作中使用sql进行表关联引发的问题 前言: 是在工作中需要将两个查询结果集关联起来并得到最后的数据. 问题: 我们需要在将两个查询结果集关联起来并得到最后的数据,但是在关联时遇见了一个问题,我们 ...
- 表关联使用INNER JOIN实现更新功能
准备一些数据,创建2张表,表1为学生表: CREATE TABLE [dbo].[Student] ([SNO] INT NOT NULL PRIMARY KEY,[Name] NVARCHAR(10 ...
- sql三个表关联查询LEFT JOIN
SELECT 别名1.字段1,别名1.字段2,别名2.字段1,别名2.字段2,别名3.字段1,别名3.字段2 FROM 表名1AS 别名1 LEFT JOIN 表名2AS 别名2 ON 别名1.字段1 ...
- spark sql优化:小表大表关联优化 union替换or broadcast join
----原语句(运行18min) SELECTbb.ipFROM(SELECTip ,sum(click) click_num,round(sum(click) / sum(imp), 4) user ...
最新文章
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应...
- R语言par函数设置图像个数、边界、颜色等实战
- Qt编写OpenMP程序--HelloWorld
- 前端学习(237):IE条件注释法
- 我恋爱了,对象是纸片人
- Spring(1)-IOC
- 计算机画画作品 人物 游泳,夏天主题的儿童画-游泳的儿童绘画作品
- 【clickhouse】mac 10.15.7使用docker安装clickhouse
- 【三支火把】--- 关于BIOSUEFI查阅资料网站总结
- 时间序列深度学习:状态 LSTM 模型预测太阳黑子(中)
- 如何在windows下用dos进入mysql
- 【POJ 3057】Evacuation【最大流+二分】
- socket学习之电脑手机通信
- windows11虚拟机安装失败解决办法
- 人工神经网络编程内容,神经网络用什么编程
- python数据分布统计_Python 数据可视化:数据分布统计图和热图
- mysql时区作用_一文解决MySQL时区相关问题
- 15数字华容道解法 图解_数字华容道最后一行怎么解 最后一道解答技巧
- html打开无法显示网页怎么回事,Win7打开网页提示“Internet Explorer无法显示该页面”如何解决?...
- js封装QQ音乐api