JMPではODBCがサポートされています。Open Database関数を使ってJSLでSQLデータベースへアクセスできます。
dt = Open Database(
"Connect Dialog" | "DSN=...", // データソース
"sqlStatement" | "dataTableName" | "SQLFILE=...", // SQLステートメント
Invisible, //テーブルの読み込み時にそのテーブルを非表示にするオプションのキーワード
"outputTableName" // 新しいテーブルの名前
);
メモ: データベーステーブル名に$# -+/%()&|;?の文字を使用する場合は、角括弧([])で囲む必要があります。
第1引数には、読み込みたいデータソースを指定します。次のいずれかを指定してください。
• "Connect Dialog"を指定すると、Select Data Sourceウィンドウ(Windows)またはChoose DSNウィンドウ(macOS)が表示されます。
• "DSN="の後にデータソースの名前、および、接続に必要な情報を指定すると、そのデータソースに接続します。Windowsでは、ODBCデータソース アドミニストレーターの[ユーザー DSN]タブまたは[システム DSN]タブの名前列にデータソース名が表示されます。macOSでは、ODBC ManagerまたはiODBC Driver ManagerにDSNが表示されます。その他の文字列は、ODBCデータソースによって異なります。
たとえば、次のような手順で要約できます。
"DSN=dBASE Files;DBQ=C:/Program Files/SAS/JMP/16/Samples/Import Data;"
第2引数には、次の3つのうちいずれかを2重引用符で囲んで指定します。
1. 実行するSQLステートメント。たとえば次のように、2重引用符で囲んで、SELECTステートメントを指定してください。
"SELECT AGE, SEX, WEIGHT FROM BIGCLASS"
SQLは、データソースがサポートしているSQLに適合していなければなりません。つまり、「Big Class」という名前のテーブルは、「Big」と「Class」の間にスペースがあるため、それを考慮して引用符で囲む必要があります(スペースが許可されている場合)。引用符はデータソースによって異なりますが、通常は、二重引用符の「"」か、一重引用符の「’」および「‘」か、もしくは鉤括弧の「[]」を使います。
2. データテーブルの名前。データテーブル名だけを指定した場合、"SELECT * FROM"というSQLステートメントを実行するのと同じ処理が行われます。たとえば、第2引数を次のように指定すれば、Open Databaseは"SELECT * FROM BIGCLASS"を実行することになります。
"BIGCLASS"
3. "SQLFILE="に続いて、実行するSQLステートメントの書かれたテキストファイルへのパス。たとえば次の引数の場合は、ディレクトリC:¥にあるファイル「mySQLFile.txt」を開き、中に書かれたSQLステートメントを実行します。
"SQLFILE=C:¥mySQLFile.txt"
オプションの引数Invisibleは、非表示のデータテーブルを作成します。なお、非表示のデータテーブルは、明示的に閉じるまでメモリ内にとどまるため、不要になったものは閉じるよう注意してください。非表示のテーブルを閉じるには、Close(dt)を実行します。ここで、dtは、データテーブル参照の変数です。
オプションの引数outputTableNameは、作成される出力テーブルがあれば、その名前を指定します。Open Databaseが必ずデータテーブルを戻すわけではないことに注意してください。戻り値はヌルになることもあります。データテーブルが戻されるかどうかは、実行されるSQLステートメントの種類によります。たとえば、SELECTステートメントはデータテーブルを戻しますが、DROP TABLEステートメントはデータテーブルを戻しません。
JMPのデータテーブルを、JSLを使ってデータベースに保存するには、データテーブルの参照にSave Database( )メッセージを送ります。
dt << Save Database( "connectInfo", "TableName" );
第1引数は、Open Databaseの場合と同様に機能します。一部のデータベースでは、既存のテーブルに置き換えてテーブルを保存することができないので注意してください。そのような場合にデータベース上のテーブルを置換するには、Open Databaseコマンドで、「DROP TABLE」というSQLステートメントを実行して、そのテーブルをあらかじめ削除してください。
Open Database ( "connectinfo", "DROP TABLE TableName" );
メモ: JMP 13以降では、名前にスペースが入っているテーブルや、大文字と小文字が混在しているテーブルでも、データソースがサポートしている限り、保存することができます。スペースは、Apache HiveとApache Hadoop以外のほとんどのデータソースでサポートされています。大文字と小文字が混在している名前は、そのまま使用されますが、SQLではほとんどの場合大文字と小文字の区別がありません。
次のスクリプトは、SQLクエリーでデータベースを開き、それを新しい名前でデータベースに保存し、その後、新しいテーブルを削除します。
dt = Open Database(
"Connect Dialog",
"SELECT age, sex, weight FROM \!"Bigclass$\!"",
"My Big Class"
);
dt << Save Database( "Connect Dialog", "MY_BIG_CLASS" );
Open Database( "Connect Dialog", "DROP TABLE BIGCLASS.MY_BIG_CLASS" );
メモ: ODBCデータベースからデータを読み込む際、ユーザIDとパスワード情報を含んだテーブル変数が追加される可能性があります。これを防ぐためには、pref(ODBC Hide Connection String(1))によって環境設定を設定します。または、[ファイル]メニュー(Windows)または[JMP]メニュー(macOS)を選択し、[環境設定]>[テーブル]で[ODBC接続文字列を非表示にする]を選択します。『JMPの使用法』のデータテーブルの環境設定を参照してください。