Hello Dear Reader! I'm working on some really fun stuff with in-database R using SQL Server 2016.
I needed to add a couple packages to my R engine so I could use them and call them from an R script. I realized I had not added any external packages to my R instance so this was a perfect opportunity to write a blog! So here is a quick blog on how you add an R Package to SQL Server. This entire tutorial is if you have internet. If you need to do this for a server, which probably doesn't have access to internet look at this MSDN article, Install Additional R Packages on SQL Server.
First we need to find our instance default install path for SQL Server. In this case I'm a comic book geek and my named instances are JARVIS and STARK. STARK is my 2016 instance so we'll need to find that path.
In this case my path is C:\Program Files\Microsoft SQL Server\MSSQL13.STARK\R_SERVICES\bin\x64 , then I want to hold down SHIFT and right click on the Rgui.exe, then select Run as administrator.
After this opens we need to create a variable to hold the location were we would like the package to be installed. Then we can install the package we want to use, in this case the plyr package
lib.SQL <- "C:\\Program Files\\Microsoft SQL Server\\MSSQL13.STARK\\R_SERVICES\\library"
Notice I adjusted the path for my named instance.
After it installs our window should look like this.
Now I can run a simple test script loading the plyr package.
execute sp_execute_external_script OutputDataSet<-InputDataSet' ,@input_data_1=N'select 1' WITH RESULT SETS undefined;
If I get this error the package did not load.Msg 39004, Level 16, State 20, Line 4A 'R' script error occurred during execution of 'sp_execute_external_script' with HRESULT 0x80004004.Msg 39019, Level 16, State 1, Line 4An external script error occurred: Error in library(plyr) : there is no package called 'plyr'Calls: source -> withVisible -> eval -> eval -> library
Error in ScaleR. Check the output for more information.Error in eval(expr, envir, enclos) : Error in ScaleR. Check the output for more information.Calls: source -> withVisible -> eval -> eval -> .CallExecution haltedMsg 11536, Level 16, State 1, Line 4EXECUTE 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.
If I the statement compiles, everything is fine and I get a result set.
As always Thanks for stopping by.