Postgres的级数生成函数generate_series应用

Postgres的级数生成函数generate_series应用

引用:http://postgres.cn/docs/12/functions-srf.html

函数文档

级数生成函数

函数	参数类型	返回类型	描述
generate_series(start, stop)	int、bigint或者numeric	setof int、setof bigint或者setof numeric(与参数类型相同)	产生一系列值,从start到stop,步长为 1
generate_series(start, stop, step)	int、bigint或者numeric	setof int、setof bigint或者setof numeric(与参数类型相同)	产生一系列值,从start到stop,步长为step
generate_series(start, stop, step interval)	timestamp或timestamp with time zone	setof timestamp或setof timestamp with time zone(和参数类型相同)	产生一系列值,从start到stop,步长为step

当step为正时,如果start大于stop则返回零行。相反,当step为负时,如果start小于stop则返回零行。对于NULL输入也会返回零行。step为零是一个错误。

案例

SELECT * FROM generate_series(2,4);
 generate_series
-----------------
               2
               3
               4
(3 rows)

SELECT * FROM generate_series(5,1,-2);
 generate_series
-----------------
               5
               3
               1
(3 rows)

SELECT * FROM generate_series(4,3);
 generate_series
-----------------
(0 rows)

SELECT generate_series(1.1, 4, 1.3);
 generate_series 
-----------------
             1.1
             2.4
             3.7
(3 rows)

-- 这个例子依赖于日期+整数操作符
SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a);
   dates
------------
 2004-02-05
 2004-02-12
 2004-02-19
(3 rows)

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, '2008-03-04 12:00', '10 hours');
   generate_series   
---------------------
 2008-03-01 00:00:00
 2008-03-01 10:00:00
 2008-03-01 20:00:00
 2008-03-02 06:00:00
 2008-03-02 16:00:00
 2008-03-03 02:00:00
 2008-03-03 12:00:00
 2008-03-03 22:00:00
 2008-03-04 08:00:00
(9 rows)

应用

上个月做了个大屏项目,系统涉及到很多资源各个层级维度的统计,资源存在于很多不同的数据库或者文件,最低计算粒度是按日统计前一天的数据。

跑任务每日任务和图表查询需求拆分实现。项目实现了在线配置数据源和 SQL 任务,支持动态配置更新的数据源/任务调度/任务SQL。(调度周期通过 cron 表达式定义)。

除了mysql/pg/oracle库,项目还有很多 hive 任务,背后基于 MapReduce 实现调度离线文档分析,由于 hive 任务都比较重,执行时间比较长,并发也是有限制的。

一两百个 hive 任务,为避开集中调度高峰,现打散任务调度时间,每隔5分钟执行一个新任务。

今天的主角,Postgres 的序列数据生成函数generate_series(),就可以帮到忙。

# SELECT 60 * 24 = 1440 分钟

SELECT ('0 ' || (generate_series(0, 1440, 5) % 60) || ' ' || (generate_series(0, 1440, 5) / 60) || ' * * ?') AS cron

0 0 0 * * ?
0 5 0 * * ?
0 10 0 * * ?
0 15 0 * * ?
……
0 55 23 * * ?
0 0 24 * * ?  # 此时间不存在,需要剔除

附录

cron 表达式用来定义定时任务的执行策略,表达式字符串由 6 个空格分为 7 个域,每一个域代表一个时间含义。

[] [] [] [] [] [] []
0 */1 * * * ?  # 每隔1分钟执行一次
0 0 22 * * ?  # 每天22点执行一次
0 0 1 1 * ?  # 每月1号凌晨1点执行一次
0 0 23 L * ?  # 每月最后一天23点执行一次
0 0 3 ? * L  # 每周周六凌晨3点实行一次
0 24,30 * * * ?  # 在24分、30分执行一次

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

公司注册股东选择几个人合适?

创业初期很多创业者都会选择有注册有限责任公司,有限责任由五十个以下的股东出资设立,每个股东以其所认缴的出资额为限对公司承担有限责任。那么问题来了股东人数选择几个最合适呢,下面上海注册公司网(www.91kaiye.cn)…

AMD64内存属性详解

本文参考文档为AMD64 Architecture Programmer’s Manual Volume 2: System Programming,版本号3.41,这不是对原英文文档的翻译,但是所有内容的排版都是根据原手册的排版来的,如有与官方文档冲突的内容,以官方文档为准…

【C++破局】C++内存管理之new与deleted剖析

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:c内存管理部分知识点梳理 👉【C-C入门系列专栏】:博客文章专栏传送门 😄每日一言:花有重开日,人无再少年! 目录 C/C的内存分配机…

向量的点积和外积

参考:https://www.cnblogs.com/gxcdream/p/7597865.html 一、向量的内积(点乘) 定义: 两个向量a与b的内积为 ab |a||b|cos∠(a, b),特别地,0a a0 0;若a,b是非零向量,…

测量直线模组时如何降低误差?

直线模组属于高精度传动零部件,是机械行业中不可或缺的零部件之一,其具有高精度、速度快、使用寿命长等特点;如果直线模组的精度受损,则不能达到预期的使用效果,那么我们测量时应该如何减少误差,确保直线模…

【数据结构】二叉树经典例题---<你真的掌握二叉树了吗?>(第一弹)

一、已知一颗二叉树如下图,试求: (1)该二叉树前序、中序和后序遍历的结果。 (2)该二叉树是否为满二叉树?是否为完全二叉树? (3)将它转换成对应的树或森林。 (4)这颗二叉树的深度为多少? (5)试对该二叉树进行前序线索化。 (6)试对…

Vue3路由配置

目录 ​编辑 一:前言 二:配置路由 1、安装路由 2、创建各文件 1)views 下的 index.vue 文件 2)router 下的 index.ts 3)App.vue 文件修改 4)main.ts 文件修改 3、一些会遇到的报错 1)…

【计算机毕业设计】基于微信小程序实现校园综合服务平台-芒果校园(源码+路演ppt)

项目场景: 这个是之前在准备比赛做的项目,本来拿来去参加的,后面因为一些原因,这个项目被搁置了,今天打开源码 好在还在,但当我打开的时候,接口发生了一些变化,例如 getLocation();…

Doris:多源数据目录(Multi-Catalog)

目录 1.基本概念 2.基本操作 2.1 查看 Catalog 2.2 新增 Catalog 2.3 切换 Catalog 2.4 删除 Catalog 3.元数据更新 3.1手动刷新 3.2定时刷新 3.3自动刷新 4.JDBC Catalog 4.1 上传mysql驱动包 4.2 创建mysql catalog 4.3. 读取mysql数据 1.基本概念 …

【数据结构】顺序表 | 详细讲解

在计算机中主要有两种基本的存储结构用于存放线性表:顺序存储结构和链式存储结构。本篇文章介绍采用顺序存储的结构实现线性表的存储。 顺序存储定义 线性表的顺序存储结构,指的是一段地址连续的存储单元依次存储链性表的数据元素。 线性表的&#xf…

EtherCAT报文-LRW(逻辑寻址读写)抓包分析

0.工具准备 1.EtherCAT主站 2.EtherCAT从站(本文使用步进电机驱动器) 3.Wireshark1.EtherCAT报文帧结构 EtherCAT使用标准的IEEE802.3 Ethernet帧结构,帧类型为0x88A4。EtherCAT数据包括2个字节的数据头和44-1498字节的数据。数据区由一个或多个EtherCAT子报文组成,每个子…

MYSQL操作详解

一)计算机的基本结构 但是实际上,更多的是这种情况: 二)MYSQL中的数据类型: 一)数值类型: 数据类型内存大小(字节)说明bit(M)M指定位数,默认为1单个二进制位值,或者为0或者为1,主要用于开/关标志tinyint1字节1个字节的整数值,支持…

如何将一个 HRESULT 转换为 Win32 错误码?

地球人都知道,可以使用 HRESULT_FROM_WIN32 这个宏将一个 Win32 错误码转换为一个 HRESULT,但是如何将一个 HRESULT 转换为 Win32 错误码呢? 让我们先看看 HRESULT_FROM_WIN32 这个宏的定义: #define HRESULT_FROM_WIN32(x) \ ((…

[LeetCode]-622. 设计循环队列

目录 662. 设计循环队列 题目 思路 代码 662. 设计循环队列 622. 设计循环队列 - 力扣(LeetCode)https://leetcode.cn/problems/design-circular-queue/ 题目 设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO&…

硝烟后的茶歇 | 中睿天下谈攻防演练之邮件攻击溯源实战分享

近日,由中国信息协会信息安全专业委员会、深圳市CIO协会、PCSA安全能力者联盟主办的《硝烟后的茶歇广东站》主题故事会在深圳成功召开。活动已连续举办四年四期,共性智慧逐步形成《年度红蓝攻防系列全景图》、《三化六防“挂图作战”》等共性研究重要成果…

NSF服务器

1.简介 1.1 NFS背景介绍 NFS是一种古老的用于在UNIX/Linux主机之间进行文件共享的协议。它古老到你必须穿着白大补才能接近一台计算机的年代。在那个年代,所有的联网计算机都被认为是可信的,而不像现今这样,任何人都有多种多样方法能连接到你…

视频剪辑技巧:探索画中画视频剪辑,如何制作引人入胜的视觉效果

在视频制作领域,画中画视频剪辑是一种备受瞩目的技术,它可以将多个视频画面叠加在一起,形成一种独特的视觉效果。这种剪辑技巧可以让观众同时看到两个或多个视频片段,创造出一种引人入胜的视觉体验。在开始画中画视频剪辑之前&…

SQL必知会(二)-SQL查询篇(3)-过滤数据

第4课、过滤数据 WHERE&#xff1a;过滤条件 使用 WHERE 子句 指定搜索条件进行过滤。 WHERE 子句操作符 表4-1 WHERE 子句操作符 操作符说明操作符说明等于>大于< >不等于>大于等于!不等于!>不大于<小于BETWEEN在指定的两个值之间<小于等于IS NULL为…

线程活跃性

文章目录 1. 简介2. 死锁3. 活锁4. 饥饿 1. 简介 所谓线程的活跃性&#xff0c;我们知道每个线程所要执行的java代码是有限的&#xff0c;在执行一段时间后线程自然会陷入Terminated状态&#xff0c;但由于某些外部原因导致线程一直执行不完&#xff0c;一直处于活跃状态&…

leetCode 493 翻转对 归并分治 + 图解

493. 翻转对 - 力扣&#xff08;LeetCode&#xff09; 给定一个数组 nums &#xff0c;如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。你需要返回给定数组中的重要翻转对的数量。 求"小和"问题是&#xff0c;当我 j 来到一个位置的…