【问题标题】:Append to array in Clickhouse追加到 Clickhouse 中的数组
【发布时间】:2017-10-22 05:23:01
【问题描述】:

是否可以将某个值附加到 Clickhouse 中满足特定条件的所有记录,如果不是,还有其他选项可以做到这一点。

【问题讨论】:

标签: database clickhouse


【解决方案1】:

您不能修改表中的数据,因为 ClickHouse 中的所有数据都是不可变的。

但是:您可以在选择过程中即时添加,或者您可以创建一个视图来为您完成。

如果您确实需要以更改状态存储该列 - 您需要创建表副本或物化视图。

这些函数很有用,arrayConcat、arrayPushBack、arrayPushFront(文档即将发布)。

所以

SELECT
  CASE
    WHEN condition > 10 THEN arrayPushBack(array_field, 'extra_element')
    ELSE array_field
  END
FROM 
(
    SELECT 
        10 AS condition, ['a', 'b'] AS array_field
    UNION ALL 
    SELECT 
        101, ['c', 'd']
);

【讨论】:

    【解决方案2】:

    但是,Clickhouse 目前不支持编辑表格中的行。 可以在可以修改源数组的地方添加带有表达式的列,然后结合添加/删除列命令实现交换列逻辑。

    然后 Clickhouse 允许使用命令 ALTER TABLE table_name DROP COLUMN column_name 删除列。可以删除源列,并从与源列同名的中间列中创建一个包含所需数组的列。

    但是您可以删除/添加不参与索引键的列,我会提醒您,此解决方案对于为大表添加/删除列可能会消耗大量资源。

    【讨论】:

      【解决方案3】:

      clickhouse 不支持更新和删除,因此不可能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-02-25
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 2011-09-03
        • 1970-01-01
        • 1970-01-01
        • 2019-05-30
        相关资源
        最近更新 更多