Leitura de arquivos com um procedimento armazenado Python

Usando a classe SnowflakeFile no módulo do Snowpark snowflake.snowpark.files, seu manipulador Python pode ler dinamicamente um arquivo de um dos seguintes estágios do Snowflake:

  • Um estágio interno nomeado.

  • Um estágio interno de uma tabela especificada.

  • O estágio interno do usuário atual.

O Snowflake oferece suporte à leitura de arquivos com SnowflakeFile para procedimentos armazenados e funções definidas pelo usuário. Para obter mais informações sobre a leitura de arquivos no código do manipulador, bem como mais exemplos, consulte Como ler um arquivo com um manipulador de UDF Python.

Exemplo

Este exemplo demonstra como criar e chamar um procedimento armazenado de direitos do proprietário que lê um arquivo usando a classe SnowflakeFile.

Crie o procedimento armazenado com um manipulador em linha, especificando o modo de entrada como binário passando rb para o argumento mode:

CREATE OR REPLACE PROCEDURE calc_phash(file_path string)
RETURNS STRING
LANGUAGE PYTHON
RUNTIME_VERSION = '3.9'
PACKAGES = ('snowflake-snowpark-python','imagehash','pillow')
HANDLER = 'run'
AS
$$
from PIL import Image
import imagehash
from snowflake.snowpark.files import SnowflakeFile

def run(ignored_session, file_path):
    with SnowflakeFile.open(file_path, 'rb') as f:
        return imagehash.average_hash(Image.open(f))
$$;
Copy

Chame o procedimento armazenado:

CALL calc_phash(build_scoped_file_url(@my_files, 'my_image.jpg'));
Copy