如果您想要MERGE语句的示例,请点击链接。这是 Vertica 文档的链接。请记住清楚地遵循说明。您不能使用WHEN NOT MATCHED
跟随的和编写合并WHEN MATCHED
。它必须遵循文档中使用说明中给出的顺序(反之亦然)。但是您可以选择完全省略一个。
我不确定,如果您知道在 Vertica 中,更新或删除的数据并没有真正从表中删除,而只是标记为“已删除”。这种数据可以通过运行手动删除:SELECT PURGE_TABLE('schemaName.tableName');
您可能需要超级用户权限才能在该架构上执行此操作。可以在此处阅读有关此内容的更多信息:Vertica 文档;清除数据。Vertica 网站上的一个示例:使用 MERGE 同时更新和插入
我同意 Vertica 6.0 版支持 Merge。但如果 Vertica 的 AHM 或 epoch 管理设置被设置为保存大量历史(已删除)数据,则会减慢您的更新速度。更新速度可能会从糟糕到糟糕到可怕。
我通常会在更新表后对表执行清除操作来清除已删除(旧)数据。这有助于保持更新的速度。合并在您肯定需要运行更新的情况下很有用。尤其是增量每日更新,可能会更新数百万行。
得到您的答案:我认为 Vertica 不支持合并中的子查询。你会得到以下。
ERROR 0: Subquery in MERGE is not supported
当我有类似的用例时,我使用子查询创建了一个视图,并使用新创建的视图作为我的源表合并到目标表中。这应该可以让您继续在 Vertica 中使用 MERGE 操作,而常规 PURGE 应该可以让您保持快速更新。
事实上,如果您在 ON 子句中使用正确的字段组合,合并也有助于避免插入或更新期间的重复条目,理想情况下,这应该是主键上的连接。