Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
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
-
packageAmá závislost napackageB -
packageBmá závislost napackageC
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'); GONejprve 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
packageCve správném pořadí připackageBprvním spuštění pro instalaci balíčkusp_execute_external_script.packageAPokud ale není k dispozici žádný požadovaný balíček, instalace cílového balíčku
packageAselž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)';