Limitações de UDF de Python¶
Este tópico descreve as limitações em vigor para manipuladores escritos em Python.
Neste tópico:
Limitações gerais¶
Embora sua função de Python possa usar módulos e funções nos pacotes padrão de Python, as limitações de segurança do Snowflake desabilitam algumas capacidades, tais como a escrita em arquivos. Para obter mais detalhes, consulte a seção intitulada Boas práticas de segurança.
Todas as UDFs e módulos trazidos por estágios devem ser independentes da plataforma e não devem conter extensões nativas.
Evite códigos que suponham uma arquitetura de CPU específica (por exemplo, x86).
Evite códigos que suponham um sistema operacional específico.
UDFs de Python não são compartilháveis. Objetos de banco de dados que usam UDFs de Python também não são compartilháveis. Por exemplo, você não pode:
Compartilhar diretamente uma UDF de Python.
Compartilhar uma exibição que chama uma UDF de Python.
Compartilhar uma função que chama uma UDF de Python.
Compartilhar uma tabela com uma política de acesso a linhas ou de mascaramento que chame uma UDF de Python.
A concessão de um privilégio de USAGE para uma UDF de Python pode permitir que o destinatário veja o conteúdo dos arquivos importados por essa UDF. Se você conceder o privilégio de USAGE para uma UDF de Python a uma função, e se essa função executar uma instrução que chama essa UDF de Python, qualquer UDF de Python na mesma instrução poderá ler o conteúdo de qualquer arquivo importado pela UDF de Python para a qual você concedeu o privilégio de USAGE.
A replicação de banco de dados é suportada para UDFs de Python inline. No entanto, a replicação é bloqueada se um UDF de Python tiver uma dependência de um arquivo em um estágio (ou seja, uma função criada usando a cláusula IMPORTS). Essa limitação pode ser removida em versões futuras.
O Snowflake usa o módulo de Python
zipimport
para importar o código de Python de estágios. Como resultado, quaisquer limitações dozipimport
também estarão presentes com UDFs. Para saber mais sobrezipimport
, consulte a referência zipimport.
Limitações da clonagem¶
Uma UDF de Python pode ser clonada quando o banco de dados ou esquema contendo a UDF de Python é clonado. Para ser clonada, a UDF de Python deve satisfazer a(s) seguinte(s) condição(ões):
Se a UDF de Java faz referência a um estágio, esse estágio deve estar fora do esquema (ou banco de dados) que está sendo clonado.
Você pode manter uma UDF de Python e seu(s) estágio(s) referenciado(s) em esquemas separados (e/ou bancos de dados separados) das seguintes maneiras:
Sempre que a UDF de Python fizer referência a um estágio, use um nome de estágio qualificado (por exemplo “my_db.my_schema.my_stage()”) diferente do esquema ou banco de dados da UDF de Python. Se a operação de clonagem clona um banco de dados, a referência do estágio deve incluir o banco de dados e o esquema. Se a operação de clonagem clonar um esquema, a referência do estágio deve incluir o esquema (e opcionalmente o banco de dados).
Crie o estágio referenciado usando um nome de estágio não qualificado (que implicitamente usa o banco de dados e esquema ativo da sessão atual) e crie a UDF de Python usando um nome qualificado que não corresponda ao banco de dados e esquema atual da sessão.
Use o estágio do usuário como o estágio referenciado (o estágio do usuário é separado de qualquer estágio ou esquema de banco de dados).
Se uma ou mais UDFs de Python no esquema ou banco de dados não satisfizerem as condições exigidas, o esquema ou banco de dados ainda poderá ser clonado, mas as UDFs de Python não conformes serão omitidas do clone sem nenhuma mensagem de erro ou advertência.
Cada UDF de Python clonada tem a mesma definição que a original. Essa definição inclui quaisquer referências a estágios. As referências a estágios na UDF de Python devem ser totalmente qualificadas e, portanto, são absolutas, não relativas ao esquema ou banco de dados que está sendo clonado. Porque tanto o original quanto o clone apontam para o(s) mesmo(s) estágio(s) e arquivo(s):
Remover o estágio ou remover arquivos necessários do estágio desativa tanto a UDF original quanto a clonada.
Alterar o estágio ou os arquivos no palco afeta tanto a UDF original quanto a clonada.