В данной статье мы рассмотрим работу с таблицами в 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. В следующей статье мы перейдём к работе с данными (создание, изменение, получение и удаление самих данных).