Настройка времени жизни строк (TTL) таблицы

В этом разделе приведены примеры настройки TTL строковых и колоночных таблиц при помощи YQL.

Включение TTL для существующих строковых и колоночных таблиц

В приведенном ниже примере строки таблицы mytable будут удаляться спустя час после наступления времени, записанного в колонке created_at:

ALTER TABLE `mytable` SET (TTL = Interval("PT1H") ON created_at);

Совет

Interval создается из строкового литерала в формате ISO 8601 с некоторыми ограничениями.

Следующий пример демонстрирует использование колонки modified_at с числовым типом (Uint32) в качестве TTL-колонки. Значение колонки интерпретируется как секунды от Unix-эпохи:

ALTER TABLE `mytable` SET (TTL = Interval("PT1H") ON modified_at AS SECONDS);

Включение вытеснения данных во внешнее S3-совместимое хранилище

Внимание

Поддерживается только для колоночных таблиц. Поддержка функциональности для строковых таблиц находится в разработке.

Для включения вытеснения требуется объект external data source, описывающий подключение к внешнему хранилищу.
В приведённом ниже примере создаётся external data source /Root/s3_cold_data: он описывает подключение к бакету test_cold_data, расположенному в Yandex Object Storage, с авторизацией через статический ключ доступа, данные которого хранятся в секретах access_key и secret_key.

CREATE OBJECT access_key (TYPE SECRET) WITH (value="...");
CREATE OBJECT secret_key (TYPE SECRET) WITH (value="...");

CREATE EXTERNAL DATA SOURCE `/Root/s3_cold_data` WITH (
    SOURCE_TYPE="ObjectStorage",
    AUTH_METHOD="AWS",
    LOCATION="http://storage.yandexcloud.net/test_cold_data",
    AWS_ACCESS_KEY_ID_SECRET_NAME="access_key",
    AWS_SECRET_ACCESS_KEY_SECRET_NAME="secret_key",
    AWS_REGION="ru-central1"
)

Используя объект external data source, можно включить вытеснение данных следующим образом.

В следующем примере строки таблицы mytable будут переноситься в бакет, описанный во внешнем источнике данных /Root/s3_cold_data, спустя час после наступления времени, записанного в колонке created_at, а спустя 24 часа будут удаляться:

ALTER TABLE `mytable` SET (
    TTL =
        Interval("PT1H") TO EXTERNAL DATA SOURCE `/Root/s3_cold_data`,
        Interval("PT24H") DELETE
    ON modified_at AS SECONDS
);

В следующем примере строки таблицы mytable будут переноситься в бакет /Root/s3_cold через час и в бакет /Root/s3_frozen через 30 дней после наступления времени, записанного в колонке created_at:

ALTER TABLE `mytable` SET (
    TTL =
        Interval("PT1H") TO EXTERNAL DATA SOURCE `/Root/s3_cold`,
        Interval("PT30D") TO EXTERNAL DATA SOURCE `/Root/s3_frozen`
    ON modified_at AS SECONDS
);

Включение TTL для вновь создаваемой таблицы

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

CREATE TABLE `mytable` (
  id Uint64,
  expire_at Timestamp,
  PRIMARY KEY (id)
) WITH (
  TTL = Interval("PT0S") ON expire_at
);

Выключение TTL

ALTER TABLE `mytable` RESET (TTL);
Предыдущая