Перейти к основному содержимому

Типы данных CQL

· 5 мин. чтения

1. Обзор

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

Язык запросов Cassandra (CQL) — это простая альтернатива языку структурированных запросов (SQL). Это декларативный язык, разработанный для обеспечения связи с базой данных. Подобно SQL, CQL также хранит данные в таблицах и организует данные в строки и столбцы.

2. Конфигурация базы данных Cassandra

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

CREATE KEYSPACE foreach WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};

Для целей этого руководства мы создали пространство ключей только с одной копией данных. Теперь давайте подключим сеанс клиента к пространству ключей:

USE <code class="language-shell">foreach;

3. Встроенные типы данных

CQL поддерживает широкий набор собственных типов данных. Эти типы данных предопределены, и мы можем напрямую ссылаться на любой из них.

3.1. Числовые типы

Числовые типы аналогичны стандартным типам в Java и других языках, таким как целые числа или числа с плавающей запятой, с разными диапазонами:

./587a7c0db9b079164c912b506c06c592.png

Давайте создадим таблицу со всеми этими типами данных:

CREATE TABLE numeric_types
(
type1 int PRIMARY KEY,
type2 bigint,
type3 smallint,
type4 tinyint,
type5 varint,
type6 float,
type7 double,
type8 decimal
);

3.2. Типы текста

CQL предоставляет два типа данных для представления текста. Мы можем использовать text или varchar для создания строки символов UTF-8 . UTF-8 является более поздним и широко используемым текстовым стандартом и поддерживает интернационализацию.

Существует также тип ascii для создания строки символов ASCII . Тип ascii наиболее полезен, если мы имеем дело с устаревшими данными в формате ASCII. Размер текстовых значений ограничен максимальным размером столбца. Размер одного столбца составляет 2 ГБ, но рекомендуется только 1 МБ.

Давайте создадим таблицу со всеми этими типами данных:

CREATE TABLE text_types
(
primaryKey int PRIMARY KEY,
type2 text,
type3 varchar,
type4 ascii
);

3.3. Типы дат

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

./131f9252f3ec264d95652c306354c4ed.png

время было представлено UUID версии 1. Мы можем ввести целое число или строку в отметку времени, время и дату CQL. Значения типа длительности кодируются как 3 целых числа со знаком.

Первое целое число представляет количество месяцев, второе — количество дней, а третье — количество наносекунд.

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

CREATE TABLE date_types
(
primaryKey int PRIMARY KEY,
type1 timestamp,
type2 time,
type3 date,
type4 timeuuid,
type5 duration
);

3.4. Тип счетчика

Тип счетчика используется для определения столбцов счетчика . Столбец счетчика — это столбец, значение которого представляет собой 64-разрядное целое число со знаком. Мы можем выполнять только две операции со столбцом счетчика — увеличение и уменьшение.

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

Давайте посмотрим пример:

CREATE TABLE counter_type
(
primaryKey uuid PRIMARY KEY,
type1 counter
);

3.5. Другие типы данных

  • boolean - это простое значение true/false
  • uuid — это UUID типа 4, полностью основанный на случайных числах. Мы можем вводить UUID, используя разделенные тире последовательности шестнадцатеричных цифр.
  • Двоичный большой объект (блоб) — это разговорный компьютерный термин для обозначения произвольного массива байтов. Тип BLOB-объекта CQL хранит носители или другие типы двоичных файлов. Максимальный размер большого двоичного объекта — 2 ГБ, но рекомендуется менее 1 МБ.
  • inet — это тип, представляющий интернет-адреса IPv4 или IPv6 .

Опять же, давайте создадим таблицу с этими типами:

CREATE TABLE other_types
(
primaryKey int PRIMARY KEY,
type1 boolean,
type2 uuid,
type3 blob,
type4 inet
);

4. Типы данных коллекции

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

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

4.1. Установлен

Мы можем хранить несколько уникальных значений, используя тип данных set. Точно так же в Java элементы не хранятся по порядку.

Создадим набор:

CREATE TABLE collection_types
(
primaryKey int PRIMARY KEY,
email set<text>
);

4.2. Список

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

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

ALTER TABLE collection_types
ADD scores list<text>;

4.3. карта

Используя Cassandra , мы можем хранить данные в наборах пар ключ-значение, используя тип данных map . Ключи уникальные. Благодаря этому мы можем сортировать карты по их ключам.

Добавим в нашу таблицу еще один столбец:

ALTER TABLE collection_types
ADD address map<uuid, text>;

5. Кортежи

Кортежи представляют собой набор различных типов элементов . Эти наборы имеют фиксированную длину:

CREATE TABLE tuple_type
(
primaryKey int PRIMARY KEY,
type1 tuple<int, text, float>
);

6. Пользовательские типы данных

Cassandra предоставляет возможность создания собственных типов данных . Мы можем создавать, изменять и удалять эти типы данных. Во-первых, давайте создадим свой собственный тип:

CREATE TYPE user_defined_type (
type1 timestamp,
type2 text,
type3 text,
type4 text);

Итак, теперь мы можем создать таблицу с нашим типом:

CREATE TABLE user_type
(
primaryKey int PRIMARY KEY,
our_type user_defined_type
);

7. Заключение

В этом кратком руководстве мы рассмотрели основные типы данных CQL. Кроме того, мы создали таблицы с этими типами данных. После этого мы поговорили о том, какие данные они могут хранить.

Как всегда, полный исходный код статьи доступен на GitHub .