Nellie Gustafsson – Senior Program Manager
Run Java in SQL Server
SQL Server
2016
SQL Server external language integrations
SQL Server
2017
SQL Server
2019
PythonR
SQL Server Language Extensibility
R-Services
SQL Server Machine Learning Services
Why Java?
Source: Stack Overflow survey 2018 Tiobe programming language index
Java - Example use cases
• Move middle-tier (application server) logic closer to the data
• Oracle Java Procs migration
• Regular expressions (Regex)
• Natural language processing
• Machine Learning
SQL Server Java extension
Java Extensibility SDK for
Microsoft SQL Server
mssql-java-lang-extension.jar
API: Extensibility Framework for
Microsoft SQL Server
import com.microsoft.sqlserver.javalangextension
public PrimitiveDataset execute(…) {
//JAVA CODE
javaextension.dll/.so
SQL Server
2019
EXEC sp_execute_external_script@language = N'Java'
, @script = N'packageName.ClassName', @input_data_1 = N'SELECT id, text FROM testdata', @params = N'@parameter nvarchar(40)', @parameter = @parameterwith result sets ((column1 int, column2 nvarchar(30)))
CREATE EXTERNAL LIBRARY
CREATE EXTERNAL LANGUAGE
Architecture
3rd Party Extensibility Architecture
sp_execute_external_script
@language = ‘Java’
MSSQLSERVER Service
MSSQLLAUNCHPAD Service
sqlsatellite.dll
/satellite.so
“extension” process exthost
JVM
1
2
3
JNI
extension.dll
/extension.so
Security and Governance
• Reduced surface area and isolation
• Script execution requires explicit permission
• External language processes have limited privileges
• Built-in Resource Governance
CREATE EXTERNAL LANGUAGE JavaFROM(CONTENT=‘<sql server install path>\MSSQL\Binn\javaextension.zip', FILE_NAME=N’javaextension.dll’,PLATFORM=WINDOWS,
ENVIRONMENT_VARIABLES= 'JRE_HOME=
<server path>\Zulu\zulu-8\jre\;DEBUG=0;')
CREATE EXTERNAL LANGUAGE JavaFROM(CONTENT=‘/opt/mssql/lib/extensibility/java-lang-extension.tar.gz', FILE_NAME=N’javaextension.so’,PLATFORM=LINUX,
ENVIRONMENT_VARIABLES= 'JRE_HOME=
<server path>\Zulu\zulu-8\jre\;DEBUG=0;')
External Language – New DDL
External Libraries
No need to set permissions to CLASSPATH if you use external libraries.
CREATE EXTERNAL LIBRARY myJarFROM (CONTENT = ‘<path to .jar file or .zip file>') WITH (LANGUAGE = ‘Java'); GO
EXEC sp_execute_external_script
@language = N’ Java'
, @script = N'packageName.ClassName'
, @input_data_1 = N'SELECT id, text FROM testdata'
, @params = N'@parameter nvarchar(40)'
, @parameter = @parameter
with result sets ((column1 int, column2 nvarchar(30)))
Call external language from SQL Server
Demo - Regex
• GitHub Microsoft Open Source Repository:
aka.ms/mssql-java-lang-extension
• Host the source code for Java SDK, Java extension and Extension API on GitHub• This means that the community can build 3rd party language extensions and use Java as
example
• Sub folders for language extension in repository that we support
• Under Releases on GitHub: Signed SDK jar & Source.zip/tar.gz
SQL Server Setup• Installs signed SDK jar file & Extension .dll/.so
• In future: Supported Java distribution
Release of SDK and Extension API
Questions?
Thank you.
Thank you.
© Copyright Microsoft Corporation. All rights reserved.