img

Работа с таблицами в Apache Cassandra

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

);  
Cassandra tables

Этот запрос создал таблицу с именем 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;

В выводе перечислены все таблицы в этом пространстве ключей, а также та, которую вы создали.

Cassandra tables

Чтобы отобразить содержимое таблиц, введите:

SELECT * FROM suppliers;
Cassandra tables

Вывод показывает все столбцы, определенные при создании таблицы.

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

DESCRIBE suppliers;
Cassandra tables

В выходных данных отображаются столбцы и настройки по умолчанию для таблицы.

Создать таблицу с составным первичным ключом

Чтобы запросить и получить результаты, отсортированные в определенном порядке, создайте таблицу с составным первичным ключом.

Например, создайте таблицу для поставщиков и всех продуктов, которые они предлагают. Поскольку продукты могут не быть уникальными для каждого поставщика, необходимо добавить один или несколько столбцов кластеризации в первичный ключ, чтобы сделать его уникальным.

Схема таблицы выглядит так:

CREATE TABLE suppliers_by_product (

supp_product text,

supp_id int,

supp_product_quantity text,

PRIMARY KEY(supp_product, supp_id)

);  
Cassandra tables

В этом случае мы использовали supp_product и supp_id для создания уникального составного ключа. Здесь первая запись в скобках supp_product — это ключ раздела. Он определяет, где хранить данные, то есть как система разделяет данные.

Следующая запись — столбец кластеризации, определяющий, как Cassandra сортирует данные, в нашем случае — по supp_id.

Изображение выше показывает, что таблица была успешно создана. Чтобы проверить детали таблицы, запустите запрос DESCRIBE TABLE для новой таблицы:

DESCRIBE TABLE suppliers_by_product;
Cassandra tables

Настройки по умолчанию для порядка кластеризации — по возрастанию (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 tables

В приведенном выше примере мы разделили данные на две категории: расходные материалы поставщика и продукты, запасаемые на складе, и распределили данные с помощью составного ключа раздела.

Примечание. При таком разделении каждая категория продуктов хранится на отдельном узле, а не в одном разделе.

Если вместо этого вы используете составной первичный ключ с простым ключом раздела и несколькими столбцами кластеризации, то один узел будет обрабатывать все данные, отсортированные по нескольким столбцам.


Удалить таблицу в Cassandra

Чтобы удалить таблицу в Cassandra, используйте оператор DROP TABLE. Чтобы выбрать таблицу, которую вы хотите удалить, введите:

DESCRIBE TABLES;

Найдите таблицу, которую хотите удалить. Используйте имя таблицы, чтобы удалить ее:

DROP TABLE suppliers_by_product_type;

Запустите запрос DESCRIBE TABLES еще раз, чтобы убедиться, что вы успешно удалили таблицу.

Cassandra tables

Изменить таблицу в Cassandra

Cassandra CQL позволяет добавлять или удалять столбцы из таблицы. Используйте команду ALTER TABLE, чтобы внести изменения в таблицу.

Добавить столбец в таблицу

Перед добавлением столбца в таблицу рекомендуется просмотреть содержимое таблицы, чтобы убедиться, что имя столбца еще не существует.

Cassandra tables

После проверки используйте запрос ALTER TABLE в этом формате, чтобы добавить столбец:

ALTER TABLE suppliers_by_product

ADD supp_name text;  

Снова используйте DESCRIBE TABLE, чтобы убедиться, что столбец появился в списке.

Cassandra tables

Удалить столбец из таблицы

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

Например, чтобы удалить все строки из таблицы поставщиков, введите:

TRUNCATE suppliers;

Чтобы убедиться, что в вашей таблице больше нет строк, используйте оператор SELECT.

Cassandra tables

После очистки таблицы изменения становятся постоянными, поэтому будьте осторожны при использовании этого запроса.


Итоги

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

Мы также рассмотрели, как вы можете удалять, изменять и очищать таблицы в Cassandra. Убедитесь, что вы удаляете или вносите изменения в правильные таблицы, чтобы избежать потенциальных проблем.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
DevOps
Скидка 25%
DevOps-инженер с нуля
Научитесь использовать инструменты и методы DevOps для автоматизации тестирования, сборки и развертывания кода, управления инфраструктурой и ускорения процесса доставки продуктов в продакшн. Станьте желанным специалистом в IT-индустрии и претендуйте на работу с высокой заработной платой.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Git Flow - это специальная система ветвления для Git. Она помогает команде лучше контролировать и добавлять различные версии про
img
Docker — популярная платформа виртуализации на уровне ОС. Она поставляет приложения в пакетах (контейнерах), которые, представля
img
Хуки в Git — это bash-скрипты, которые запускаются до или после команд Git, например, коммитов и пушей. Они позволяют автоматизи
img
  Nomad и Kubernetes – это две самые популярные платформы оркестровки, предназначенные для оркестровки динамических рабочих нагр
img
  Давайте узнаем о новом Ops-течении – GitOps! DevOps поспособствовал цифровизации многих компаний. Речь идет о командах разрабо
img
  Канареечное (canary) развёртывание – это метод разработки и развертывания программного обеспечения, который позволяет выпускат
ЗИМНИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59