【发布时间】:2017-10-22 05:23:01
【问题描述】:
是否可以将某个值附加到 Clickhouse 中满足特定条件的所有记录,如果不是,还有其他选项可以做到这一点。
【问题讨论】:
-
你试过了吗?
-
我试图在此处的文档中搜索它 (clickhouse.yandex/reference_en.html) 但找不到它。
标签: database clickhouse
是否可以将某个值附加到 Clickhouse 中满足特定条件的所有记录,如果不是,还有其他选项可以做到这一点。
【问题讨论】:
标签: database clickhouse
您不能修改表中的数据,因为 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']
);
【讨论】:
但是,Clickhouse 目前不支持编辑表格中的行。 可以在可以修改源数组的地方添加带有表达式的列,然后结合添加/删除列命令实现交换列逻辑。
然后 Clickhouse 允许使用命令 ALTER TABLE table_name DROP COLUMN column_name 删除列。可以删除源列,并从与源列同名的中间列中创建一个包含所需数组的列。
但是您可以删除/添加不参与索引键的列,我会提醒您,此解决方案对于为大表添加/删除列可能会消耗大量资源。
【讨论】:
clickhouse 不支持更新和删除,因此不可能。
【讨论】: