2017-07-30 59 views
5

Czy można uzyskać więcej niż jedną tabelę w wyniku wykonywania skryptu R z SQL Server 2016+? Weźmy prosty przykład losowy z internetu (nie musisz odpowiedzieć kopalni nie overcomplicate problemu):SQL Server R wiele zestawów wyników

EXEC sp_execute_external_script 
    @language =N'R', 
    @script=N'OutputDataSet<-InputDataSet', 
    @input_data_1 =N'SELECT 1 AS hello' 
    WITH RESULT SETS (([hello] int not null)); 

jak pisał w here.

Tutaj wynik jest zwracany jako pojedyncza tabela. Powiedzmy, że robię różne obliczenia z danymi i teraz chcę zwrócić wiele tabel w wyniku.

Na przykład

a<-InputDataSet 

b<-InputDataSet + 5 

Byłyby zwrócić dwa różne tabele wyniki. Teraz nie mogę wymyślić żadnego ładnego sposobu, aby zwrócić dane w dwóch oddzielnych tabelach, ponieważ zwraca tylko jedną tabelę. Oczywiście, mogę to zwrócić w następujący sposób:

OutputDataSet<-data.frame(a, b) 

Ale zajmowanie się różnymi funkcjami i różnymi danymi wkrótce staje się dość kłopotliwe. Na przykład używam funkcji lm. Teraz jeden zestaw danych będzie obliczał wartości szacunkowe, a inny będzie współczynnikiem każdej kolumny uczestniczącej w równaniu. Ponownie, oczywiście mogę dołączyć do tych dwóch datatables i poradzić sobie z nimi później, ale wynik wyjściowy staje się kolosalny w wielu przypadkach.

Parametry procedury wyglądają następująco: ..., @output_data_1_name, ale nie ma @output_data_2_name itd., Więc nie widzę sposobu. Być może jest możliwe utworzenie OutputDataSet, więc zawiera wiele tabel? Jeśli tak - nie jestem tego świadomy w R ze względu na brak doświadczenia w tym zakresie.

tldr; czy możliwe jest zwrócenie wielu zestawów wyników, czy też moim jedynym rozwiązaniem jest ręczne skonstruowanie wyjścia w kodzie R, więc zawsze będę je mieć?

Odpowiedz

3

Zgodnie z Dokumentacją Microsoft w tej chwili nie jest możliwe zwrócenie więcej niż jednej tabeli. Stwierdza ona na tym page:

tylko jeden zestaw danych wejściowych może być przekazany jako parametr, i można zwrot tylko jeden zestaw danych.

Można jednak zwrócić dodatkowe pojedyncze zmienne, jak stwierdzono here:

Ogólnie, wyjście R z procedury przechowywanej sp_execute_external_script jest ograniczony do jednej ramce danych. (Ograniczenie może zostać w przyszłości usunięte.)

Można jednak zwracać dane wyjściowe innych typów, takich jak skalarne, w oprócz ramki danych.

Istnieje również przykład podano, w jaki sposób to zrobić.

+0

Dziękuję, uważam, że to wystarczy. Bardzo dziękuję za wysiłek włożony w twoje badania. –

+0

Dziękuję również ode mnie. Dużo czytałem na ten temat - zarówno dla zbiorów danych wejściowych, jak i wyjściowych - i całkowicie pominąłem trik do zwrócenia dodatkowych wyników skalarnych. Pozdrawiam za wskazanie tego linku! – Jerb