Partilhar via


ALTER BIBLIOTECA EXTERNA (Transact-SQL)

Aplica-se a: SQL Server 2017 (14.x) e versões posteriores Instância Gerenciada SQL do Azure

Modifica o conteúdo de uma biblioteca de pacotes externa existente.

Observação

No SQL Server 2017 (14.x), são suportados a linguagem R e a plataforma Windows. R, Python e linguagens externas nas plataformas Windows e Linux são suportados no SQL Server 2019 (15.x) e versões posteriores.

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 da Instância Gerenciada 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'
}

Arguments

LIBRARY_NAME

Especifica o nome de uma biblioteca de pacotes existente. As bibliotecas têm o escopo definido para o usuário. Os nomes das bibliotecas devem ser exclusivos dentro do contexto de um usuário ou proprietário específico.

O nome da biblioteca não pode ser atribuído arbitrariamente. Ou seja, você deve usar o nome que o tempo de execução de chamada espera quando carrega o pacote.

OWNER_NAME

Especifica o nome do usuário ou função que possui a biblioteca externa.

FILE_SPEC

Especifica o conteúdo do pacote para uma plataforma específica. Apenas um artefato de arquivo por plataforma é suportado.

O arquivo pode ser especificado na forma de um caminho local ou 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 EXTERNAL DATA SOURCEno .

Opcionalmente, uma plataforma de sistema operacional para o arquivo pode ser especificada. Apenas um arquivo, artefato ou conteúdo é permitido para cada plataforma do sistema operacional para uma linguagem ou tempo de execução específico.

LIBRARY_BITS

Especifica o conteúdo do pacote como um literal hexadecimal, semelhante aos assemblies.

Esta opção é útil se tiveres a permissão necessária para alterar uma biblioteca, mas o acesso a ficheiros no servidor é restrito e não podes guardar o conteúdo num caminho acessível ao servidor.

Em vez disso, você pode passar o conteúdo do pacote como uma variável em formato binário.

PLATAFORMA = JANELAS

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 (14.x), o Windows é a única plataforma suportada.

PLATAFORMA

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 (15.x), o Windows e o Linux são as plataformas suportadas.

LÍNGUA = 'R'

Especifica o idioma do pacote. R é suportado no SQL Server 2017 (14.x).

LANGUAGE

Especifica o idioma do pacote. O valor pode ser R ou Python na Instância Gerenciada SQL do Azure.

LANGUAGE

Especifica o idioma do pacote. O valor pode ser R, Pythonou o nome de um idioma externo (consulte CREATE EXTERNAL LANGUAGE).

Observações

Para a linguagem R, os pacotes devem ser preparados sob a forma de ficheiros de arquivo comprimidos com a .zip extensão para Windows. No SQL Server 2017 (14.x), apenas a plataforma Windows é suportada.

Para a linguagem R, ao usar um ficheiro, os pacotes devem ser preparados sob a forma de ficheiros de arquivo comprimidos com a .zip extensão.

Para a linguagem Python, o pacote num .whl ficheiro or .zip deve ser preparado sob a forma de um ficheiro de arquivo comprimido. Se o pacote já for um .zip ficheiro, deve ser incluído num novo .zip ficheiro. Carregar um pacote como .whl ou .zip ficheiro diretamente não é atualmente suportado.

A ALTER EXTERNAL LIBRARY instrução carrega apenas os bits da biblioteca para o banco de dados. A biblioteca modificada é instalada quando um utilizador executa código em sp_execute_external_script que chama a biblioteca.

Vários pacotes, referidos como pacotes de sistema, são pré-instalados numa instância SQL. Não podes adicionar, atualizar ou remover pacotes do sistema.

Permissions

Por defeito, o utilizador do dbo ou qualquer membro do papel db_owner tem permissão para executar ALTER EXTERNAL LIBRARY. Além disso, o usuário que criou a biblioteca externa pode alterar essa biblioteca externa.

Examples

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

EXECUTE 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 apenas demonstra a sintaxe; O valor binário em CONTENT = é truncado para legibilidade e não cria uma biblioteca funcional. O conteúdo real da variável binária é mais longo.