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

Таблица Unique Key

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

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

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

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

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

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

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

Как показано в следующей таблице, 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);

УВЕДОМЛЕНИЕ

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

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

  • Unique Key:

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

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

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

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

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

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

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