ALTER EXTERNAL LIBRARY (Transact-SQL)
Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Instância Gerenciada de SQL do Azure
Modifica o conteúdo de uma biblioteca de pacotes externa existente.
Observação
No SQL Server 2017, há compatibilidade apenas com a linguagem R e a plataforma Windows. Há suporte para as linguagens R, Python e externas nas plataformas Windows e Linux no SQL Server 2019 e posterior.
Observação
No Instância Gerenciada de SQL do Azure, você pode alterar uma biblioteca removendo-a e usando sqlmlutils para instalar a versão alterada. Para obter mais informações sobre o sqlmlutils, confira Instalar pacotes de Python com o sqlmlutils e Instalar novos pacotes de R com sqlmlutils.
Sintaxe do SQL Server 2019
ALTER EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
SET <file_spec>
WITH ( LANGUAGE = <language> )
[ ; ]
<file_spec> ::=
{
(CONTENT = { <client_library_specifier> | <library_bits> | NONE}
[, PLATFORM = <platform> )
}
<client_library_specifier> :: =
{
'[\\computer_name\]share_name\[path\]manifest_file_name'
| '[local_path\]manifest_file_name'
| '<relative_path_in_external_data_source>'
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
<platform> :: =
{
WINDOWS
| LINUX
}
<language> :: =
{
'R'
| 'Python'
| <external_language>
}
Sintaxe do SQL Server 2017
ALTER EXTERNAL LIBRARY library_name
[ AUTHORIZATION owner_name ]
SET <file_spec>
WITH ( LANGUAGE = 'R' )
[ ; ]
<file_spec> ::=
{
(CONTENT = { <client_library_specifier> | <library_bits> | NONE}
[, PLATFORM = WINDOWS )
}
<client_library_specifier> :: =
{
'[\\computer_name\]share_name\[path\]manifest_file_name'
| '[local_path\]manifest_file_name'
| '<relative_path_in_external_data_source>'
}
<library_bits> :: =
{
varbinary_literal
| varbinary_expression
}
Sintaxe para a Instância Gerenciada de SQL do Azure
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'
}
Argumentos
library_name
Especifica o nome de uma biblioteca de pacotes existente. As bibliotecas estão no escopo do usuário. Os nomes de bibliotecas devem ser exclusivos no contexto de um usuário ou proprietário específico.
O nome da biblioteca não pode ser atribuído arbitrariamente. Ou seja, você precisa usar o nome que o runtime de chamada espera ao carregar o pacote.
owner_name
Especifica o nome do usuário ou da função que é a proprietária da biblioteca externa.
file_spec
Especifica o conteúdo do pacote para uma plataforma específica. Há compatibilidade apenas com um artefato de arquivo por plataforma.
O arquivo pode ser especificado na forma de um caminho local ou de um caminho de rede. Se a opção de fonte de dados for especificada, o nome do arquivo poderá ser um caminho relativo em relação ao contêiner referenciado em EXTERNAL DATA SOURCE
.
Opcionalmente, uma plataforma de sistema operacional para o arquivo pode ser especificada. Somente um artefato ou conteúdo de arquivo é permitido para cada plataforma de sistema operacional em uma linguagem ou um runtime específico.
library_bits
Especifica o conteúdo do pacote como um literal hexadecimal, semelhante aos assemblies.
Essa opção será útil se você tiver a permissão necessária para alterar uma biblioteca, mas o acesso a arquivos no servidor estiver restrito e não for possível salvar o conteúdo em um caminho que o servidor possa acessar.
Nesse caso, você pode passar o conteúdo do pacote como uma variável em formato binário.
platform = WINDOWS
Especifica a plataforma para o conteúdo da biblioteca. Esse valor é necessário ao modificar uma biblioteca existente para adicionar uma plataforma diferente. No SQL Server 2017, o Windows é a única plataforma compatível.
platform
Especifica a plataforma para o conteúdo da biblioteca. Esse valor é necessário ao modificar uma biblioteca existente para adicionar uma plataforma diferente. No SQL Server 2019, o Windows e o Linux são as plataformas compatíveis.
LANGUAGE = 'R'
Especifica a linguagem do pacote. O R tem suporte no SQL Server 2017.
linguagem
Especifica a linguagem do pacote. O valor pode ser R ou Python na Instância Gerenciada de SQL do Azure.
linguagem
Especifica a linguagem do pacote. O valor pode ser R, Python ou o nome de uma linguagem externa (confira CREATE EXTERNAL LANGUAGE).
Comentários
Para a linguagem R, os pacotes precisam ser preparados no formato de arquivos compactados com a extensão .ZIP para Windows. No SQL Server 2017, apenas a plataforma Windows é compatível.
Para a linguagem R, ao usar um arquivo, os pacotes precisam ser preparados no formato de arquivos mortos compactados com a extensão .zip.
Para a linguagem Python, o pacote em um arquivo .whl ou .zip deve estar preparado na forma de um arquivo morto compactado. Se o pacote já for um arquivo .zip, ele deverá ser incluído em um novo arquivo .zip. Carregar um pacote diretamente como arquivo .whl ou .zip não é uma ação compatível atualmente.
A instrução ALTER EXTERNAL LIBRARY
carrega apenas os bits de biblioteca para o banco de dados. A biblioteca modificada é instalada quando um usuário executa o código no sp_execute_external_script (Transact-SQL) que chama a biblioteca.
Vários pacotes, chamados de pacotes do sistema, são pré-instalados em uma instância SQL. Os pacotes do sistema não podem ser adicionados, atualizados nem removidos pelo usuário.
Permissões
Por padrão, os usuários do dbo ou membros da função db_owner têm permissão para executar ALTER EXTERNAL LIBRARY. Além disso, os usuários que criaram a biblioteca externa podem alterá-la.
Exemplos
Os exemplos a seguir alteram uma biblioteca externa chamada customPackage
.
Substituir o conteúdo de uma biblioteca usando um arquivo
O exemplo a seguir modifica uma biblioteca externa chamada customPackage
, usando um arquivo compactado que contém os bits atualizados.
ALTER EXTERNAL LIBRARY customPackage
SET
(CONTENT = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\customPackage.zip')
WITH (LANGUAGE = 'R');
Para instalar a biblioteca atualizada, execute o procedimento armazenado sp_execute_external_script
.
EXEC sp_execute_external_script
@language =N'R',
@script=N'library(customPackage)'
;
Para a linguagem Python, o exemplo também funciona, substituindo 'R'
por 'Python'
.
Alterar uma biblioteca existente usando um fluxo de bytes
O exemplo a seguir altera a biblioteca existente, passando os novos bits como um literal hexadecimal.
ALTER EXTERNAL LIBRARY customLibrary
SET (CONTENT = 0xABC123...) WITH (LANGUAGE = 'R');
Para a linguagem Python, o exemplo também funciona, substituindo 'R'
por 'Python'
.
Observação
Este exemplo de código demonstra apenas a sintaxe; o valor binário em CONTENT =
foi truncado para facilitar a leitura e não cria uma biblioteca de trabalho. O conteúdo real da variável binária deveria ser maior.
Confira também
CREATE EXTERNAL LIBRARY (Transact-SQL)
DROP EXTERNAL LIBRARY (Transact-SQL)
sys.external_library_files
sys.external_libraries