【发布时间】:2015-08-22 20:54:20
【问题描述】:
我有一个包含 1000 万行和 1800 列的 SAS 主数据集。我需要使用具有 1500 万条记录的事务数据集更新 10 列,仅用于具有匹配键的记录。 我尝试使用以下代码运行 proc sql update 语句。
proc sql;
UPDATE lib1.master1 a
SET col1 = (SELECT col1 FROM lib1.changes_1 b WHERE a.key=b.key),
col2 = (SELECT col2 FROM lib1.changes_1 b WHERE a.key=b.key),
col3 = (SELECT col3 FROM lib1.changes_1 b WHERE a.key=b.key),
col4 = (SELECT col4 FROM lib1.changes_1 b WHERE a.key=b.key),
col5 = (SELECT col5 FROM lib1.changes_1 b WHERE a.key=b.key),
col6 = (SELECT col6 FROM lib1.changes_1 b WHERE a.key=b.key),
col7 = (SELECT col7 FROM lib1.changes_1 b WHERE a.key=b.key),
col8 = (SELECT col8 FROM lib1.changes_1 b WHERE a.key=b.key),
col9 = (SELECT col9 FROM lib1.changes_1 b WHERE a.key=b.key)
WHERE EXISTS ( SELECT 1 FROM lib1.changes_1 b WHERE A.key = B.key);
quit;
为了测试目的,我只尝试了 col1,它已经运行了 4 个多小时。
我可以通过删除 10 列然后左连接来考虑数据合并,但这会改变列的顺序。重新排序 1800 列将再次成为一项乏味的任务。
有更快/更有效的技术吗?
【问题讨论】:
-
仅供参考 - 不幸的是,SAS 支持的 SQL 更新几乎总是很糟糕。 SQL 在 SAS 中有很多用途,但更新几乎不应该是一个,除非它是一个不是来自表的单值更新。无论出于何种原因,这 总是 似乎非常慢,即使对于不是那么大的数据集,甚至对于 SQL Server 中的更新都非常快。
标签: sql performance sas large-data