本节介绍Lindorm CQL语法支持的函数及其使用。

Lindorm CQL支持两类函数:scalar function和native aggregate function。

  • scalar function:用于获取一些值并生成一个输出。
  • native aggregate function:用于聚合SELECT语句的多行结果。
说明 Lindorm CQL提供了许多本机的硬编码函数。

常见的scalar function函数和native aggregate function函数如下。

类别 函数
scalar function CastNowmaxTimeuuidminTimeuuid、Time conversion函数、Blob conversion函数等。
native aggregate function CountSumAvgMinMax等。

Cast

Cast函数用于数据类型的转换,支持将一种本机数据类型转换为另一种。

数据类型

Cast函数支持转换的数据类型如下:

转换前 转换后
ascii text
bigint tinyintsmallintintfloatdoubledecimalvarinttext
boolean text
counter tinyintsmallintintbigintfloatdoubledecimalvarinttext
date timestamp
decimal tinyintsmallintintbigintfloatdoublevarinttext
double tinyintsmallintintbigintfloatdecimalvarinttext
float tinyintsmallintintbigintdoubledecimalvarinttext
inet text
int tinyintsmallintbigintfloatdoubledecimalvarinttext
time text
timestamp datetext
timeuuid timestampdatetext
tinyint tinyintsmallintintbigintfloatdoubledecimalvarinttext
uuid text
varint tinyintsmallintintbigintfloatdoubledecimaltext
转换说明

通过Cast函数转换数据类型,需严格遵守Java的语义规范。

转换示例
CREATE TABLE persioninfo (c1 int PRIMARY KEY, c2 timeuuid);
SELECT avg(cast(c1 as double)) FROM persioninfo;

Now

Now函数用于返回当前的时间。

Now函数不接受任何参数,并在调用该函数时在协调器节点上会生成一个新的唯一timeuuid。因此,在使用Now函数时,在WHERE语句中基本没有意义,例如对以下表单的查询,不会按设计返回任何结果,因此now()返回的值保证是唯一的。

SELECT * FROM persioninfo WHERE c2 = now()

MaxTimeuuid和MinTimeuuid

MinTimeuuid和MaxTimeuuid函数用于获取时间戳值(可以是时间戳或日期字符串<Timestamps>),并返回与最小值或最大值时间戳T对应的Timeuuid。

示例
SELECT * FROM persioninfo WHERE c2 > maxTimeuuid('2013-01-01 00:05+0000')    AND c2 < minTimeuuid('2013-02-02 10:00+0000') ALLOW FILTERING ;

Datetime

Datetime相关函数用于检索调用函数时的日期和时间。

函数名 输出形式
currentTimestamp Timestamp
currentDate date
currentTime time
currentTimeUUID timeUUID

Time Conversion

Time Conversion函数用于将Timeuuid、时间戳或日期转换成Lindorm CQL自带的支持格式。

函数名 输入类型 转换描述
toDate timeuuid timeuuid类型转换为date类型。
toDate timestamp timestamp类型转换为date类型。
toTimestamp timeuuid timeuuid类型转换为timestamp类型。
toTimestamp date date类型转换为timestamp类型。
toUnixTimestamp timeuuid timeuuid类型转换为bigint类型。
toUnixTimestamp timestamp timestamp类型转换为bigint类型(raw)。
toUnixTimestamp date date类型转换为bigint类型(raw)。

Blob Conversion

Blob Conversion系列函数支持将本机类型转换为二进制数据(Blob)。

对于Lindorm CQL支持的每个<native type>类型,函数TypeAsBlob接受一个Type类型的参数并将其作为Blob返回。相反,函数BlobAsType接受64位Blob参数并将其转换为Bigint值。例如,bigintAsBlob(3)是0x0000000000000003,blobAsBigint(0x0000000000000003)是3。

CREATE TABLE persioninfo (c1 text PRIMARY KEY, c2 bigint);
INSERT INTO persioninfo (c1, c2) VALUES ( '11', blobAsBigint(0x0000000000000003));

Count

Count函数用于计算给定列的非空值,还可以对查询返回的行进行计数。

示例

对查询返回的行进行计算:

SELECT COUNT (*) FROM persioninfo;
SELECT COUNT (1) FROM persioninfo;

计算给定列的非空值:

SELECT COUNT (c2) FROM persioninfo;

Max和Min

Max和Min函数用于计算给定列的查询返回的最大值和最小值。

示例
CREATE TABLE persioninfo (c1 text PRIMARY KEY, c2 int);
INSERT INTO persioninfo (c1, c2) VALUES ('k1', 3);
INSERT INTO persioninfo (c1, c2) VALUES ('k2', 4);
SELECT min(c2), max(c2) FROM persioninfo;

Sum

Sum函数用于求和,计算指定列的查询返回值之和。

示例
SELECT sum(c2) FROM persioninfo ;

Avg

Avg函数用于计算给定列查询返回值的平均值。

示例
SELECT avg(c2) FROM persioninfo ;