附加到 Clickhouse 中的数组
Append to array in Clickhouse
是否可以为 Clickhouse 中满足特定条件的所有记录附加特定值,如果不能,有什么其他选项可以做到这一点。
Clickhouse 不支持更新和删除,因此不可能。
您不能修改table中的数据,因为ClickHouse中的所有数据都是immutable。
但:您可以在 select 期间即时添加 ,或者您可以创建一个 VIEW 来完成给你。
如果您确实需要以更改后的状态存储该列 - 您需要创建 table 副本或实体化视图。
这些函数可能对 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 目前不支持编辑 table 中的行。
可以添加一个带有表达式的列,其中可以修改源数组,然后通过组合 add/drop 列命令实现交换列逻辑。
然后 Clickhouse 允许使用命令 ALTER TABLE table_name DROP COLUMN column_name 删除列。可以删除源列并从与源列同名的中间列创建一个包含所需数组的列。
但是您可以 drop/add 不参与索引键的列,我要提醒的是,对于大 tables 的 adding/dropping 列,此解决方案可能会消耗大量资源.
是否可以为 Clickhouse 中满足特定条件的所有记录附加特定值,如果不能,有什么其他选项可以做到这一点。
Clickhouse 不支持更新和删除,因此不可能。
您不能修改table中的数据,因为ClickHouse中的所有数据都是immutable。
但:您可以在 select 期间即时添加 ,或者您可以创建一个 VIEW 来完成给你。
如果您确实需要以更改后的状态存储该列 - 您需要创建 table 副本或实体化视图。
这些函数可能对 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 目前不支持编辑 table 中的行。 可以添加一个带有表达式的列,其中可以修改源数组,然后通过组合 add/drop 列命令实现交换列逻辑。
然后 Clickhouse 允许使用命令 ALTER TABLE table_name DROP COLUMN column_name 删除列。可以删除源列并从与源列同名的中间列创建一个包含所需数组的列。
但是您可以 drop/add 不参与索引键的列,我要提醒的是,对于大 tables 的 adding/dropping 列,此解决方案可能会消耗大量资源.