Symfoware Analytics Serverでは、データベース内でR言語による統計解析を行うための基本ライブラリ(Rパッケージ)を実行する基盤を提供しています。
R言語による統計解析機能は、これまでクライアントで行っていた分析処理をファンクション(手続き言語)としてDWHサーバ上に登録します。登録したファンクションをDWHサーバ上のデータベースで処理することにより、クライアントへのデータ転送のオーバーヘッドを削減して、サーバのマシン性能を活用した高速なデータ分析を行えます。また、PL/R手続き言語の利用によりR言語でさまざまな分析を行えます。
クライアントマシンにR言語を導入している環境に対して、Symfoware Analytics Server Client(Data Analytics Library)パッケージをインストールすることでR言語からSymfoware Analytics Serverのデータベースに接続して、データを参照しながらPL/R手続き言語を利用してファンクションを開発できます。
R言語による統計解析で扱うファンクションの運用内容について説明します。
ファンクションとは、各手続き言語で作成した関数のことであり、各手続き言語の開発環境で作成します。R言語の開発環境として、サーバ上のRコンソールを使用できます。
すでにR言語で開発済みのスクリプトがある場合は、PL/R手続き言語のインターフェースに合わせて修正することで流用できます。
参照
Rコンソールの詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”のRマニュアルの“R入門”およびその他のRマニュアルを参照してください。
また、クライアントシステムでPL/R手続き言語を使用する場合は、データ分析クライアント機能をインストールすることでデータベースに接続しながらR関数を開発できます。
作成したファンクションを、SQLコマンド“CREATE FUNCTION”を使用して登録します。また、登録済みのファンクションを再登録する場合は、“CREATE OR REPLACE FUNCTION”を使用して登録します。
参照
SQLコマンドの詳細は、 “PostgreSQL文書”の“SQLコマンド”を参照してください。
各手続き言語によって、引数および戻り値に指定できる型が異なる場合があります。各手続き言語での引数および戻り値などの詳細は、以下を参照してください。
PL/R手続き言語の場合
“6.3.2.2.2 データ型”を参照してください。
PL/R手続き言語以外の場合
“PostgreSQL文書”の“手続き言語”を参照してください。
PL/R手続き言語を使用してファンクションを登録した例を以下に示します。
例)
#postgres=# CREATE OR REPLACE FUNCTION r_max (integer, integer) RETURNS integer AS ' if ( arg1 > arg2 ) return(arg1) else return(arg2) ' LANGUAGE 'plr';
ファンクションは、SELECT文に登録したファンクションを指定することで実行します。
なお、関数の引数型、戻り値、および実行時に渡されるデータ型に不整合があった場合は、SQL実行時にエラーとなります。
ファンクションを実行した例を以下に示します。
例)
postgres=# select r_max(1,5); r_max ------- 5 (1 row)
ファンクションは、SQLコマンド“DROP FUNCTION”を使用して削除します。
参照
SQLコマンドの詳細は、 “PostgreSQL文書”の“SQLコマンド”を参照してください。
ファンクションを削除した例を以下に示します。
例)
postgres=# DROP FUNCTION r_max(integer,integer);
ファンクションの実行時にエラーが発生した場合は、SQLのエラーメッセージの内容を確認して対処してください。
PL/R手続き言語では、R関数をSQLのファンクションとして実行します。他のファンクションおよび手続き言語(PL/pgSQL、PL/Pythonなど)と同様にSQLから関数呼び出しが可能となり、サーバ上のデータベースで高速な分析処理を行えます。
参照
ここでは、ファンクションを登録するうえで必要となるところについて説明します。
詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“PL/R User’s Guide - RProcedural Language”を参照してください。
PL/R手続き言語で作成した関数は、SQLコマンド“CREATE OR REPLACE FUNCTION”を使用して定義します。
CREATE OR REPLACE FUNCTION funcname(arg1,arg2,・・・,argN) RETURNS rettype AS ' # R function body ' LANGUAGE lang_name;
パラメーター | 説明 |
---|---|
function | 作成する関数名を指定します。 |
arg1,arg2,・・・,argN | 関数の引数を指定します。 |
rettype | 関数の戻り値の型を指定します。 |
lang_name | 関数を実装している言語の名前を指定します。 |
PL/R手続き言語で扱うデータ型について説明します。
引数
引数は、“arg1, arg2,・・・, argN”という変数名でR関数に渡されます。データベースの引数データ型とR言語の引数データ型の対応は以下のとおりです。
データベースの引数データ型 | R言語の引数データ型 |
---|---|
boolean | logical |
int2, int4 | integer |
int8, float4, float8, cash, numeric | numeric |
bytea | object |
その他のスカラー値 | character |
データベースの引数データ型種別 | R言語の引数データ型 |
---|---|
配列(1次元) | vector |
配列(2次元) | matrix |
配列(3次元) | array(3次元) |
配列(4次元以上) | サポートしていません。 |
複合型 | data.frame(※) |
※セルにNULL値が与えられた場合は、NAオブジェクトに変換します。
戻り値
関数の戻り値は、return()式によって返却されます。
まず、戻り値はR言語のcharacter型に変換されます。次に、データベースの文字列型からrettypeのデータ型にキャストされて返却されます。
R言語のNULLオブジェクトが返却される場合、ファンクションの戻り値はデータベースのNULL値となります。また、ファンクションの戻り値にbytea型を含む場合、R言語でシリアライズしたバイト列を戻り値にマッピングします。
データベースの戻り値とR言語のデータ型の対応は以下のとおりです。
戻り値のデータ型種別 | SETOF | R言語のデータ型 | データベースの返却表 |
---|---|---|---|
スカラー | なし | array, matrix, vector | 1行1列 |
data.frame | 1番目の列のvectorを文字列で表現 例) data.frame(c(1,2,3)) → ’c(1, 2, 3)’ | ||
あり | array(1次元、または3次元以上), vector | 複数行1列 | |
array(2次元), matrix, data.frame | 複数行1列、ただし列が複数になる場合はエラー | ||
配列 | なし | array(1次元、または4次元以上) | 1次元配列 |
array(2次元), matrix, data.frame | 2次元配列 | ||
array(3次元) | 3次元配列 | ||
複合型 | なし | array(1次元、または3次元以上), vector | 1行1列 |
array(2次元), matrix, data.frame | 1行複数列 | ||
あり | array(1次元、または3次元以上), vector | 複数行1列 | |
array(2次元), matrix, data.frame | 複数行複数列 |
PL/R手続き言語では、データベースアクセス関数が使用できます。
参照
データベースアクセス関数の詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“PL/R User’s Guide - R Procedural Language”の“Database Access and Support Functions”を参照してください。
データ分析クライアントは、Rスクリプトの開発効率化をはかるためにRPostgreSQLと連携します。
データ分析クライアント上で、RPostgreSQLと連携してデータベースに接続しながら試作したRスクリプトをPL/R手続き言語として動作できます。
RPostgreSQLの関数のうち、サポートしている関数は以下のとおりです。
RPostgreSQLの関数と引数 |
---|
dbDriver (character dvr_name) |
dbConnect (DBIDriver drv, character user, character password, character host, character dbname, character port, character tty, character options) |
dbSendQuery (DBIConnection conn, character sql) |
fetch (DBIResult rs, integer num_rows) |
dbClearResult (DBIResult rs) |
dbGetQuery (DBIConnection conn, character sql) |
dbReadTable (DBIConnection conn, character name) |
dbDisconnect (DBIConnection conn) |
dbUnloadDriver (DBIDriver drv) |
これらの関数は、Rクライアントで開発したR関数をPL/R手続き言語として実行する場合は、サーバ上のデータベースに自動で接続してR言語で動作します。
サーバ上で動作し通信する必要がないため、すべてのドライバおよび接続に関する関数は、無視されます(dbDriver,dbConnect,dbDisconnect,およびdbUnloadDriver)。
参照
関数仕様の詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“RPostgreSQLマニュアル”を参照してください。
PL/R手続き言語では、ユーティリティ関数が使用できます。
参照
ユーティリティ関数の詳細は、“2.5 Symfoware Analytics Serverで利用するオープンソース・ソフトウェアマニュアル”の“PL/R User’s Guide - R Procedural Language”の“PostgreSQL Support Functions”を参照してください。