数据湖计算 DLC 在 统一函数 之外,同时支持 Presto 的内置函数。
注意:说明:
注意:presto 引擎已下线,仅供存量用户使用。
一、途径一:在数据探索对数据引擎进行函数配置
1. 登录 数据湖计算 DLC 控制台,选择服务地域。
2. 进入数据探索,选择数据引擎,当引擎内核为 Presto 时,可在高级配置中选择参数 USEHIVEFUNCTION,将该参数配置为 false 即可在使用该数据引擎进行 SQL 任务时使用 Presto 内置函数。
注意:在当前查询 session,所有使用该数据引擎的查询任务皆可使用 Presto 内置函数。
二、途径二:在 SQL 语句中添加参数
如你希望某个 SQL 任务调用 Presto 内置函数,可通过在 SQL 任务中添加配置信息实现。
示例:
SELECT/*+OPTIONS('useHiveFunction'='false')*/prestofunc(xx)
三、途径三:使用 API 时增加配置参数
在 task 结构体中 config 中设置 kv,useHiveFunction=false。
示例:
Stringstatement="SELECTdate_add('week',3,TIMESTAMP'2001-08-2203:04:05.321')";TasksInfotask=newTasksInfo();task.setTaskType("SQLTask");task.setSQL(Base64.getEncoder().encodeToString(statement.getBytes()));//添加以下参数配置KVPairpair=newKVPair();pair.setKey("useHiveFunction");pair.setValue("false");task.setConfig(newKVPair[]{pair});CreateTasksRequestrequest=newCreateTasksRequest();request.setDatabaseName("");request.setDataEngineName(PRESTO_ENGINE);request.setTasks(task);
参考 API 文档:任务创建。
四、途径四:使用 JDBC 进行任务创建时添加参数
在 JDBCURL 路径中添加 &presto.USEHIVEFUNCTION=true 参数或 info.setProperty("presto.USEHIVEFUNCTION","false");。
Connectionconnection=DriverManager.getConnection("jdbc:dlc:dlc.tencentcloudapi.com?task_type=SQLTask&x省略中间参数xx&presto.USEHIVEFUNCTION=true",info);或者info.setProperty("presto.USEHIVEFUNCTION","false");info.setPropertv("user","");info.setProperty("password","");
五、数学函数
| 函数名称 | 返回值 | 函数功能描述 |
| abs(x) | 与 x 一致 | 返回x的绝对值 |
| cbrt(x) | double | 返回 x 的立方根 |
| ceil(x) | ceiling(x) | 与 x 一致 | 返回 x 向上最接近的整数。例如:ceil(2.2); –>3 |
| cosine_similarity(x, y) | double | 返回向量 x 和 y 的相似度例如:SELECT cosine_similarity(MAP(ARRAY['a'], ARRAY[1.0]), MAP(ARRAY['a'], ARRAY[2.0])); –>1.0 |
| degrees(x) | double | 将弧度转换为角度 |
| e() | double | 返回常数 e |
| exp(x) | double | 返回 e 的x次方 |
| floor(x) | 与 x 一致 | 返回 x 向下最接近的整数。例如:floor(2.2); –>2 |
| ln(x) | double | 返回x的自然对数 |
| log2(x) | double | 返回以 2 为底的 x 的对数 |
| log10(x) | double | 返回以 10 为底的 x 的对数 |
| mod(n, m) | 与 n 一致 | 返回 n 除以 m 的余数 |
| pi() | double | 返回常数Pi |
| pow(x, p) | power(x, p) | double | 返回 x 的 p 次幂 |
| radians(x) | double | 将角度x(以度为单位)转换为弧度 |
| rand() | random() | double | 返回 0.0 <= x < 1.0 范围内的随机值。 |
| random(n) | 与 n 一致 | 返回介于 0 和 n (不包含n)之间的随机数 |
| secure_rand() | secure_random() | double | 返回0.0 <= x < 1.0范围内的加密随机值 |
| secure_random(lower, upper) | 与 lower 一致 | 返回范围为 lower <= x < upper 的加密随机值,其中lower < upper |
| round(x) | 与 x 一致 | 返回x四舍五入到最接近的整数 |
| round(x, d) | 与 x 一致 | 返回x四舍五入到小数点后 d 位 |
| sign(x) | 与 x 一致 | 返回 x 所对应的正负号,x > 0 返回1;x< 0,返回-1;x=0, 返回 0 |
| sqrt(x) | double | 返回 x 的平方根 |
| truncate(x) | bigint | 返回截取小数点后的数例如:truncate(4.9) –>4 |
| truncate(x, n) | double | 返回 x 截取小数点后n位。n<0时,从小数点左边截取例如:truncate( 12.333, -1) –> 10.0;truncate( 12.333,0) –> 12.0;truncate( 12.333,1) –> 12.3; |
六、二进制函数
| 函数名称 | 返回值 | 函数功能描述 |
| length(b) | bigint | 以字节为单位,返回 b 的二进制长度 |
| concat(b1, …, bN) | varbinary | 返回连接b1,…,bN的二进制值 |
| substr(b, start) | varbinary | 返回从 b 中 start 位开始截取二进制值,start > 0 时从开头截取,star t< 0 时从末尾开始截取 |
| substr(b, start, length) | varbinary | 返回从 b 中 start 位开始截取 length 长度 的二进制值,start > 0 时从开头截取,star t< 0 时从末尾开始截取 |
| to_base64(b) | varchar | 将二进制数据 b 转为 base64 字符串 |
| from_base64(string) | varbinary | 将 base64 编码的字符串转为二进制数据 |
| to_base64url(b) | varchar | 使用URL安全字符,将二进制数据 b 转为 base64 字符串 |
| from_base64url(string) | varbinary | 使用URL安全字符,将 base64 编码的字符串转为二进制数据 |
| from_base32(string) | varbinary | 将 base32 编码的字符串转为二进制数据 |
| to_base32(b) | varchar | 将二进制数据 b 转为 base32 字符串 |
| to_hex(b) | varchar | 将二进制数据 b 转为16进制字符串 |
| from_hex(string) | varbinary | 将 16进制编码的字符串转为二进制数据 |
| lpad(b, size, padb) | varbinary | 返回在 b 的左边拼接 padb ,直到长度达到 size的二进制数 |
| rpad(b, size, padb) | varbinary | 返回在 b 的右边拼接 padb ,直到长度达到 size的二进制数 |
| crc32(b) | bigint | 使用CRC32算法计算表达式的循环冗余校验值 |
| md5(b) | varbinary | 计算二进制 b 的 md5 值 |
| sha1(b) | varbinary | 计算二进制 b 的 sha1 值 |
| sha256(b) | varbinary | 计算二进制 b 的 sha256 值 |
| sha512(b) | varbinary | 计算二进制 b 的 sha512 值 |
| xxhash64(b) | varbinary | 计算二进制 b 的 xxhash64 值 |
七、位运算函数
| 函数名称 | 返回值 | 函数功能描述 |
| bit_count(x, bits) | bigint | 返回 bit 在 x 中的位数 |
| bitwise_and(x, y) | bigint | 返回 x , y 的与 |
| bitwise_not(x) | bigint | 返回 x 的按位取反 |
| bitwise_or(x, y) | bigint | 返回 x, y的或 |
| bitwise_xor(x, y) | bigint | 返回 x, y的异或 |
| bitwise_left_shift(value, shift) | 与输入一致 | 返回 value 的左移动 shift 位的值例如:bitwise_left_shift(TINYINT '7', 2) –> 28 |
| bitwise_right_shift(value, shift) | 与输入一致 | 返回 value 的右移动 shift 位的值例如:bitwise_right_shift(TINYINT '7', 2) –>1 |
八、字符串函数
| 函数名称 | 返回值 | 函数功能描述 |
| chr(n) | varchar | 返回 n 的 Unicode 字符 |
| codepoint(string) | integer | 返回字符串的Unicode值例如:codepoint('0') –>48 |
| concat(string1, …, stringN) | varchar | 返回 string1,….,stringN的连接字符串 |
| length(string) | bigint | 返回字符串的长度 |
| hamming_distance(string1, string2) | bigint | 返回两个(相同长度)字符串对应位置的不同字符的数量例如:hamming_distance(abc, art) –>2 |
| levenshtein_distance(string1, string2) | bigint | 返回两个字串之间,由一个转成另一个所需的最少编辑(插入、删除、替换)的次数例如: levenshtein_distance('ab', 'abcde') –>3 |
| lower(string) | varchar | 返回string转为小写后的字符串 |
| upper(string) | varchar | 返回string转为大写后的字符串 |
| ltrim(string) | varchar | 从字符串中删除左边空格 |
| rtrim(string) | varchar | 返回从字符串中删除后面空格 |
| trim(string) | varchar | 返回删除字符串中的空格的字符串 |
| replace(string, search) | varchar | 从字符串中删除所有search字符 |
| replace(string, search, replace) | varchar | 用 replace 字符串替换 search 字符串例如:replace('abcavc', ‘a', ‘c') –>'cbccvc' |
| reverse(string) | varchar | 返回字符的反向排列例如:reverse('abc') –>'cba' |
| lpad(string, size, padstring) | varchar | 在 string 的左边拼接 padstring,直到字符串长度达到size。如果有size小于 string,则将string剪切为长度size的字符串。 |
| rpad(string, size, padstring) | varchar | 在 string 的右边拼接 padstring,直到字符串长度达到达到size。如果有size小于 string,则将string剪切为长度size的字符串。 |
| split(string, delimiter) | array | 返回 delimiter 分割字符串后的一个数组 |
| split(string, delimiter, limit) | array | 返回 delimiter 分割字符串后按 limit 大小限制的数组,limit > 0,数组最后一个元素包含字符串中的所有剩余内容例如:select split('ab-cd-efg', '-', 2) –>['ab','cd-efg'] |
| split_part(string, delimiter, index) | varchar | 返回 delimiter 分割字符串后的数组中,index 位置的字符串,字段索引从 1 开始。如果 index >数组长度,则返回 null例如:select split_part('ab-cd-efg', '-', 2) –>'cd' |
| split_to_map(string, entryDelimiter, keyValueDelimiter) | map<varchar, varchar> | 返回 entryDelimiter 和 keyValueDelimiter 拆分字符串后的map例如:select split_to_map('a:1,b:2', ',', ':') –>{'a':'1','b':'2'} |
| split_to_map(string, entryDelimiter, keyValueDelimiter, function(K, V1, V2, R)) | map<varchar, varchar> | 返回 entryDelimiter 和 keyValueDelimiter 拆分字符串后的map,如果有重复key,则根据function指定的规则返回key对应的value例如:split_to_map('a:1,b:2;a:3',‘,' , ':’, (k, v1, v2) -> v1)–>{'a':'1','b':'2'} |
| substr(string, start) | varchar | 返回字符串 string 中 start 位置之后的字符串。位置从1开始, start <0时,从字符串末尾开始计数 |
| substr(string, start, length) | varchar | 返回字符串 string 中 start 位置开始 length 长度的字符串。位置从1开始, start <0时,从字符串末尾开始计数 |
| position(substring IN string) | bigint | 返回string中substring的第一个出现的位置。位置从1开始。如果未找到,则返回0 |
| strpos(string, substring) | bigint | 返回string中substring的从左向右第一次出现的位置。位置从1开始。如果未找到,则返回0。例如:strpos('abcdefg', 'a') –>1 |
| strpos(string, substring, instance) | bigint | 返回string中substring的从左向右第 instance 次出现的位置。instance >0 , 位置从1开始。如果未找到,则返回0。例如:strpos('abcaefg', 'ab',2) –>0 |
| strrpos(string, substring) | bigint | 返回string中substring的从右向左第一次出现的位置。位置从1开始。如果未找到,则返回0例如:strpos('abcdefg', 'a') –>7 |
| strrpos(string, substring, instance) | bigint | 返回string中substring的从右向左第 instance 次出现的位置。instance >0 , 位置从1开始。如果未找到,则返回0。例如:strpos('abcaefg', 'a',2) –>0 |
| to_utf8(string) | varbinary | 将字符串转为utf8编码的二进制数 |
| from_utf8(binary) | varchar | 将二进制数转为utf8编码的字符串,无效字符用Unicode字符U+FFFD替换 |
| from_utf8(binary, replace) | varchar | 将二进制数转为utf8编码的字符串,无效字符用replace替换 |
九、日期时间函数
| 函数名称 | 返回值 | 函数功能描述 |
| current_date | date | 返回当前日期 |
| current_time | time | 返回当前带时区的时间 |
| current_timestamp | timestamp | 返回当前带时区的时间戳 |
| current_timezone() | varchar | 返回当前时区 |
| date(x) | date | 返回当前日期 |
| last_day_of_month(x) | date | 返回本月的最后一天 |
| from_unixtime(unixtime) | timestamp | 返回 unix 时间戳例如:from_unixtime(1475996660) –>2016-10-09 15:04:20.000 |
| to_unixtime(timestamp) | double | 返回 timestamp 的 unix时间戳 |
| from_unixtime(unixtime, string) | timestamp | 返回 unixtime的时间戳,string指定时区例如:from_unixtime(1617256617,'Asia/Shanghai') –>2021-04-01 13:56:57.000 Asia/Shanghai |
| from_iso8601_timestamp(string) | timestamp | 以 iso8601 格式将 string 转为时间戳 |
| from_iso8601_date(string) | date | 以 iso8601 格式将 string 转为日期 |
| localtime | time | 返回当前时间 |
| localtimestamp | timestamp | 返回当前时间的时间戳 |
| now() | timestamp | 返回当前带时区的时间戳 |
| to_iso8601(x) | varchar | 返回 x 的iso8601 格式的字符串,x 可以为日期、时间戳或带时区的时间戳 |
| date_trunc(unit, x) | 与输入一致 | 返回 以unit为单位截取x的时间,unit 为 second、minute、hour、day、week、month、quarter、year.例如:date_trunc('hour', TIMESTAMP '2020-03-17 02:09:30') –> '2020-03-17 02:00:00' |
| date_add(unit, value, timestamp) | 与输入一致 | 返回 加减相应单位的间隔时间 算出新的时间戳, value >0 表示加,value < 0 表示减.unit 为 millisecond、second、minute、hour、day、week、month、quarter、year.例如:date_add('hour', 2, cast ('2023-07-20 20:22:22.022' as timestamp)) –>'2023-07-20 22:22:22.022' |
| date_diff(unit, timestamp1, timestamp2) | bigint | 返回两个时间戳相差(指定单位的)时间。unit 为 millisecond、second、minute、hour、day、week、month、quarter、year.例如:date_diff('hour', cast ('2023-07-01 22:22:22' as timestamp) , cast ('2023-07-03 22:22:22' as timestamp) )–>48 |
| extract(field FROM x) | bigint | 返回根据field 提取 x的时间,field可以为:year、quarter、month、week、day、dow、doy、yow、hour、minute、second、timezone_hour、timezone_minute、day_of_week、day_of_year、day_of_month例如:extract(year from current_date) 2023 |
| day(x) | bigint | 返回 x 是月的第几天 |
| day_of_month(x) | bigint | 返回 x 是月的第几天 |
| day_of_week(x) | bigint | 返回 x 是一周的第几天,范围为1-7 |
| day_of_year(x) | bigint | 返回 x 是年的第几天 |
| dow(x) | bigint | 返回 x 是周的第几天。同 day_of_week(x) |
| doy(x) | bigint | 返回 x 是年的第几天。同 day_of_year(x) |
| hour(x) | bigint | 返回 x 是一天中的第几小时,范围 0-23 |
| millisecond(x) | bigint | 返回 x 是一秒中的第几毫秒 |
| minute(x) | bigint | 返回 x 是一小时中的第几分钟 |
| month(x) | bigint | 返回 x 是一年中的第几个月 |
| quarter(x) | bigint | 返回 x 是一年中的第几季度 |
| second(x) | bigint | 返回 x 是一分钟中的第几秒 |
| week(x) | bigint | 返回 x 是一年中的第几周 |
| week_of_year(x) | bigint | 返回 x 是一年中的第几周 |
| year(x) | bigint | 返回 x 的年份 |
十、数组函数
| 函数名称 | 返回值 | 函数功能描述 |
| array_distinct(x) | array | 从数组中删除重复的值x。 |
| array_intersect(x, y) | array | 返回 x 和 y 的交集中的不重复元素。 |
| array_union(x, y) | array | 返回 x 和 y 的并集中的不重复元素。 |
| array_except(x, y) | array | 返回属于 x 但不属于 y 的不重复元素。(差集) |
| array_join(x, delimiter, null_replacement) | varchar | 使用delimiter连接 x 数组元素并用null_replacement来填充数组里面的空值。null_replacement为可选字符 |
| array_max(x) | x | 返回输入数组的最大值 |
| array_min(x) | x | 返回输入数组的最小值 |
| array_position(x, element) | bigint | 返回数组 x 中第一次出现 element 的位置(数字)(如果未找到,则返回0) |
| array_remove(x, element) | array | 删除数组 x 中和element相同的所有元素 |
| array_sort(x) | array | 返回 x 的排序结果。x的元素必须是可排序的。空元素将放置在返回数组的末尾 |
| array_sort(array(T), function(T, T, int)) | array(T) | 返回 array 根据比较函数function排序的结果例如:array_sort(ARRAY [3, 2, 5, 1, 2], (x, y) -> IF(x < y, 1, IF(x = y, 0, -1))) –>[5, 3, 2, 2, 1] |
| arrays_overlap(x, y) | 布尔值 | 判断数组 x 和 y 是否有任何共同的非空元素 |
| cardinality(x) | bigint | 返回数组的基数(大小) |
| concat(array1,array2,…,arrayN) | array | 连接数组array1,array2,…,arrayN |
| contains(x, element) | 布尔值 | 判断数组 x 是否包含 element |
| element_at(array(E),index) | E | 返回 array数组中 index 位置的元素。如果index> 0,从左向右计数,index < 0, 从右向左计数 |
| filter(array(T), funciton(T, boolean)) | array(T) | 返回用函数function返回true的元素构造的新数组例如:filter( array[5, -6, NULL, 7], x -> x > 0); –> [5, 7] |
| repeat(element,count) | array | 重复元素element的count次数 |
| reverse(x) | array | 返回一个具有相反数组顺序的数组x。 |
| sequence(start, stop, n) | array(bigint ) | 从start 根据步长 n 到 stop 生成一个整数序列,n 为可选项,不填为1。如果start小于等于stop 每次自增1,否则自增 -1 |
| shuffle(x) | array | 打乱数组元素 |
| slice(x, start, length) | array | 返回将 x 数组从start位置开始,切片成长度为length的数组 |
| transform(array(T), function(T, U)) | array(U) | 返回 array数组中的每个元素T经过function后生成U组成的数组例如:transform(array [5, 6], x -> x + 1); — [6, 7] |
十一、JSON函数
| 函数名称 | 返回值 | 函数功能描述 |
| is_json_scalar(json) | boolean | 判断 json是否为 json数字或 json字符串或 true 或 false 或 null例如: is_json_scalar('[1, 2, 3]') –>false |
| json_array_contains(json, value) | boolean | 判断 value 是否存在于 json(一个包含 json数组的字符串)中。例如:json_array_contains('[1, 2, 3]', 2) –>true |
| json_array_length(json) | bigint | 返回 json(一个包含 json数组的字符串)的数组长度。例如:json_array_length('[1, 2, 3]') –> 3 |
| json_extract(json, json_path) | json | 在 json(一个包含 json的字符串)上计算类似 JSONPath 的表达式 json_path,并将结果作为 json返回。例如:json_extract('{"log":{"file":{"path":"/etc/nginx/logs/access.log"},"offset":19991212}}', '$.log.file.path')–> "/etc/nginx/logs/access.log" |
| json_extract_scalar(json, json_path) | varchar | 与 json_extract() 类似,但将结果值作为字符串返回,而不是json串。json_path 所引用的值必须是布尔值、数字或字符串。例如:json_extract_scalar('{"log":{"file":{"path":"/etc/nginx/logs/access.log"},"offset":19991212}}', '$.log.file.path') –>/etc/nginx/logs/access.log |
| json_format(json) | varchar | 返回从输入的 json值序列化的 json文本。这是 json_parse() 的逆函数。例如:json_format(JSON '[1, 2, 3]') –>[1,2,3] |
| json_parse(string) | json | 返回从输入的 json文本反序列化的 json值。这是 json_format() 的逆函数。例如:json_parse('[1, 2, 3]') –>[1,2,3] |
| json_size(json, json_path) | bigint | 与 json_extract() 类似,但返回值的大小。对于对象或数组,大小是成员的数量,标量值的大小是零。例如:json_size('{"x": [1, 2, 3]}', '$.x') –>3 |
十二、聚合函数
| 函数名称 | 返回值 | 函数功能描述 |
| arbitrary(x) | 与输入一致 | 如果存在,则返回x的任意非空值 |
| array_agg(x) | array[x] | 返回由输入x元素创建的数组 |
| avg(x) | double | 返回所有输入值的平均值(算术平均值) |
| bool_and(boolean) | every(boolean) | boolean | 输入的每个值都为true,则返回true,否则返回false |
| bool_or(boolean) | boolean | 输入的值只要有一个为true,则返回true,否则返回false |
| checksum(x) | varbinary | 返回输入值的校验和 |
| count(*) | bigint | 返回行数 |
| count(x) | bigint | 返回非空输入值的数量 |
| count_if(x) | bigint | 返回输入值中为true值的数量,等价于count(CASE WHEN x THEN 1 END) |
| geometric_mean(x) | double | 返回几何平均值 |
| max_by(x, y) | 与输入 x 一致 | 返回 x 中与 y 的最大值相关连的值 |
| max_by(x, y, n) | array[x] | 按照y降序排列,返回 x 中 n 个 与 y 中 n 个最小值相关联的值 |
| min_by(x, y) | 与输入 x 一致 | 返回 x 中与 y 的最小值相关连的值 |
| min_by(x, y, n) | array[x] | 按照 y 升序排列,返回 x 中 n 个 与 y 中 n 个最小值相关联的值 |
| max(x) | 与输入一致 | 返回输入中的最大值 |
| max(x, n) | 与输入 x 一致 | 返回输入中最大的 n 个值 |
| min(x) | 与输入一致 | 返回输入中的最小值 |
| min(x, n) | 与输入 x 一致 | 返回输入中最小的 n 个值 |
| set_agg(x) | 与输入一致 | 返回一个不重复元素的数组 |
| set_union(array(T)) | array(T) | 返回输入的每个数组中包含的所有不同值的数组例如:select set_union(elements) FROM (VALUES ARRAY[1, 2, 3], ARRAY[2, 3, 4]) AS t(elements) –>ARRAY[1, 2, 3, 4] |
| sum(x) | 与输入一致 | 返回和 |
| bitwise_and_agg(x) | bigint | 返回所有位的与 |
| bitwise_or_agg(x) | bigint | 返回所有位的或 |
| histogram(x) | | 返回一个包含每个输入值出现次数的map |
| map_agg(key, value) | map(K, V) | 返回key-value组成的map |
| map_union(x(K, V)) | map(K, V) | 返回所有输入映射的并集,如果一个key对应多个value,则结果集中key对应的value值为多个value中的任意一个value值 |
| map_union_sum(x(K, V)) | map(K, V) | 返回相同key求和后的并集map,如果key对应的value为空,则计为0 |
| multimap_agg(key, value) | | 返回 key-value组成的map,key可以对应多个值 |
十三、窗口函数
| 函数名称 | 返回值 | 函数功能描述 |
| row_number() | bigint | 为每一行分配一个唯一的连续编号 |
| rank() | bigint | 计算某个值在一组值中的排名。如果出现排名相等,则在排名序列中留出空位。 |
| percent_rank() | double | 计算某个值在一组值中的百分比排名。返回值以 0 到 1 之间的小数表示。 |
| dense_rank() | bigint | 计算某个值在一组值中的排名,如果出现排名相等,与函数rank不同,dense_rank不会在排名序列中产生空位。 |
| cume_dist() | bigint | 计算某个值在分区中相对于所有值的位置。 |
| ntile(n) | bigint | 将窗口分区的行划分为 n 个桶,返回行所在的桶数,范围从 1 到 n |
| first_value(x) | 与输入一致 | 返回分区中某列第一条数据的值 |
| last_value(x) | 与输入一致 | 返回分区中某列最后一条数据的值 |
| nth_value(x, n) | 与输入一致 | 返回距窗口头第 n 行的值。n 从 1 开始。如果ignoreNulls=true,查找第 n 行时将跳过 null。否则,每一行都计入 n。如果不存在这样的第 n 行(例如,当 n 为10时,窗口大小小于10),则返回null。第一个参数为列名,第二个参数为之前第 n 行。 |
| lead(x[, n[, default_value]]) | 与输入一致 | 返回窗口中当前行向下第 n 行的值。n 默认值为 1,default 默认值为 null。如果第 n 行的 值为 null,则返回 null。如果不存在这样的偏移行(例如,当偏移量为1时,窗口的最后一行没有任何向下行),则返回 default 。第一个参数为列名,第二个参数为之前第 n 行,第三个参数为默认值。 |
| lag(x[, n[, default_value]]) | 与输入一致 | 返回窗口中当前行向上第 n 行的值。n 默认值为 1,default 默认值为 null。如果第 n 行的 值为 null,则返回 null。如果不存在这样的偏移行(例如,当偏移量为1时,窗口的第一行没有任何向上行),则返回 default。第一个参数为列名,第二个参数为之前第 n 行,第三个参数为默认值。 |
十四、网址函数
| 函数名称 | 返回值 | 函数功能描述 |
| url_extract_host(url) | varchar | 返回 ur 的主机 |
| url_extract_parameter(url, name) | varchar | 返回 url 中 name 的第一个值,按照RFC 1866#section-8.2.1查找 |
| url_extract_path(url) | varchar | 返回 url 的路径 |
| url_extract_port(url) | bigint | 返回 url 的端口 |
| url_extract_protocol(url) | varchar | 返回 url 的协议 |
| url_extract_query(url) | varchar | 返回 url 的查询字符串 |
| url_encode(value) | varchar | 对 value 进行 encode 编码 |
| url_decode(value) | varchar | 对 encode 编码 的url 解码 |
十五、其他函数
| 函数名称 | 返回值 | 函数功能描述 |
| uuid ( ) | uuid | 返回一个随机生成的UUID |
| cast(value AS type) | type | 将 value 强制转为 type 类型 |
| try_cast(value AS type) | type | 将 value 转成 type 类型,如果失败返回 null |
| typeof(expr) | varchar | 返回 expr 的类型名称例如: typeof(cos(2) + 1.5) –>double |
| regexp_extract(string, pattern) | varchar | 返回 string 中正则表达式 pattern 匹配的第一个子字符串例如:regexp_extract('1a 2b 14m', '\\d+') ->1 |
| regexp_replace(string, pattern) | varchar | 从 string 中移除正则表达式 pattern 匹配的子字符串例如:regexp_replace('1a 2b 14m', '\\d+[ab] ') –> '14m' |
| regexp_split(string, pattern) | | 使用正则表达式 pattern 拆分字符串并返回一个数组,保留后面的空字符串例如:regexp_split('1a 2b 14m', '\\s*[a-z]+\\s*'); — [1, 2, 14, ] |
| regexp_like(string, pattern) | boolean | 判断 string 中是否有 pattern 匹配的字符串 |