Руководство по Cassandra. Работа с таблицами.

В данной статье мы рассмотрим работу с таблицами в Apache Cassandra.

Создание таблицы
Для создания таблицы нам необходимо открыть cqlsh и прописать команду вида:

CREATE (TABLE | COLUMNFAMILY) <ИМЯ_ТАБЛИЦЫ>
('<ОПИСАНИЕ_КОЛОНКИ>', '<ОПИСАНИЕ_КОЛОНКИ>')
(WITH <ОПЦИИ> AND <OПЦИИ>);

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

column <ИМЯ_КОЛОНКИ_1> <ТИП_ДАННЫХ> PRIMARYKEY,
column <ИМЯ_КОЛОНКИ_2> <ТИП_ДАННЫХ>,
column <ИМЯ_КОЛОНКИ_3> <ТИП_ДАННЫХ>,

В Cassandra также есть понятие первичный ключ. Это колонка, которая используется в качестве уникального идентификатора записи. Создание первичного ключа является обязательным при создании таблицы.

Таким образом, общий вид команды для создания таблицы в Cassandra выглядит следующим образом:

CREATE TABLE ИМЯ_ТАБЛИЦЫ(
ИМЯ_КОЛОНКИ_1 ТИП_ДАННЫХ PRIMARYKEY,
ИМЯ_КОЛОНКИ_2 ТИП_ДАННЫХ,
ИМЯ_КОЛОНКИ_3 ТИП_ДАННЫХ,
PRIMARY KEY (ИМЯ_КОЛОНКИ_1)
)

Рассмотрим следующий пример.
Так как мы удалили KEYSPACE в предыдущей статье, нам необходимо заново создать KEYSPACE


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

Выбираем созданный KEYSPACE для работы:

USE proselyte ;


cqlsh:proselyte> CREATE TABLE developers (
developer_id int PRIMARY KEY,
first_name text,
last_name text,
specialty text,
salary varint
);

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

cqlsh:proselyte> SELECT * FROM developers ;

В результате мы получим следующий вывод в консоль:


developer_id | first_name | last_name | salary | specialty
————–+————+———–+——–+———–
Изменение таблицы

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

ALTER (TABLE | COLUMNFAMILY) <ИМЯ_ТАБЛИЦЫ> <ДАННЫЕ_ДЛЯ_ИЗМЕНЕНИЯ>

Для первого примера рассмотрим добавление колонки. Команды имеет следующий общий вид:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
ADD <ИМЯ_НОВОЙ_КОЛОНКИ> <ТИП_ДАННЫХ>;

Попробуем изменить нашу таблицу developers:


ALTER TABLE developers ADD phone_number text ;

И проверим таблицу ещё раз:

cqlsh:proselyte> SELECT * FROM developers ;

Результатом запроса должен быть следующий вывод в консоль:

developer_id | first_name | last_name | phone_number | salary | specialty
--------------+------------+-----------+--------------+--------+-----------

Попробуем теперь удалить колонку. Общий вид команды следующий:

ALTER <ИМЯ_ТАБЛИЦЫ>
DROP <ИМЯ_КОЛОНКИ>;

Рассмотрим пример удаления колонки phone_number из таблицы developers:

ALTER TABLE developers DROP phone_number ;

Проверяем:

cqlsh:proselyte> SELECT * FROM developers ;

Результатом запроса должен быть следующий вывод в консоль:

developer_id | first_name | last_name | salary | specialty
--------------+------------+-----------+--------+-----------

(0 rows)

Создание индекса
Так же, как и в SQL БД индексы помогают ускорить получение данных, по определённым колонкам.
С плюсами минусами, лучше всего ознакомиться в официальной документации.

А сейчас мы рассмотрим синтаксис создания индексов в Apache Cassandra.

Команда имеет следующий общий вид:

CREATE INDEX <ИДЕНТИФИКАТОР> ON <ИМЯ_ТАБЛИЦЫ>

Рассмотрим конкретный пример:

CREATE INDEX last_name ON developers (last_name) ;

В данном случае мы создали индекс для поля last_name.

Для проверки таблицы выполним команду:


DESCRIBE developers ;

Результат:

cqlsh:proselyte> DESCRIBE developers ;

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 ON proselyte.developers (last_name);

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

CREATE INDEX last_name ON proselyte.developers (last_name);

Удаление индекса
Для удаления индекса используется команда вида:

DROP INDEX <ИМЯ_ИНДЕКСА> ;

В нашем случае:

DROP INDEX last_name ;

Проверяем:

DESCRIBE developers ;

Результатом данной команды будет следующий вывод в консоль:

cqlsh:proselyte> DESCRIBE developers ;

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 ON proselyte.developers (last_name);

исчезла.

Удаление таблицы

Рассмотрим создание таблицы в Cassandra.
Общий вид команды выглядит следующим образом:

DROP TABLE <ИМЯ_ТАБЛИЦЫ>

Попробуем удалить таблицу developers
Для начала проверим, какие таблицы у нас есть в нашем KEYSPACE proselyte:

DESCRIBE TABLES ;

Вывод в консоль:

cqlsh:proselyte> DESCRIBE TABLES ;

developers

Перейдём к удалению таблицы:

DROP TABLE developers ;

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

DROP TABLE developers ;

И снова выполним команду:

DESCRIBE TABLES ;

Вывод в консоль:

cqlsh:proselyte> DESCRIBE TABLES ;

<empty>

На это мы заканчиваем обзор работы с таблицами в Apache Cassandra. В следующей статье мы перейдём к работе с данными (создание, изменение, получение и удаление самих данных).