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 SYSTÉMU SQL Server 2017 (14.x) se podporuje jazyk R a platforma Windows. R, Python a externí jazyky na platformách Windows a Linux jsou podporované v SQL Serveru 2019 (15.x) a novějších verzích.

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ů.

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 můžou jednotlivě i samostatně nahrát knihovnu R ggplot2. Pokud RUser1 ale chcete nahrát novější verzi ggplot2, musí být druhá instance 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ě .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>aplikaci SQL Server zosobní 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 souborový systém na serveru je omezený a nemůžete kopírovat soubory knihovny do umístění, ke kterému má server přístup.

PLATFORMA

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 (15.x) jsou podporované platformy Windows a Linux.

LANGUAGE = 'R'

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

LANGUAGE

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

LANGUAGE

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 (14.x) se podporuje jenom platforma Windows.

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 jazyk Python musí být balíček v souboru nebo .zip souboru .whl připravený ve formě souboru komprimovaného archivu. Pokud už balíček je .zip soubor, musí být součástí nového .zip souboru. Nahrání balíčku jako .whl nebo .zip souboru přímo se v současné době nepodporuje.

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á.

Několik balíčků, označovaných jako systémové balíčky, je předinstalováno v instanci SQL. Systémové balíčky nemůžete přidávat, aktualizovat ani odebírat.

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ý CREATE EXTERNAL LIBRARY určuje oprávnění.

V SQL Serveru 2019 (15.x) kromě CREATE EXTERNAL LIBRARY oprávnění 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 proceduru sp_execute_external_script a nainstaluje knihovnu.

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

Pro jazyk Python v SQL Serveru 2019 (15.x), příklad funguje 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 složitější než v tomto příkladu. Ggplot2 může například vyžadovat více než 30 balíčků a tyto balíčky můžou vyžadovat další balíčky, které nejsou na serveru dostupné. 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 od zobrazení manifestu balíčku, použijte balíček, jako je miniCRAN , k identifikaci všech balíčků potřebných 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á pro 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');
    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 packageB prvním spuštění pro instalaci balíčku sp_execute_external_script.packageA

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

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

Pro jazyk Python v SQL Serveru 2019 (15.x), příklad funguje 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');

Pro jazyk Python v SQL Serveru 2019 (15.x), příklad funguje také nahrazením R .Python

Poznámka:

Tento vzorový kód demonstruje pouze syntaxi; binární hodnota je CONTENT = zkrácena pro čitelnost a nevytvoří pracovní knihovnu. Skutečný obsah binární proměnné je 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í .jar soubor 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 proceduru sp_execute_external_script a nainstaluje knihovnu.

EXECUTE 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)';