Руководство по Cassandra. СQL типы данных.

В данной статье мы рассмотрим типы данных, с которыми работает CQL.

Типы данных, здесь, делятся на 3 группы:

  • встроенные типы данных
  • коллекции
  • созданные пользователем

Встроенные типы данных:

Тип данных Хранит Description
ascii Строки ASCII строки
bigint Большие целые числа 64- битные числа
blob BLOB Байты
Boolean Логические значения Правда или ложь (true/false)
counter Целые числа Столбец
decimal Целые числа, числа с плавающей точкой Точные числа с плавающей точкой
double Целые числа 64-битные числа IEEE-754
float Целые числа, числа с плавающей точкой 32-битные числа IEEE-754
inet Строки IP адреса, IPv4 or IPv6
int Целые числа 32-битное знаковое целое число
text Строки Строка в кодировке UTF-8
timestamp Целые числа, Строки Время
timeuuid Уникальные идентификаторы UUID тип 1
uuid Уникальные идентификаторы UUID тип 1 или 4
varchar Строки Строка в кодировке UTF-8
varint Целые числа Точное целое число

Коллекции

Коллекция Описание
list Список элементов
map Коллекция пар “ключ-значение”
set Множество уникальных элементов

Созданные пользователем

Для создания собственных типов данных используется команда следующего вида:


CREATE TYPE <ИМЯ_ТИПА_ДАННЫХ>
( ПОЛЕ_1,
... ,
ПОЛЕ_N
);

Рассмотрим следующий пример:

CREATE TYPE account (
account_id int,
description text,
person_id int,
phone_number int
);

Для проверки выполним следующую команду:

DESCRIBE proselyte ;

В результате мы увидим:

CREATE KEYSPACE proselyte WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '2'} AND durable_writes = true;

CREATE TYPE proselyte.account (
account_id int,
description text,
person_id int,
phone_number int
);

CREATE TABLE proselyte.developers (
developer_id int PRIMARY KEY,
first_name text,
last_name text,
salary varint,
specialty text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {‘keys’: ‘ALL’, ‘rows_per_partition’: ‘NONE’}
AND comment = ”
AND compaction = {‘class’: ‘org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy’, ‘max_threshold’: ’32’, ‘min_threshold’: ‘4’}
AND compression = {‘chunk_length_in_kb’: ’64’, ‘class’: ‘org.apache.cassandra.io.compress.LZ4Compressor’}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = ’99PERCENTILE’;
CREATE INDEX last_name_index ON proselyte.developers (last_name);

В данном случае нас интересует:

CREATE TYPE proselyte.account (
account_id int,
description text,
person_id int,
phone_number int
);

Т.е. новый тип данных был создан.
Для изменения типа данных, необходимо выполнить команду вида:

ALTER TYPE <ИМЯ_ТИПА>
ADD <ИМЯ_КОЛОКНКИ> <ТИП_ДАННЫХ>;

Например:

ALTER TYPE account ADD email text ;

Проверяем:

cqlsh:proselyte> DESCRIBE proselyte ;

CREATE KEYSPACE proselyte WITH replication = {‘class’: ‘SimpleStrategy’, ‘replication_factor’: ‘2’} AND durable_writes = true;

CREATE TYPE proselyte.account (
account_id int,
description text,
person_id int,
phone_number int,
email text
);

Также, мы имеем возможность, переименовать колонку

ALTER TYPE <ИМЯ_ТИПА>
RENAME <ИМЯ_КОЛОНКИ> TO <НОВОЕ_ИМЯ_КОЛОНКИ>;

Например:

ALTER TYPE account RENAME description TO account_data;

Выполняем команду:

cqlsh:proselyte> DESCRIBE proselyte

CREATE KEYSPACE proselyte WITH replication = {‘class’: ‘SimpleStrategy’, ‘replication_factor’: ‘2’} AND durable_writes = true;

CREATE TYPE proselyte.account (
account_id int,
account_data text,
person_id int,
phone_number int,
email text
);

Как мы видим – поле description изменилось на account_data.

На этом мы заканчиваем обзор CQL типов данных в Apache Cassandra.

В следующей статье мы рассмотрим работу с коллекциями.