Настройка времени жизни строк (TTL) таблицы
В этом разделе приведены примеры настройки TTL строковых и колоночных таблиц при помощи YDB SDK.
Включение TTL для существующих строковых и колоночных таблиц
В приведенном ниже примере строки таблицы mytable будут удаляться спустя час после наступления времени, записанного в колонке created_at:
session.AlterTable(
"mytable",
TAlterTableSettings()
.BeginAlterTtlSettings()
.Set("created_at", TDuration::Hours(1))
.EndAlterTtlSettings()
);
err := session.AlterTable(ctx, "mytable",
options.WithSetTimeToLiveSettings(
options.NewTTLSettings().ColumnDateType("created_at").ExpireAfter(time.Hour),
),
)
session.alter_table('mytable', set_ttl_settings=ydb.TtlSettings().with_date_type_column('created_at', 3600))
Функциональность на данный момент не поддерживается.
AlterTableSettings settings = new AlterTableSettings()
.setTableTtl(TableTtl.dateTimeColumn("created_at", 3600));
session.alterTable("mytable", settings).join().expectSuccess();
Следующий пример демонстрирует использование колонки modified_at с числовым типом (Uint32) в качестве TTL-колонки. Значение колонки интерпретируется как секунды от Unix-эпохи:
session.AlterTable(
"mytable",
TAlterTableSettings()
.BeginAlterTtlSettings()
.Set("modified_at", TTtlSettings::EUnit::Seconds, TDuration::Hours(1))
.EndAlterTtlSettings()
);
err := session.AlterTable(ctx, "mytable",
options.WithSetTimeToLiveSettings(
options.NewTTLSettings().ColumnSeconds("modified_at").ExpireAfter(time.Hour),
),
)
session.alter_table('mytable', set_ttl_settings=ydb.TtlSettings().with_value_since_unix_epoch('modified_at', UNIT_SECONDS, 3600))
Функциональность на данный момент не поддерживается.
AlterTableSettings settings = new AlterTableSettings()
.setTableTtl(TableTtl.valueSinceUnixEpoch(
"modified_at",
TableTtl.TtlUnit.SECONDS,
3600
));
session.alterTable("mytable", settings).join().expectSuccess();
Включение вытеснения во внешнее S3-совместимое хранилище
Важно
Поддерживается только для колоночных таблиц. Поддержка функциональности для строковых таблиц находится в разработке.
Для включения вытеснения требуется объект external data source, описывающий подключение к внешнему хранилищу. Создание объекта external data source возможно через YQL и YDB CLI.
В следующем примере строки таблицы mytable будут переноситься в бакет, описанный во внешнем источнике данных /Root/s3_cold_data, спустя час после наступления времени, записанного в колонке created_at, а спустя 24 часа будут удаляться:
session.AlterTable(
"mytable",
TAlterTableSettings()
.BeginAlterTtlSettings()
.Set("created_at", {
TTtlTierSettings(TDuration::Hours(1), TTtlEvictToExternalStorageAction("/Root/s3_cold_data")),
TTtlTierSettings(TDuration::Hours(24), TTtlDeleteAction("/Root/s3_cold_data"))
})
.EndAlterTtlSettings()
);
Функциональность на данный момент не поддерживается.
Функциональность на данный момент не поддерживается.
Функциональность на данный момент не поддерживается.
Функциональность на данный момент не поддерживается.
Включение TTL для вновь создаваемой таблицы
Для вновь создаваемой таблицы можно передать настройки TTL вместе с ее описанием:
session.CreateTable(
"mytable",
TTableBuilder()
.AddNullableColumn("id", EPrimitiveType::Uint64)
.AddNullableColumn("expire_at", EPrimitiveType::Timestamp)
.SetPrimaryKeyColumn("id")
.SetTtlSettings("expire_at")
.Build()
);
err := session.CreateTable(ctx, "mytable",
options.WithColumn("id", types.Optional(types.TypeUint64)),
options.WithColumn("expire_at", types.Optional(types.TypeTimestamp)),
options.WithTimeToLiveSettings(
options.NewTTLSettings().ColumnDateType("expire_at"),
),
)
session.create_table(
'mytable',
ydb.TableDescription()
.with_column(ydb.Column('id', ydb.OptionalType(ydb.DataType.Uint64)))
.with_column(ydb.Column('expire_at', ydb.OptionalType(ydb.DataType.Timestamp)))
.with_primary_key('id')
.with_ttl(ydb.TtlSettings().with_date_type_column('expire_at'))
)
Функциональность на данный момент не поддерживается.
TableDescription description = TableDescription.newBuilder()
.addNullableColumn("id", PrimitiveType.Uint64)
.addNullableColumn("expire_at", PrimitiveType.Timestamp)
.setPrimaryKey("id")
.setTtlSettings(TableTtl.dateTimeColumn("expire_at", 0))
.build();
session.createTable("mytable", description).join().expectSuccess();
Выключение TTL
session.AlterTable(
"mytable",
TAlterTableSettings()
.BeginAlterTtlSettings()
.Drop()
.EndAlterTtlSettings()
);
err := session.AlterTable(ctx, "mytable",
options.WithDropTimeToLive(),
)
session.alter_table('mytable', drop_ttl_settings=True)
Функциональность на данный момент не поддерживается.
AlterTableSettings settings = new AlterTableSettings()
.setTableTtl(TableTtl.notSet());
session.alterTable("mytable", settings).join().expectSuccess();
Получение настроек TTL
Текущие настройки TTL можно получить из описания таблицы:
auto desc = session.DescribeTable("mytable").GetValueSync().GetTableDescription();
auto ttl = desc.GetTtlSettings();
desc, err := session.DescribeTable(ctx, "mytable")
if err != nil {
// process error
}
ttl := desc.TimeToLiveSettings
desc = session.describe_table('mytable')
ttl = desc.ttl_settings
Функциональность на данный момент не поддерживается.
TableTtl ttl = session.describeTable("mytable").join().getValue().getTableDescription().getTableTtl();