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当前不支持编辑表中的行。可以使用表达式添加一列,在其中可以修改源数组,然后通过组合add/drop列命令来实现交换列逻辑。 然后,clickhouse允许使用alter table table\u name drop column column\u name命令删除列。可以删除源列,并从与源列同名的中间列创建一个包含所需数组的列。 但是您可以删除/添加不参与索引键的列,我要提醒的是,对于添加/删除大型表的列,此解决方案可能会消耗大量资源。
3条答案
按热度按时间c0vxltue1#
不能修改表中的数据,因为clickhouse中的所有数据都是不可变的。
但是:您可以在选择过程中动态添加,也可以创建一个视图来为您执行此操作。
如果确实需要将该列存储在已更改的状态中,则需要创建表副本或物化视图。
这些函数可以在arrayconcat、arraypushback、arraypushfront中使用(文档即将提供)。
所以呢
fykwrbwg2#
但是,clickhouse当前不支持编辑表中的行。可以使用表达式添加一列,在其中可以修改源数组,然后通过组合add/drop列命令来实现交换列逻辑。
然后,clickhouse允许使用alter table table\u name drop column column\u name命令删除列。可以删除源列,并从与源列同名的中间列创建一个包含所需数组的列。
但是您可以删除/添加不参与索引键的列,我要提醒的是,对于添加/删除大型表的列,此解决方案可能会消耗大量资源。
lxkprmvk3#
clickhouse不支持更新和删除,因此不可能。