ヘッダーをスキップ
Oracle® R Enterpriseユーザーズ・ガイド
リリース1.3 for Windows, Linux, Solaris, and AIX
E48232-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 Oracle R Enterpriseでの埋込みの実行

この章の内容は次のとおりです。

スクリプトのセキュリティに関する考慮事項

RスクリプトとSQLスクリプトはいずれも、データベース・サーバーにアクセスできます。そのため、スクリプトの作成は制御する必要があります。スクリプトの作成および削除を実行するユーザーにはRQADMINロールが必要です。

RQADMINロール

Oracle R EnterpriseはRQADMINロールを作成します。

RQADMINロールは、ユーザーに明示的に付与する必要があります。

次のインスタンスには、RQADMINロールが必要です。

  • ore.doEval()FUN引数を指定したコール

  • ore.scriptCreateおよびore.scriptDropによるスクリプトの作成および削除

ore.rowApplyore.groupApplyore.tableApplyore.indexApplyおよびFUN.NAME引数を指定したore.doEvalのコールには、RQADMINロールは不要です。

RQUSERにRQADMINを付与するには、sysdbaとしてSQL*Plusを起動し、次を入力します。

grant rqadmin to RQUSER

注意:

RQADMINは、必要とするユーザーにのみ付与してください。

データベースの並列性のサポート

パラレル処理は、Oracle R Enterpriseの関数にかぎらず、Oracle R Enterpriseには含まれていないOpen Source Rパッケージでも有効にできます。これらのパッケージでのデータの並列性は、Oracle R Enterpriseの埋込みRの実行によって利用可能になります。

R側では、Oracle R Enterpriseは、データのパラレル処理用にore.groupApply()ore.rowApply()およびore.indexApply()を提供します。データのパラレル処理は、データ・セットを、並列で(個別に)処理できる複数のサブセットに分割する処理で構成されます。Oracle R Enterpriseは、「Oracle R Enterpriseの埋込みSQLスクリプト」で説明するように、SQLと同等のグループ適用および行適用の関数も提供します。

オープン・ソース・パッケージ(CRANパッケージ)は、一般的に、Oracle R Enterpriseの透過層を利用できず(これらのパッケージはベースRのみを使用して記述されていないか、C関数などの機能へのコールアウトを含むため)、Rアドレス空間のデータ上で実行されます。つまり、これらのパッケージの使用は、Rのメモリーおよび並列性の制約と、CRANパッケージの記述方法の対象になることを意味しています。Oracle R Enterpriseによって、CRANパッケージの内部コードが、自動的に並列化されることはありません。

埋込みRの実行は、大規模サーバー(Oracle Exadataなどのデータベース・サーバー)のように、メモリーおよびプロセッサ数に関して、通常のRクライアントで実現できる能力の拡張を可能にします。また、埋込みRの実行によって、データベースとRエンジンとの間で(これらは同じマシン上に配備されるため)さらに効率的なデータの転送が実現されます。また、CRANパッケージを利用するユーザーのR関数のデータ並列実行も、Oracle R EnterpriseのR APIおよびSQL APIの両方で可能になります。

埋込みOracle R EnterpriseスクリプトのためのRインタフェース

ここで説明するOracle R Enterpriseの関数によって、Rベースのアプリケーションで、Oracle R Enterpriseの機能をスクリプトに埋め込むことができます。たとえば、Rスクリプトで、データベース・オブジェクトに対する操作を実行できるようになります。

1つのRスクリプトには単一の関数定義が含まれます。Rスクリプトは、Oracle R Enterpriseのデータベース内Rスクリプトのアーカイブ内に存在します。

埋込みRスクリプトには、次のようにいくつかのメリットがあります。

  • データが存在するデータベース内でRスクリプトを実行できるので、データをデータベース外に移動する必要がありません。スクリプトには、カスタム手法を含めることも、CRANパッケージからの関数を含めることができます。

  • Rベースのアプリケーション内および実行可能なSQLベースのアプリケーション内で、既存のRスクリプトを実行できます。

  • Oracle Databaseの分散型データ・フローの並列性を活用できます。この並列性はユーザーが制御可能ですが、データベースによって管理されます。

  • Oracle Databaseが提供するセキュリティ機能を使用できます。スクリプトを登録してセキュリティを保護する方法の詳細は、「埋込みRスクリプトのセキュリティ問題」を参照してください。

Oracle R Enterpriseは、データベース内でのRスクリプトの実行をサポートするために、次の関数を提供します。

「ore.doEval()」および「ore.indexApply()」で、スクリプトの例を示します。

埋込みRスクリプトのセキュリティ問題

これらのスクリプトはすべて、引数FUNまたはFUN.NAMEを必要とします。セキュリティ上の理由により、引数FUNを使用するには、Oracle Database権限のコレクションであるRQADMINロールが必要です。引数FUN.NAMEで表されるスクリプトの作成は、RQADMIN資格証明を持つユーザーによって発行される必要があるため、この引数はOracle R Enterpriseの使用が認可されたすべてのユーザーが使用できます。

ore.*Apply()およびore.doEval()の入力

関数ore.tableApply()ore.groupApply()ore.rowApply()ore.indexApply()およびore.doEval()はすべて、FUN.NAMEパラメータ(Rスクリプト・リポジトリにロード済の関数の場合)、またはR関数(閉包)であるFUNのいずれかをとります。

すべての関数は、あらゆる値を返す可能性があります。ただし、FUN.VALUE引数を指定した場合には、data.frameに一致した出力になります。

すべての関数は、オプションの引数(... arguments)として渡されるパラメータをとります。名前付きである場合も、そうでない場合もあります。

すべての関数は、FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

ore.doEval()

ore.doEval()は、入力データなしでデータベース内のスタンドアロンのRスクリプトを起動します。パラメータは指定できます。ore.frameオブジェクトまたはシリアライズRオブジェクトを返します。

内部で生成されたデータがore.doEval()への入力になります。ore.pull()を使用すると、ファイルまたは表からデータをロードできます。

入力データは次のいずれかになります。

  • 内部で生成されたデータ

  • ore.pull()を使用してファイルからロードしたデータまたはデータベースからプルしたデータ

  • 透過層によって利用可能にしたデータ

ore.doEval()は、FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

次に示す、ore.で始まるFUNパラメータの追加の引数は、特別な制御引数です。これらは、FUNまたはFUN.NAME引数で指定された関数に渡されるのではなく、閉包の実行の前後に起こる動作を制御します。次の制御引数がサポートされます。

  • ore.dropは入力データを制御します。TRUEを指定した場合、1列のdata.frameがベクターに変換されます。デフォルト値はTRUEです。

  • ore.connectは、閉包内でOracle R Enterpriseに自動的に接続するかどうかを制御します。これは、クライアント・セッションと同じ資格証明を指定してore.connectをコールすることと同等です。デフォルト値は、FALSEです。

  • ore.graphicsは、グラフィカル・ドライバを起動して画像を検索するかどうかを制御します。デフォルト値はTRUEです。

  • ore.png.*では、ore.graphicsがTRUEの場合に、pngグラフィック・ドライバの追加パラメータを指定します。これらの引数のネーミング規則として、png関数の引数にはore.png.接頭辞を追加します。たとえば、ore.png.heightを指定すると、引数heightがpng関数に渡されます。設定しない場合は、png関数に標準のデフォルト値が使用されます。

この例では、指定した値によって、最初のn個の整数をスケールします。結果はシリアライズRオブジェクト(data.frame)になります。

Oracle R Enterpriseには、多数の事前定義済グラフィカル・スクリプトがあります。すべての事前定義済スクリプトには、RQG$で始まって、スクリプトがラップするグラフィック・パッケージの名前が続く、予約名があります。関数によって、入力されたdata.frameの最初の列、最初と2番目の列、またはすべての列のいずれかをとります。したがって、事前定義済スクリプトはore.tableApply、ore.groupApplyまたはore.rowApplyを指定した場合にのみ使用できます。各関数には...もあるので、ラップする関数に任意のパラメータを渡すことができます。

res <- 
   ore.doEval(function (num = 10, scale = 100) {
          ID <- seq(num)
          data.frame(ID = ID, RES = ID / scale)
          })
class(res)
res
local_res <- ore.pull(res)
class(local_res)
local_res

追加の例は、ore.doEval()に関するRのヘルプを参照してください。

ore.tableApply()

ore.tableApply()は、入力された表(ore.frame)全体を使用してRスクリプトを起動します。入力は、すべて一度に関数に渡されます。ore.doEval()と同様に、ore.frameオブジェクトまたはシリアライズRオブジェクトを返すことができます。

入力データは、ore.frameオブジェクトです。

ore.frameオブジェクトとして、データ・フレーム署名を返します。

引数として、NULLまたは<variable>=<value>をとります。

ore.groupApply()

ore.groupApply()は、指定された列の値に従ってデータをパーティショニングし、可能であれば、各パーティションで並列にRスクリプトを起動します。戻り値は、各グループの実行結果のリストです。

入力データは、ore.frameオブジェクトです。

ore.objectとしてNULL値を返すか、またはore.frameオブジェクトとしてデータ・フレーム署名を返します。

引数として、NULLまたは<variable>=<value>をとります。

ore.groupApply()にはパーティション列を指定する必要があります。

FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

ore.rowApply()

ore.rowApply()ではチャンク・サイズ、つまり関数で処理する行数を指定します。データベース・サーバーで複数のRエンジンを起動できる場合には、すべてのデータが処理されるまで、この関数を並列に複数回起動します。戻り値は、各チャンクの実行結果のリストです。

入力データは、ore.frameオブジェクトです。

ore.objectとしてNULL値を返すか、またはore.frameオブジェクトとしてデータ・フレーム署名を返します。

引数として、NULLまたは<variable>=<value>をとります。

ore.rowApply()のチャンク・サイズは指定可能です。

FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

ore.indexApply()

ore.indexApply()は、Rスクリプトをn回起動します。ここで、nは正の整数です。戻り値は、実行ごとの結果のリストです。

入力データは次のいずれかになります。

  • 内部で生成されたデータ

  • ore.pull()を使用してファイルからロードしたデータまたはデータベースからプルしたデータ

  • 透過層によって利用可能にしたデータ

ore.indexApply()はNULLまたは<variable>=<value>を引数としてとります。

R関数を起動する回数を示すnを指定する必要があります。

FUN.NAMEパラメータで指定されたデータベースのRスクリプト・リポジトリ内にある関数の名前をとるか、またはFUNパラメータに指定された実際のR関数の名前をとります。

たとえば、次のコードはこの関数を10回適用します。

res<-ore.indexApply(10,function (x, scale = 100) x / scale)

ore.scriptCreate()

ore.scriptCreate()は、データベース内にRスクリプトを作成します。このスクリプトは、他の埋込みRスクリプト関数の名前を指定して使用できます。


注意:

ore.scriptCreate()にはRQADMINロールが必要です。

ore.scriptCreate()の構文は次のとおりです。

ore.scriptCreate(name, FUN)

説明:

  • nameは、Oracle Database内のRスクリプトの名前を指定した文字列です。

  • FUNは、関数ore.doEval()ore.groupApply()ore.indexApply()ore.rowApply()またはore.tableApply()で使用される関数定義です。

この関数は、成功した場合は非表示のNULL値を返し、スクリプトの作成が成功しなかった場合はエラーを返します。

ore.scriptCreate()の例

この例では、スクリプトを作成して削除します。

ore.scriptCreate("MYLM",function(data, formula, ...) lm(formula, data, ...))
       IRIS <- ore.push(iris)
       ore.tableApply(IRIS[1:4], FUN.NAME = "MYLM" formula = Sepal.Length ~ .)
       ore.scriptDrop("MYLM")

ore.scriptDrop()

ore.scriptDrop()は、名前付きのRスクリプトをデータベース・リポジトリから削除します。RQADMINロールが必要です。


注意:

ore.scriptDrop()にはRQADMINロールが必要です。

ore.scriptDrop()の構文は次のとおりです。

ore.scriptDrop(name)

説明:

  • nameは、Oracle Database内のRスクリプトの名前を指定した文字列です。

この関数は、成功した場合は非表示のNULL値を返し、スクリプトの削除が成功しなかった場合はエラーを返します。

例は、「ore.scriptCreate()の例」を参照してください。

埋込みRスクリプトでの自動データベース接続

埋込みRスクリプトは、Oracle Databaseに自動的に接続できます。

自動接続を有効にすると、次の機能が実行されます。

  • 埋込みRスクリプトが自動的にデータベースに接続します。

  • 自動接続は、埋込みR SQL関数を起動するセッションと同じ資格証明を持ちます。

  • このスクリプトは自律型トランザクション内で実行されます。

  • ROracle問合せは自動接続と連携します。

  • Oracle R Enterpriseの透過層が埋込みスクリプトで使用可能になります。

  • ユーザーおよびサイト全体でのRプロファイルのロードは埋込みRでは無効になっています。

    プロファイルのロードは、Oracle R Enterpriseの以前のリリースでサポートされていました。自動接続は、より安全な接続を提供します。

自動接続は、デフォルトでは無効になっています。自動接続は、ore.connect制御引数を使用して有効または無効に指定できます。制御引数については、ore.doEval()に関するRヘルプに記載されています。

自動接続を可能にするため、ROracleが拡張されて、新しいドライバExtDriverとコンストラクタExtprocが追加されました。これは、extprocコンテキストをラップする外部ポインタを渡すことで初期化されます。OraDriverと同様に、ExtDriverはシングルトンです。これらのドライバは、2つの個別のシングルトンで表されるため、セッションで同時に存在することができます。この設定によって、次の例に示すように、extproc接続と明示的なOraDriver接続を、同じRスクリプトで機能させることができます。

ore.doEval(function() {
  ore.disconnect()
  con1 <- dbConnect(Extproc())
  res1 <- dbGetQuery(con1, "select * from grade order by name")
  con2 <- dbConnect(Oracle(), "scott", "tiger")
  res2 <- dbGetQuery(con2, "select * from emp order by empno")
  dbDisconnect(con1)
  dbDisconnect(con2)
  cbind(head(res1)[,1:3], head(res2)[,1:3])
}, ore.connect = TRUE)

埋込みRスクリプトの例

埋込みRスクリプトの詳細な例は、https://blogs.oracle.com/R/entry/analyzing_big_data_using_the1にあるOracle R Enterpriseブログ「Introduction to ORE Embedded R Script Execution」を参照してください。

無償の「Oracle R Enterprise Tutorial Series」に記載されている「Part 6: ORE Embedded R Scripts: R Interface」には、埋込みRスクリプトの説明と、いくつかの例があります。Tutorial Seriesの詳細は、「Oracle R Enterpriseのトレーニング」を参照してください。

Oracle R Enterpriseデモのいくつかは、埋込み実行について説明しています。

Oracle R Enterpriseの埋込みSQLスクリプト

SQLインタフェースによって、Rスクリプト実行を本番データベースのアプリケーションに埋め込むことができます。

SQLインタフェースに関連付けた関数は、データベースRリポジトリに格納し、SQL API関数の名前で参照する必要があります。リポジトリにスクリプトを追加する方法、リポジトリからスクリプトを削除する方法、およびリポジトリ内のスクリプトの一覧を表示して使用する方法については、「SQLスクリプトの登録および管理」を参照してください。

SQL関数についての説明は、「Oracle R EnterpriseのSQL関数」を参照してください。

SQLスクリプトの登録および管理

セキュリティ上の理由により、最初にシステムで一意の名前でRスクリプトを登録して、実際のスクリプトではなくこの新しい名前をrq*Eval表関数へのコールで使用する必要があります。

次のように、スクリプトを作成および削除する2つの管理関数と、スクリプトの一覧を示すビューがあります。

  • sys.rqScriptCreate()

  • sys.rqScriptDrop()

  • 作成したスクリプトをリストして使用できるビュー

このスクリプトには、「RQADMINロール」で説明するRQADMINロールが必要です。

sys.rqScriptCreate()を使用するときは、関数文字列の対応するR閉包を指定する必要があります。

次に、スクリプトの登録と登録済スクリプトを使用する例を示します。

begin
  sys.rqScriptCreate('tmrqfun2',
'function() {
ID <- 1:10
res <- data.frame(ID = ID, RES = ID / 100)
res
}');
end;
/
 
select *
  from table(rqEval(
        NULL,
       'select 1 id, 1 res from dual',
       'tmrqfun2'));
 
begin
  sys.rqScriptDrop('tmrqfun2');
end;
/

Oracle R EnterpriseのSQL関数

rq*Eval関数の結果、データベースの並列性に応じて、1つ以上の新しいRエンジンがデータベースで起動されます。

データベースでのRスクリプトの実行(完全自動処理)を可能にするため、Oracle R Enterpriseは、SQLでore.doEval()ore.tableApply()ore.groupApply()およびore.rowApply()のバリアントを提供しています。(ore.doEval()ore.tableApply()ore.groupApply()およびore.rowApply()は、「埋込みOracle R EnterpriseスクリプトのためのRインタフェース」で説明します。)

SQL関数は、次のとおりです。

  • rqTableEval()

  • rqEval()

  • rqRowEval()

  • rqGroupEval()

rqGroupEval()には追加のSQL指定が必要で、ここでは、指定された列の値に従ってデータをパーティショニングし、各パーティションでRスクリプトを起動する仮想関数として提供されます。詳細は、「rqGroupEval()関数」を参照してください。

「rq*Eval()とデータストア内のオブジェクト」で説明するように、これらの関数をデータストア内のオブジェクトとともに使用できます。

rq*Eval()関数(rqEval()rqTableEval()rqGroupEval()およびrqRowEval())は、次の類似した構文を使用します。

rq*Eval(
     cursor(select * from table-1),
     cursor(select * from table-2),
     'select <column list> from table-3 t',
     <grouping col-name from table-1 or num_rows>,
     <R closure name of registered-R-code>
     )

説明:

  • 最初のカーソルは入力カーソルです。入力は、4番目のパラメータに記述されているR閉包に、表全体、グループまたはN行として一度に渡されます。

    rqEval()には、このカーソル引数はありません

  • 2番目のカーソルはパラメータ・カーソルです。1行のスカラー値(文字列、数値またはその両方)を渡すことができます。たとえば、モデルの名前と、モデル設定のいくつかの数値のスカラー値を渡すことができます。

  • 問合せによって、出力表の定義が指定されます。出力は「SELECT文」、「XML」または「PNG」にすることができます。

  • grouping col-namerqGroupEval()に適用され、グループ化列の名前を提供します。

  • num_rowsrqRowEval()に適用され、関数に一度に渡す行の数を提供します。

  • <R closure name of registered-R-code>は、実行するR関数の登録済バージョンです。詳細は、「SQLスクリプトの登録および管理」を参照してください。

すべてのSQL関数の戻り値は、次のいずれかの値を示します。

  • SELECT文に指定された表のシグネチャ。rq関数からの結果を表として返します。

  • XML、1つのXML文字列で構造化イメージとグラフ・イメージの両方を返すCLOBとして返します。最初に構造化されたコンポーネントが提供され、次にbase 64でエンコードされたイメージのpng表示が続きます。

  • PNG、PNG形式でグラフ・イメージを返すBLOBとして返します。

rqEval()rqTableEval()rqGroupEval()およびrqRowEval()は、Rスクリプト・リポジトリ内に格納された名前で、Rスクリプトを指定する必要があります。sys.rq_scriptsビューが提供する登録済スクリプトのリストの詳細は、「SQLスクリプトの登録および管理」を参照してください。

次の例は、これらの関数の使用方法を示しています。

  • この例では、表fishのすべての行をR関数への入力として使用します。この関数は、他のパラメータをとらず、すべての入力データと値のROWSUMを含むoutputを生成します。

    このR関数のパラメータ(param)はオプションであることに注意してください。

    begin
    sys.rqScriptCreate('tmrqfun2',
    'function(x, param) {
            dat <- data.frame(x, stringsAsFactors=F)
            cbind(dat, ROWSUM = apply(dat,1,sum)+10)
    }');
    end;
    /
     
    select * from table(rqTableEval(  
       cursor(select * from fish),
       NULL,
       'select t.*, 1 rowsum from fish t',
       'tmrqfun2' ));
     
    begin
    sys.rqScriptDrop('tmrqfun2');
    end;
    /
    
  • この例は、表fishからR関数に、一度にn=1(4番目のパラメータ)行を渡す方法を示しています。この関数にパラメータは必要ありません。この関数はROWSUMを生成して、出力のfishに別の列として追加します。

    begin
    sys.rqScriptCreate('tmrqfun2',
    'function(x, param) {
            dat <- data.frame(x, stringsAsFactors=F)
            cbind(dat, ROWSUM = apply(dat,1,sum)+10)
    }');
    end;
    /
     
    select * from table(rqRowEval(  
       cursor(select * from fish),
       NULL,
       'select t.*, 1 rowsum from fish t',
        1,
       'tmrqfun2' ));
     
    begin
    sys.rqScriptDrop('tmrqfun2');
    end;
    /
    

rqGroupEval()関数

rqGroupEval()は、グループ化列によってパーティショニングされたデータ上でRスクリプトを起動します。

rqGroupEval()には、次のように、パッケージとパイプライン・テーブル・ファンクションの、2つのPL/SQLオブジェクトを作成する必要があります。

  1. 返される結果の型を指定する、PL/SQLパッケージを作成します。

  2. パッケージの戻り値をとり、その戻り値とPIPELINED_PARALLEL_ENABLEセットを使用してデータをパーティショニングする列を示す関数を作成します。

ONTIME_Sは、飛行機の到着についての情報を格納した表であるとします。このデータ・カーソルはすべてのデータを使用しますが、PL/SQLレコードを使用して一部の列を使用するカーソルを定義することもできます。次に、特定のデータ・カーソルに対して使用する必要のあるグループ化列と同じ数のPL/SQL表関数を定義する必要があります。

CREATE PACKAGE ontimePkg AS
  TYPE cur IS REF CURSOR RETURN ontime_s%ROWTYPE;
END ontimePkg;
/
 
CREATE FUNCTION ontimeGroupEval(
  inp_cur  ontimePkg.cur,
  par_cur  SYS_REFCURSOR,
  out_qry  VARCHAR2,
  grp_col  VARCHAR2,
  exp_txt  CLOB)
RETURN SYS.AnyDataSet
PIPELINED PARALLEL_ENABLE (PARTITION inp_cur BY HASH (month))
CLUSTER inp_cur BY (month)
USING rqGroupEvalImpl;
/

この時点では、1つのグループ化列のみがサポートされています。複数の列がある場合、それらを1つの列に結合して、その新しい列をグループ化列として使用します。PARALLEL_ENABLE句はオプションですが、CLUSTER BYは違います。

rq*Eval()とデータストア内のオブジェクト

rq*Eval()と関連する関数によって、パラメータ・カーソルを使用して、データストアに格納されたシリアライズRオブジェクトを使用できます。シリアライズRオブジェクトのオブジェクト名およびデータストア名を、パラメータ・カーソル内のR関数のパラメータ名に関連付けます。

次に、この方法でrq*Eval()を使用する例を示します。ユーザーscottが、データストアontime_model内にオブジェクトlm.modとしてモデルを保存したとします。scottは、このモデルを、埋込みOracle R EnterpriseスコアリングのためのSQLで使用する必要があります。このコードは、埋込みスコアリングのためのモデルを使用する方法を示しています。ore.connect()の構成パラメータについては、「埋込みRスクリプトでの自動データベース接続」を参照してください。

begin
  sys.rqScriptCreate('tmrqmodelscore',
    'function(dat, in.dsname, in.objname) {
       ore.load(name=in.dsname, list=in.objname)
       mod <- get(in.objname)
       prd <- predict(mod, newdata=dat)
       prd[as.integer(rownames(prd))] <- prd
       res <- cbind(dat, PRED = prd)
       res
    }');
end;
/ -- score model
 
select * from table(rqTableEval(
             cursor(select ARRDELAY, DISTANCE, DEPDELAY from ontime_s
                where year = 2003 and month = 5 and dayofmonth = 2),
             cursor(select 'ontime_model' as "in.dsname", 
            'lm.mod' as "in.objname", 1 as "ore.connect" from dual),
             'select ARRDELAY, DISTANCE, DEPDELAY, 1 PRED from ontime_s',
            'tmrqmodelscore'))
order by 1, 2, 3;

SQLでのデータストア管理

Oracle R Enterpriseは、SQLでの基本的なデータストア管理機能を提供します。基本的なデータストア管理には、表示、検索および削除があります。次の関数およびビューを提供します。

  • rqDropDataStore()はデータストアと、そのデータストア内のすべてのオブジェクトを削除します。

    構文: rqDropDataStore('<ds_name>')。ここで、<ds_name>は削除するデータストアの名前です。

    次の例では、現行のユーザーのスキーマからデータストアds_modelを削除します。

    rqDropDataStore('ds_model')
    
  • rquser_DataStoreListは、現行のユーザーのスキーマにあるすべてのデータストアの、データストアレベルの情報が含まれるビューです。この情報は、データストア名、オブジェクト数、サイズ、作成日および説明で構成されます。

    次の例は、このビューの使用方法を示しています。

    select * from rquser_DataStoreList
    select dsname, nobj, size from rquser_datastorelist where dsname = 'ds_1'
    
  • rquser_DataStoreContentsは、現行のユーザーのスキーマにあるすべてのデータストアの、オブジェクトレベルの情報が含まれるビューです。この情報は、オブジェクト名、サイズ、クラス、長さ、行および列の数で構成されます。

    この例は、データストアds_1の内容をリストします。

    select * from rquser_DataStoreContents where dsname = 'ds_1';