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))
$$;
Rufen Sie die gespeicherte Prozedur auf:
CALL calc_phash(build_scoped_file_url(@my_files, 'my_image.jpg'));