我查看了clickhouse的文档,没有看到更新或删除的选项。在我看来,这是一个只附加的系统。是否有可能更新现有的记录,或者是否有一些解决方法,比如截断一个分区中有已更改的记录,然后重新插入该分区的整个数据?
dvtswwa31#
clickhouse不支持真正的更新/删除。但几乎没有可行的解决办法:试图以一种不需要更新的方式组织数据。您可以将更新事件日志写入表,然后根据该日志计算报告。因此,不更新现有记录,而是将新记录追加到表中。使用在合并期间在后台进行数据转换的表引擎。例如,(相当具体)CollasingMergeTree表引擎:https://clickhouse.yandex/reference_en.html#collapsingmergetree 还有replacingmergetree表引擎(还没有文档记录,您可以在测试中找到示例:https://github.com/yandex/clickhouse/blob/master/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql)缺点是,您不知道什么时候会进行后台合并,也不知道是否会进行后台合并。再看看桑多吉的答案。
ie3xauqp2#
通过clickhouse中的alterquery,我们可以删除/更新表中的行。对于delete:查询应构造为
ALTER TABLE testing.Employee DELETE WHERE Emp_Name='user4';
对于更新:查询应构造为
ALTER TABLE testing.employee UPDATE AssignedUser='sunil' where AssignedUser='sunny';
vhmi4jdf3#
您可以删除和创建新表,但根据表的大小,这可能非常耗时。你可以这样做:对于删除,类似的东西可以工作。
INSERT INTO tableTemp SELECT * from table1 WHERE rowID != @targetRowID; DROP table1; INSERT INTO table1 SELECT * from tableTemp;
类似地,要更新一行,可以先用这种方式删除它,然后再添加它。
sh7euo9m4#
在最近的clickhouse版本中增加了更新或删除数据的功能,但是其昂贵的批处理操作不能太频繁地执行。看到了吗https://clickhouse.yandex/docs/en/query_language/alter/#mutations 更多细节。
i5desfxk5#
这是一个老问题,但是clickhouse现在支持更新。注意:由于性能原因,不建议进行许多小的更改。但这是可能的。语法:
ALTER TABLE [db.]table UPDATE column1 = expr1 [, ...] WHERE filter_expr
clickhouse更新文档
5条答案
按热度按时间dvtswwa31#
clickhouse不支持真正的更新/删除。但几乎没有可行的解决办法:
试图以一种不需要更新的方式组织数据。您可以将更新事件日志写入表,然后根据该日志计算报告。因此,不更新现有记录,而是将新记录追加到表中。
使用在合并期间在后台进行数据转换的表引擎。例如,(相当具体)CollasingMergeTree表引擎:https://clickhouse.yandex/reference_en.html#collapsingmergetree 还有replacingmergetree表引擎(还没有文档记录,您可以在测试中找到示例:https://github.com/yandex/clickhouse/blob/master/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql)缺点是,您不知道什么时候会进行后台合并,也不知道是否会进行后台合并。
再看看桑多吉的答案。
ie3xauqp2#
通过clickhouse中的alterquery,我们可以删除/更新表中的行。
对于delete:查询应构造为
对于更新:查询应构造为
vhmi4jdf3#
您可以删除和创建新表,但根据表的大小,这可能非常耗时。你可以这样做:
对于删除,类似的东西可以工作。
类似地,要更新一行,可以先用这种方式删除它,然后再添加它。
sh7euo9m4#
在最近的clickhouse版本中增加了更新或删除数据的功能,但是其昂贵的批处理操作不能太频繁地执行。
看到了吗https://clickhouse.yandex/docs/en/query_language/alter/#mutations 更多细节。
i5desfxk5#
这是一个老问题,但是clickhouse现在支持更新。注意:由于性能原因,不建议进行许多小的更改。但这是可能的。
语法:
clickhouse更新文档