公開日: 11/25/2021

Open Database関数

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の使用法』のデータテーブルの環境設定を参照してください。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).