问题描述
表结构如下,
CREATE TABLE metrics
(
`created_date` Date,`created_at` DateTime,`host` LowCardinality(String),`metrics_name` LowCardinality(String),`tags` Nested(key LowCardinality(String),value LowCardinality(String))
)
ENGINE = MergeTree(created_date,(created_at),8192)
如何生成具有类似结构的物化视图
主持人 | 键 | 价值观 |
---|---|---|
主机 | 键:X | 值:["uniq1","uniq2"] |
解决方法
考虑使用这个MV:
CREATE MATERIALIZED VIEW metrics_mv
ENGINE = MergeTree()
ORDER BY host AS
SELECT
host,tags.key key,groupArray(tags.value) values /* or 'groupUniqArray(tags.value) AS values' to get unique values */
FROM metrics
ARRAY JOIN tags
GROUP BY
host,tags.key
,
MergeTree(created_date,(created_at),8192)
此语法在 3 年多前就已过时。尽量不要使用它。最终会被取消。
ENGINE = MergeTree partition by toYYYYMM(created_date) ORDER by (created_at)
CREATE TABLE metrics ( `created_date` Date,`created_at` DateTime,`host` LowCardinality(String),`metrics_name` LowCardinality(String),`tags` Nested(key LowCardinality(String),value LowCardinality(String)) ) ENGINE = MergeTree partition by toYYYYMM(created_date) ORDER by (created_at) create materialized view metrics_mv ( host LowCardinality(String),key LowCardinality(String),u_values SimpleAggregateFunction(groupUniqArrayArray,Array(String)) ) Engine=AggregatingMergeTree order by (host,key) as select host,tags.key as key,groupUniqArray(tags.value) as u_values from metrics array join tags group by host,key insert into metrics values(today(),now(),'h1','m1',['k1','k2'],['v1','v2']); insert into metrics values(today(),'k3'],['v11','h2','v22']); optimize table metrics_mv final; select * from metrics_mv; ┌─host─┬─key─┬─u_values─────┐ │ h1 │ k1 │ ['v11','v1'] │ │ h1 │ k2 │ ['v2'] │ │ h1 │ k3 │ ['v2'] │ │ h2 │ k1 │ ['v1'] │ │ h2 │ k3 │ ['v22'] │ └──────┴─────┴──────────────┘ select host,key,groupUniqArrayArray(u_values) values from metrics_mv group by host,key ┌─host─┬─key─┬─values───────┐ │ h1 │ k2 │ ['v2'] │ │ h2 │ k3 │ ['v22'] │ │ h1 │ k3 │ ['v2'] │ │ h1 │ k1 │ ['v11','v1'] │ │ h2 │ k1 │ ['v1'] │ └──────┴─────┴──────────────┘