【问题标题】:Clickhouse altering materialized view's selectClickhouse 改变物化视图的选择
【发布时间】:2018-11-10 08:38:17
【问题描述】:

我有以下设置:

CREATE TABLE IF NOT EXISTS request_income_buffer (
    timestamp UInt64,
    timestamp_micro Float32,
    traceId Int64,
    host String,
    type String,
    service String,
    message String,
    caller String,
    context String
) ENGINE = Kafka('kafka:9092', 'request_income', 'group', 'JSONEachRow');

CREATE MATERIALIZED VIEW IF NOT EXISTS request_income
ENGINE = MergeTree(date, microtime, 8192) AS
    SELECT
        toDate(toDateTime(timestamp)) AS `date`,
        toDateTime(timestamp) as `date_time`,
        timestamp,
        timestamp_micro AS `microtime`,
        traceId,
        host,
        type,
        service,
        message,
        caller,
        context
    FROM
        request_income_buffer;

我想添加新列,例如。 ipmy request_income 表。 根据文档,为了这样做,我需要执行以下步骤:

  1. 分离视图以停止接收来自 Kafka 的消息。

    DETACH TABLE request_income;

  2. 删除从 Kafka 流式传输数据的表,因为 Kafka 引擎不支持 ALTER 查询。

    DROP TABLE request_income_buffer

  3. 使用新字段重新创建从 Kafka 流式传输数据的表。

    如果不存在则创建表 request_income_buffer ( 时间戳 UInt64, timestamp_micro Float32, traceId Int64, 主机字符串, ip 字符串, 输入字符串, 服务字符串, 消息字符串, 调用者字符串, 上下文字符串 ) ENGINE = Kafka('kafka:9092', 'request_income', 'group', 'JSONEachRow');

  4. 根据这个post更新分离物化视图的.inner表

    ALTER TABLE `.inner.request_income` 在主机之后添加列 ip 字符串;

  5. 根据上面发布的更新视图的选择查询

  6. 附加视图

    附加表请求收入

问题是如何更新视图的选择查询?

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    试试这个:

    1. DETACH TABLE request_income;
    2. ALTER TABLE `.inner.request_income` ADD COLUMN ip String AFTER host;
    3. ATTACH MATERIALIZED VIEW request_income 
      ENGINE = MergeTree(date, microtime, 8192) AS
       SELECT
           toDate(toDateTime(timestamp)) AS `date`,
           toDateTime(timestamp) as `date_time`,
           timestamp,
           timestamp_micro AS `microtime`,
           traceId,
           host,
           ip,
           type,
           service,
           message,
           caller,
           context
       FROM
           request_income_buffer;
      

    【讨论】:

      【解决方案2】:

      所以看来更新物化视图的选择查询的方式如下:

      1. 获取视图元数据的路径

        SELECT metadata_path FROM system.tables WHERE name = 'request_income';

      2. 使用您喜欢的文本编辑器来修改视图的 sql。在我的情况下,编辑后的 ​​sql 看起来像

        附加物化视图 request_income ( 日期日期, date_time 日期时间, 时间戳 UInt64, 微时浮点32, traceId Int64, 主机字符串, ip 字符串, 输入字符串, 服务字符串, 消息字符串, 调用者字符串, 上下文字符串) ENGINE = MergeTree(date, microtime, 8192) AS SELECT toDate(toDateTime(timestamp)) 作为日期, toDateTime(timestamp) AS date_time, 时间戳, timestamp_micro AS 微时间, 跟踪标识, 主持人, ip, 类型, 服务, 信息, 呼叫者, context FROM default.request_income_buffer

      3. 附加修改后的视图

        附加表请求收入;

      【讨论】:

      • 如果表属于ReplicatedMergeTree 家族,这会受到怎样的影响?
      猜你喜欢
      • 2021-11-28
      • 2021-12-06
      • 2021-07-24
      • 2021-10-09
      • 2019-01-28
      • 2018-12-28
      • 2021-06-13
      • 2021-04-13
      • 2021-01-09
      相关资源
      最近更新 更多