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