Sdílet prostřednictvím


CREATE EXTERNAL LIBRARY (Transact-SQL)

Platí pro: SQL Server 2017 (14.x) a novější verze Azure SQL Managed Instance

Nahraje soubory balíčků jazyka R, Python nebo Java do databáze ze zadaného datového proudu bajtů nebo cesty k souboru. Tento příkaz slouží jako obecný mechanismus pro správce databáze k nahrání artefaktů potřebných pro všechny nové moduly runtime externího jazyka a platformy operačního systému podporované SQL Serverem.

Poznámka:

V SQL Serveru 2017 se podporuje jazyk R a platforma Windows. Jazyk R, Python a externí jazyky na platformách Windows a Linux jsou podporovány v SQL Serveru 2019 a novějším.

Nahraje soubory balíčků R nebo Pythonu do databáze ze zadaného datového proudu bajtů nebo cesty k souboru. Tento příkaz slouží jako obecný mechanismus pro správce databáze k nahrání potřebných artefaktů.

Poznámka:

Ve službě Azure SQL Managed Instance můžete k instalaci knihovny použít nástroje sqlmlutils . Podrobnosti najdete v tématu Instalace balíčků Pythonu pomocí nástrojů sqlmlutils a Instalace nových balíčků R pomocí sqlmlutils.

Syntaxe pro 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>
}

Syntaxe pro 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 
}

Syntaxe pro spravovanou instanci Azure SQL

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

Knihovny nahrané do instance můžou být veřejné nebo soukromé. Pokud je knihovna vytvořená členem dbo, je knihovna veřejná a může být sdílena se všemi uživateli. V opačném případě je knihovna pro daného uživatele soukromá.

Názvy knihoven musí být jedinečné v kontextu konkrétního uživatele nebo vlastníka. Například dva uživatelé RUser1 a RUser2 mohou jednotlivě i samostatně nahrát knihovnu ggplot2R . Pokud však RUser1 chtěl nahrát novější verzi ggplot2, druhá instance musí být pojmenována jinak nebo musí nahradit existující knihovnu.

Názvy knihoven nelze libovolně přiřadit; název knihovny by měl být stejný jako název potřebný k načtení knihovny v externím skriptu.

owner_name

Určuje název uživatele nebo role, která vlastní externí knihovnu. Pokud není zadáno, je vlastnictví uděleno aktuálnímu uživateli.

Knihovny vlastněné vlastníkem databáze se považují za globální pro databázi a modul runtime. Jinými slovy, vlastníci databází můžou vytvářet knihovny, které obsahují společnou sadu knihoven nebo balíčků, které sdílí mnoho uživatelů. Pokud externí knihovnu vytvoří jiný uživatel než dbo uživatel, externí knihovna je pro daného uživatele soukromá.

Když uživatel RUser1 spustí externí skript, může hodnota libPath obsahovat více cest. První cesta je vždy cesta ke sdílené knihovně vytvořené vlastníkem databáze. Druhá část libPath určuje cestu obsahující balíčky nahrané jednotlivě uživatelem RUser1.

file_spec

Určuje obsah balíčku pro konkrétní platformu. Podporuje se pouze jeden artefakt souboru na platformu.

Soubor lze zadat ve formě místní cesty nebo síťové cesty.

Při pokusu o přístup k souboru zadanému v <client_library_specifier> zosobní SQL Server kontext zabezpečení aktuálního přihlášení systému Windows. Pokud <client_library_specifier> určuje síťové umístění (cesta UNC), zosobnění aktuálního přihlášení se nepřenese do síťového umístění kvůli omezením delegování. V tomto případě se přístup provádí pomocí kontextu zabezpečení účtu služby SQL Serveru. Další informace najdete v tématu Přihlašovací údaje (databázový stroj).a0>

Volitelně je možné zadat platformu operačního systému pro soubor. Pro každou platformu operačního systému pro konkrétní jazyk nebo modul runtime je povolen pouze jeden artefakt souboru nebo obsah.

library_bits

Určuje obsah balíčku jako šestnáctkový literál, podobně jako sestavení.

Tato možnost je užitečná, pokud potřebujete vytvořit knihovnu nebo změnit existující knihovnu (a mít k tomu požadovaná oprávnění), ale systém souborů na serveru je omezený a soubory knihovny nemůžete kopírovat do umístění, ke kterému má server přístup.

NÁSTUPIŠTĚ

Určuje platformu pro obsah knihovny. Výchozí hodnota je hostitelská platforma, na které běží SQL Server. Proto uživatel nemusí zadávat hodnotu. Vyžaduje se v případě, že se podporuje více platforem nebo uživatel musí zadat jinou platformu. V SQL Serveru 2019 jsou podporované platformy Windows a Linux.

LANGUAGE = 'R'

Určuje jazyk balíčku. Jazyk R je podporován v SQL Serveru 2017.

Jazyk

Určuje jazyk balíčku. Hodnota může být R nebo Python ve službě Azure SQL Managed Instance.

Jazyk

Určuje jazyk balíčku. Hodnota může být R, Pythonnebo název externího jazyka (viz CREATE EXTERNAL LANGUAGE).

Poznámky

Pro jazyk R musí být balíčky při použití souboru připravené ve formě komprimovaných archivních souborů s příponou .ZIP pro Windows. V SQL Serveru 2017 se podporuje jenom platforma Windows.

V případě jazyka R musí být balíčky při použití souboru připravené ve formě komprimovaných archivních souborů s příponou .ZIP.

Pro jazyk Python musí být balíček v souboru .whl nebo .zip připravený ve formě komprimovaného archivního souboru. Pokud už balíček je soubor .zip, musí být součástí nového souboru .zip. Nahrání balíčku jako souboru .whl nebo .zip přímo není podporováno.

Příkaz CREATE EXTERNAL LIBRARY nahraje do databáze bity knihovny. Knihovna se nainstaluje, když uživatel spustí externí skript pomocí sp_execute_external_script a zavolá balíček nebo knihovnu.

Knihovny nahrané do instance můžou být veřejné nebo soukromé. Pokud je knihovna vytvořená členem dbo, je knihovna veřejná a může být sdílena se všemi uživateli. V opačném případě je knihovna pro daného uživatele soukromá.

Řada balíčků, které se označují jako systémové balíčky, jsou předinstalované v instanci SQL. Systémové balíčky nelze přidat, aktualizovat ani odebrat uživatelem.

Povolení

CREATE EXTERNAL LIBRARY Vyžaduje oprávnění. Ve výchozím nastavení má každý uživatel, který je členem role db_owner , oprávnění k vytvoření externí knihovny. Pro všechny ostatní uživatele musíte explicitně udělit oprávnění pomocí příkazu GRANT , který jako oprávnění určuje CREATE EXTERNAL LIBRARY.

V SQL Serveru 2019 kromě oprávnění CREATE EXTERNAL LIBRARY potřebuje uživatel také odkazy na externí jazyk, aby mohl vytvořit externí knihovny pro tento externí jazyk.

GRANT REFERENCES ON EXTERNAL LANGUAGE::Java to user
GRANT CREATE EXTERNAL LIBRARY to user

Chcete-li upravit libovolnou knihovnu, vyžaduje samostatné oprávnění. ALTER ANY EXTERNAL LIBRARY

Pokud chcete vytvořit externí knihovnu pomocí cesty k souboru, musí být uživatel ověřeným přihlášením systému Windows nebo členem pevné role serveru správce systému.

Examples

Přidání externí knihovny do databáze

Následující příklad přidá externí knihovnu volanou customPackage do databáze.

CREATE EXTERNAL LIBRARY customPackage
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\customPackage.zip') WITH (LANGUAGE = 'R');

Po úspěšném nahrání knihovny do instance provede uživatel sp_execute_external_script proceduru a nainstaluje knihovnu.

EXEC sp_execute_external_script 
@language =N'R', 
@script=N'library(customPackage)'

V případě jazyka Python v SQL Serveru 2019 funguje příklad také nahrazením 'R' .'Python'

Instalace balíčků se závislostmi

Pokud má balíček, který chcete nainstalovat, nějaké závislosti, je důležité, abyste analyzovali závislosti na první i druhé úrovni a před pokusem o instalaci cílového balíčku se ujistěte, že jsou k dispozici všechny požadované balíčky.

Předpokládejme například, že chcete nainstalovat nový balíček: packageA

  • packageA má závislost na packageB
  • packageB má závislost na packageC

Chcete-li uspět při instalaci packageA, musíte vytvořit knihovny pro packageB a packageC současně přidat packageA do SQL Serveru. Nezapomeňte také zkontrolovat požadované verze balíčků.

V praxi jsou závislosti balíčků pro oblíbené balíčky obvykle mnohem složitější než tento jednoduchý příklad. Ggplot2 může například vyžadovat více než 30 balíčků a tyto balíčky mohou vyžadovat další balíčky, které nejsou na serveru k dispozici. Jakákoli chybějící nebo nesprávná verze balíčku může způsobit selhání instalace.

Vzhledem k tomu, že může být obtížné určit všechny závislosti jen z pohledu manifestu balíčku, doporučujeme použít balíček, jako je miniCRAN , identifikovat všechny balíčky, které mohou být nutné k úspěšnému dokončení instalace.

  • Nahrajte cílový balíček a jeho závislosti. Všechny soubory musí být ve složce, která je přístupná k serveru.

    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');
    GO
    
  • Nejprve nainstalujte požadované balíčky.

    Pokud už byl do instance nahraný požadovaný balíček, nemusíte ho znovu přidat. Nezapomeňte zkontrolovat, jestli je stávající balíček správnou verzí.

    Požadované balíčky a jsou nainstalovány packageC ve správném pořadí při sp_execute_external_script prvním spuštění pro instalaci balíčku packageA.packageB

    Pokud však není k dispozici žádný požadovaný balíček, instalace cílového balíčku packageA selže.

    EXEC sp_execute_external_script 
    @language =N'R', 
    @script=N'
    # load the desired package packageA
    library(packageA)
    '
    

V případě jazyka Python v SQL Serveru 2019 funguje příklad také nahrazením 'R' .'Python'

Vytvoření knihovny z bajtového streamu

Pokud nemáte možnost ukládat soubory balíčku do umístění na serveru, můžete obsah balíčku předat do proměnné. Následující příklad vytvoří knihovnu předáním bitů jako šestnáctkového literálu.

CREATE EXTERNAL LIBRARY customLibrary FROM (CONTENT = 0xABC123...) WITH (LANGUAGE = 'R');

V případě jazyka Python v SQL Serveru 2019 funguje příklad také nahrazením jazyka R za Python.

Poznámka:

Tento vzorový kód demonstruje pouze syntaxi; binární hodnota byla CONTENT = zkrácena pro čitelnost a nevytvoří pracovní knihovnu. Skutečný obsah binární proměnné by byl mnohem delší.

Změna existující knihovny balíčků

Příkaz ALTER EXTERNAL LIBRARY DDL lze použít k přidání nového obsahu knihovny nebo úpravě existujícího obsahu knihovny. Chcete-li upravit existující knihovnu, vyžaduje oprávnění ALTER ANY EXTERNAL LIBRARY .

Další informace naleznete v tématu ALTER EXTERNAL LIBRARY.

Přidání souboru java .jar do databáze

Následující příklad přidá externí soubor JAR volaný customJar do databáze.

CREATE EXTERNAL LIBRARY customJar
FROM (CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\customJar.jar') 
WITH (LANGUAGE = 'Java');

Po úspěšném nahrání knihovny do instance provede uživatel sp_execute_external_script proceduru a nainstaluje knihovnu.

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))

Přidání externího balíčku pro Windows i Linux

Můžete zadat až dvě <file_spec>– jednu pro Windows a jednu pro 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')

Pokud balíček nainstalujete sp_execute_external_script v závislosti na platformě, na které je instance SQL Serveru spuštěná, použije se obsah knihovny pro danou platformu.

EXECUTE sp_execute_external_script 
    @LANGUAGE = N'R',
    @SCRIPT = N'
library(packageA)'

Viz také

ALTER EXTERNAL LIBRARY (Transact-SQL)
DROP EXTERNAL LIBRARY (Transact-SQL)
sys.external_library_files
sys.external_libraries