join - 合并而不重写一张表
问题描述
我想知道一些对我来说似乎没有效率的事情。
我有 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 然后更新,但它太慢了,因为加入更新似乎根本没有效率。
那么,有没有一种有效的方法可以在不重写这个巨大的表的情况下向现有表“添加列”?
谢谢!
解决方案
@Richard 的答案是完美的。如果您定期添加列,那么您的设计就有问题。您要么需要提供有关您正在做什么的更多详细信息,然后有人可以建议您。
我会尝试哈希连接。您可以找到简单哈希联接的代码。这是一种有效的连接方式,因为在您的情况下,如果它适合内存,您有一张大表和一张小表,它比左连接好得多。我已经使用和查询运行时间进行了各种连接(到 10 次)
通过改变表方法,您正在重写表,并且它会导致您的表锁定并且没有人可以使用该表。
您应该在工作量较少时执行此连接,这意味着在不在办公室期间,您可能需要在晚上安排作业,此时有更多 SAS 资源可用
推荐阅读
- format - Seaborn Scatter plot 中的图例:如何限制小数位数?
- c++ - B样条曲线与graphics.h c++
- javascript - 多条消息使 socket.io 应用程序变慢
- python - python ValueError:值不在列表中
- scala - 如何模拟 CacheAsyncApi
- dataframe - matplotlib:直方图显示不正确
- sql - 如何在sql中连续计算车辆在某个位置的时间
- kubernetes - 如何安装 acumos AI demeter 版?
- bash - 如何在 Azure Devops bash 任务中使用可能未定义的秘密变量
- r - 如何使用 R 列表中的值创建子集