HybridDB for PG、Greenplum 排序nulls first|last的 SQL写法实现

标签

PostgreSQL , Greenplum


背景

Greenplum并不支持nulls first或last语法,例如:

select * from tbl order by id nulls first;  

select id, last_value(key) over (partition by gid order by crt_time nulls first) from tbl ;

这两句在PostgreSQL可以支持,但是在Greenplum中不支持。

Greenplum实现排序nulls first|last

在PG中支持多列排序,同时支持boolean类型,true 大于 false。

利用这个特性,我们可以在排序时调整字段nulls排在前面还是后面。

select * from tbl order by (id is not null), id;  

相当于  

select * from tbl order by id nulls first;
select * from tbl order by (id is null), id;  

相当于  

select * from tbl order by id nulls last;

这样就能实现nulls first或last了。

postgres=# select (id is null),* from tbl order by (id is null), id;
 ?column? | id
----------+----
 f        |  1
 f        |  2
 f        |  3
 t        |
(4 rows)  

postgres=# select (id is not null),* from tbl order by (id is not null), id;
 ?column? | id
----------+----
 f        |
 t        |  1
 t        |  2
 t        |  3
(4 rows)

窗口函数中使用也一样。

select id, last_value(key) over (partition by gid order by (crt_time is not null), crt_time) from tbl ;

参考

https://discuss.pivotal.io/hc/en-us/articles/205803497-Sorting-ORDER-BY-of-data-which-has-NULL-values

时间: 2024-09-20 05:39:54

HybridDB for PG、Greenplum 排序nulls first|last的 SQL写法实现的相关文章

阿里云HybridDB for PG实践 - 列存储加字段和默认值

标签 PostgreSQL , Greenplum , 相对偏移 , 列存储 , appendonly , AO表 背景 Greenplum的Append only table支持更新.删除.通过什么支持呢?bitmap文件,标记被删除的行. 因此在更新,删除后,数据可能膨胀. 另一方面,列存储每列一个文件,同一行通过偏移对应起来.例如INT8的两个字段,通过偏移很快能找到某一行的A列对应的B列. 接下来谈谈加字段,在加字段时,AO表示不会REWRITE TABLE的.如果AO表以及有一些垃圾(

如何检测、清理Greenplum垃圾 - 阿里云HybridDB for PG最佳实践

标签 PostgreSQL , Greenplum , HDB for PG 背景 Greenplum通过多版本支持数据的删除和更新的并发和回滚,在删除数据时(使用DELETE删除),对记录的头部xmax值进行标记.在删除记录时,对记录的头部进行标记,同时插入新的版本. 这一就会导致一个问题,如果用户经常删除和插入或更新数据,表和索引都会膨胀. PostgreSQL是通过HOT技术以及autovacuum来避免或减少垃圾的.但是Greenplum没有自动回收的worker进程,所以需要人为的触发

HybridDB for PostgreSQL(Greenplum)有哪些内核扩展

HybridDB for PostgreSQL 是基于 Greenplum Database 开源数据库项目开发,由阿里云数据库内核团队深度扩展及优化,到目前为止,我们已经增加了许多功能性能,许多功能走在了社区的前面. OSS_EXT OSS是阿里云对象存储产品,OSS_EXT功能打通了HybridDB for PostgreSQL和OSS数据通道,极大地方便用户将数据并行从OSS导入或导出到OSS,降低了上云门槛,并支持通过gzip进行OSS外部表文件压缩,大量节省存储空间及成本.我们测试的一

阿里云HybridDB for PG实践 - 行存、列存,堆表、AO表的原理和选择

标签 PostgreSQL , Greenplum , 向量计算 , 行存储 , 列存 , AO表 背景 Greenplum支持行存和列存,支持堆表和AO表,那么他们有什么不同,如何选择呢? 行存和列存的原理 1.行存,以行为形式组织存储,一行是一个tuple,存在一起.当需要读取某列时,需要将这列前面的所有列都进行deform,所以访问第一列和访问最后一列的成本实际上是不一样的. 在这篇文档中,有deform的详细介绍.<PostgreSQL 向量化执行插件(瓦片式实现) 10x提速OLAP>

PostgreSQL\HybridDB for PG 毫秒级多维数据透视 案例分享

标签 PostgreSQL , 数据透视 , 实时 , 物化 , 预计算 , 多维分析 , 流计算 , 增量合并 , 调度 , HLL 背景 典型的电商类数据透视业务,透视的语料可能会包含一些用户的标签数据:例如包含品牌的ID,销售区域的ID,品牌对应用户的ID,以及若干用户标签字段,时间字段等. 标签可能会按不同的维度进行归类,例如tag1 性别,tag2 年龄段, tag3 兴趣爱好, .... 业务方较多的需求可能是对自有品牌的用户进行透视,统计不同的销售区域(渠道).时间段.标签维度下的

Greenplum merge insert 用法与性能 (insert on conflict)

标签 PostgreSQL , Greenplum , merge insert , insert on conflict , 合并插入 , 有则更新 , 无则插入 背景 PostgreSQL insert on conflict语法非常强大,支持合并写入(当违反某唯一约束时,冲突则更新,不冲突则写入),同时支持流式计算. 流计算例子链接: <PostgreSQL 流式统计 - insert on conflict 实现 流式 UV(distinct), min, max, avg, sum,

空间|时间|对象 圈人 + 目标人群透视 - 暨PostgreSQL 10与Greenplum的对比和选择

标签 PostgreSQL , PostGIS , geohash , brin , gist索引 , Greenplum , HybridDB for PostgreSQL 背景 通常一个人的常驻地可能会包括:家.儿女家.双方父母家.情人.异性伴侣家.公司.商圈若干等. 通过对这些数据的运营,可以实现很多业务需求.例如: 1.寻人 <海量用户实时定位和圈人 - 团圆社会公益系统(位置寻人\圈人)> 2.线下广告投放人群圈选,选址,商圈人群画像. <数据寻龙点穴(空间聚集分析) - 阿里

Greenplum ao表和heap表垃圾回收的细微差别

标签 PostgreSQL , Greenplum , 垃圾回收 , vacuum 背景 在Greenplum中删除.更新数据记录时,会产生新的tuple版本,老的版本通过行头部标记:为已删除以及被哪个事务删除的. 因此频繁的更新后,或者批量的删除数据后,需要回收那些旧的版本. 通过vacuum.vacuum full.alter table redistribute命令,可以回收垃圾. <如何检测.清理Greenplum垃圾 - 阿里云HybridDB for PG最佳实践> 但是回收AO表

音视图(泛内容)网站透视分析 DB设计 - 阿里云(RDS、HybridDB) for PostgreSQL最佳实践

标签 PostgreSQL , 用户透视 , 设备透视 , 圈人 , 标签 , 视频网站 , 优酷 , 土豆 , 喜马拉雅 背景 日常生活中,人们使用最多的除了社交类网站.购物网站,估计就是音频.视频.图文信息类内容网站了. 视频网站,已经渗透到各种终端,除了喜闻乐见的手机,还包括移动终端.电脑.盒子.电视.投影仪等.有设备属性.会员属性.渠道属性等. 内容运营是非常重要的环节,而透视则是运营的重要武器. 业务需求 1.生成设备.会员画像 ID.各个维度的标签.其中包括一些多值列标签(例如最近7