【问题标题】:How do I select unique key, value pairs from an array into a materialized view in Clickhouse?如何从数组中选择唯一键、值对到 Clickhouse 的物化视图中?
【发布时间】:2021-04-13 14:18:36
【问题描述】:

表结构如下,

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)

如何生成具有类似于

的结构的物化视图
Host Key Values
host Key: X Values : ["uniq1", "uniq2"]

【问题讨论】:

    标签: sql clickhouse materialized-views


    【解决方案1】:

    MergeTree(created_date, (created_at), 8192)

    这种语法在 3 年前就已经过时了。尽量不要使用它。最终会被取消。

    ENGINE = MergeTree partition by toYYYYMM(created_date) ORDER by (created_at)

    创建表指标 ( `created_date` 日期, `created_at` 日期时间, `host` 低基数(字符串), `metrics_name` 低基数(字符串), `tags` 嵌套(键 LowCardinality(字符串),值 LowCardinality(字符串)) ) ENGINE = MergeTree 分区 toYYYYMM(created_date) ORDER by (created_at) 创建物化视图metrics_mv ( 主机低基数(字符串), 关键低基数(字符串), u_values SimpleAggregateFunction(groupUniqArrayArray, Array(String)) ) Engine=AggregatingMergeTree order by (host, key) as 选择主机, tags.key 作为键, groupUniqArray(tags.value) 作为 u_values 从指标数组连接标签 按主机、键分组 插入指标值(今天(),现在(),'h1','m1',['k1','k2'],['v1','v2']); 插入指标值(今天(),现在(),'h1','m1',['k1','k2'],['v1','v2']); 插入指标值(今天(),现在(),'h1','m1',['k1','k3'],['v11','v2']); 插入指标值(今天(),现在(),'h2','m1',['k1','k3'],['v1','v22']); 优化表metrics_mv final; 从metrics_mv中选择*; ┌─host─┬─key─┬─u_values─────┐ │ h1 │ k1 │ ['v11','v1'] │ │ h1 │ k2 │ ['v2'] │ │ h1 │ k3 │ ['v2'] │ │ h2 │ k1 │ ['v1'] │ │ h2 │ k3 │ ['v22'] │ └──────┴──────┴──────────────┘ 选择主机、键、groupUniqArrayArray(u_values) 值 来自metrics_mv 按主机、键分组 ┌─主机─┬─键─┬─值────────┐ │ h1 │ k2 │ ['v2'] │ │ h2 │ k3 │ ['v22'] │ │ h1 │ k3 │ ['v2'] │ │ h1 │ k1 │ ['v11','v1'] │ │ h2 │ k1 │ ['v1'] │ └──────┴──────┴──────────────┘

    【讨论】:

    【解决方案2】:

    考虑使用这个 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
    

    【讨论】:

      猜你喜欢
      • 2018-11-10
      • 2019-08-12
      • 2020-06-25
      • 2018-12-28
      • 2017-10-10
      • 2021-11-28
      • 1970-01-01
      • 2021-06-13
      • 2023-03-30
      相关资源
      最近更新 更多