Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              Van toepassing op: SQL Server 2017 (14.x) en latere versies 
van Azure SQL Managed Instance
Uploadt R-, Python- of Java-pakketbestanden naar een database vanuit de opgegeven bytestroom of het bestandspad. Deze instructie fungeert als een algemeen mechanisme voor de databasebeheerder om artefacten te uploaden die nodig zijn voor nieuwe runtimes voor externe talen en besturingssysteemplatforms die worden ondersteund door SQL Server.
Opmerking
In SQL Server 2017 worden R-taal en Windows-platform ondersteund. R-, Python- en externe talen op de Windows- en Linux-platforms worden ondersteund in SQL Server 2019 en hoger.
Uploadt R- of Python-pakketbestanden naar een database vanuit de opgegeven bytestroom of bestandspad. Deze instructie fungeert als een algemeen mechanisme voor de databasebeheerder om artefacten te uploaden die nodig zijn.
Opmerking
In Azure SQL Managed Instance kunt u sqlmlutils gebruiken om een bibliotheek te installeren. Zie Python-pakketten installeren met sqlmlutils en nieuwe R-pakketten installeren met sqlmlutils voor meer informatie.
Syntaxis voor 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>
}
Syntaxis voor 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 
}
Syntaxis voor 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
Bibliotheken die naar het exemplaar zijn geüpload, kunnen openbaar of privé zijn. Als de bibliotheek wordt gemaakt door een lid van dbo, is de bibliotheek openbaar en kan deze worden gedeeld met alle gebruikers. Anders is de bibliotheek alleen privé voor die gebruiker.
Bibliotheeknamen moeten uniek zijn binnen de context van een specifieke gebruiker of eigenaar. Twee gebruikers ruuser1 en RUUser2 kunnen bijvoorbeeld zowel afzonderlijk als afzonderlijk de R-bibliotheek ggplot2uploaden. Als RUUser1 echter een nieuwere versie van wilde uploaden, moet de tweede instantie ggplot2een andere naam hebben of moet de bestaande bibliotheek vervangen.
Bibliotheeknamen kunnen niet willekeurig worden toegewezen; de bibliotheeknaam moet dezelfde zijn als de naam die is vereist voor het laden van de bibliotheek in het externe script.
owner_name
Hiermee geeft u de naam op van de gebruiker of rol die eigenaar is van de externe bibliotheek. Als dit niet is opgegeven, wordt het eigendom aan de huidige gebruiker gegeven.
De bibliotheken die eigendom zijn van de eigenaar van de database, worden beschouwd als globaal voor de database en runtime. Met andere woorden, database-eigenaren kunnen bibliotheken maken die een gemeenschappelijke set bibliotheken of pakketten bevatten die door veel gebruikers worden gedeeld. Wanneer een externe bibliotheek wordt gemaakt door een andere gebruiker dan de dbo gebruiker, is de externe bibliotheek alleen privé voor die gebruiker.
Wanneer de gebruiker RUser1 een extern script uitvoert, kan de waarde ervan libPath meerdere paden bevatten. Het eerste pad is altijd het pad naar de gedeelde bibliotheek die is gemaakt door de eigenaar van de database. In het tweede deel wordt libPath het pad opgegeven dat pakketten bevat die afzonderlijk door RUUser1 zijn geüpload.
file_spec
Hiermee geeft u de inhoud van het pakket voor een specifiek platform. Er wordt slechts één bestandsartefact per platform ondersteund.
Het bestand kan worden opgegeven in de vorm van een lokaal pad of netwerkpad.
Wanneer u probeert toegang te krijgen tot het bestand dat is opgegeven in <client_library_specifier>, imiteert SQL Server de beveiligingscontext van de huidige Windows-aanmelding. Als <client_library_specifier> een netwerklocatie (UNC-pad) opgeeft, wordt de imitatie van de huidige aanmelding niet overgedragen naar de netwerklocatie vanwege delegeringsbeperkingen. In dit geval wordt toegang gemaakt met behulp van de beveiligingscontext van het SQL Server-serviceaccount. Zie Referenties (Database Engine) voor meer informatie.
U kunt eventueel een besturingssysteemplatform voor het bestand opgeven. Er is slechts één bestandsartefact of -inhoud toegestaan voor elk besturingssysteemplatform voor een specifieke taal of runtime.
library_bits
Hiermee geeft u de inhoud van het pakket op als een letterlijke hextekst, vergelijkbaar met assembly's.
Deze optie is handig als u een bibliotheek moet maken of een bestaande bibliotheek wilt wijzigen (en hiervoor de vereiste machtigingen hebt), maar het bestandssysteem op de server is beperkt en u kunt de bibliotheekbestanden niet kopiëren naar een locatie waartoe de server toegang heeft.
PERRON
Hiermee geeft u het platform voor de inhoud van de bibliotheek. De waarde wordt standaard ingesteld op het hostplatform waarop SQL Server wordt uitgevoerd. Daarom hoeft de gebruiker de waarde niet op te geven. Dit is vereist in het geval dat meerdere platforms worden ondersteund of dat de gebruiker een ander platform moet opgeven. In SQL Server 2019 zijn Windows en Linux de ondersteunde platforms.
LANGUAGE = 'R'
Hiermee geeft u de taal van het pakket. R wordt ondersteund in SQL Server 2017.
Taal
Hiermee geeft u de taal van het pakket. De waarde kan of Python in Azure SQL Managed Instance zijnR.
Taal
Hiermee geeft u de taal van het pakket. De waarde kan R, Pythonof de naam van een externe taal zijn (zie CREATE EXTERNAL LANGUAGE).
Opmerkingen
Voor de R-taal moeten pakketten worden voorbereid in de vorm van gezipte archiefbestanden met de extensie .ZIP voor Windows. In SQL Server 2017 wordt alleen het Windows-platform ondersteund.
Voor de R-taal moeten pakketten worden voorbereid in de vorm van gezipte archiefbestanden met de extensie .ZIP.
Voor de Python-taal moet het pakket in een .whl- of .zip-bestand worden voorbereid in de vorm van een zip-archiefbestand. Als het pakket al een .zip bestand is, moet het worden opgenomen in een nieuw .zip bestand. Het rechtstreeks uploaden van een pakket als .whl- of .zip-bestand wordt momenteel niet ondersteund.
De CREATE EXTERNAL LIBRARY instructie uploadt de bibliotheek-bits naar de database. De bibliotheek wordt geïnstalleerd wanneer een gebruiker een extern script uitvoert met behulp van sp_execute_external_script en het pakket of de bibliotheek aanroept.
Bibliotheken die naar het exemplaar zijn geüpload, kunnen openbaar of privé zijn. Als de bibliotheek wordt gemaakt door een lid van dbo, is de bibliotheek openbaar en kan deze worden gedeeld met alle gebruikers. Anders is de bibliotheek alleen privé voor die gebruiker.
Een aantal pakketten, ook wel systeempakketten genoemd, worden vooraf geïnstalleerd in een SQL-exemplaar. Systeempakketten kunnen niet door de gebruiker worden toegevoegd, bijgewerkt of verwijderd.
Permissions
Hiervoor is de CREATE EXTERNAL LIBRARY machtiging vereist. Standaard heeft elke gebruiker die dbo heeft die lid is van de rol db_owner machtigingen voor het maken van een externe bibliotheek. Voor alle andere gebruikers moet u hen expliciet toestemming geven met behulp van een GRANT-instructie , waarbij u CREATE EXTERNAL LIBRARY opgeeft als de bevoegdheid.
In SQL Server 2019 heeft de gebruiker naast de machtiging CREATE EXTERNAL LIBRARY ook verwijzingen nodig voor een externe taal om externe bibliotheken voor die externe taal te kunnen maken.
GRANT REFERENCES ON EXTERNAL LANGUAGE::Java to user
GRANT CREATE EXTERNAL LIBRARY to user
Voor het wijzigen van een bibliotheek is de afzonderlijke machtiging vereist. ALTER ANY EXTERNAL LIBRARY
Als u een externe bibliotheek wilt maken met behulp van een bestandspad, moet de gebruiker een geverifieerde Windows-aanmelding of lid zijn van de vaste serverfunctie sysadmin.
Voorbeelden
Een externe bibliotheek toevoegen aan een database
In het volgende voorbeeld wordt een externe bibliotheek aangeroepen customPackage aan een database toegevoegd.
CREATE EXTERNAL LIBRARY customPackage
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\customPackage.zip') WITH (LANGUAGE = 'R');
Nadat de bibliotheek is geüpload naar het exemplaar, voert een gebruiker de sp_execute_external_script procedure uit om de bibliotheek te installeren.
EXEC sp_execute_external_script 
@language =N'R', 
@script=N'library(customPackage)'
Voor de Python-taal in SQL Server 2019 werkt het voorbeeld ook door te 'R' vervangen door 'Python'.
Pakketten installeren met afhankelijkheden
Als het pakket dat u wilt installeren afhankelijkheden heeft, is het essentieel dat u zowel afhankelijkheden op het eerste niveau als op het tweede niveau analyseert en ervoor zorgt dat alle vereiste pakketten beschikbaar zijn voordat u het doelpakket probeert te installeren.
Stel dat u een nieuw pakket wilt installeren: packageA
- 
              
packageAheeft een afhankelijkheid vanpackageB - 
              
packageBheeft een afhankelijkheid vanpackageC 
Als u de installatie packageAwilt voltooien, moet u bibliotheken maken voor packageB en packageC tegelijkertijd die u toevoegt packageA aan SQL Server. Controleer ook de vereiste pakketversies.
In de praktijk zijn pakketafhankelijkheden voor populaire pakketten meestal veel gecompliceerder dan dit eenvoudige voorbeeld. Ggplot2 kan bijvoorbeeld meer dan 30 pakketten vereisen en die pakketten vereisen mogelijk extra pakketten die niet beschikbaar zijn op de server. Een ontbrekend pakket of een verkeerde pakketversie kan ertoe leiden dat de installatie mislukt.
Omdat het lastig kan zijn om alle afhankelijkheden alleen te bepalen vanuit het pakketmanifest, raden we u aan een pakket zoals miniCRAN te gebruiken om alle pakketten te identificeren die mogelijk nodig zijn om de installatie te voltooien.
Upload het doelpakket en de bijbehorende afhankelijkheden. Alle bestanden moeten zich in een map bevinden die toegankelijk is voor de server.
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'); GOInstalleer eerst de vereiste pakketten.
Als er al een vereist pakket is geüpload naar het exemplaar, hoeft u het niet opnieuw toe te voegen. Zorg ervoor dat u controleert of het bestaande pakket de juiste versie is.
De vereiste pakketten
packageCenpackageBworden geïnstalleerd, in de juiste volgorde, wanneer het pakket voorsp_execute_external_scripthet eerst wordt uitgevoerd om het pakketpackageAte installeren.Als er echter geen vereist pakket beschikbaar is, mislukt de installatie van het doelpakket
packageA.EXEC sp_execute_external_script @language =N'R', @script=N' # load the desired package packageA library(packageA) '
Voor de Python-taal in SQL Server 2019 werkt het voorbeeld ook door te 'R' vervangen door 'Python'.
Een bibliotheek maken op basis van een bytestream
Als u de pakketbestanden niet op een locatie op de server kunt opslaan, kunt u de inhoud van het pakket doorgeven in een variabele. In het volgende voorbeeld wordt een bibliotheek gemaakt door de bits door te geven als een hexadecimale letterlijke waarde.
CREATE EXTERNAL LIBRARY customLibrary FROM (CONTENT = 0xABC123...) WITH (LANGUAGE = 'R');
Voor de Python-taal in SQL Server 2019 werkt het voorbeeld ook door R te vervangen door Python.
Opmerking
In dit codevoorbeeld wordt alleen de syntaxis gedemonstreert; de binaire waarde in CONTENT = is afgekapt voor leesbaarheid en maakt geen werkende bibliotheek. De werkelijke inhoud van de binaire variabele zou veel langer zijn.
Een bestaande pakketbibliotheek wijzigen
De ALTER EXTERNAL LIBRARY DDL-instructie kan worden gebruikt om nieuwe bibliotheekinhoud toe te voegen of bestaande bibliotheekinhoud te wijzigen. Voor het wijzigen van een bestaande bibliotheek is de ALTER ANY EXTERNAL LIBRARY machtiging vereist.
Zie ALTER EXTERNAL LIBRARY voor meer informatie.
Een Java .jar-bestand toevoegen aan een database
In het volgende voorbeeld wordt een extern JAR-bestand aangeroepen customJar aan een database toegevoegd.
CREATE EXTERNAL LIBRARY customJar
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\customJar.jar') 
WITH (LANGUAGE = 'Java');
Nadat de bibliotheek is geüpload naar het exemplaar, voert een gebruiker de sp_execute_external_script procedure uit om de bibliotheek te installeren.
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))
Een extern pakket toevoegen voor Zowel Windows als Linux
U kunt maximaal twee <file_spec>opgeven, één voor Windows en één voor 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')
Wanneer u sp_execute_external_script het pakket installeert, afhankelijk van het platform waarop het SQL Server-exemplaar wordt uitgevoerd, wordt de bibliotheekinhoud voor dat platform gebruikt.
EXECUTE sp_execute_external_script 
    @LANGUAGE = N'R',
    @SCRIPT = N'
library(packageA)'
Zie ook
              ALTER EXTERNAL LIBRARY (Transact-SQL)
              DROP EXTERNAL LIBRARY (Transact-SQL)
              sys.external_library_files
              sys.external_libraries