本節介紹Lindorm CQL文法支援的函數及其使用。
Lindorm CQL支援兩類函數:scalar function和native aggregate function。
- scalar function:用於擷取一些值並產生一個輸出。
- native aggregate function:用於彙總SELECT語句的多行結果。
常見的scalar function函數和native aggregate function函數如下。
| 類別 | 函數 |
| scalar function | Cast、Now、maxTimeuuid、minTimeuuid、Time conversion函數、Blob conversion函數等。 |
| native aggregate function | Count、Sum、Avg、Min、Max等。 |
Cast
Cast函數用於資料類型的轉換,支援將一種本機資料類型轉換為另一種。
資料類型Cast函數支援轉換的資料類型如下:
| 轉換前 | 轉換後 |
ascii | text |
bigint | tinyint,smallint,int,float,double,decimal,varint,text |
boolean | text |
counter | tinyint,smallint,int,bigint,float,double,decimal,varint,text |
date | timestamp |
decimal | tinyint,smallint,int,bigint,float,double,varint,text |
double | tinyint,smallint,int,bigint,float,decimal,varint,text |
float | tinyint,smallint,int,bigint,double,decimal,varint,text |
inet | text |
int | tinyint,smallint,bigint,float,double,decimal,varint,text |
time | text |
timestamp | date,text |
timeuuid | timestamp,date,text |
tinyint | tinyint,smallint,int,bigint,float,double,decimal,varint,text |
uuid | text |
varint | tinyint,smallint,int,bigint,float,double,decimal,text |
通過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函數用於擷取時間戳記值T(可以是時間戳記或日期文字<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 ;