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. ”бедитесь, что вы удал€ете или вносите изменени€ в правильные таблицы, чтобы избежать потенциальных проблем.


—кидки 50% в Merion Academy

¬ыбрать курс