有效地从SAS读取大型MSSQL表

时间:2019-06-28 14:24:46

标签: sas

我正在使用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 =是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.

是否有我缺少的东西,或者其他可以更好地工作的选择?谢谢!

1 个答案:

答案 0 :(得分:1)

BULKLOAD=yes用于从SAS 上载数据。将数据读入SAS不需要特殊标志。

在两个小时内

47 GB的速度似乎很慢,但是我不确定您是否会在网上论坛中找到愿意帮助您进行故障排除的人。您是否试图找到瓶颈?您有足够的网络带宽吗?在MSSQL中查询同一表是否更快?您是否看到SAS进程使CPU耗尽或等待I / O?

如果我们将传输速度视为既定速度,则可以尝试减少下载的数据量:

  • 使用where作为suggested by @Reeza过滤行
  • keep仅需要的列
  • 或使用SQL Pass-through facility处理数据而不将其读入SAS或对SQL Server上的数据进行预处理,从而进一步减少了必须下载的数据量。

如果您有许多varchar列,则可能会发现性能不佳:SAS字符列是固定长度的,因此,除非您在输出数据集上设置COMPRESS = yes,否则SAS进程最终将写入大量的空字节。 。我不确定,但是它可能也会对网络产生影响,因此您可以尝试在SQL pass中使用substring()来限制SAS必须处理的数据量。