草庐IT

Multi-join

全部标签

PostgreSQL的查询技巧: 零除, GENERATED STORED, COUNT DISTINCT, JOIN和数组LIKE

零除的处理用NULLIF(col,0)可以避免复杂的WHEN...CASE判断,例如ROUND(COUNT(view_50.amount_in)::NUMERIC/NULLIF(COUNT(view_50.amount_out)::NUMERIC,0),2)ASout_divide_in,使用COLA/NULLIF(COLB,0)后,如果COLB为0,产生的输出就是NULL空数组解析为默认值使用jsonb_array_elements_text()可以将一个JSONB类型的列解析为多行--这是一个和聚合背道而驰的函数,在处理数组时特别有用.但是在使用中,往往需要全局统计,不单单是统计带内容的数

SQL语句中 left join 后用 on 还是 where,区别大了!

前天写SQL时本想通过AleftBjoinonand后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。后来发现joinonand不会过滤结果记录条数,只会根据and后的条件是否显示B表的记录,A表的记录一定会显示。不管and后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。运行sql:select*fromstudentsleftjoinclasscons.classId=c.idorderbys.id 运行sql: select*fromstudentsleftjoinclasscons.classId=c

SQL语句中 left join 后用 on 还是 where,区别大了!

前天写SQL时本想通过AleftBjoinonand后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。后来发现joinonand不会过滤结果记录条数,只会根据and后的条件是否显示B表的记录,A表的记录一定会显示。不管and后面的是A.id=1还是B.id=1,都显示出A表中所有的记录,并关联显示B中对应A表中id为1的记录或者B表中id为1的记录。运行sql:select*fromstudentsleftjoinclasscons.classId=c.idorderbys.id 运行sql: select*fromstudentsleftjoinclasscons.classId=c

从Hash Join的执行计划的细节中能看到点啥

​HASHJOIN是大数据量表连接中最为常用的方式,与最为常用的NESTEDLOOP相比,其应用场景不同。对于两张表的连接,NESTEDLOOP适合于类似查电话号码的应用场景,如果领导给你一张清单,让你去查一下几家企业的电话号码,那么你要做的是找到一本电话号码本,根据公司名称的索引,挨个查一遍,很快就可以完成了。这种方式就是著名的NESTEDLOOP,通过数个快速的循环,完成两个行源的关联操作(待查清单,电话号码簿)。如果这个任务改一下,领导给你的清单上有几万家企业,那么我们还这么一条条的去查,那不傻了。这时候,就不适合用NESTEDLOOP循环了,HASHJOIN是比较快速的解决方法。很多S

从Hash Join的执行计划的细节中能看到点啥

​HASHJOIN是大数据量表连接中最为常用的方式,与最为常用的NESTEDLOOP相比,其应用场景不同。对于两张表的连接,NESTEDLOOP适合于类似查电话号码的应用场景,如果领导给你一张清单,让你去查一下几家企业的电话号码,那么你要做的是找到一本电话号码本,根据公司名称的索引,挨个查一遍,很快就可以完成了。这种方式就是著名的NESTEDLOOP,通过数个快速的循环,完成两个行源的关联操作(待查清单,电话号码簿)。如果这个任务改一下,领导给你的清单上有几万家企业,那么我们还这么一条条的去查,那不傻了。这时候,就不适合用NESTEDLOOP循环了,HASHJOIN是比较快速的解决方法。很多S

探究Presto SQL引擎(2)-浅析Join

在《探究PrestoSQL引擎(1)-巧用Antlr》中,我们介绍了Antlr的基本用法以及如何使用Antlr4实现解析SQL查询CSV数据,更加深入理解Presto查询引擎支持的SQL语法以及实现思路。本次带来的是系列文章的第2篇,本文梳理了Join的原理,以及Join算法在Presto中的实现思路。通过理论和实践的结合,可以在理解原理的基础上,更加深入理解Join算法在OLAP场景下的工程落地技巧,比如火山模型,列式存储,批量处理等思想的应用。一、背景在业务开发中使用数据库,通常会有规范不允许过多表的Join。例如阿里巴巴开发手册中,有如下的规定:【强制】超过三个表禁止Join。需要Joi

探究Presto SQL引擎(2)-浅析Join

在《探究PrestoSQL引擎(1)-巧用Antlr》中,我们介绍了Antlr的基本用法以及如何使用Antlr4实现解析SQL查询CSV数据,更加深入理解Presto查询引擎支持的SQL语法以及实现思路。本次带来的是系列文章的第2篇,本文梳理了Join的原理,以及Join算法在Presto中的实现思路。通过理论和实践的结合,可以在理解原理的基础上,更加深入理解Join算法在OLAP场景下的工程落地技巧,比如火山模型,列式存储,批量处理等思想的应用。一、背景在业务开发中使用数据库,通常会有规范不允许过多表的Join。例如阿里巴巴开发手册中,有如下的规定:【强制】超过三个表禁止Join。需要Joi

2015TPAMI(IMI多维倒排索引)-The Inverted Multi-Index

2012CVPR是本论文的会议版本。本文是乘积量化技术(PQ)最典型的索引方式。1INTRODUCTION乘积量化技术在查询时,需要找到query对应Voronicell或者和周边cell的点,如果数据量比较大,Cell也比较大的话,那么返回的点就会很多,需要花在Refine上的时间也会更多。因此一个迫切的要求是设计更为细粒度的分区,即voroonicell面积更小。一个最直接的方式是把codewords的个数提升一些,但是这同时意味着索引构建时间(学习时间)也更长。一些索引方法也可以引入进来,比如kd-tree,treecodebooks等,但是经常会降低查询准确性。本文提出的方法:多维倒排

2015TPAMI(IMI多维倒排索引)-The Inverted Multi-Index

2012CVPR是本论文的会议版本。本文是乘积量化技术(PQ)最典型的索引方式。1INTRODUCTION乘积量化技术在查询时,需要找到query对应Voronicell或者和周边cell的点,如果数据量比较大,Cell也比较大的话,那么返回的点就会很多,需要花在Refine上的时间也会更多。因此一个迫切的要求是设计更为细粒度的分区,即voroonicell面积更小。一个最直接的方式是把codewords的个数提升一些,但是这同时意味着索引构建时间(学习时间)也更长。一些索引方法也可以引入进来,比如kd-tree,treecodebooks等,但是经常会降低查询准确性。本文提出的方法:多维倒排

Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting

摘要多步(尺度)预测通常包含一个复杂的输入组合——包括静态(即时不变)协变量、已知的未来输入,以及其他仅在过去观察到的外生时间序列——没有任何关于它们如何与目标相互作用的先验信息。几种深度学习方法已经被提出,但它们通常是“黑盒”模型,并不能阐明它们如何使用实际场景中出现的全部输入。在本文中,我们介绍了时间融合变压器(TFT)——一种新的基于注意的架构,它结合了高性能的多步预测和对时间动态的可解释的洞察力。为了学习不同尺度上的时间关系,TFT使用循环层进行局部处理,并使用可解释的自我注意层进行长期依赖。TFT利用专门的组件来选择相关的特性和一系列的门控层来抑制不必要的组件,从而在广泛的场景中实现