sas - 高效地从 SAS 读取大型 MSSQL 表

标签 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=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/

相关文章:

sas - 将字符转换为数字 (SAS)

sql - 将 SAS 日期写入 SQL Server 数据库

variables - 通过 %let 定义 SAS 宏变量和调用 symput 之间的区别?

sas - SAS中的虚拟变量

windows - 如何使用 SAS 确定目录的大小(以 MB 为单位)(Windows)?

sas - 根据 SAS 中的第一次观察标记 ID

sas - 跨数据集使用变量

sas - Proc 制表 rowpctn 单独列百分比

sql - 我如何从最小和最大分组依据中获取日期?

sas - 无法访问 DATA 步骤中定义的变量值