首页 > 解决方案 > 合并而不重写一张表

问题描述

我想知道一些对我来说似乎没有效率的事情。

我有 2 个表,一个非常大的表 DATA(数百万行和数百列),以 id 作为主键。

然后我有另一个表 NEW_COL,它有可变行(1 到数百万),但总是有 2 个 cols:id 和 new_col_name。

我想更新第一个表,将 new_data 添加到其中。

当然,我知道如何使用 proc sql/left join 或 data step/merge 来做到这一点。

然而,就我所看到的时间执行而言,这似乎效率低下(这可能是错误的),这两种完全重写大表的方法,即使 NEW_DATA 只有 1 行(几乎 1 分钟)。

我尝试做 2 个 sql,先用 alter table add column 然后更新,但它太慢了,因为加入更新似乎根本没有效率。

那么,有没有一种有效的方法可以在不重写这个巨大的表的情况下向现有表“添加列”?

谢谢!

标签: joinmergesas

解决方案


@Richard 的答案是完美的。如果您定期添加列,那么您的设计就有问题。您要么需要提供有关您正在做什么的更多详细信息,然后有人可以建议您。

我会尝试哈希连接。您可以找到简单哈希联接的代码。这是一种有效的连接方式,因为在您的情况下,如果它适合内存,您有一张大表和一张小表,它比左连接好得多。我已经使用和查询运行时间进行了各种连接(到 10 次)

通过改变表方法,您正在重写表,并且它会导致您的表锁定并且没有人可以使用该表。

您应该在工作量较少时执行此连接,这意味着在不在办公室期间,您可能需要在晚上安排作业,此时有更多 SAS 资源可用


推荐阅读