Pacotes de código¶
Qualquer colaborador pode agrupar procedimentos Python personalizados, UDFs ou UDTFs com modelos de colaboração. Os modelos, por sua vez, fazem referência ao código agrupado para executar ações de dados complexas na colaboração. O uso comum inclui machine learning ou manipulação de dados personalizados em uma consulta. O código carregado pode importar e usar pacotes de um conjunto aprovado de pacotes Python e da Snowpark API.
O código personalizado só pode ser chamado por meio de modelos e não diretamente.
Nota
Python é a única linguagem de programação compatível com pacotes de código.
As seções a seguir mostram como carregar e usar pacotes de código.
Implementando pacotes de código personalizados¶
Veja como carregar e usar um pacote de código:
Quem envia o código:
Cria e registra o código chamando REGISTER_CODE_SPEC.
O código pode estar em linha na especificação ou vinculado de uma área de preparação.
Cria um modelo que faz referência à especificação do pacote de código pelo ID na matriz
code_specsdo modelo. Adicione esse campo como um par de campos de modelo e de parâmetros, conforme mostrado neste exemplo:Registra e vincula o modelo à colaboração.
Quem executa a análise:
Executa o modelo da maneira padrão, chamando
RUN.
Importante
O Snowflake executa verificações de segurança em todos os pacotes carregados antes de implantá-los em uma sala limpa. Se uma verificação de segurança falhar, o modelo e seu código em pacote não serão implantados nem estarão disponíveis para uso.
Para confirmar se um modelo com um pacote de código está implantado e pronto para uso, siga as etapas a seguir:
Encontre o nome do aplicativo de sala limpa em que você está tentando implantar o pacote de código:
Verifique o valor
upgrade_statena resposta de DESCRIBE APPLICATION. Quando o estado da atualização é COMPLETE, as verificações de segurança foram aprovadas, e o modelo e o pacote novos estão disponíveis para uso. Passe o nome do aplicativo retornado pelo comando na etapa anterior usando SQL, como no exemplo a seguir: código SQL:
Criar e registrar a especificação do pacote de código¶
A primeira etapa para carregar o código personalizado é criar e registrar a especificação do pacote de código.
As funções personalizadas são definidas em uma especificação de pacote de código YAML. Cada pacote de código expõe uma ou mais funções que podem ser chamadas por um modelo. A especificação do pacote de código pode incluir o código na especificação em linha ou vincular para o código que reside em uma área de preparação do Snowflake.
Um colaborador registra uma especificação chamando REGISTRY.REGISTER_CODE_SPEC, que retorna o ID do pacote.
Depois que o modelo que referencia o pacote de código for vinculado à colaboração, esse pacote de código ficará visível para qualquer pessoa na colaboração que possa acessar um modelo que o vincule. Chame VIEW_CODE_SPECS para listar pacotes de código acessíveis em uma colaboração.
Qualquer pessoa que possa ver um pacote de código em uma colaboração poderá vê-lo e usá-lo em seus próprios modelos nessa colaboração. Qualquer código em linha pode ser visualizado por qualquer membro da colaboração, mas o código do artefato preparado não pode ser visualizado pelos colaboradores. Os colaboradores precisam garantir que o content_hash dos artefatos referenciados corresponda para a verificação de integridade do código.
A especificação do pacote de código a seguir expõe uma única UDF Python chamada normalize_value, que chama a função normalize definida nessa especificação:
Criar e registrar o modelo de chamada¶
Após o registro da especificação de código, o colaborador registra um modelo que usa esse pacote de código. Para usar um pacote de código, adicione o ID da especificação do pacote ao campo code_specs do modelo. Adicionar este modelo à colaboração também fará com que o código empacotado fique disponível na colaboração.
Um modelo chama uma função personalizada usando a sintaxe cleanroom.spec_name$function_name. Observe as marcas de escopo de nomes . e $.
Nota
Use o nome, e não o ID, da especificação para fazer referência a uma função em seu modelo. Isso permite que você atualize rapidamente a versão do seu pacote de código sem precisar alterar todas as referências a ele no seu modelo.
No exemplo a seguir, um modelo usa a função normalize_value do pacote de código custom_udf:
Adicionar o modelo a uma colaboração¶
Adicione o modelo que chama sua função à colaboração da maneira padrão. Para obter mais informações, consulte Modelos.
O Snowflake o valida e carrega na colaboração quando o modelo de chamada é adicionado a uma colaboração. O exemplo a seguir mostra uma solicitação para adicionar um modelo a uma colaboração existente:
Nota
A instalação de um modelo com um pacote de código aciona uma verificação de segurança do Snowflake e emite um novo patch da sala limpa subjacente. O modelo não estará disponível ou utilizável até que o processo seja concluído e o patch seja instalado.
Para verificar o progresso da instalação do patch:
Encontre o nome do aplicativo de sala limpa. Normalmente, será
SFDCR_<clean room name>, mas você pode pesquisar para ter certeza:Verifique o status da instalação do patch. Aguarde até que
upgrade_stateesteja COMPLETE na seguinte consulta:
Controlando as versões do seu código¶
Cada especificação de código registrada deve ter um nome + versão exclusivos em todos os registros em sua conta. Um modelo carrega um nome e uma versão específicos de uma especificação de código. Se quiser criar ou consumir uma nova versão do seu código, você deverá enviar uma nova versão do modelo que faça referência à nova versão do código no campo code_specs. Você não precisa alterar o corpo do modelo. Por exemplo:
Etapa 1: Consumir a versão 1 do pacote de código:
Etapa 2: Atualizar e registrar a nova versão do seu pacote de código e, em seguida, atualizar seu modelo para usar a nova versão:
Observe que os nomes das funções não incluem a versão; portanto, você não precisa alterar o código de chamada no corpo do modelo ao carregar uma nova versão de uma função.
Exemplos de especificações¶
UDF em linha com corpo de código¶
Uma UDF simples com código Python em linha:
UDTF (função de tabela definida pelo usuário)¶
Este exemplo de YAML define uma UDTF que retorna várias linhas:
Artefato preparado com pacote wheel¶
Leia os requisitos na documentação do stage_path para vincular ao código preparado na sua especificação de código.
Este exemplo de YAML utiliza um pacote wheel Python preparado:
Procedimento armazenado¶
Este exemplo de YAML define um procedimento armazenado para processamento de dados:
Vários arquivos Python como artefatos preparados¶
Leia os requisitos na documentação do stage_path para vincular ao código preparado na sua especificação de código.
Este exemplo de YAML utiliza vários arquivos de origem Python preparados: