Jon*_*han 10 database clickhouse
我查看了Clickhouse的文档,我没有看到UPDATE或DELETE的选项.在我看来它只是一个附加系统.是否有可能更新现有记录,或者是否有一些解决方法,例如截断包含已更改的记录的分区,然后重新存入该分区的整个数据?
uYS*_*foz 15
ClickHouse不支持真正的UPDATE/DELETE.但是可能的解决方法很少:
尝试以某种方式组织数据,不需要更新.您可以将更新事件的日志写入表,然后从该日志计算报告.因此,您不是更新现有记录,而是将新记录追加到表中.
使用表引擎在合并期间在后台执行数据转换.例如,(相当具体)CollapsingMergeTree表引擎: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)缺点是你不知道,何时完成后台合并,并且它将永远完成.
另请参阅samdoj的回答.
Sun*_*nny 10
通过 clickhouse 中的 Alter 查询,我们可以删除/更新表中的行。
对于删除:查询应构造为
ALTER TABLE testing.Employee DELETE WHERE Emp_Name='user4';
Run Code Online (Sandbox Code Playgroud)
对于更新:查询应构造为
ALTER TABLE testing.employee UPDATE AssignedUser='sunil' where AssignedUser='sunny';
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以删除并创建新表,但根据其大小,这可能非常耗时.你可以这样做:
删除,这样的东西可以工作.
INSERT INTO tableTemp SELECT * from table1 WHERE rowID != @targetRowID;
DROP table1;
INSERT INTO table1 SELECT * from tableTemp;
Run Code Online (Sandbox Code Playgroud)
同样,要更新行,您可以先以这种方式删除它,然后添加它.
最近的 ClickHouse 版本中添加了更新或删除数据的功能,但其昂贵的批处理操作不能太频繁地执行。
有关更多详细信息,请参阅https://clickhouse.yandex/docs/en/query_language/alter/#mutations 。