Considerations for Using Data Transfer Services

Use Compute Services to Access Large Data Resources

Transferring a copy of the data to another file system creates multiple copies of the data. If the data that is stored on the server is updated frequently, keeping a local copy of the data that is reasonably current might be impossible. In addition, security restrictions at your site might prohibit multiple copies of the data. In this case, if the amount of data that is involved is large, consider using Compute Services instead.

Use Remote Library Services to Access Small to Medium Data Resources

If the client accesses a small to medium amount of data, Remote Library Services allows the processing to occur at the client, with the data coming from the server as the execution requests it. If you use a GUI application to access data that requires transparent access to remote data, you might want to use Remote Library Services.

Use a Combination of Services

There might be situations in which a combination of services is the best choice. For examples of combined services, see Examples of Combining Compute Services and Data Transfer Services and Example of Combining RLS and Data Transfer Services (DTS). To understand these examples, you must be familiar with the syntax for the UPLOAD Procedure and the DOWNLOAD Procedure.

File Transfer Performance

Network File Compression

By default, SAS/CONNECT uses network file compression whenever a file is transferred between a client and a server by using the UPLOAD and DOWNLOAD procedures.
SAS/CONNECT 8.2 introduced a network file compression algorithm that significantly improved performance for large data transfers. A large transfer is defined as a file whose size is 32K bytes or larger. In general, the larger the file, the greater the potential for a performance gain.
The goal of network file compression is to reduce the number of buffers that must be sent when uploading and downloading files across a network. In order to reduce the number of buffers that are used, buffers are packed to capacity for each network transfer.
The algorithm uses run-length encoding and sliding window compression. Consecutive occurrences of a single byte are compressed by using run-length encoding, and patterns of characters are compressed by using a sliding window that stores an offset to the previously occurring pattern in the compressed data.
However, performance benefits that result from data compression depend on the data itself. For example, significant compression that yields a performance benefit is expected for data that contains a regularly repeating pattern. However, for data that does not contain a regularly repeating pattern, compression would not produce a significant performance benefit.
To take advantage of the compression algorithm, both the SAS/CONNECT client and the server must run SAS/CONNECT 8.2 or a later release of SAS software.

Data File Compression to Disk

By contrast, you can specify that a file be compressed when it is written to disk by using the COMPRESS= data set option. For more information, see SAS Data Set Options: Reference .
The following statements show how to specify that a data set should be compressed when it is uploaded to disk:
data tax01 (compress=yes);
proc upload data=state out=fed;
Note: If the COMPRESS=YES data set option is not specified, the data set is not compressed before it is uploaded.
At the client, the following tasks are implicitly performed:
  • The engine decompresses the data set as it is read from disk.
  • PROC UPLOAD compresses the observations in the data set as they are put into a buffer for transfer to the server.
At the server, the following tasks are implicitly performed:
  • PROC UPLOAD receives the buffer and decompresses the data set so that the observations can be written.
  • The engine writes the decompressed data set to disk.
    Note: In order to write the compressed data set to disk, you have to specify the COMPRESS=YES data set option as an argument in the OUT= option. Here is an example:
    proc upload data=state out=fed (compress=yes);