FlinkSQL Tips

FlinkSQL使用小技巧总结

1. 分组聚合

create view t1 as
select 1 as id, 'lisi1' as name ,12 as age
UNION ALL
select 1 as id, 'lisi2' as name,11 as age
UNION ALL
select 1 as id, 'lisi3' as name,15 as age
UNION ALL
select 1 as id, 'lisi4' as name,13 as age
UNION ALL
select 1 as id, 'lisi1' as name,10 as age;selectid, COLLECT(name) as c1,STR_TO_MAP(LISTAGG(concat(name,'=',cast(age as string)))) as c2,LISTAGG(name) as c3
from t1 group by id;--结果:
c1 {lisi4=1, lisi3=1, lisi2=1, lisi1=2}
c2 {lisi4=13, lisi3=15, lisi2=11, lisi1=10}
c3  lisi1,lisi2,lisi3,lisi4,lisi1

2.设置时区

SET 'table.local-time-zone' = 'Asia/Shanghai';
SET table.local-time-zone = Asia/Shanghai; --正确写法
select now(),typeof(now())

3.时间比较&时间格式化

sql> create view t1 as
select CAST('2023-12-14 20:41:02' AS TIMESTAMP(0)) AS create_time1,
DATE_FORMAT(CURRENT_TIMESTAMP - INTERVAL '30' DAY, 'yyyy-MM-dd HH:mm:ss') as create_time2
DATE_FORMAT('2023-12-18 21:10:12.234', 'yyyy-MM-dd HH:mm:ss.SSS') as create_time3;-- DATE_FORMAT(timestamp/string, string) 返回值为TIMESTAMP类型
sql> select create_time1, create_time2, create_time1 >= create_time2 as flag from t1
--结果:
create_time1: 2023-12-14 20:41:02.0
create_time2:2023-11-14 20:46:39
flag: true--字符串时间比较
SQL> select '2023-11-25 00:00:01' >= '2023-11-25 00:00:00'
--结果:
true

4.时间函数取值用法

select now(), CURRENT_TIMESTAMP,CURRENT_TIME,CURRENT_DATE,LOCALTIMESTAMP,LOCALTIME,CURRENT_ROW_TIMESTAMP(),UNIX_TIMESTAMP()--结果:
now(): 2023-12-14T12:56:58.293Z
CURRENT_TIMESTAMP: 2023-12-14T12:56:58.293Z
CURRENT_TIME: 20:56:58.293
CURRENT_DATE: 2023-12-14
LOCALTIMESTAMP: 2023-12-14 20:56:58.293
LOCALTIME: 20:56:58.293
CURRENT_ROW_TIMESTAMP(): 2023-12-14T12:57:02.113Z
UNIX_TIMESTAMP(): 1702558622

5.判断字符串不为空的巧妙写法

select select COALESCE(col1,'') <> '' --判断col1不为null和空值

6. last_value:返回一组有序值中的最后一个值。(FIRST_VALUE:返回一组有序值中的第一个值)

create view t1 as
select 1 as id, 'lisi1' as name ,12 as age
UNION ALL
select 1 as id, 'lisi2' as name,11 as age
UNION ALL
select 1 as id, 'lisi1' as name,10 as age
UNION ALL
select 1 as id, 'lisi3' as name,15 as age
UNION ALL
select 1 as id, 'lisi4' as name,13 as age
;
select id,last_value(age),first_value(age),max(age),min(age) from t1 group by id
--结果
last_value(age): 13 --最后一个
first_value(age):12 --第一个
max(age): 15 --最大一个
min(age): 10 --最小一个

7. long毫秒时间戳转时间,TO_TIMESTAMP_LTZ/TO_TIMESTAMP用法

select cast(TO_TIMESTAMP_LTZ(1688435411000,3) as TIMESTAMP(3)), --将long类型时间戳转换能为TIMESTAMP(3)类型
TO_TIMESTAMP_LTZ(1688435411000,3), --将long类型时间戳转换能为TIMESTAMP_LTZ(3)类型
TO_TIMESTAMP('2023-12-18 21:10:12.234', 'yyyy-MM-dd HH:mm:ss.SSS')--将字符串转换为指定格式的时间TIMESTAMP(3)类型--结果:
cast(TO_TIMESTAMP_LTZ(1688435411000,3) as TIMESTAMP(3)): 2023-07-04 09:50:11.0
TO_TIMESTAMP_LTZ(1688435411000,3): 2023-07-04T01:50:11Z
TO_TIMESTAMP('2023-12-18 21:10:12.234', 'yyyy-MM-dd HH:mm:ss.SSS'): 2023-12-18 21:10:12.234

8. 创建临时数据demo

CREATE VIEW tmp AS
SELECT symbol, rowtime,price,tax
FROM(VALUES('ACME',TIMESTAMP '2024-01-11 10:00:00',12,1),('ACME',TIMESTAMP '2024-01-11 10:00:01',17,2),('ACME',TIMESTAMP '2024-01-11 10:00:02',19,1),('ACME',TIMESTAMP '2024-01-11 10:00:03',21,3),('ACME',TIMESTAMP '2024-01-11 10:00:04',25,2),('ACME',TIMESTAMP '2024-01-11 10:00:05',18,1),('ACME',TIMESTAMP '2024-01-11 10:00:06',15,1),('ACME',TIMESTAMP '2024-01-11 10:00:07',14,2),('ACME',TIMESTAMP '2024-01-11 10:00:08',24,2),('ACME',TIMESTAMP '2024-01-11 10:00:09',25,2),('ACME',TIMESTAMP '2024-01-11 10:00:10',19,1))  AS Ticker(symbol, rowtime,price,tax);
select * from tmp

9. 配置MiniBatch 聚合 和Local-Global 聚合,

参考: MiniBatch 聚合

--MiniBatch 聚合
SET table.exec.mini-batch.enabled = true;
SET table.exec.mini-batch.allow-latency = 1s;
SET table.exec.mini-batch.size = 10000;
--Local-Global 聚合
SET table.optimizer.agg-phase-strategy = TWO_PHASE;

10.设置状态,在设计groupby,join等聚合操作,需要保存状态时使用

SET table.exec.state.ttl=86400s; --24 hour,默认: 0 ms
--SET 'table.exec.state.ttl'='86400s'; --24 hour,默认: 0 ms,错误写法
SET table.exec.state.ttl=2592000s; --30 days,默认: 0 ms

11.字符串非空判断

create view t1 as
select 1 as id, 'lisi1' as name ,12 as age
UNION ALL
select 2 as id, '' as name,11 as age
UNION ALL
select 3 as id, '  ' as name,10 as age;selectCAST(IF(name is NUll or TRIM(CAST(name AS STRING)) = '','NAL',name) AS STRING) AS name,id,age
from t1selectid,name,age
from t1
where coalesce(trim(cast(name AS STRING)),'') <> ''

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

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

相关文章

vi, vim,data,wc,系统常用命令-读书笔记(十)

vi 文本编辑器 基本上 vi 共分为三种模式&#xff0c;分别是“一般指令模式”、“编辑模式”与“命令行命令模式”。这三种模式的作用分别是&#xff1a; 一般指令模式&#xff08;command mode&#xff09;以 vi 打开一个文件就直接进入一般指令模式了&#xff08;这是默认的…

CentOS 安装 PHP 7

1. 安装 epel-release 1. 什么是epel 如果既想获得 RHEL 的高质量、高性能、高可靠性&#xff0c;又需要方便易用(关键是免费)的软件包更新功能&#xff0c;那么 Fedora Project 推出的 EPEL(Extra Packages for Enterprise Linux)正好适合你。 EPEL 是由 Fedora 社区打造&a…

yarn的安装与配置(Windows/macOS)

Yarn的安装与配置&#xff08;windows与macOS&#xff09; &#x1fa9f; Windows系统下安装与配置Yarn 步骤一&#xff1a;安装Node.js 访问 Node.js官方网站 下载适合您的Windows系统的最新稳定版安装包。进行默认安装&#xff0c;并确保在安装过程中勾选“Add to PATH”选…

【MySql】 深入理解SQL中的日期处理:NVL和TIMESTAMPDIFF函数的应用

还有多少个十年 能勇敢做热血青年 还有多少个十年 能坚持当初的信念 还有多少个十年 能不忘怀回忆点点 &#x1f3b5; 《还有多少个十年》 在处理数据库时&#xff0c;日期和时间的操作是日常任务中最常见且关键的部分之一。无论是过滤数据、生成报告还是…

Compose 简单组件

文章目录 Compose 简单组件TextText属性使用AnnotatedStringSpanStyleParagraphStyle SelectionContainer 和 DisableSelectionClickableText TextFieldTextField属性使用OutlinedTextFieldBasicTextFieldKeyboardOptions 键盘属性KeyboardActions IME动作 ButtonButton属性使用…

Android隐藏标题栏、移除标题栏

移除&#xff08;隐藏&#xff09;Android标题栏可使用如下代码&#xff1a; public class MainActivity extends AppCompatActivity {protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐藏标题栏&#xff0c;需要置于setContentV…

玩转压力管理,轻松高效编程

程序员缓解工作压力的小窍门 在当今快速发展的科技时代&#xff0c;程序员作为数字世界的建筑师&#xff0c;面临着高强度、高压力的工作环境。为保持工作效率和创新能力&#xff0c;同时也确保身心健康和个人热情的持久续航&#xff0c;采取科学合理的减压策略至关重要。 方…

一二三应用开发平台使用手册——系统管理-用户组-使用说明

概述 在RBAC模型中&#xff0c;资源、角色、用户三个关键元素&#xff0c;构成权限体系。在平台设计和实现的时候&#xff0c;以下几个核心问题思考如下&#xff1a; 角色&#xff0c;单层平铺还是树形结构&#xff1f; 在小型应用中&#xff0c;角色数量有限的情况下&#x…

高级数据结构—树状数组

引入问题&#xff1a; 给出一个长度为n的数组&#xff0c;完成以下两种操作&#xff1a; 1. 将第i个数加上k 2. 输出区间[i,j]内每个数的和 朴素算法&#xff1a; 单点修改&#xff1a;O( 1 ) 区间查询&#xff1a;O( n ) 使用树状数组&#xff1a; 单点修改&#xff1a…

17-软件脉冲宽度调制(SW_PWM)

ESP32-S3的软件脉冲宽度调制&#xff08;SW_PWM&#xff09; 引言 ESP32-S3 LED 控制器LEDC 主要用于控制 LED&#xff0c;也可产生PWM信号用于其他设备的控制。该控制器有 8 路通道&#xff0c;可以产生独立的波形&#xff0c;驱动 RGB LED 等设备。LED PWM 控制器可在无需C…

二叉树相关

二叉树相关 力扣104 二叉树最大深度 普通递归遍历力扣 104 递归遍历2二叉树求前序遍历结果二叉树求 每个节点所在层数与每个节点的左右子树上的节点总数力扣 543 二叉树的直径 力扣104 二叉树最大深度 普通递归遍历 int depth 0;int maxDepth 0;public int maxDepth(TreeNod…

CLion远程调试

一 CLion远程调试 ## 1.1 建立远程连接过程 设置——部署——“”——SFTP——新建服务器名称——输入主机、用户名、密码信息——确定 工具链建立远程主机 设置——工具链——“”——远程主机——凭据新增服务器信息 上传本地代码到服务器 ps:要保证本地文件完整&#…

测试人员一定要避免的这些不专业行为!

软件测试并非一个简单的任务&#xff0c;需要高度的专业性和责任感&#xff0c;本文将探讨一些常见的不专业行为&#xff0c;及其对软件开发过程和产品质量可能产生的负面影响。 1. 忽略细节 在测试过程中忽视细节&#xff0c;导致测试不彻底&#xff0c;漏洞未被发现。 2. …

橡胶衬板在食品与制药领域中的应用

橡胶衬板在食品与制药领域中的应用 随着工业技术的不断进步&#xff0c;橡胶衬板在众多领域中的应用越来越广泛。特别是在食品与制药领域&#xff0c;橡胶衬板以其独特的优势&#xff0c;发挥着不可或缺的作用。本文将探讨橡胶衬板在食品与制药领域中的应用及其重要性。 一、…

K8s: 在Pod里面创建init容器与健康检查

pod中init容器的创建 1 &#xff09;概述 每个 Pod 中可以包含多个容器&#xff0c; 应用运行在这些容器里面同时 Pod 也可以有一个或多个先于应用容器启动的 Init 容器Init 容器与普通的容器非常像&#xff0c;除了如下两点 a. 它们总是运行到完成。b. 每个都必须在下一个启动…

LeetCode42-接雨水

题目&#xff1a; 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 思路:对于每个柱子&#xff08;不包括最左边和最右边的&#xff0c;因为这两根柱子无论如何也装不下水&#xff09;&#xff0c;找出其…

Shell学习 - 2.28 Shell declare -i:将变量声明为整数类型

在《Shell declare命令》一节中&#xff0c;我们已经讲解了 declare 命令的各种选项&#xff0c;为了让 Shell 进行整数运算&#xff0c;本节我们重点讲解-i选项。 默认情况下&#xff0c;Shell 中每一个变量的值都是字符串&#xff08;参见之前的《Shell变量》&#xff09;&am…

从 Android 恢复已删除文件的 3 种简单方法

如何从 Android 恢复已删除的文件&#xff1f;毫不犹豫&#xff0c;有些人可能会认为从 Google 备份恢复 Android 文件太容易了。但是&#xff0c;如果删除的文件未同步到您的帐户或未备份怎么办&#xff1f;您错误的恢复可能会永久删除您想要的数据。因此&#xff0c;我们发布…

常见的软件架构模式

在软件开发过程中&#xff0c;软件架构模式是实现高质量、可扩展系统的关键。本文将介绍一些常见的软件架构模式&#xff0c;分析其优缺点和适用场景&#xff0c;从而帮助大家在实际项目中做出更明智的架构选择&#xff08;注意以下的架构模式相互之间并不一定互斥&#xff0c;…