Limitações da UDF de Scala

Este tópico descreve as limitações em vigor para manipuladores escritos em Scala.

Limitações gerais

  • Embora seu método de Scala possa usar classes e métodos nas bibliotecas padrão, as limitações de segurança do Snowflake desabilitam algumas capacidades, tais como escrever em arquivos. Para obter mais detalhes, consulte a seção intitulada Práticas de segurança para UDFs e procedimentos.

  • UDFs de Scala não são compartilháveis. Objetos de banco de dados que usam UDFs de Scala também não são compartilháveis. Por exemplo, você não pode:

    • Compartilhar diretamente uma UDF de Scala.

    • Compartilhar uma exibição que chama uma UDF de Scala.

    • Compartilhar uma função que chama uma UDF de Scala.

    • Compartilhar uma tabela com uma política de acesso a linhas ou de mascaramento que chame uma UDF de Scala.

  • A concessão de um privilégio de USAGE para uma UDF de Scala 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 Scala a uma função, e se essa função executar uma instrução que chama essa UDF de Scala, qualquer UDF de Scala na mesma instrução poderá ler o conteúdo de qualquer arquivo importado pela UDF de Scala para a qual você concedeu o privilégio de USAGE.

  • A replicação de banco de dados ainda não inclui estágios externos ou internos. Quando você promove um banco de dados secundário para servir como banco de dados primário, você deve recriar objetos de preparação e reimportar quaisquer arquivos que faltem em estágios internos. Os arquivos devem ter o mesmo caminho e os mesmos nomes que no banco de dados primário original.

  • O tamanho máximo para uma linha de saída de uma UDF de Scala é 16 MB.

  • Não há suporte para simultaneidade. Por exemplo, de dentro de seu código, você não pode enviar consultas a partir de múltiplos threads. O código que emite simultaneamente múltiplas consultas produzirá um erro.

  • Se uma consulta chama uma UDF para acessar arquivos preparados, a operação falha com um erro do usuário se a instrução SQL também consultar uma exibição que chame qualquer UDF, não importando se a função na exibição acessa arquivos preparados ou não.

  • UDFs atualmente processam arquivos em série. Para contornar isso, agrupe linhas em uma subconsulta usando a cláusula GROUP BY.

  • Atualmente, se arquivos preparados referenciados em uma consulta são modificados ou excluídos enquanto a consulta está em execução, a chamada de função falha com um erro.

Limitações da clonagem

Uma UDF de Scala pode ser clonada quando o banco de dados ou esquema contendo a UDF de Scala é clonado. Para ser clonada, a UDF de Scala deve satisfazer a(s) seguinte(s) condição(ões):

  • Se a UDF de Scala faz referência a um estágio (por exemplo, o estágio que contém o arquivo JAR da UDF), esse estágio deve estar fora do esquema (ou banco de dados) que está sendo clonado.

    Você pode manter uma UDF de Scala 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 Scala 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 Scala. 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 Scala 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 Scala 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 Scala não conformes serão omitidas do clone sem nenhuma mensagem de erro ou advertência.

Cada UDF de Scala 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 Scala 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 (por exemplo, substituir o arquivo JAR por um arquivo JAR mais recente) afeta tanto a UDF original quanto a clonada.