Lindorm CQL是一种类型化语言,支持丰富的数据类型。本文档主要介绍了Lindorm CQL支持的数据类型。
基础数据类型
数据类型 | 支持的常量 | 描述 |
---|---|---|
bigint | integer | 64位有符号长整数 |
blob | blob | 任意长度的字节 |
boolean | boolean | 取值:true或者false |
counter | integer | Counter列(64位有符号值) |
date | integer, string | 日期时间 |
decimal | integer, float | 可变精度十进制 |
double | integer, float | 64位IEEE-754浮点数 |
float | integer, float | 32位IEEE-754浮点数 |
inet | string | IP地址,可以为IPv4和IPv6。由于没有IP类型,所以输入为String进行存储。 |
int | integer | 32位有符号整数 |
smallint | integer | 16位有符号整数 |
text | string | UTF-8编码的字符串 |
time | integer, string | 时间类型,纳秒精度 |
timestamp | integer, string | 时间戳,精度是毫秒 |
timeuuid | uuid | 版本1 UUID,通常用作无冲突时间戳 |
tinyint | integer | 8位无符号整数 |
uuid | uuid | 一个UUID |
varint | integer | 任意精度整数 |
nested | string | JSON字符串的嵌套类型 |
Counter
计数器类型用于定义计数器列。Lindorm的counter和Cassandra的counter是有一定区别的,Cassandra的counter表只允许包含counter列,但是Lindorm
CQL的表允许counter列和非counter列共存。示例如下:
CREATE TABLE person_info (name text primary key, age counter, address text);
UPDATE person_info SET age = age + 2 WHERE name = 'my';
INSERT INTO person_info (name, age, address) VALUES ( 'my', 30, 'hz');
Timestamp
允许输入int数据类型的数据以及string类型的字符串,用来表示某一个时间点。下面的示例用来表示:2011年03月2号 04:05:00AM GMT。
CREATE TABLE person_info ( name text PRIMARY KEY , birthtime timestamp , address text );
INSERT INTO person_info (name, birthtime, address) VALUES ( 'my', 1299038700000, 'hz');
INSERT INTO person_info (name, birthtime, address) VALUES ( 'mm', '2011-03-02 04:05+0000', 'hz');
INSERT INTO person_info (name, birthtime, address) VALUES ( 'lucy', '2011-03-02 04:05:00+0000', 'bj');
Time
支持int以及string表示times的数据类型,如果是string表示时间的话,格式为
hh:mm:ss[.fffffffff]
,其中[.fffffffff]
是可选的。示例如下:CREATE TABLE person_info ( name text PRIMARY KEY , birthtime time , address text );
INSERT INTO person_info (name,birthtime,address) VALUES ( 'lili', '08:12:54', 'hz');
date
支持使用int以及string表示date数据类型。如果使用string表示的date类型,格式为
yyyy-mm-dd
。示例如下: CREATE TABLE person_info ( name text PRIMARY KEY , birthday date , address text );
INSERT INTO person_info (name,birthday,address) VALUES ( 'lucy', '2021-02-01', 'beijing');
nested
嵌套类型。在建表的时候可以指定对应的列为nested,该类型的数值支持按照String写入JSON数据,支持执行select搭配
search_query
语句进行嵌套类型的子查询,需要结合Lindorm的search index
功能一起使用,需要注意的是describe
出来该列暂时还是text类型。此外,nested类型在开源侧driver展示的还是text数据类型。示例如下: CREATE TABLE person_info ( name text PRIMARY KEY , info nested , address text );
CREATE SEARCH INDEX sidx ON ctable3 WITH COLUMNS (info ,address );
INSERT INTO ctable3 (name,info,address) VALUES ( 'lilei', '{"school":"alibaba"}', 'hz');
SELECT * FROM ctable3 WHERE search_query = '{+address:hz}';
暂时不支持的数据类型
- 集合数据类型:set,list,map
- 用户自定义类型:User-Defined Types
- 基础数据类型:durations