Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2017 (14.x) och senare versioner
Av Azure SQL Managed Instance
Laddar upp R-, Python- eller Java-paketfiler till en databas från den angivna byteströmmen eller filsökvägen. Den här instruktionen fungerar som en allmän mekanism för databasadministratören att ladda upp artefakter som behövs för nya externa språkkörningar och os-plattformar som stöds av SQL Server.
Anmärkning
I SQL Server 2017 stöds R-språk och Windows-plattform. R, Python och externa språk på Windows- och Linux-plattformarna stöds i SQL Server 2019 och senare.
Laddar upp R- eller Python-paketfiler till en databas från den angivna byteströmmen eller filsökvägen. Den här instruktionen fungerar som en allmän mekanism för databasadministratören att ladda upp artefakter som behövs.
Anmärkning
I Azure SQL Managed Instance kan du använda sqlmlutils för att installera ett bibliotek. Mer information finns i Installera Python-paket med sqlmlutils och Installera nya R-paket med sqlmlutils.
Syntax för SQL Server 2019
CREATE EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
FROM <file_spec> [ ,...2 ]
WITH ( LANGUAGE = <language> )
[ ; ]
<file_spec> ::=
{
(CONTENT = { <client_library_specifier> | <library_bits> }
[, PLATFORM = <platform> ])
}
<client_library_specifier> :: =
{
'[file_path\]manifest_file_name'
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
<platform> :: =
{
WINDOWS
| LINUX
}
<language> :: =
{
'R'
| 'Python'
| <external_language>
}
Syntax för SQL Server 2017
CREATE EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
FROM <file_spec> [ ,...2 ]
WITH ( LANGUAGE = 'R' )
[ ; ]
<file_spec> ::=
{
(CONTENT = { <client_library_specifier> | <library_bits> })
}
<client_library_specifier> :: =
{
'[file_path\]manifest_file_name'
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
Syntax för Azure SQL Managed Instance
CREATE EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
FROM <file_spec> [ ,...2 ]
WITH ( LANGUAGE = <language> )
[ ; ]
<file_spec> ::=
{
(CONTENT = <library_bits>)
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
<language> :: =
{
'R'
| 'Python'
}
Arguments
library_name
Bibliotek som laddas upp till instansen kan vara offentliga eller privata. Om biblioteket skapas av en medlem dboi är biblioteket offentligt och kan delas med alla användare. Annars är biblioteket endast privat för den användaren.
Biblioteksnamn måste vara unika i kontexten för en viss användare eller ägare. Till exempel kan två användare RUser1 och RUser2 både individuellt och separat ladda upp R-biblioteket ggplot2. Men om RUser1 ville ladda upp en nyare version av ggplot2måste den andra instansen namnges på ett annat sätt eller ersätta det befintliga biblioteket.
Biblioteksnamn kan inte tilldelas godtyckligt. biblioteksnamnet ska vara samma som det namn som krävs för att läsa in biblioteket i det externa skriptet.
owner_name
Anger namnet på den användare eller roll som äger det externa biblioteket. Om det inte anges ges ägarskap till den aktuella användaren.
Biblioteken som ägs av databasägaren anses vara globala för databasen och körningen. Med andra ord kan databasägare skapa bibliotek som innehåller en gemensam uppsättning bibliotek eller paket som delas av många användare. När ett externt bibliotek skapas av en annan användare än dbo användaren är det externa biblioteket endast privat för den användaren.
När användaren RUser1 kör ett externt skript kan värdet libPath för innehålla flera sökvägar. Den första sökvägen är alltid sökvägen till det delade bibliotek som skapats av databasägaren. Den andra delen av libPath anger sökvägen som innehåller paket som laddats upp individuellt av RUser1.
file_spec
Anger innehållet i paketet för en specifik plattform. Endast en filartefakt per plattform stöds.
Filen kan anges i form av en lokal sökväg eller nätverkssökväg.
När du försöker komma åt filen som anges i <client_library_specifier> personifierar SQL Server säkerhetskontexten för den aktuella Windows-inloggningen. Om <client_library_specifier> anger en nätverksplats (UNC-sökväg) överförs inte personifieringen av den aktuella inloggningen till nätverksplatsen på grund av delegeringsbegränsningar. I det här fallet görs åtkomst med hjälp av säkerhetskontexten för SQL Server-tjänstkontot. Mer information finns i Autentiseringsuppgifter (databasmotor).
Du kan också ange en OS-plattform för filen. Endast en filartefakt eller innehåll tillåts för varje OS-plattform för ett visst språk eller en viss körning.
library_bits
Anger innehållet i paketet som en hexliteral, ungefär som sammansättningar.
Det här alternativet är användbart om du behöver skapa ett bibliotek eller ändra ett befintligt bibliotek (och har de behörigheter som krävs för att göra det), men filsystemet på servern är begränsat och du inte kan kopiera biblioteksfilerna till en plats som servern kan komma åt.
PLATTFORM
Anger plattformen för bibliotekets innehåll. Värdet är som standard värdplattformen där SQL Server körs. Därför behöver användaren inte ange värdet. Det krävs om flera plattformar stöds, eller om användaren behöver ange en annan plattform. I SQL Server 2019 är Windows och Linux de plattformar som stöds.
LANGUAGE = 'R'
Anger paketets språk. R stöds i SQL Server 2017.
Språk
Anger paketets språk. Värdet kan vara R eller Python i Azure SQL Managed Instance.
Språk
Anger paketets språk. Värdet kan vara R, Pythoneller namnet på ett externt språk (se SKAPA EXTERNT SPRÅK).
Anmärkningar
När du använder en fil för R-språket måste paket förberedas i form av zippade arkivfiler med .ZIP-tillägget för Windows. I SQL Server 2017 stöds endast Windows-plattformen.
När du använder en fil för R-språket måste paket förberedas i form av zippade arkivfiler med .ZIP-tillägget.
För Python-språket måste paketet i en .whl- eller .zip-fil förberedas i form av en zippad arkivfil. Om paketet redan är en .zip fil måste det ingå i en ny .zip fil. Det går för närvarande inte att ladda upp ett paket som .whl eller .zip fil direkt.
-instruktionen CREATE EXTERNAL LIBRARY överför biblioteksbitarna till databasen. Biblioteket installeras när en användare kör ett externt skript med sp_execute_external_script och anropar paketet eller biblioteket.
Bibliotek som laddas upp till instansen kan vara offentliga eller privata. Om biblioteket skapas av en medlem dboi är biblioteket offentligt och kan delas med alla användare. Annars är biblioteket endast privat för den användaren.
Ett antal paket, som kallas systempaket, är förinstallerade i en SQL-instans. Det går inte att lägga till, uppdatera eller ta bort systempaket av användaren.
Permissions
Kräver behörigheten CREATE EXTERNAL LIBRARY . Som standard har alla användare som har dbo som är medlem i db_owner roll behörighet att skapa ett externt bibliotek. För alla andra användare måste du uttryckligen ge dem behörighet med hjälp av en GRANT-instruktion och ange SKAPA EXTERNT BIBLIOTEK som behörighet.
I SQL Server 2019 behöver användaren förutom behörigheten SKAPA EXTERNT BIBLIOTEK även referensbehörighet på ett externt språk för att kunna skapa externa bibliotek för det externa språket.
GRANT REFERENCES ON EXTERNAL LANGUAGE::Java to user
GRANT CREATE EXTERNAL LIBRARY to user
Om du vill ändra ett bibliotek krävs den separata behörigheten . ALTER ANY EXTERNAL LIBRARY
Om du vill skapa ett externt bibliotek med hjälp av en filsökväg måste användaren vara en Windows-autentiserad inloggning eller medlem i den fasta serverrollen sysadmin.
Examples
Lägga till ett externt bibliotek i en databas
I följande exempel läggs ett externt bibliotek som heter customPackage till en databas.
CREATE EXTERNAL LIBRARY customPackage
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\customPackage.zip') WITH (LANGUAGE = 'R');
När biblioteket har laddats upp till instansen kör en användare proceduren sp_execute_external_script för att installera biblioteket.
EXEC sp_execute_external_script
@language =N'R',
@script=N'library(customPackage)'
För Python-språket i SQL Server 2019 fungerar exemplet också genom att 'R' ersätta med 'Python'.
Installera paket med beroenden
Om paketet som du vill installera har några beroenden är det viktigt att du analyserar både beroenden på första och andra nivån och ser till att alla nödvändiga paket är tillgängliga innan du försöker installera målpaketet.
Anta till exempel att du vill installera ett nytt paket, packageA:
-
packageAhar ett beroende avpackageB -
packageBhar ett beroende avpackageC
Om du vill lyckas installera packageAmåste du skapa bibliotek för packageB och packageC samtidigt som du lägger till packageA i SQL Server. Kontrollera även de paketversioner som krävs.
I praktiken är paketberoenden för populära paket vanligtvis mycket mer komplicerade än det här enkla exemplet. Till exempel kan ggplot2 kräva över 30 paket, och dessa paket kan kräva ytterligare paket som inte är tillgängliga på servern. Eventuella paket som saknas eller fel paketversion kan orsaka att installationen misslyckas.
Eftersom det kan vara svårt att avgöra alla beroenden bara från att titta på paketmanifestet rekommenderar vi att du använder ett paket som miniCRAN för att identifiera alla paket som kan krävas för att slutföra installationen.
Ladda upp målpaketet och dess beroenden. Alla filer måste finnas i en mapp som är tillgänglig för servern.
CREATE EXTERNAL LIBRARY packageA FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\packageA.zip') WITH (LANGUAGE = 'R'); GO CREATE EXTERNAL LIBRARY packageB FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\packageB.zip') WITH (LANGUAGE = 'R'); GO CREATE EXTERNAL LIBRARY packageC FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\packageC.zip') WITH (LANGUAGE = 'R'); GOInstallera de nödvändiga paketen först.
Om ett obligatoriskt paket redan har laddats upp till instansen behöver du inte lägga till det igen. Se bara till att kontrollera om det befintliga paketet är rätt version.
De nödvändiga paketen
packageCochpackageBinstalleras i rätt ordning närsp_execute_external_scriptförst körs för att installera paketetpackageA.Om ett obligatoriskt paket inte är tillgängligt misslyckas dock installationen av målpaketet
packageA.EXEC sp_execute_external_script @language =N'R', @script=N' # load the desired package packageA library(packageA) '
För Python-språket i SQL Server 2019 fungerar exemplet också genom att 'R' ersätta med 'Python'.
Skapa ett bibliotek från en byteström
Om du inte har möjlighet att spara paketfilerna på en plats på servern kan du skicka paketinnehållet i en variabel. I följande exempel skapas ett bibliotek genom att bitarna skickas som en hexadecimal literal.
CREATE EXTERNAL LIBRARY customLibrary FROM (CONTENT = 0xABC123...) WITH (LANGUAGE = 'R');
För Python-språket i SQL Server 2019 fungerar exemplet också genom att ersätta R med Python.
Anmärkning
Det här kodexemplet visar bara syntaxen. binärvärdet i CONTENT = har trunkerats för läsbarhet och skapar inte ett fungerande bibliotek. Det faktiska innehållet i den binära variabeln skulle vara mycket längre.
Ändra ett befintligt paketbibliotek
DDL-instruktionen ALTER EXTERNAL LIBRARY kan användas för att lägga till nytt biblioteksinnehåll eller ändra befintligt biblioteksinnehåll. För att ändra ett befintligt bibliotek krävs behörigheten ALTER ANY EXTERNAL LIBRARY .
Mer information finns i ÄNDRA EXTERNT BIBLIOTEK.
Lägga till en Java .jar-fil i en databas
I följande exempel läggs en extern jar-fil som anropas customJar till en databas.
CREATE EXTERNAL LIBRARY customJar
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\customJar.jar')
WITH (LANGUAGE = 'Java');
När biblioteket har laddats upp till instansen kör en användare proceduren sp_execute_external_script för att installera biblioteket.
EXEC sp_execute_external_script
@language = N'Java'
, @script = N'customJar.MyCLass.myMethod'
, @input_data_1 = N'SELECT * FROM dbo.MyTable'
WITH RESULT SETS ((column1 int))
Lägga till ett externt paket för både Windows och Linux
Du kan ange upp till två <file_spec>, en för Windows och en för Linux.
CREATE EXTERNAL LIBRARY lazyeval
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\packageA.zip', PLATFORM = WINDOWS),
(CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\packageA.tar.gz', PLATFORM = LINUX)
WITH (LANGUAGE = 'R')
När du använder sp_execute_external_script för att installera paketet används biblioteksinnehållet för den plattformen beroende på vilken plattform SQL Server-instansen körs på.
EXECUTE sp_execute_external_script
@LANGUAGE = N'R',
@SCRIPT = N'
library(packageA)'
Se även
ÄNDRA EXTERNT BIBLIOTEK (Transact-SQL)
TA BORT EXTERNT BIBLIOTEK (Transact-SQL)
sys.external_library_files
sys.external_libraries