Перейти к основному содержимому
Версия: 2.0.x

Таблица с уникальным ключом

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

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

Сценарии использования

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

Принцип работы

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

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

Как показано в следующей таблице, ID является уникальным ключом, value — колонкой значения, а _version содержит номера версий данных, сгенерированные внутри Selena. В этом примере запись с ID, равным 1, загружается двумя пакетами, номера версий которых равны 1 и 2, а запись с ID, равным 2, загружается тремя пакетами, номера версий которых равны 3, 4 и 5.

IDvalue_version
11001
11012
21003
21014
21025

При запросе записи с ID, равным 1, возвращается самая последняя запись с наибольшим номером версии, который в данном случае равен 2. При запросе записи с ID, равным 2, возвращается самая последняя запись с наибольшим номером версии, который в данном случае равен 5. В следующей таблице показаны записи, возвращаемые двумя запросами:

IDvalue
1101
2102

Создание таблицы

В сценариях электронной коммерции часто требуется собирать и анализировать статусы заказов по датам. В этом примере создайте таблицу с именем orders для хранения заказов, определите create_time и order_id, которые часто используются в качестве условий для фильтрации заказов, в качестве колонок уникального ключа, и определите две другие колонки, order_state и total_price, в качестве колонок значений. Таким образом, заказы могут обновляться в реальном времени по мере изменения их статусов и могут быть быстро отфильтрованы для ускорения запросов.

Инструкция для создания таблицы выглядит следующим образом:

CREATE TABLE orders (
create_time DATE NOT NULL COMMENT "create time of an order",
order_id BIGINT NOT NULL COMMENT "id of an order",
order_state INT COMMENT "state of an order",
total_price BIGINT COMMENT "price of an order"
)
UNIQUE KEY(create_time, order_id)
DISTRIBUTED BY HASH(order_id);

ВАЖНО

  • При создании таблицы необходимо указать колонку bucketing с помощью предложения DISTRIBUTED BY HASH. Для получения подробной информации см. bucketing.
  • Начиная с версии 2.5.7, Selena может автоматически устанавливать количество buckets (BUCKETS) при создании таблицы или добавлении partition. Вам больше не нужно вручную устанавливать количество buckets. Для получения подробной информации см. set the number of buckets.

Примечания по использованию

  • Уникальный ключ:

    • В инструкции CREATE TABLE уникальный ключ должен быть определен перед другими колонками.
    • Уникальный ключ должен быть явно определен с использованием UNIQUE KEY.
    • Уникальный ключ имеет ограничение уникальности.
  • Ключ сортировки:

    • Начиная с версии 3.3.0, ключ сортировки отделен от уникального ключа в таблице с уникальным ключом. Таблица с уникальным ключом поддерживает указание ключа сортировки с помощью ORDER BY и указание уникального ключа с помощью UNIQUE KEY. Колонки в ключе сортировки и уникальном ключе должны быть одинаковыми, но порядок колонок не обязательно должен быть одинаковым.

    • При выполнении запросов данные могут быть отфильтрованы на основе ключей сортировки перед агрегацией. Однако данные могут быть отфильтрованы на основе колонок значений после многоверсионной агрегации. Поэтому рекомендуется использовать часто фильтруемые поля в качестве ключей сортировки для фильтрации данных перед агрегацией и тем самым повышения производительности запросов.

  • При создании таблицы вы можете создавать только индексы Bitmap или индексы Bloom Filter на ключевых колонках таблицы.

Что делать дальше

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

примечание
  • При загрузке данных в таблицу, использующую таблицу с уникальным ключом, вы можете обновлять только все колонки таблицы. Например, при обновлении предыдущей таблицы orders вы должны обновить все её колонки: create_time, order_id, order_state и total_price.
  • При запросе данных из таблицы, использующей таблицу с уникальным ключом, Selena необходимо агрегировать записи нескольких версий данных. В этой ситуации большое количество версий данных снижает производительность запросов. Поэтому мы рекомендуем указывать подходящую частоту загрузки данных в таблицу, чтобы соответствовать вашим требованиям для аналитики данных в реальном времени, избегая при этом большого количества версий данных. Если вам требуются данные на уровне минут, вы можете указать частоту загрузки 1 минута вместо частоты загрузки 1 секунда.