-
hll_union_agg(hll) 描述:将多个hll类型数据union成一个hll。 返回值类型:hll 示例: 将各组中的hll数据union成一个hll,并计算distinct值。 1
2
3
4
5 SELECT #hll_union_agg(c) as cardinality FROM t_a_c_hll;
cardinality
------------------
496.628982624022
(1 row)
-
hll_add_agg(hll_hashval, int32 log2m, int32 regwidth, int64 expthresh) 描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、regwidth、expthresh。expthresh的取值范围是-1~7之间的整数,该参数可以用来设置从Explicit模式到Sparse模式的阈值大小。-1表示自动模式,0表示跳过Explicit模式,取1~7表示在基数到达 2expthresh时切换模式。 返回值类型:hll 示例: 1
2
3
4
5 SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1, 4)) FROM t_data;
hll_cardinality
------------------
496.628982624022
(1 row)
-
hll_add_agg(hll_hashval, int32 log2m, int32 regwidth, int64 expthresh, int32 sparseon) 描述:把哈希后的数据按照分组放到hll中,依次指定参数log2m、regwidth、expthresh、sparseon。sparseon取值范围为0或者1。 返回值类型:hll 示例: 1
2
3
4
5 SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1, 4, 0)) FROM t_data;
hll_cardinality
------------------
496.628982624022
(1 row)
-
hll_add_agg(hll_hashval) 描述:把哈希后的数据按照分组放到hll中。 返回值类型:hll 示例: 准备数据。 1
2
3
4 CREATE EXTERNAL TABLE t_id(id int) store AS orc;
INSERT INTO t_id SELECT generate_series(1,500);
CREATE EXTERNAL TABLE t_data(a int, c text) store AS orc;
INSERT INTO t_data SELECT mod(id,2), id FROM t_id;
创建表并指定列为varchar(当前不支持 hll 列,因此需要进行显示转换)。 1 CREATE EXTERNAL TABLE t_a_c_hll(a int, c varchar) store AS orc;
根据a列group by对数据分组,把各组数据加到hll中。 1 INSERT INTO t_a_c_hll SELECT a, hll_add_agg(hll_hash_text(c)) FROM t_data GROUP BY a;
得到每组数据中hll的Distinct值。 1
2
3
4
5
6 SELECT a, #c::hll as cardinality FROM t_a_c_hll order by a;
a | cardinality
---+------------------
0 | 250.741759091658
1 | 250.741759091658
(2 rows)
-
hll_add_agg(hll_hashval, int32 log2m) 描述:把哈希后的数据按照分组放到hll中。并指定参数log2m,取值范围为10~16。 返回值类型:hll 示例: 1
2
3
4
5 SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), 10)) FROM t_data;
hll_cardinality
------------------
503.932348927339
(1 row)
-
hll_add_agg(hll_hashval, int32 log2m, int32 regwidth) 描述:把哈希后的数据按照分组放到hll中。依次指定参数log2m,regwidth。 regwidth取值范围为1~5。 返回值类型:hll 示例: 1
2
3
4
5 SELECT hll_cardinality(hll_add_agg(hll_hash_text(c), NULL, 1)) FROM t_data;
hll_cardinality
------------------
496.628982624022
(1 row)
-
date_part date_part函数是在传统的Ingres函数的基础上制作的(该函数等效于SQL标准函数extract): date_part('field', source) 这里的field参数必须是一个字符串,而不是一个名字。有效的field与extract一样,详细信息请参见EXTRACT。 示例: 1
2
3
4
5 SELECT date_part('day', TIMESTAMP '2001-02-16 20:38:40');
date_part
-----------
16
(1 row)
1
2
3
4
5 SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
date_part
-----------
4
(1 row)
-
split(string, delim) 描述:将字符串string按分隔符delimiter进行分隔,并返回数组。该函数仅8.2.0及以上集群版本支持。 返回类型:text[] 示例: 1
2
3
4
5
6
7
8
9
10 SELECT SPLIT('a-b-c-d-e', '-') AS RESULT;
result
-------------
{a,b,c,d,e}
(1 row)
SELECT SPLIT('a-b-c-d-e', '-')[4] AS RESULT;
result
--------
d
(1 row)
-
array_cat(anyarray, anyarray) 描述:连接两个数组,支持多维数组。 返回类型:anyarray 示例: 1
2
3
4
5
6
7
8
9
10
11 SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]) AS RESULT;
result
-------------
{1,2,3,4,5}
(1 row)
SELECT array_cat(ARRAY[[1,2],[4,5]], ARRAY[6,7]) AS RESULT;
result
---------------------
{{1,2},{4,5},{6,7}}
(1 row)
-
array_to_string(anyarray, text [, text]) 描述:使用第一个text作为数组的新分隔符,使用第二个text替换数组值为null的值。 返回类型:text 示例: 1
2
3
4
5 SELECT array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') AS RESULT;
result
-----------
1,2,3,*,5
(1 row)
在string_to_array中,如果省略null字符串参数或为NULL,将字符串中没有输入内容的子串替换为NULL。 在array_to_string中,如果省略null字符串参数或为NULL,运算中将跳过在数组中的任何null元素,并且不会在输出字符串中出现。
-
unnest(anyarray) 描述:扩大一个数组为一组行。 返回类型:setof anyelement 示例: 1
2
3
4
5
6 SELECT unnest(ARRAY[1,2]) AS RESULT;
result
--------
1
2
(2 rows)
unnest函数配合string_to_array数组使用。数组转列,先将字符串按逗号分割成数组,然后再把数组转成列: 1
2
3
4
5
6
7
8 SELECT unnest(string_to_array('a,b,c,d',',')) AS RESULT;
result
--------
a
b
c
d
(4 rows)
-
string_to_array(text, text [, text]) 描述:使用第二个text指定分隔符,使用第三个可选的text作为NULL值替换模板,如果分隔后的子串与第三个可选的text完全匹配,则将其替换为NULL。 返回类型:text[] 示例: 1
2
3
4
5
6
7
8
9
10 SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'yy') AS RESULT;
result
--------------
{xx,NULL,zz}
(1 row)
SELECT string_to_array('xx~^~yy~^~zz', '~^~', 'y') AS RESULT;
result
------------
{xx,yy,zz}
(1 row)
在string_to_array中,如果分隔符参数是NULL,输入字符串中的每个字符将在结果数组中变成一个独立的元素。如果分隔符是一个空白字符串,则整个输入的字符串将变为一个元素的数组。否则输入字符串将在每个分隔字符串处分开。
-
interval(N, N1, N2, N3 ... ) 描述:从输入的整数数组中,查找返回最后一个小于等于目标参数n的数组索引。如果n为NULL,返回-1。interval函数不支持interval(N, N1)的场景。该函数仅8.2.0及以上集群版本支持。 返回类型:int 示例: 1
2
3
4
5 SELECT INTERVAL(10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 11) AS RESULT;
result
--------
11
(1 row)
-
uuid() 描述:生成一个UUID类型的序列号。此函数为MySQL兼容性函数,仅8.2.0及以上集群版本支持。 返回类型:UUID 示例: 1
2
3
4
5 SELECT uuid();
uuid
----------------------------------
6327dc96-f0e7-0100-f2f2-6c9ff700fffe
(1 row)
uuid函数内部生成原理同uuid_generate_v1()函数,即根据时间信息、集群节点编号和生成该序列的线程号生成UUID,该UUID在单个集群内是全局唯一的,但在多个集群间的时间信息、集群节点编号、线程号和时钟序列仍然存在同时相等的可能性,因此多个集群间生成的UUID仍然存在极低概率的重复风险。
-
uuid_generate_v1() 描述:生成一个UUID类型的序列号。 返回类型:UUID 示例: 1
2
3
4
5 SELECT uuid_generate_v1();
uuid_generate_v1
--------------------------------------
c71ceaca-a175-11e9-a920-797ff7000001
(1 row)
uuid_generate_v1函数根据时间信息、集群节点编号和生成该序列的线程号生成UUID,该UUID在单个集群内是全局唯一的,但在多个集群间的时间信息、集群节点编号、线程号和时钟序列仍然存在同时相等的可能性,因此多个集群间生成的UUID仍然存在极低概率的重复风险。