Apache Cassandra — это программное обеспечение распределенной базы данных с открытым исходным кодом для работы с базами данных NoSQL. Это программное обеспечение использует язык запросов Cassandra - CQL в качестве основы для связи. CQL хранит данные в таблицах, организованных в виде набора строк со столбцами, содержащими пары ключ-значение.
Таблицы CQL сгруппированы в контейнеры данных, которые в Cassandra называются пространствами ключей (keyspace). Данные, хранящиеся в одном пространстве ключей, не связаны с другими данными в кластере. Таким образом, вы можете иметь таблицы для разных целей в отдельных пространствах ключей в кластере, и данные не будут совпадать.
В этом руководстве вы узнаете, как создать таблицу Cassandra для различных целей, а также как изменять, удалять или очищать таблицы с помощью оболочки Cassandra.
Выбор пространства ключей для таблицы Cassandra
Прежде чем вы начнете добавлять таблицу, вам нужно определить пространство ключей, в котором вы хотите создать свою таблицу. Есть два варианта сделать это.
Вариант 1: команда USE
Запустите команду USE
, чтобы выбрать пространство клавиш, к которому будут применяться все ваши команды. Для этого в оболочке cqlsh
введите:
USE keyspace_name;
Затем вы можете начать добавлять таблицы.
Вариант 2. Укажите имя пространства ключей в запросе
Второй вариант — указать имя пространства ключей в запросе на создание таблицы. Первая часть команды перед именами столбцов и параметрами выглядит так:
CREATE TABLE keyspace_name.table_name
Таким образом, вы сразу же создаете таблицу в заданном пространстве ключей.
Базовый синтаксис для создания таблиц Cassandra
Создание таблиц с помощью CQL похоже на SQL-запросы. В этом разделе мы покажем вам основной синтаксис для создания таблиц в Cassandra.
Основной синтаксис для создания таблицы выглядит следующим образом:
CREATE TABLE tableName ( columnName1 dataType, columnName2 dataType, columnName2 datatype PRIMARY KEY (columnName) );
При желании вы можете определить дополнительные свойства и значения таблицы, используя WITH
:
WITH propertyName=propertyValue;
Например, используйте его, чтобы определить, как хранить данные на диске или использовать ли сжатие.
Типы первичных ключей Cassandra
Каждая таблица в Cassandra должна иметь первичный ключ, что делает строку уникальной. С первичными ключами вы определяете, какой узел хранит данные и как он их разделяет.
Существует несколько типов первичных ключей:
- Простой первичный ключ. Содержит только одно имя столбца в качестве ключа секции, чтобы определить, какие узлы будут хранить данные.
- Составной первичный ключ. Использует один ключ разделения и несколько столбцов кластеризации, чтобы определить, где хранить данные и как их сортировать в разделе.
- Составной ключ раздела. В этом случае есть несколько столбцов, которые определяют, где хранить данные. Таким образом, вы можете разбить данные на более мелкие части, чтобы распределить их по нескольким разделам, чтобы избежать горячих точек.
Как создать таблицу Cassandra
В следующих разделах объясняется, как создавать таблицы с различными типами первичных ключей. Сначала выберите пространство ключей, в котором вы хотите создать таблицу. В нашем случае:
USE businesinfo;
Каждая таблица содержит столбцы и тип данных Cassandra для каждой записи.
Создать таблицу с простым первичным ключом
Первый пример — это базовая таблица с поставщиками. Идентификатор уникален для каждого поставщика и будет служить первичным ключом.
CQL-запрос выглядит следующим образом:
CREATE TABLE suppliers ( supp_id int PRIMARY KEY, supp_city text, supp_email text, supp_fee int, supp_name text, supp_phone int );
Этот запрос создал таблицу с именем supplier
с supp_id
в качестве первичного ключа для таблицы. Когда вы используете простой первичный ключ с именем столбца в качестве ключа раздела, вы можете поместить его либо в начало запроса (рядом со столбцом, который будет служить первичным ключом), либо в конец, а затем указать имя столбца:
CREATE TABLE suppliers ( supp_id int, supp_city text, supp_email text, supp_fee int, supp_name text, supp_phone int PRIMARY KEY(supp_id) );
Чтобы увидеть, находится ли таблица в пространстве ключей, введите:
DESCRIBE TABLES;
В выводе перечислены все таблицы в этом пространстве ключей, а также та, которую вы создали.
Чтобы отобразить содержимое таблиц, введите:
SELECT * FROM suppliers;
Вывод показывает все столбцы, определенные при создании таблицы.
Другой способ просмотреть сведения о таблице — использовать DESCRIBE
и указать имя таблицы:
DESCRIBE suppliers;
В выходных данных отображаются столбцы и настройки по умолчанию для таблицы.
Создать таблицу с составным первичным ключом
Чтобы запросить и получить результаты, отсортированные в определенном порядке, создайте таблицу с составным первичным ключом.
Например, создайте таблицу для поставщиков и всех продуктов, которые они предлагают. Поскольку продукты могут не быть уникальными для каждого поставщика, необходимо добавить один или несколько столбцов кластеризации в первичный ключ, чтобы сделать его уникальным.
Схема таблицы выглядит так:
CREATE TABLE suppliers_by_product ( supp_product text, supp_id int, supp_product_quantity text, PRIMARY KEY(supp_product, supp_id) );
В этом случае мы использовали supp_product
и supp_id
для создания уникального составного ключа. Здесь первая запись в скобках supp_product
— это ключ раздела. Он определяет, где хранить данные, то есть как система разделяет данные.
Следующая запись — столбец кластеризации, определяющий, как Cassandra сортирует данные, в нашем случае — по supp_id
.
Изображение выше показывает, что таблица была успешно создана. Чтобы проверить детали таблицы, запустите запрос DESCRIBE TABLE
для новой таблицы:
DESCRIBE TABLE suppliers_by_product;
Настройки по умолчанию для порядка кластеризации — по возрастанию (ASC). Вы можете перейти на нисходящий (DESC), добавив следующий оператор после первичного ключа:
WITH CLUSTERING ORDER BY (supp_id DESC);
Мы указали один столбец кластеризации после ключа раздела. Если вам нужно отсортировать данные с использованием двух столбцов, добавьте еще один столбец в скобки первичного ключа.
Создание таблиц с использованием составного ключа раздела
Создание таблицы с составным ключом раздела полезно, когда на одном узле хранится большой объем данных, и вы хотите разделить нагрузку на несколько узлов.
В этом случае определите первичный ключ с ключом секции, состоящим из нескольких столбцов. Вам нужно использовать двойные скобки. Затем добавьте столбцы кластеризации, как мы делали ранее, чтобы создать уникальный первичный ключ.
CREATE TABLE suppliers_by_product_type ( supp_product_consume text, supp_product_stock text, supp_id int, supp_name text, PRIMARY KEY((supp_product_consume, supp_product_stock), supp_id) );
В приведенном выше примере мы разделили данные на две категории: расходные материалы поставщика и продукты, запасаемые на складе, и распределили данные с помощью составного ключа раздела.
Примечание. При таком разделении каждая категория продуктов хранится на отдельном узле, а не в одном разделе.
Если вместо этого вы используете составной первичный ключ с простым ключом раздела и несколькими столбцами кластеризации, то один узел будет обрабатывать все данные, отсортированные по нескольким столбцам.
Удалить таблицу в Cassandra
Чтобы удалить таблицу в Cassandra, используйте оператор DROP TABLE
. Чтобы выбрать таблицу, которую вы хотите удалить, введите:
DESCRIBE TABLES;
Найдите таблицу, которую хотите удалить. Используйте имя таблицы, чтобы удалить ее:
DROP TABLE suppliers_by_product_type;
Запустите запрос
Изменить таблицу в Cassandra
Cassandra CQL позволяет добавлять или удалять столбцы из таблицы. Используйте команду ALTER TABLE
, чтобы внести изменения в таблицу.
Добавить столбец в таблицу
Перед добавлением столбца в таблицу рекомендуется просмотреть содержимое таблицы, чтобы убедиться, что имя столбца еще не существует.
После проверки используйте запрос ALTER TABLE
в этом формате, чтобы добавить столбец:
ALTER TABLE suppliers_by_product ADD supp_name text;
Снова используйте DESCRIBE TABLE
, чтобы убедиться, что столбец появился в списке.
Удалить столбец из таблицы
Подобно добавлению столбца, вы можете удалить столбец из таблицы. Найдите столбец, который вы хотите удалить, с помощью запроса DESCRIBE TABLES
.
Затем введите:
ALTER TABLE suppliers_by_product DROP supp_product_quantity;
Примечание. Не указывайте тип данных для столбца, если вы хотите удалить его из таблицы. Вы получите ошибку “SyntaxException: line 1:48 mismatched input ‘text’ expecting EOF (ALTER TABLE suppliers_by_product DROP supp_name [text]…)”
Очистить таблицу в Cassandra
Если вы не хотите удалять всю таблицу, но вам нужно удалить все строки, используйте команду
Например, чтобы удалить все строки из таблицы поставщиков, введите:
TRUNCATE suppliers;
Чтобы убедиться, что в вашей таблице больше нет строк, используйте оператор SELECT
.
После очистки таблицы изменения становятся постоянными, поэтому будьте осторожны при использовании этого запроса.
Итоги
В этом руководстве показано, как создавать таблицы в Cassandra для различных целей с использованием простых и составных первичных ключей. Примеры также включали использование составного ключа раздела для распределения данных по узлам.
Мы также рассмотрели, как вы можете удалять, изменять и очищать таблицы в Cassandra. Убедитесь, что вы удаляете или вносите изменения в правильные таблицы, чтобы избежать потенциальных проблем.