2016-06-23 8 views
2

SQL Serverのデータベース内RアナリティックでscaleRスクリプトをT-SQL(external_script実行)に変換しようとしています。私が作業しているscaleRスクリプトは​​です。

私のデータはすべてSQL Server上にあります(チュートリアルから)。rxSummary scaleR関数(データベース内)を使用してこのテーブルをクエリして要約を取得するだけです。
これは私の試みです:データベース内R統合のための外部スクリプトを実行するT-SQL

exec sp_execute_external_script 
@language = N'R', 
@script = N' 
sumOut <- rxSummary( 
formula = ~gender + balance + numTrans + numIntlTrans + creditLine, 
data = ccFraud 
) 
', 
@input_data_1 = N'select * from [DeepDive].[db_datareader].[ccFraudSmall]', 
@input_data_1_name = N'ccFraud', 
@output_data_1_name = N'summary' 
with result sets ((summary varchar(max) not null)); 

しかし、これはエラーをスローします:

STDOUT message(s) from external script: 
Rows Read: 10000, Total Rows Processed: 10000, Total Chunk Time: Less than .001 seconds 
Computation time: 0.000 seconds. 
Msg 11536, Level 16, State 1, Line 5 
EXECUTE statement failed because its WITH RESULT SETS clause specified 1 result set(s), but the statement only sent 0 result set(s) at run time. 

これに対処するためにどのように任意のアイデアを?

ステップがありませんか?

答えて

1

例では、RスクリプトとSQLパラメータ定義の間に不一致があります。 output_data_1_nameパラメータ値は、RからSQL Serverに返されるRデータフレームの名前を指定します。しかし、Rスクリプトにはsummaryに値が割り当てられていません。したがって、0の結果エラーが発生しています。説明と例については、sp_execute_external_script documentを参照してください。

メッセージとしてサマリーを表示するだけの場合は、print(sumOut)をRスクリプトに追加できます。

データをSQL Serverに返す場合は、Rデータフレームを作成してoutput_1_dataに割り当てる必要があります。

+0

ありがとう、それは要約結果を表示するために働いた。しかし、SummaryをSQL Serverに保存するときに、Rスクリプトにsummary < - data.frame(sumOut)を追加しようとしましたが、rxSummaryをデータフレームに強制できないというエラーが発生します。 – Raj

+0

rxSummaryオブジェクトをSQL Serverにバイナリとして保存しようとしていますか?要約< '使用してみてください - 直列化(sumOut、NULL);' –

+0

は、これが今の私のコードです: '@Script = N」 \t \t \t \t sumOut < - rxSummary( \t \t \t \t \t \t \t \t \t式= 〜男女+バランス+ numTrans + numIntlTrans + creditLine、 \t \t \t \t \t \t \t \t \tデータ= ccFraud \t \t \t \t \t \t \t \t \t) \t \t \t \tプリント(sumOut) \t \t \t \t要約< - シリアライズ(sumOut、NULL); \t \t \t \t」、input_data_1 = N'select @ \t * [DeepDive]から[のdb_datareader]。【ccFraud10] ' \t @ input_data_1_name = N'ccFraud'、 @ output_data_1_name = N'summary」結果セット((要約のvarbinary(max)がnullでない))と \t \t; ' このエラーを表示します_The出力データセットはデータフレームタイプでなければなりません。それを変換するためにdata.frame()を使用することを検討してください。 – Raj

関連する問題