我正在处理 SQL Server 中的一些相当大的表(超过 47,000 MB),并探索了更快地将数据导入 SAS 的方法。
我从以下代码开始,这需要很长时间:
LIBNAME SQL ODBC DSN='SQL Server' user=EMTCED pw=HdPS1eMtc9 schema=dbo;
data ED_TAT;
set sql.ED_TAT_Master;
run;
在做了一些研究后,我发现 (BULKLOAD=yes BL_METHOD=CLILOAD) 选项应该能提供一些缓解;但是,当将其添加到我的代码中时,出现以下错误。
LIBNAME SQL ODBC DSN='SQL Server' user=EMTCED pw=HdPS1eMtc9 schema=dbo;
data ED_TAT (BULKLOAD=yes BL_METHOD=CLILOAD);
set sql.ED_TAT_Master;
run;
ERROR 22-7: Invalid option name BULKLOAD.
是否有我遗漏的东西或其他更好的选择?谢谢!
最佳答案
BULKLOAD=yes
用于从 SAS 上传数据。将数据读入 SAS 不需要特殊标志。
两小时内 47 GB 似乎很慢,但我不确定您是否能在在线论坛中找到愿意帮助您解决问题的人。您是否试图找到瓶颈?您有足够的网络带宽吗?在 MSSQL 中查询同一个表是否更快?您是否看到 SAS 进程耗尽了 CPU 资源或等待 I/O?
如果我们将传输速度视为给定,您可以尝试减少下载的数据量:
- 使用
where
过滤行 suggested by @Reeza 仅保留
您需要的列- 或使用SQL Pass-through facility处理数据而不将其读入 SAS 或在 SQL Server 上预处理数据并进一步减少必须下载的数据量。
如果您有大量 varchar
列,您可能会看到性能不佳:SAS 字符列是固定长度的,因此 SAS 进程最终将写入大量空字节,除非您在您的计算机上设置 COMPRESS=yes输出数据集。我不确定,但它也可能对网络产生影响,因此您可以尝试在 SQL 传递中使用 substring()
来限制 SAS 必须处理的数据量。
关于sas - 高效地从 SAS 读取大型 MSSQL 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56808691/