带有 TO 子句的 Clickhouse 物化视图不支持分区



我使用TO语法将数据从物化视图移动到表。由于我需要定期从物化视图中清理旧分区,我尝试了以下语法,但没有成功:

CREATE MATERIALIZED VIEW counter_daily_mv
TO counter_daily
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(day) ORDER BY (device, count)
AS SELECT
when as day,
device,
value as count
FROM counter

但是PARTITION BY在没有TO的情况下工作(见下文(。如何解决问题,以便使用TO子句,并且仍然有效地清理物化视图?

CREATE MATERIALIZED VIEW counter_daily_mv
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(day) ORDER BY (device, count)
AS SELECT
when as day,
device,
value as count
FROM counter

这是预期行为:对于在TO表达式中定义的现有表,不能重新定义已经在其CREATE子句中定义的表的属性。

带有TO的MV不存储任何数据,它只是将其插入TO中定义的表中。

它需要为to中定义的表定义TTL子句,以自动删除额外数据:

CREATE TABLE test_source_data
(
`id` Int32,
`ts` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(ts)
ORDER BY id
CREATE TABLE test_mv_storage
(
`id` Int32,
`ts` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(ts)
ORDER BY id
TTL ts + INTERVAL 1 MONTH DELETE
CREATE MATERIALIZED VIEW test_mv TO test_mv_storage
AS
SELECT *
FROM test_source_data
WHERE id > 10

或者用TTL创建"可存储"MV(我更喜欢这种方式,因为它更紧凑(:

CREATE TABLE test_source_data
(
`id` Int32,
`ts` DateTime
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(ts)
ORDER BY id
CREATE MATERIALIZED VIEW test_mv_2
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(ts)
ORDER BY id 
TTL ts + INTERVAL 1 MONTH DELETE
AS
SELECT *
FROM test_source_data
WHERE id > 10

在第二种情况下,CH为MV.intern.test_MV_2创建隐藏表(调用db中的show tables以查看它(。


有关使用新TTL移动将物品放在其所属位置的详细信息,请参阅。

最新更新