Flink常用函数

1、比较函数

复制代码
    = <> >  >= <  <=  
        注意:select null=null; 返回为null
    IS NULL 、 IS NOT NULL  
        --非空判断
    value1 IS DISTINCT FROM value2、value1 IS NOT DISTINCT FROM value2、  
        --不同于
    value1 BETWEEN [ ASYMMETRIC | S    OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
        --select null=null  IS UNKNOWN; 返回trueYMMETRIC ] value2 AND value3、value1 NOT BETWEEN [ ASYMMETRIC | SYMMETRIC ] value2 AND value3、 
        --如:select 1 between 0 and 2; 返回true。默认ASYMMETRIC 表示value1在闭区间内 [value2,value3]
    string1 LIKE string2 、string1 NOT LIKE string2 
        --如:select 'abc' like 'a%'; 返回true,用 '用%或_模糊数据'
    string1 SIMILAR TO string2 、string1 NOT SIMILAR TO string2 
        --string2 为正则表达式. 但测试失败 select 'fgh34444' SIMILAR TO  '[a-z][0-9]*'; 返回的false
    value1 IN (value2 [, value3]* )、value1 NOT IN (value2 [, value3]* )、
        -- select 'abc' in ('abc','e','f'); 返回true,要求类型必须一致(都为字符串,或都为)。select 1 in (1,2,3,4); 
    EXISTS (sub-query)、
        --select  EXISTS (select 1); 返回true(自查询至少返回一行时)
    value IN (sub-query)、value NOT IN (sub-query)
        --select 1 in (select 1); 值等于子查询返回的行(只限于一个值),返回true. select 'abc' in (select 'abc'); 
    OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
        --select null=null  IS UNKNOWN; 返回true

2、逻辑函数

复制代码
   OR 、AND、NOT boolean、boolean IS FALSE、boolean IS NOT FALSE、boolean IS TRUE、boolean IS NOT TRUE、boolean IS UNKNOWN、boolean IS NOT UNKNOWN
        --select null=null  IS UNKNOWN; 返回true

3、算术函数

复制代码
   + numeric、- numeric --返回对应的正负数字
    + - * / 
    % 、MOD(numeric1, numeric2) 
        -- select MOD(3,2); 3除以2的余数=1.仅当numeric1为负时结果为负
    POWER(numeric1, numeric2) 
        --select POWER(2,3); 返回2 的 3次幂=8.0
    ABS(numeric) 
        --select ABS(-1); 返回绝对值1
    CEIL(numeric) --向上取整  select CEIL(2.3); 返回3.000000
    FLOOR(numeric) --向下取整 select FLOOR(2.3); 返回2.000000
    ROUND(numeric, integer) 取整
        --select ROUND(2.3,1); 保留1位小数2.30000。
        --select ROUND(2.3,0); 保留0位小数 2.0000
    TRUNCATE(numeric1, integer2) 
        --select TRUNCATE(2.3,1);保留1位小数2.30000  select TRUNCATE(2.3,0) 保留0位小数 2.0000
    RAND() --介于 0.0(含)和 1.0(不含)之间的伪随机双精度值
    RAND(integer) --介于 0.0(含)和 1.0(不含)之间的伪随机双精度值。两个 RAND 函数具有相同的初始种子,它们将返回相同的数字序列。
    RAND_INTEGER(integer) --介于 0(含)和整数(不含)之间的伪随机整数值
     --使用初始种子返回 0(含)和指定值(不含)之间的伪随机整数值
    UUID() --返回 UUID(通用唯一标识符)字符串(例如,"3d3c68f7-f608-473f-b60c-b0c44ad4cc4e")。UUID 是使用加密强的伪随机数生成器生成的。
    BIN(integer) --以二进制格式返回整数的字符串表示形式。如果整数为 NULL,则返回NULL。例如,BIN(4)返回"100"并BIN(12)返回"1100"
    HEX(numeric 或 string) --以十六进制格式返回整数数值或字符串的字符串表示形式

4、字符串函数

复制代码
    string1 || string2  --拼接
        --select 'abc' || 'def'; 返回abcdef
    CHAR_LENGTH(string)  --字符个数
        --select CHAR_LENGTH('abcdef'); 返回 6 
    UPPER(string) --转大写
        --select UPPER('aBc'); 返回 ABC
    LOWER(string) --转小写
        --select LOWER('aBc'); 返回abc
    POSITION(string1 IN string2) --字串位置
        --select POSITION('ab' in 'cdabcds'); 返回3
    TRIM([ BOTH | LEADING | TRAILING ] string1 FROM string2) --默认从两边去除第一个
        --select TRIM('  abc    ' from '  abcdefabc  '); 返回def 。select TRIM('  abc    '); 返回abc  两边的空格都被删除
    LTRIM(string) --去除左边的空格
    RTRIM(string) --去除右边的空格
    REPEAT(string, integer) --重复字符串整数次
        --select REPEAT('ab',3); 返回 ababab
    REGEXP_REPLACE(string1, string2, string3) --将string1中符合正则表达式的 替换为 string3
        --select REGEXP_REPLACE('foobar', 'oo|ar', ''); 返回 fb  
    OVERLAY(string1 PLACING string2 FROM integer1 [ FOR integer2 ]) --将指定位置的字符串替换
        --select OVERLAY('This is an old string' PLACING ' new' FROM 10 FOR 5);  返回 This is a new string  --不含FROM 10
    SUBSTRING(string FROM integer1 [ FOR integer2 ]) --从指定位置截取指定长度的字串
        --select SUBSTRING('This is an old string'FROM 10 FOR 5);  返回 n old   --含FROM 10
    REPLACE(string1, string2, string3) --替换
        --select REPLACE('ababab', 'abab', 'z');  用z替换abab 返回zab
    REGEXP_EXTRACT(string1, string2[, integer]) --?
        --select REGEXP_EXTRACT('foothebar', 'foo(.*?)(bar)', 2); 返回 bar  --正则表达式匹配组索引从 1 开始,0 表示匹配整个正则表达式
    INITCAP(string) --第一个字符转换为大写,其余字符转换为小写
        --select INITCAP('aBc');  返回 Abc
    CONCAT(string1, string2,...) --拼接,如果任何参数为 NULL,则返回 NULL。

    CONCAT_WS(string1, string2, string3,...) --拼接,第一个字符拼接符不为null则不为null
        --select CONCAT_WS('~', 'AA', NULL, 'BB', '', 'CC');会报错 Illegal use of 'NULL'  --但官网说会跳过null
        --select CONCAT_WS('~', 'AA', 'BB', '', 'CC'); 返回"AA~BB~~CC"
    LPAD(string1, integer, string2) --从string1左边填充string2到整数字符的长度。如果string1的长度小于integer,则返回string1缩短为整数字符
        --LPAD('hi',4,'??')返回"??hi";LPAD('hi',1,'??')返回"h"。 
    RPAD(string1, integer, string2) --从右边填充
        --RPAD('hi',4,'??')返回"hi??",RPAD('hi',1,'??')返回"h"
    FROM_BASE64(string) --从string返回 base64 解码的结果;如果字符串为 NULL,则返回NULL。
        --FROM_BASE64('aGVsbG8gd29ybGQ=')返回"hello world"。
    TO_BASE64(string) --从string返回 base64 编码的结果;如果字符串为 NULL,则返回NULL。
        --TO_BASE64('hello world')返回"aGVsbG8gd29ybGQ="。
    ASCII(string) --    返回string的第一个字符的数值
        --ascii('abc')返回 97 (a的ascii码),并ascii(CAST(NULL AS VARCHAR))返回 NULL。
    CHR(integer) --返回二进制等效于integer的 ASCII 字符.如果整数大于 255,我们将先得到整数除以 255的模数,并返回模数的CHR。如果整数为 NULL,则返回NULL。
        --chr(97)返回a,chr(353)返回a
    DECODE(binary, string) ---使用提供的字符集('US-ASCII'、'ISO-8859-1'、'UTF-8'、'UTF-16BE'、'UTF-16LE'、'UTF- 16')
        --报错
    ENCODE(string1, string2); --使用指定
        --select ENCODE('a', 'UTF-8');   --报错
    INSTR(string1, string2)  --返回string2在string1 中第一次出现的位置
        --select INSTR('bcab','a'); 返回3
    LEFT(string, integer) --从左边截取
        --select LEFT('
        abc2awe',2);   返回ab
    RIGHT(string, integer) --从右边截取
        --select RIGHT('abcawe',3); 返回awe 从右边截取3个
    LOCATE(string1, string2[, integer]) --返回string2中string1在位置integer之后第一次出现的位置。如果未找到,则返回 0
        --select LOCATE('abcdefabc','a',3); 返回0 --不符合预期
    PARSE_URL(string1, string2[, string3])
        --select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST'); 返回 facebook.com
    REGEXP(string1, string2) --如果string1 的任何(可能为空)子字符串与 Java 正则表达式string2匹配,则返回 TRUE 
    REVERSE(string) --反转 
        --select REVERSE('abc'); 返回cba 
    SPLIT_INDEX(string1, string2, integer1) --用分割符分割后取第n个字串(从0开始)
        --select SPLIT_INDEX('abc|def|ghi','|',2); 返回ghi 
    STR_TO_MAP(string1[, string2, string3]]) --使用分隔符将string1拆分为键/值对后返回一个映射。string2是对分隔符,默认为 ','。而string3是键值分隔符,默认为 '='
        --select STR_TO_MAP('a=1,b=2,c=3'); 返回 {a=1, b=2, c=3}
        --select STR_TO_MAP('a:1|b:2|c:3','|',':'); 返回  的结果不符合预期   {=, a=null, 1=null, b=nu~
    SUBSTR(string[, integer1[, integer2]]) --返回字符串的子字符串,从位置 integer1 开始,长度为 integer2(默认到末尾)。
        --select substr('abc',1,2); 返回ab

5、时间函数(时间搓单位都是秒)

复制代码
          timeintervalunit时间单位:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,或YEAR。
            select REPLACE('hello world', 'world', 'flink') returns "hello flink"; REPLACE('ababab', 'abab', 'z') returns "zab".
            select CONCAT('AA', 'BB', 'CC') returns "AABBCC";
    DATE_FORMAT(timestamp, string) 此功能存在严重错误,暂时不要使用。
    INTERVAL string range   使用报错
        --select INTERVAL '10 00:00:00.004' DAY TO SECOND;
        --select INTERVAL '1' HOUR;  
        --select INTERVAL '1' MINUTE;
    CURRENT_DATE        UTC 时区 系统日期
        --select CURRENT_DATE; 返回 2021-10-08
    CURRENT_TIME        UTC 时区 系统时间
        --select CURRENT_TIME; 返回 09:25:28.137
    CURRENT_TIMESTAMP  UTC 时区 系统时间搓,TIMESTAMP 类型
        --select CURRENT_TIMESTAMP; 返回 2021-10-08T09:23:15.180  --数据不对,和时区有关系
    LOCALTIMESTAMP 本地时区系统时间, TIMESTAMP 类型
        --select LOCALTIMESTAMP; 返回 2021-10-08T17:19:47.787 --时间对
    LOCALTIME 系统时间字符串(HH:mm:ss)
        --select LOCALTIME; 返回 17:22:16.212
    EXTRACT(timeintervalunit FROM temporal) 取日期中的年/月/日 返回整数
        --select EXTRACT(DAY FROM DATE '2006-06-05'); 返回  日 为 5
        --select EXTRACT(MONTH FROM DATE '2006-06-05'); 返回  月 为 6
        --select EXTRACT(YEAR FROM DATE '2006-06-05'); 返回  年 为 2006
    YEAR(date) 年份
        --select YEAR(TO_DATE('2021-10-08 08:45:17'));  返回2021
    QUARTER(date) 几季度
        --select QUARTER(TO_DATE('2021-10-08 08:45:17'));  返回4
    MONTH(date) 几月
        --select MONTH(TO_DATE('2021-10-08 08:45:17'));  返回 10
    WEEK(date) 几周
        --select WEEK(TO_DATE('2021-10-08 08:45:17'));  返回 40
    DAYOFYEAR(date) 一年中的第几天
        --select DAYOFYEAR(TO_DATE('2021-10-08 08:45:17'));  返回281
    DAYOFMONTH(date) 一月中的第几天
        --select DAYOFMONTH(TO_DATE('2021-10-08 08:45:17')); 返回8
        --select DAYOFMONTH(TO_DATE(FROM_UNIXTIME(1631061917)));  -- 结果:8
        --select DAYOFMONTH(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP()))); --参数为DATE类型  当前时间为月份中的多少号  14号
    DAYOFWEEK(date) 一周中的第几天
        --select DAYOFWEEK(TO_DATE('2021-10-08 08:45:17'));   返回6,实际是5
    HOUR(timestamp) 返回小时数
        --select HOUR(TIMESTAMP '2021-09-08 08:45:17'); 返回 8
    MINUTE(timestamp) 返回分钟数
        --select MINUTE(TIMESTAMP '2021-09-08 08:45:17'); 返回  45
    SECOND(timestamp)  返回秒数
        --select SECOND(TIMESTAMP '2021-09-08 08:45:17'); 返回 17
    FLOOR(timepoint TO timeintervalunit) 向下取整分钟 
        --select FLOOR(TIME '12:44:31' TO MINUTE); 返回 12:44 
    CEIL(timepoint TO timeintervalunit)  向上取整分钟,回合时间点到时间单元timeintervalunit。
        -- select CEIL(TIME '12:44:31' TO MINUTE); 返回 12:45 
    (timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)  由 ( timepoint1 , temporal1 ) 和 ( timepoint2 , temporal2 )定义的两个时间间隔重叠,则返回 TRUE 
        --select (TIME '2:55:00', INTERVAL '1' HOUR) OVERLAPS (TIME '3:30:00', INTERVAL '2' HOUR); 返回true
        --select (TIME '9:00:00', TIME '10:00:00') OVERLAPS (TIME '10:15:00', INTERVAL '3' HOUR); 返回false
    DATE string  日期字符串(yyyy-MM-dd)转为 DATE 类型
        --select Date '2021-09-08'; 返回  2021-09-08
    TIME string  时间字符串转(HH:mm:ss)为 TIME 类型
        --select TIME '08:45:17';  返回 08:45:17 

    TO_DATE(string1[, string2])  将日期时间字符串(yyyy-MM-dd HH:mm:ss)转为 DATE 类型
        --select TO_DATE(FROM_UNIXTIME(1631061917)) 结果为 2021-09-08 ,因 TO_DATE 是转为日
        --select TO_DATE('2021-09-08 08:45:17'); 返回 2021-09-08
    TO_TIMESTAMP(string1[, string2])  将时间字符串转为 TIMESTAMP 类型
        --select TO_TIMESTAMP('2021-09-08 08:45:17','yyyy-MM-dd HH:mm:ss'); 返回 2021-09-08T08:45:17  到秒
        --select TO_TIMESTAMP('2021-09-08 08:45','yyyy-MM-dd HH:mm'); 返回 2021-09-08T08:45  到分钟
    TIMESTAMP string  将时间字符串("yyyy-MM-dd HH:mm:ss[.SSS]"的形式)转为 TIMESTAMP 类型
        --select TIMESTAMP '2021-09-08 08:45:17'; 返回 2021-09-08T08:45:17
    NOW() 系统时间,返回 TIMESTAMP 类型
        --select NOW(); 返回  2021-10-08T08:50:01.486
    UNIX_TIMESTAMP() 系统时间搓,返回整数
        --select UNIX_TIMESTAMP(); 返回 1633680986
    UNIX_TIMESTAMP(string1[, string2]) 返回整数,时间字符串(默认情况下:yyyy-MM-dd HH:mm:ss 如果未指定)转换为 Unix 时间戳(以秒为单位)。
        --select UNIX_TIMESTAMP('2021-09-08 08:45:17','yyyy-MM-dd HH:mm:ss'); 返回 1631061917
    FROM_UNIXTIME(numeric[, string])  将整数转为时间 字符串(默认为 'yyyy-MM-dd HH:mm:ss') 类型
        --select FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyy-MM-dd HH:mm');  返回 2021-10-08 16:28  到分钟
        --select FROM_UNIXTIME(1631061917);    返回 2021-09-08 08:45:17 
        --select FROM_UNIXTIME(UNIX_TIMESTAMP()); 返回当前日期  2021-10-08 16:18:32 
        --select FROM_UNIXTIME(1631061917) >TIMESTAMPADD(MINUTE, -5, NOW());  --结果: false
    TIMESTAMPDIFF(timepointunit, timepoint1, timepoint2)  时间搓差。
        --select TIMESTAMPDIFF(MINUTE,TIMESTAMP FROM_UNIXTIME(place_time/1000),  UNIX_TIMESTAMP())<5  --近5分钟
        --select TIMESTAMPDIFF(MINUTE, TIMESTAMP '2003-01-03 10:10:00', TIMESTAMP '2003-01-03 10:00:00');  --结果为-10  后面-前面的 分钟差.
    TIMESTAMPADD(timeintervalunit, interval, timepoint)   向前/后推时间。timeintervalunit时间单位:SECOND,MINUTE,HOUR,DAY,WEEK,MONTH,QUARTER,或YEAR。
        --select TIMESTAMPADD(MINUTE, -5, NOW()) ;  --当前时间往前推5分钟: 2021-10-08T08:33:48.108   ,但可能因时区原因有显示的时间有差异
        --select TIMESTAMPADD(SECOND, -5, TO_DATE(FROM_UNIXTIME(1631061917)));   --按 天取整后 往前推5秒结果:2021-09-07T23:59:55 .往前推5秒钟  1631061917为 2021-09-08 08:45:17

    CONVERT_TZ(string1, string2, string3) 将日期时间格式字符串 从时区string2转换为时区string3
        --select CONVERT_TZ('1970-01-01 00:00:00', 'UTC', 'America/Los_Angeles');  返回 1969-12-31 16:00:00

6、条件函数

复制代码
    CASE value WHEN value1_1  THEN result1 ELSE resultZ  END   满足某一个值 
        --select CASE 'a' WHEN 'a'  THEN 1 ELSE 0  END;  返回 1 
        --select CASE 'b' WHEN 'a'  THEN 1 ELSE 0  END;  返回 0
    CASE WHEN condition1 THEN result1 ELSE resultZ END  满足某一个条件时
        --select CASE  WHEN 10>5  THEN 1 ELSE 0  END;  返回 1
        --select CASE  WHEN  4>5   THEN 1 ELSE 0  END;  返回 0
    NULLIF(value1, value2)  等值判断:如果value1等于value2则返回 NULL ;否则返回value1。
        --NULLIF(5, 5)返回NULL;NULLIF(5, 0)返回 5。
    COALESCE(value1, value2 [, value3 ]* )  返回第一个不为 NULL 的值
        --select COALESCE(NULL, 5,3); 返回5
    IF(condition, true_value, false_value) 
        --select IF(10>5,1,0); 返回 1
    IS_ALPHA(string)  字符串中的所有字符都是字母,则返回真,否则返回假。
        --select IS_ALPHA('abc'); 返回true
        --select IS_ALPHA('abc1'); 返回false
    IS_DECIMAL(string) 如果string可以解析为有效数字,则返回 true ,否则返回 false。
        --select IS_DECIMAL('123'); 返回true
        --select IS_DECIMAL('abc1'); 返回false
    IS_DIGIT(string) 如果字符串中的所有字符都是数字,则返回真,否则返回假。
        --select IS_DIGIT('123'); 返回true
        --select IS_DIGIT('abc1'); 返回false

7、类型强转函数

复制代码
    CAST(value AS type) 强转
        --select CAST('42' AS INT); 返回 42;
        --select CAST(NULL AS VARCHAR); 返回 VARCHAR 类型的 NULL。

8、集合函数

复制代码
    array [ value1,value2... ] 构建 数组 
    数组名[n]  取数组的第n个元素。索引从 1 开始
        --select arr[2] from (select array [1,4,5] arr)t;  返回 4
        --select array ['a','b','c']; 返回 [a, b, c]
    map [key1,value1,key2,value2]  构建map集合
    集合名[key值] 取key对应的value
        --select  mp[2] from (select map [1,'a',2,'b'] mp)t; 返回 b
        --select map [1,'a',2,'b']; 返回   {1=a, 2=b} 
    CARDINALITY(map) 返回map 中的条目数 。
        --select CARDINALITY(map [1,'a',2,'b']); 返回 2
    CARDINALITY(array) 返回array 中的元素个数。
       select CARDINALITY(array [1,2,3,0,0]); 返回5
    ELEMENT(array) 返回数组的唯一元素(其基数应为 1);如果数组为空,则返回 NULL 。如果数组有多个元素,则抛出异常。
        --select ELEMENT(array [1,2,3,0,0]) ;  --执行失败
        --select ELEMENT(array [2]) ; 返回2

9、值访问函数

复制代码
    tableName.compositeType.field  按名称从 Flink 复合类型(例如,Tuple、POJO)返回字段的值。
    tableName.compositeType.*  返回 Flink 复合类型(例如,Tuple、POJO)的平面表示,将其

10、分组功能

复制代码
    GROUP_ID() 返回唯一标识分组键组合的整数。
    GROUPING(expression1 [, expression2]* )
    GROUPING_ID(expression1 [, expression2]* )
    返回给定分组表达式的位向量。

11、哈希函数

复制代码
    MD5(string) 以 32 个十六进制数字的字符串形式返回string的 MD5 哈希值;如果字符串为 NULL,则返回NULL。
    SHA1(string) 以 40 个十六进制数字的字符串形式返回string的 SHA-1 哈希值;如果字符串为 NULL,则返回NULL。
    SHA224(string) 以 56 个十六进制数字的字符串形式返回string的 SHA-224 哈希值;如果字符串为 NULL,则返回NULL。
    SHA256(string) 以 64 个十六进制数字的字符串形式返回string的 SHA-256 哈希值;如果字符串为 NULL,则返回NULL。
    SHA384(string) 以 96 个十六进制数字的字符串形式返回string的 SHA-384 哈希值;如果字符串为 NULL,则返回NULL。
    SHA512(string) 以 128 个十六进制数字的字符串形式返回string的 SHA-512 哈希值;如果字符串为 NULL,则返回NULL。
    SHA2(string, hashLength) 使用 SHA-2 系列散列函数(SHA-224、SHA-256、SHA-384 或 SHA-512)返回散列。第一个参数字符串是要散列的字符串,第二个参数hashLength是结果的位长(224、256、384或 512)。如果string或hashLength为 NULL,则返回NULL

12、聚合函数

复制代码
    COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*) 默认情况下或使用 ALL,返回表达式不为 NULL的输入行数。对每个值的一个唯一实例使用 DISTINCT。
    COUNT(*) COUNT(1) 返回输入行数。
    AVG([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的平均值(算术平均值)。对每个值的一个唯一实例使用 DISTINCT。
    SUM([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行的表达式总和。对每个值的一个唯一实例使用 DISTINCT。
    MAX([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的最大值。对每个值的一个唯一实例使用 DISTINCT。
    MIN([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的最小值。对每个值的一个唯一实例使用 DISTINCT。
    STDDEV_POP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的总体标准偏差。对每个值的一个唯一实例使用 DISTINCT。
    STDDEV_SAMP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的样本标准偏差。对每个值的一个唯一实例使用 DISTINCT。
    VAR_POP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的总体方差(总体标准差的平方)。对每个值的一个唯一实例使用 DISTINCT。
    VAR_SAMP([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回所有输入行中表达式的样本方差(样本标准差的平方)。对每个值的一个唯一实例使用 DISTINCT。
    COLLECT([ ALL | DISTINCT ] expression) 默认情况下或使用关键字 ALL,返回跨所有输入行的多组表达式。NULL 值将被忽略。对每个值的一个唯一实例使用 DISTINCT。
    VARIANCE([ ALL | DISTINCT ] expression) VAR_SAMP() 的同义词。仅在眨眼规划器中受支持。
    RANK() 返回值在一组值中的排名。结果是 1 加上分区顺序中当前行之前或等于当前行的行数。这些值将在序列中产生间隙。仅在眨眼规划器中受支持。
    DENSE_RANK() 返回值在一组值中的排名。结果是一加先前分配的等级值。与函数 rank 不同,dense_rank 不会在排名序列中产生间隙。仅在眨眼规划器中受支持。
    ROW_NUMBER() 根据窗口分区内行的顺序,为每一行分配一个唯一的序列号,从一开始。
    ROW_NUMBER 和 RANK 相似。ROW_NUMBER 按顺序对所有行进行编号(例如 1、2、3、4、5)。RANK 为平局提供相同的数值(例如 1、2、2、4、5)。仅在眨眼规划器中受支持。
    LEAD(expression [, offset] [, default] ) 返回窗口中当前行之前偏移第 th 行处的expression值。的默认值的偏移是1和默认值默认为NULL。仅在眨眼规划器中受支持。
    LAG(expression [, offset] [, default]) 返回窗口中当前行后偏移第 th 行处的expression值。的默认值的偏移是1和默认值默认为NULL。 仅在眨眼规划器中受支持。
    FIRST_VALUE(expression) 返回一组有序值中的第一个值。 仅在眨眼规划器中受支持。
    LAST_VALUE(expression) 返回一组有序值中的最后一个值。仅在眨眼规划器中受支持。
    LISTAGG(expression [, separator]) 连接字符串表达式的值并在它们之间放置分隔符值。字符串末尾不添加分隔符。分隔符的默认值为","。仅在眨眼规划器中受支持。

51链接:​​​​​​​FlinkSql常用函数_江南独孤客的技术博客_51CTO博客

相关推荐
野犬寒鸦7 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL1 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot