Hologres自V3.1版本起,通过增加hg_spark_funcs扩展包,支持若干Spark兼容函数。本文为您介绍Hologres已兼容的Spark函数及使用用例。
函数 | 功能 |
计算反双曲余弦值。 | |
计算反双曲正弦值。 | |
计算双曲正切值。 | |
判断指定值x是否在指定[min, max]范围内。 | |
计算二进制值。 | |
获取二进制计算后的位数。 | |
进行按位逻辑与(AND)计算。 | |
Bitwise按位逻辑非(NOT)计算。 | |
Bitwise按位逻辑或(OR)计算。 | |
Bitwise按位逻辑异(XOR)计算。 | |
加法计算。该函数在数值溢出时会报错,而不是静默溢出。 | |
除法计算。该函数在数值溢出时会报错,而不是静默溢出。 | |
乘法计算。该函数在数值溢出时会报错,而不是静默溢出。 | |
减法计算。该函数在数值溢出时会报错,而不是静默溢出。 | |
判断参数x是否包含参数y。 | |
将字符串形式的数字从一种进制(源进制)转换为另一种进制(目标进制)。 | |
计算双曲余弦值。 | |
计算CRC32哈希值。 | |
计算余割值。 | |
判断第一个输入参数是否以第二个输入参数结尾。 | |
计算Euler数(自然对数的底)的幂次方减 1,即“exp(x) - 1”。 | |
查找指定字符串在逗号分隔数组字符串中的位置,并返回其从1开始的索引值。 | |
将自UNIX纪元(1970-01-01 00:00:00 UTC)以来的秒数(BIGINT类型)转换为指定的时间格式。 | |
将输入数据转换为16进制格式。 | |
计算两个值平方和的平方根。 | |
判断指定数值是否存在于指定的数组中。 | |
判断数据是否为NAN(Not a Number)。 | |
计算两个字符串之间的LEVENSHTEIN距离(即编辑距离),表示将一个字符串转换为另一个字符串所需的最少单字符编辑操作次数。 | |
计算给指定值以10为底的对数。 | |
计算给指定值加1后的自然对数。 | |
计算给指定值以2为底的对数。 | |
判断指定值是否可能存在于Bloom Filter中。 | |
生成单调递增且唯一的64位整数,但这些整数不连续。 | |
计算参数x除以y的正余数。 | |
计算除法运算中的模数(即余数)。 | |
计算最接近的整数。 | |
正割函数,是三角函数的一种,表示为角度的余弦值的倒数。 | |
计算字符串的SHA-1(Secure Hash Algorithm 1)哈希值,并将结果转换为十六进制字符串。 | |
计算字符串的SHA-2哈希值(SHA-224、SHA-256、SHA-384和SHA-512),并将结果转换为十六进制字符串。 | |
将目标值按位左移。 | |
将目标值按位右移。 | |
计算双曲正弦值 | |
生成字符串的Soundex代码。 | |
判断第一个参数是否以第二个参数开始。 | |
获取字符串中分隔符第n次出现之前的部分。 | |
将十六进制的字符串转换为VARBIT。 | |
取消转义URL的编码值。 | |
通过编码进行转义。 |
安装扩展
在使用Spark函数前,需要Superuser在DB内执行以下语句安装扩展包才可以正常使用。一个DB只需执行一次即可,如果创建新的DB,还需要再次执行如下语句。
CREATE extension hg_spark_funcs;
该扩展只支持建在hg_spark_funcs Schema下,手动指定其他Schema无效。
示例数据
本文Spark函数参数x暂不支持常量入参,下文示例均使用该示例数据。
CREATE TABLE public.spark_test(a INT);
INSERT INTO public.spark_test VALUES (3);
Spark函数
以下函数使用前均添加如下参数,或在函数名前增加“hg_spark_funcs.”前缀。
SET search_path = 'hg_spark_funcs';
关于Spark兼容函数的详细使用方法,请参见Spark Functions。
ACOSH
描述:计算反双曲余弦值。
ACOSH(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT ACOSH(a) FROM public.spark_test;
返回结果如下。
acosh ------------------ 1.762747174039086
ASINH
描述:计算反双曲正弦值。
ASINH(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT ASINH(a) FROM public.spark_test;
返回结果如下。
asinh ------------------ 1.8184464592320668
ATANH
描述:计算双曲正切值。
ATANH(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT ATANH(a) FROM public.spark_test;
返回结果如下。
atanh ------- NaN
BETWEEN
描述:判断指定值x是否在指定[min, max]范围内。
hg_spark_funcs.BETWEEN(x, min, max)
说明由于BETWEEN为Hologres关键字,使用时需增加“hg_spark_funcs.”前缀。
参数说明
x:必填,支持BIGINT类型。
min:必填,指定范围的最小值,支持BIGINT类型。
max:必填,指定范围的最大值,支持BIGINT类型。
返回值说明
返回BOOLEAN类型。若x在指定范围内,则返回t(true);反之,则返回f(false)。
示例
SELECT hg_spark_funcs.BETWEEN(a,2 ,4) FROM public.spark_test;
返回结果如下。
between --------- t
BIN
描述:计算二进制值。
BIN(x)
参数说明
x:必填,支持BIGINT类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT BIN(a) FROM public.spark_test;
返回结果如下。
bin ----- 11
BIT_COUNT
描述:获取二进制计算后的位数。
BIT_COUNT(x)
参数说明
x:必填,支持BIGINT类型。
返回值说明
返回INTEGER类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT BIT_COUNT(a) FROM public.spark_test;
返回结果如下。
bit_count ----------- 2
BITWISE_AND
描述:进行按位逻辑与(AND)计算。
BITWISE_AND(x, y)
参数说明
x和y:必填,支持INTEGER类型。
返回值说明
返回INTEGER类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT BITWISE_AND(a, 2) FROM public.spark_test;
返回结果如下。
bitwise_and ------------- 2
BITWISE_NOT
描述:Bitwise按位逻辑非(NOT)计算。
BITWISE_NOT(x)
参数说明
x:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT BITWISE_NOT(a) FROM public.spark_test;
返回结果如下。
bitwise_not ------------- -4
BITWISE_OR
描述:Bitwise按位逻辑或(OR)计算。
BITWISE_OR(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT BITWISE_OR(a, 2) FROM public.spark_test;
返回结果如下。
bitwise_or ------------ 3
BITWISE_XOR
描述:Bitwise按位逻辑异(XOR)计算。
BITWISE_XOR(x, y)
参数说明
x和y:必填,支持INTEGER类型。
返回值说明
返回INTEGER类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT BITWISE_XOR(a, 2) FROM public.spark_test;
返回结果如下。
bitwise_xor ------------- 1
CHECKED_ADD
描述:加法计算。该函数在数值溢出时会报错,而不是静默溢出。
CHECKED_ADD(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CHECKED_ADD(a, 2147483647) FROM public.spark_test;
返回结果如下。
--部分报错信息如下 ERROR: internal error: Run func: spark_checked_add fails with Exception: VeloxUserError
CHECKED_DIVIDE
描述:除法计算。该函数在数值溢出时会报错,而不是静默溢出。
CHECKED_DIVIDE(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CHECKED_DIVIDE(a, 1/2147483647) FROM public.spark_test;
返回结果如下。
--部分报错信息如下 ERROR: internal error: Run func: spark_checked_divide fails with Exception: VeloxUserError
CHECKED_MULTIPLY
描述:乘法计算。该函数在数值溢出时会报错,而不是静默溢出。
CHECKED_MULTIPLY(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CHECKED_MULTIPLY(a, 2147483647) FROM public.spark_test;
返回结果如下。
--部分报错信息如下 ERROR: internal error: Run func: spark_checked_multiply fails with Exception: VeloxUserError
CHECKED_SUBTRACT
描述:减法计算。该函数在数值溢出时会报错,而不是静默溢出。
CHECKED_SUBTRACT(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CHECKED_SUBTRACT(a, -2147483647) FROM public.spark_test;
返回结果如下。
--部分报错信息如下 ERROR: internal error: Run func: spark_checked_subtract fails with Exception: VeloxUserError
CONTAINS
描述:判断参数x是否包含参数y。
CONTAINS(x, y)
参数说明
x和y:必填,支持TEXT类型。
返回值说明
返回BOOLEAN类型,若x包含y,则返回t(true);反之,则返回f(false)。
示例
SET search_path = 'hg_spark_funcs'; SELECT CONTAINS(a::text, '3') FROM public.spark_test;
返回结果如下。
contains ---------- t
CONV
描述:将字符串形式的数字从一种进制(源进制)转换为另一种进制(目标进制)。
CONV(x, n, m)
参数说明
x:必填,字符串形式的数字,支持TEXT类型。
n:必填,源进制,支持INTEGER类型。
m:必填,目标进制,支持INTEGER类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CONV(a::text, 10, 2) FROM public.spark_test;
返回结果如下。
conv ------ 11
COSH
描述:计算双曲余弦值。
COSH(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT COSH(a) FROM public.spark_test;
返回结果如下。
cosh ------------------ 10.0676619957778
CRC32
描述:计算CRC32哈希值。
CRC32(x)
参数说明
x:必填,支持BYTEA类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CRC32(bin(a)::bytea) FROM public.spark_test;
返回结果如下。
crc32 ------------ 3596227959
CSC
描述:计算余割值。
CSC(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT CSC(a) FROM public.spark_test;
返回结果如下。
csc ------------------ 7.08616739573719
ENDSWITH
描述:判断第一个输入参数是否以第二个输入参数结尾。
ENDSWITH(x, y)
参数说明
x和y:必填,支持TEXT类型。
返回值说明
返回BOOLEAN类型,若参数x是以参数y结尾,则返回t(true);反之,则返回f(false)。
示例
SET search_path = 'hg_spark_funcs'; SELECT ENDSWITH(concat(a, 'hologres'), 'gres') FROM public.spark_test;
返回结果如下。
endswith ---------- t
EXPM1
描述:计算Euler数(自然对数的底)的幂次方减 1,即“exp(x) - 1”。
EXPM1(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT EXPM1(a) FROM public.spark_test;
返回结果如下。
expm1 ------------------ 19.0855369231877
FIND_IN_SET
描述:查找指定字符串在逗号分隔数组字符串中的位置,并返回其从1开始的索引值。
FIND_IN_SET(x, y)
参数说明
x和y:必填,支持类型TEXT类型。
返回值说明
返回INTEGER类型。若未找到指定字符串,则返回0。
示例
SET search_path = 'hg_spark_funcs'; SELECT FIND_IN_SET(a::text, 'a,b,c,2') FROM public.spark_test;
返回结果如下。
find_in_set ------------- 4
FROM_UNIXTIME
描述:将自UNIX纪元(1970-01-01 00:00:00 UTC)以来的秒数(BIGINT类型)转换为指定的时间格式。
FROM_UNIXTIME(x, y)
参数说明
x:必填,秒数,支持BIGINT类型。
y:必填,时间格式,支持TEXT类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT FROM_UNIXTIME(a, 'yyyy-MM-dd HH:mm:ss') FROM public.spark_test;
返回结果如下。
from_unixtime --------------------- 1970-01-01 00:00:03
HEX
描述:将输入数据转换为16进制格式。
HEX(x)
参数说明
x:必填,秒数,支持BIGINT类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT HEX(a) FROM public.spark_test;
返回结果如下。
hex ----- 3
HYPOT
描述:计算两个值平方和的平方根。
HYPOT(x, y)
参数说明
x和y:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT HYPOT(a, 4) FROM public.spark_test;
返回结果如下。
hypot ------- 5
IN
描述:判断指定数值是否存在于指定的数组中。
IN(x, y)
参数说明
x:必填,支持BIGINT类型。
y:必填,目标数组,支持BIGINT类型。
返回值说明
返回BOOLEAN类型。若参数y包含指定参数x,则返回t(true);反之,则返回f(false)。
示例
SELECT hg_spark_funcs.IN(a, ARRAY[2,5,3]) FROM public.spark_test;
返回结果如下。
in ---- t
ISNAN
描述:判断数据是否为NAN(Not a Number)。
ISNAN(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回BOOLEAN类型。若参数x是NAN,则返回t(true);反正,则返回f(false)。
示例
SET search_path = 'hg_spark_funcs'; SELECT ISNAN(a) FROM public.spark_test;
返回结果如下。
isnan ------- f
LEVENSHTEIN
描述:计算两个字符串之间的LEVENSHTEIN距离(即编辑距离),表示将一个字符串转换为另一个字符串所需的最少单字符编辑操作次数。
LEVENSHTEIN(x, y)
参数说明
x和y:必填,支持TEXT类型。
返回值说明
返回INTEGER类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT LEVENSHTEIN(a::text, 'hologres') FROM public.spark_test;
返回结果如下。
levenshtein ------------- 8
LOG10
描述:计算给指定值以10为底的对数。
LOG10(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT LOG10(a) FROM public.spark_test;
返回结果如下。
log10 ------------------- 0.477121254719662
LOG1P
描述:计算给指定值加1后的自然对数。
LOG1P(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT LOG1P(a) FROM public.spark_test;
返回结果如下。
log1p ------------------ 1.38629436111989
LOG2
描述:计算给指定值以2为底的对数。
LOG2(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT LOG2(a) FROM public.spark_test;
返回结果如下。
log2 ------------------ 1.58496250072116
MIGHT_CONTAIN
描述:判断指定值是否可能存在于Bloom Filter中。
MIGHT_CONTAIN(x, y)
参数说明
x:必填,支持BYTEA类型。
y:必填,支持BIGINT类型。
返回值说明
返回BOOLEAN类型。若参数存在于Bloom Filter,则返回t(true);反正,则返回f(false)。
示例
SET search_path = 'hg_spark_funcs'; SELECT MIGHT_CONTAIN(a::text::bytea, 3) FROM public.spark_test;
返回结果如下。
might_contain --------------- f
MONOTONICALLY_INCREASING_ID
描述:生成单调递增且唯一的64位整数,但这些整数不连续。
MONOTONICALLY_INCREASING_ID()
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT MONOTONICALLY_INCREASING_ID() FROM public.spark_test;
返回结果如下。
monotonically_increasing_id ----------------------------- 0
PMOD
描述:计算参数x除以y的正余数。
PMOD(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT PMOD(a, 2) FROM public.spark_test;
返回结果如下。
pmod ------ 1
REMAINDER
描述:计算除法运算中的模数(即余数)。
REMAINDER(x, y)
参数说明
x和y:必填,支持BIGINT类型。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT REMAINDER(a, 2) FROM public.spark_test;
返回结果如下。
remainder ----------- 1
RINT
描述:计算最接近的整数。
RINT(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT RINT(a) FROM public.spark_test;
返回结果如下。
rint ------ 3
SEC
描述:正割函数,是三角函数的一种,表示为角度的余弦值的倒数。
SEC(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SEC(a) FROM public.spark_test;
返回结果如下。
sec ------------------- -1.01010866590799
SHA1
描述:计算字符串的SHA-1(Secure Hash Algorithm 1)哈希值,并将结果转换为十六进制字符串。
SHA1(x)
参数说明
x:必填,支持BYTEA类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SHA1(a::text::bytea) FROM public.spark_test;
返回结果如下。
sha1 ------------------------------------------ 77de68daecd823babbb58edb1c8e14d7106e83bb
SHA2
描述:计算字符串的SHA-2哈希值(SHA-224、SHA-256、SHA-384和SHA-512),并将结果转换为十六进制字符串。
SHA2(x, y)
参数说明
x:必填,支持BYTEA类型。
y:必填,支持INTEGER类型。
返回值说明
返回TEXT类型。
说明不支持的位长度返回NULL。
示例
SET search_path = 'hg_spark_funcs'; SELECT SHA2(a::text::bytea, 3) FROM public.spark_test;
返回结果如下。
sha2 ------ NaN
SHIFTLEFT
描述:将目标值按位左移。
SHIFTLEFT(x, y)
参数说明
x:必填,目标值,支持BIGINT类型。
y:必填,将目标值按位左移的位数,支持INTEGER。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SHIFTLEFT(a, 1) FROM public.spark_test;
返回结果如下。
shiftleft ----------- 6
SHIFTRIGHT
描述:将目标值按位右移。
SHIFTRIGHT(x, y)
参数说明
x:必填,目标值,支持BIGINT类型。
y:必填,将目标值按位右移的位数,支持INTEGER。
返回值说明
返回BIGINT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SHIFTRIGHT(a, 1) FROM public.spark_test;
返回结果如下。
shiftright ------------ 1
SINH
描述:计算双曲正弦值。
SINH(x)
参数说明
x:必填,支持DOUBLE PRECISION类型。
返回值说明
返回DOUBLE PRECISION类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SINH(a) FROM public.spark_test;
返回结果如下。
sinh ------------------ 10.0178749274099
SOUNDEX
描述:生成字符串的Soundex代码。
SOUNDEX(x)
参数说明
x:必填,支持TEXT类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SOUNDEX(concat('holo', a)) FROM public.spark_test;
返回结果如下。
soundex --------- H400
STARTSWITH
描述:判断第一个参数是否以第二个参数开始。
STARTSWITH(x, y)
参数说明
x和y:必填,支持TEXT类型。
返回值说明
返回BOOLEAN类型。若第一个参数是以第二个参数开始,则返回t(true);反之,则返回f(false)。
示例
SET search_path = 'hg_spark_funcs'; SELECT STARTSWITH(concat(a, 'hologres'), 'gres') FROM public.spark_test;
返回结果如下。
startswith ------------ f
SUBSTRING_INDEX
描述:获取字符串中分隔符第n次出现之前的部分。
SUBSTRING_INDEX(x, y, n)
参数说明
x:必填,目标字符,支持TEXT类型。
y:必填,分割字符,支持TEXT类型。
n:必填,分割字符第几次出现,支持INTEGER类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT SUBSTRING_INDEX(concat(a, 'hologres'), 'o', 2) FROM public.spark_test;
返回结果如下。
substring_index ----------------- 3hol
UNHEX
描述:将十六进制的字符串转换为VARBIT。
UNHEX(x)
参数说明
x:必填,支持TEXT类型。
返回值说明
返回TEXT类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT UNHEX(a::text) FROM public.spark_test;
返回结果如下。
unhex ------- \x03
URL_DECODE
描述:取消转义URL的编码值。
URL_DECODE(x)
参数说明
x:必填,支持VARCHAR类型。
返回值说明
返回VARCHAR类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT URL_DECODE(URL_ENCODE(CONCAT('www.','中文',a,'.com'))) FROM public.spark_test;
返回结果如下。
url_decode --------------- www.中文3.com
URL_ENCODE
描述:通过编码进行转义。
URL_ENCODE(x)
参数说明
x:必填,支持VARCHAR类型。
返回值说明
返回VARCHAR类型。
示例
SET search_path = 'hg_spark_funcs'; SELECT URL_ENCODE(CONCAT('www.','中文',a,'.com')) FROM public.spark_test;
返回结果如下。
url_encode ----------------------------- www.%E4%B8%AD%E6%96%873.com