Cassandra 数据类型

CQL是一种类型化语言,支持丰富的数据类型集,包含如Native types, Collection types, User-defined types等。

1.Native Type

CQL支持的Native 数据类型如下:

native_type ::=  ASCII
                 | BIGINT
                 | BLOB
                 | BOOLEAN
                 | COUNTER
                 | DATE
                 | DECIMAL
                 | DOUBLE
                 | DURATION
                 | FLOAT
                 | INET
                 | INT
                 | SMALLINT
                 | TEXT
                 | TIME
                 | TIMESTAMP
                 | TIMEUUID
                 | TINYINT
                 | UUID
                 | VARCHAR
                 | VARINT

详细的描述信息如下:

1542355550903415.png

注意事项如下:

Counter 类型

计数器类型用于定义计数器列,计数器列是一个列,其值为64位有符号整数,并且支持2个操作,递增和递减。

Timestamp 类型

Timestamp类型的值被编码为64位有符号整数,表示自标准基准时间(称为纪元:1970年1月1日格林威治标准时间00:00:00)以来的毫秒数。

可以使用它们的值作为整数或使用表示ISO 8601日期的字符串在CQL中输入Timestamp值。 例如,以下所有值均为2011年3月2日上午04:05:00 GMT的有效时间戳值:

1299038700000
'2011-02-03 04:05 + 0000'
'2011-02-03 04:05:00 + 0000'
'2011-02-03 04:05:00.000 + 0000'
'2011-02-03T04:05+0000'
'2011-02-03T04:05:00+0000'
'2011-02-03T04:05:00.000+0000'

2.Collection

CQL支持3种集合:Map,Set和 List。 这些集合的类型定义如下:

collection_type ::=  MAP '<' cql_type ',' cql_type '>'
                     | SET '<' cql_type '>'
                     | LIST '<' cql_type '>'

Map

映射是一组(已排序)的键值对,其中键是唯一的,并且映射按其键排序。 可以使用以下命令定义和添加Map:

CREATE TABLE users (
    id text PRIMARY KEY,
    name text,
    favs map<text, text> // A map of text keys, and text values
);
INSERT INTO users (id, name, favs)
           VALUES ('jsmith', 'John Smith', { 'fruit' : 'Apple', 'band' : 'Beatles' });
// Replace the existing map entirely.
UPDATE users SET favs = { 'fruit' : 'Banana' } WHERE id = 'jsmith';

Set

集合是唯一值的(已排序)集合。 可以使用以下命令定义和插入Set:

CREATE TABLE images (
    name text PRIMARY KEY,
    owner text,
    tags set<text> // A set of text values
);
INSERT INTO images (name, owner, tags)
            VALUES ('cat.jpg', 'jsmith', { 'pet', 'cute' });
// Replace the existing set entirely
UPDATE images SET tags = { 'kitten', 'cat', 'lol' } WHERE name = 'cat.jpg';

List

列表是非唯一值的(已排序)集合,其中元素按列表中的位置排序。 可以使用以下内容定义和插入列表:

CREATE TABLE plays (
    id text PRIMARY KEY,
    game text,
    players int,
    scores list<int> // A list of integers
)
INSERT INTO plays (id, game, players, scores)
           VALUES ('123-afde', 'quake', 3, [17, 4, 2]);
// Replace the existing list entirely
UPDATE plays SET scores = [ 3, 9, 4] WHERE id = '123-afde';

3. 用户定义的类型

CQL支持用户定义类型的定义(简称UDT), 可以使用下面描述的create_type_statement,alter_type_statement和drop_type_statement创建,修改和删除此类型。

user_defined_type ::=  udt_name
udt_name          ::=  [ keyspace_name '.' ] identifier

创建UDT

使用由以下定义的CREATE TYPE语句创建新的用户定义类型:

create_type_statement :: = CREATE TYPE [IF NOT EXISTS] udt_name
                                '('field_definition(','field_definition)*')'
field_definition :: = identifier cql_type

例如:

CREATE TYPE phone (
    country_code int,
    number text,
)
CREATE TYPE address (
    street text,
    city text,
    zip text,
    phones map<text, phone>
)
CREATE TABLE user (
    name text PRIMARY KEY,
    addresses map<text, frozen<address>>
)

例如,可以使用以下内容添加自定义的类型:

INSERT INTO user (name, addresses)
          VALUES ('z3 Pr3z1den7', {
              'home' : {
                  street: '1600 Pennsylvania Ave NW',
                  city: 'Washington',
                  zip: '20500',
                  phones: { 'cell' : { country_code: 1, number: '202 456-1111' },
                            'landline' : { country_code: 1, number: '...' } }
              },
              'work' : {
                  street: '1600 Pennsylvania Ave NW',
                  city: 'Washington',
                  zip: '20500',
                  phones: { 'fax' : { country_code: 1, number: '...' } }
              }
          })

4. Tuple (元组)

CQL还支持元组和元组类型(元素可以是不同类型)。 元组类型定义如下:

tuple_type :: = TUPLE'<'cql_type(','cql_type)*'>'
tuple_literal :: ='('term(','term)*')'

示例如下:

CREATE TABLE durations (
    event text,
    duration tuple<int, text>,
)
INSERT INTO durations (event, duration) VALUES ('ev1', (3, 'hours'));

Cassandra 数据类型

发表评论

邮箱地址不会被公开。 必填项已用*标注

9 × = 六十 三

滚动到顶部