例: SASエンジンを使用してSASデータを処理する

例: LIBNAMEステートメントでV9エンジンを割り当てる

コード例

このライブラリ割り当ては、V9エンジンを指定します。


libname myfiles v9 'library-path'; /*1*/
data myfiles.myclass;              /*2*/
   set sashelp.class;
run;
  1. LIBNAMEステートメントは、myfilesライブラリ参照名とV9エンジンをライブラリの場所に割り当てます。library-pathをライブラリの場所に置き換えます。この場所はすでに存在しており、SAS Compute Serverからアクセスできる必要があります。

  2. DATAステップは、sashelpライブラリからclassデータセットをコピーすることにより、myfilesライブラリにmyclassデータセットを作成します。

V9ライブラリ割り当てが成功したことを示すSASログ
1    libname myfiles v9 'library-path';
NOTE: Libref MYFILES was successfully assigned as follows:
      Engine:        V9
      Physical Name: library-path
2  !                                     
3    data myfiles.myclass;               
4       set sashelp.class;
5    run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set MYFILES.MYCLASS has 19 observations and 5 variables.

要点

  • LIBNAMEステートメントは、プログラムでライブラリを割り当てる一般的な方法です。ライブラリ割り当ては、ライブラリ参照名、エンジン、物理的な場所、エンジンまたは環境に固有のオプションで構成されます。
  • SAS® Viya®でライブラリを割り当てるときは、その場所がすでに存在しており、計算サーバーからアクセスできる必要があります。
  • 出荷時のデフォルトのBase SASエンジンはBASEであり、これはV9エンジンのエイリアスです。
  • 新しいライブラリを作成するときにエンジン名を指定せず、ENGINEシステムオプションを指定していない場合は、V9エンジンが自動的に選択されます。
  • ライブラリの場所にすでにSASファイルが含まれている場合は、SASでそれらのファイルに基づいて正しいエンジンを割り当てることもできます。たとえば、場所にV9データセットのみが含まれている場合、SASはV9エンジンを割り当てます。ただし、ライブラリの場所に異なるエンジンファイルが混在している場合、SASでは必要なエンジンを割り当てられないことがあります。したがって、エンジンを指定することがベストプラクティスです。

例: LIBNAMEステートメントでSPD Engineを割り当てる

コード例

SPD Engineの次のLIBNAMEステートメントは、V9エンジンのLIBNAMEステートメントと非常に似ています。


libname mylib spde 'library-path'        /*1*/
   datapath=('path-for-data-partitions') /*2*/
   indexpath=('path-for-indexes');       /*3*/
  1. LIBNAMEステートメントのこの部分では、mylibライブラリ参照名とSPD Engineをプライマリパス名に割り当てます。データセットの最初(通常は唯一)のメタデータファイルは、常にライブラリのプライマリパスに保存されます。

  2. オプションで、DATAPATH=オプションで1つ以上のパス名を割り当てて、データパーティションを保存できます。それ以外の場合、データパーティションファイルはプライマリパスに保存されます。

  3. オプションで、INDEXPATH=オプションで1つ以上のパス名を割り当てて、インデックスファイルを保存できます。それ以外の場合、インデックスファイルはプライマリパスに保存されます。

SPD Engineライブラリ割り当てが成功したことを示すSASログ
1    libname mylib spde 'library-path' 
2       datapath=('path-for-data-partitions') 
3       indexpath=('path-for-indexes');
NOTE: Libref MYLIB was successfully assigned as follows:
      Engine:        SPDE
      Physical Name: library-path
3  !                                   

要点

  • SPD Engineは、代替Base SASエンジンです。
  • SPD Engineは、非常に大きなテーブルを高速に処理できるように設計されています。このエンジンはスレッドを使用してデータを非常に高速かつ並列に読み取り、複数のCPUで実行されます。このパフォーマンスに貢献しているのは、分散環境を活用できるパーティションファイル形式です。
  • SPD Engineはデータセットを複数のファイルに保存しますが、SPD EngineデータセットはV9エンジンデータセットと非常によく似た方法で処理できます。Base SAS言語のほとんどは、SPD Engineデータセットと非常にうまく連携します。ただし、エンジンは、その処理とストレージの最適化に固有のいくつかの言語要素をサポートしています。V9エンジン機能との違いについては、ドキュメントを参照してください。

例: SPD Engineを使用したHadoopでのSASデータの読み取りおよび書き込み

コード例

次の例では、Base SASライブラリをHadoopクラスターに割り当てます。


options set=SAS_HADOOP_CONFIG_PATH='/myconfigpath';         /*1*/
options set=SAS_HADOOP_JAR_PATH='/myjarpath';

libname mydata spde '/data/abcdef' hdfs=yes accelwhere=yes; /*2*/
  1. SET=システムオプションは、Hadoopの環境変数を定義します。これらの環境変数がすでに設定されている場合(たとえば、構成中)、これらのコード行をサブミットしないでください。これらの環境変数が正しく設定されていない場合、LIBNAMEステートメントによりSASログにエラーが生成されます。

  2. LIBNAMEステートメントは、mydataライブラリ参照名をSPD EngineとHadoopクラスター内のディレクトリに割り当てます。HDFS=YES引数は、Hadoopクラスター構成ファイルで定義されているHadoopクラスターに接続することを指定します。ACCELWHERE=YESオプションは、Hadoopクラスター内のMapReduceプログラムによってデータのサブセット化が実行されることを要求します。

要点

  • SPD Engineは、従来のファイルシステムまたはHadoop上でSASデータを読み書きできる代替Base SASエンジンです。このエンジンでは、SAS/ACCESSなどの追加のSAS製品を構成する必要はありませんが、サポートされているHadoopディストリビューションを実行している必要があります。
  • 顧客は多くの場合、非常に大規模なデータを低コストで保存するためにHadoopを選択します。SPD Engineの分散ストレージと処理は、Hadoopファイルシステム(HDFS)とうまく連携します。さらに、このエンジンは、HadoopクラスターにMapReduceプログラムを自動的にサブミットすることで、ほとんどのWHERE式を最適化できます。
  • このエンジンは、Hadoop上のSPD Engineデータセットを読み取ることができます。エンジンを使用してデータセットをHadoopに保存すると、ほとんどのBase SAS言語を使用してデータを処理できるようになります。ただし、このエンジンは、Hadoopでの処理とストレージに固有のいくつかの言語要素をサポートしています。

例: CVPエンジンとV9エンジンを使用して切り捨てを回避する

コード例

この例を実行するには、まず、例: LIBNAMEステートメントでV9エンジンを割り当てるにあるように、myclassという名前のデータセットを作成します。PROC CONTENTSを実行して変数の長さを確認します。

libname myfiles v9 'library-path-1';
proc contents data=myfiles.myclass;
run;

PROC CONTENTS出力では、2つの文字変数に注目してください。Nameの長さは8、Sexの長さは1です。

拡張前の変数長を示すPROC CONTENTS
CVP拡張前のPROC CONTENTSの一部

次の例では、CVPエンジンとV9エンジンを使用して文字変数のサイズを拡張しています。CVPエンジンは、文字を表現するためにより多くのバイトを使用するエンコーディングにデータセットをコピーする場合に、切り捨てを回避するのに役立ちます。


libname srclib cvp 'library-path-1' cvpengine=v9 cvpmult=2.5; /*1*/
libname target v9 'library-path-2';                           /*2*/
proc copy in=srclib out=target;                               /*3*/
   select myclass;
run;

proc contents data=target.myclass;                            /*4*/
run; 
  1. このLIBNAMEステートメントは、srclibライブラリをCVPエンジンとコピーするデータの場所に割り当てます。CVPENGINE=オプションは、データを処理する基になるエンジンとしてV9エンジンを指定します。CVPMULT=オプションは、すべての文字変数を拡張するための乗算係数2.5を指定します。このオプションが指定されていない場合、CVPエンジンは自動的に乗数値を選択します。

  2. このLIBNAMEステートメントは、コピーされたデータを含むtargetライブラリを割り当てます。

  3. SELECTステートメントを使用したCOPYプロシジャは、myclassデータセットをtargetライブラリにコピーします。コピー中に、CVPエンジンは文字変数の長さを2.5倍に拡張します。

  4. CONTENTSプロシジャは、文字変数の長さが2.5倍になったことを示します。

    Nameの場合、8 × 2.5 = 20。

    Sexの場合、1 × 2.5 = 2.5となり、整数に切り上げると3になります。

拡張後の変数長を示すPROC CONTENTS
CVP拡張後のPROC CONTENTSの一部

要点

  • 文字を表現するためにより多くのバイトを使用するエンコーディングにデータセットをコピーする場合、列の長さがより大きな文字サイズに対応できないと切り捨てが発生する可能性があります。たとえば、文字はwlatin1エンコーディングでは1バイトとして表現されますが、UTF-8では2バイトとして表現される場合があります。
  • ログ内のエラーにcharacter data was lost during transcodingと記載されている場合は、通常、切り捨てが発生したことを示しています。CVPエンジンを使用して文字変数の長さを拡張することで、エラーをトラブルシューティングできます。
  • デフォルトでは、CVPエンジンは自動的に乗数値を選択します。通常、自動値は切り捨てを回避するのに十分です。CVPMULTIPLIER=を使用して自分で指定することもできます。
  • デフォルトのCVPFORMATWIDTH=YESオプションは、出力形式の長さを拡張しますが、ユーザー定義の出力形式には影響しません。ユーザー定義の出力形式については、Example: Avoid Truncation in Formats When Using PROC FORMAT (SAS V9 LIBNAME Engine: Reference)を参照してください。
  • データセットを別の動作環境または別の文字エンコーディングにコピーする場合は、PROC COPYにNOCLONEなどのオプションを指定することをお勧めします。NOCLONEは、ライブラリがターゲット環境で互換性があるように、データ表現や文字エンコーディングなどの特定のデータセット属性をコピーしません。

    NOCLONEオプションのかわりに、OVERRIDE=オプションを使用してENCODING=およびOUTREP=オプションを指定できます。この方法では、ソースライブラリの他のデータセット属性が保持されるため、それらの属性が必要であることを確認してください。

  • PROC COPYは監査証跡を保持しません。CEDA処理では、PROC COPYはインデックスや一貫性制約をコピーしません。移行する場合は、PROC MIGRATEの方がよい選択となる可能性があります。Example: Avoid Truncation When Migrating a SAS Library by Using the CVP Engine (SAS V9 LIBNAME Engine: Reference)を参照してください。

関連項目

例: SASデータセットをCASサーバーにロードする

コード例

次の例では、DATAステップを使用して、SASデータセットをSAS Cloud Analytic Services (CAS)テーブルとしてメモリにロードします。


cas casauto host="cloud.example.com" port=5570; /*1*/

libname mycas cas;                              /*2*/
data mycas.cars (promote=yes);                  /*3*/
   set sashelp.cars; 
run;
proc contents data=mycas.cars;                  /*4*/
run;
  1. CASステートメントはCASセッションを開始し、CASセッション名としてcasautoを指定します。HOST=およびPORT=オプションで接続情報を使用します。

  2. LIBNAMEステートメントは、mycasライブラリ参照名をCASエンジンに割り当てます。SESSREF= LIBNAMEオプションが指定されていないため、エンジンはcasautoセッションを使用します。

  3. DATAステップは、SASデータセットsashelp.carsをCASセッションにコピーします。PROMOTE=YESデータセットオプションは、テーブルをグローバルスコープでプロモートします。

  4. PROC CONTENTSは、mycas.carsテーブルがセッション中にCASサーバー上で使用できることを示します。データがメモリにロードされた後、後続のステップでメモリ内のデータを処理できます。ロードと処理は別のステップで行われます。

mycas.carsのPROC CONTENTS出力の一部
mycas.carsのPROC CONTENTS

要点

  • CASエンジンを使用するLIBNAMEステートメントをサブミットして、SAS Compute ServerセッションをCASセッションに接続できます。CASサーバーと既存のCASセッションにアクセスできる必要があります。
  • DATAステップを備えたCAS LIBNAMEエンジンは、SASデータをインメモリテーブルとしてCASサーバーにロードする1つの方法です。大きなテーブルの場合は、他の方法の方が効率的である可能性があります。
  • データをCASサーバーにロードした後、SASライブラリ参照名とテーブル名を参照することで、SASセッションからSASプロシジャまたはDATAステップを実行できます。テーブルをメモリにロードするために使用するのと同じDATAステップでは、メモリ内のテーブルを処理しません。ロードと処理は別のステップで行われます。
  • テーブルは、caslibにロードされるときに自動的に保存されません。CASUTILプロシジャを使用してテーブルを保存できます。ネイティブCASテーブルのファイル拡張子は.sashdatです。

関連項目

最終更新: 2026年9月14日