Lesen von Dateien mit einer gespeicherten Python-Prozedur

Mit der Klasse SnowflakeFile des Snowpark-Moduls snowflake.snowpark.files kann Ihr Python-Handler dynamisch eine Datei aus einem der folgenden Snowflake-Stagingbereiche lesen:

  • Einen benannten internen Stagingbereich.

  • Interner Stagingbereich einer bestimmten Tabelle.

  • Interner Stagingbereich des aktuellen Benutzers.

Snowflake unterstützt das Lesen von Dateien mit SnowflakeFile sowohl für gespeicherte Prozeduren als auch für benutzerdefinierte Funktionen. Weitere Informationen zum Lesen von Dateien mit Ihrem Handler-Code sowie weitere Beispiele finden Sie unter Lesen einer Datei mit einem Python-UDF-Handler.

Beispiel

Dieses Beispiel zeigt, wie Sie eine gespeicherte Prozedur mit Eigentümerrechten, die eine Datei mit der Klasse SnowflakeFile liest, erstellen und aufrufen.

Erstellen Sie die gespeicherte Prozedur mit einem Inline-Handler, und geben Sie den Eingabemodus als binär an, indem Sie rb als mode-Argument übergeben:

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

Rufen Sie die gespeicherte Prozedur auf:

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