sql - 高效设计工作流程以将表格合并在一起
问题描述
我需要创建一个大约有 20k 行、10k 列的表。该表将通过合并数十个源表(例如 A、B、C、..、F)来创建,并且必须相应地对列进行排序(首先是 A 中的列,然后是 B 中的列,等等)。表 A 设置了分母,并具有最终表中所需的所有观察结果。所有表都具有相同的唯一键用于连接/合并。
每个源表相互独立。并且在源表准备好之前,无法知道源表中要合并的列数/哪些列。或者有时,源表在合并后需要再次更新。
我一直在做 A 左连接 B,左连接 C,左连接 D ......,并且我有每个合并的输出增量保存。
在需要将 C 更新为 C* 并再次合并回来的情况下。有没有一种方法可以有效地做到这一点,而不是对 C* 之后的表重新执行诸如合并 C*、合并 D 之类的操作。
或者有时我已经准备好了 A、B、D...F。我按照顺序合并了它们。然后C就准备好了。我需要将 C 合并到 A、B,然后重新对其他表重复合并。有什么方法可以重新考虑最终输出的创建,以避免冗余?
此外,是否应该在这件事的所有源表中创建键索引?
解决方案
当我从 sql 数据库中提取数据时,这就是我所做的。我从不同的表中提取数据并主要按顺序创建单独的 sas 数据集,以便通过宏将它们分开合并。然后我根据公共键合并它们。
%macro merging(otds, dsnum, keyvar);
%do i=1 %to &dsnum;
data out&i;
set in&i;
if ^missing(&keyvar);
run;
%end;
%do i=1 %to &dsnum;
proc sort data=out&i nodupkey;
by &keyvar;
run;
%end;
data &otds;
merge
%do i = 1 %to &dsnum;
out&i
%end;
;
by &keyvar;
if &keyvar ne .;
run;
%mend;
%merge(outds,10,Key_Or_Id);
所以在上面的代码中,我有 10 个表 in1-in10 并且这些表与公共键合并。如果稍后更新这些表中的任何一个,那么我们可以使用相同的方法再次合并..希望这会有所帮助!
推荐阅读
- ios - 导航离开时 Xcode 自动保存文件
- r - 如何获取R图中选定点的颜色?
- ios - 你可以将数组类型传递给用 Metal 编写的 CIFilter 内核吗?
- javascript - 单击时检测SVG文件中的路径是什么
- excel - 如何从 Access VBA 引用 Excel 用户窗体
- php - 从 LOOP 的数组中获取特定值
- codeigniter-2 - 为什么我们必须用大写字母保存 CI 控制器类名的名称
- python - 从列出的字典中排除一组单词?
- java - `spring-boot-maven-plugin`和`maven-compiler-plugin`有什么区别?
- reactjs - 不知道在哪里使用 .map() 所以我可以看到我所有的 json 结果