在 Snowflake Notebooks 中处理文件¶
本主题介绍如何从 Snowflake Notebooks 上传和访问文件。
笔记本环境中的文件¶
创建新笔记本时,系统会创建笔记本主文件。您可以在笔记本左侧的 Files 选项卡中查看该文件。文件存储在代表笔记本环境的内部暂存区,并在会话之间持续存在。
笔记本主文件:默认情况下,该文件名为
notebook_app.ipynb
。如果笔记本是通过 Git 创建的,或者是从其他.ipynb
文件上传的,文件名可能会有所不同。environment.yml:此文件在安装新包后自动生成。它描述了您的笔记本环境,包括安装了哪些包。
要查看文件内容,请选择文件名以显示文件内容预览。
笔记本环境中的临时文件系统¶
笔记本有一个临时文件系统,可在活动会话期间使用。会话期间创建的任何文件都会保存在这个临时暂存区中。结束当前笔记本会话后,临时暂存区中的文件将不可用。
以下代码创建一个名为 myfile.txt
的文件,并在其中写入了一些文本:
with open("myfile.txt",'w') as f:
f.write("abc")
f.close()
您可以在创建文件的同一会话中访问该文件。
使用 listdir()
方法列出临时暂存区中的文件:
import os
os.listdir()
现在断开当前会话并重新连接。再次尝试 listdir()
方法,系统将不会列出 myfile.txt
文件。
跨笔记本会话持久保存文件¶
要跨笔记本会话持久保存文件,请执行以下步骤:
在 Snowflake 暂存区中存储文件¶
如果您希望文件在不同会话之间持续存在,并在不同笔记本之间引用文件,可使用 Snowflake 暂存区来存储文件。您可以将文件从本地计算机上传到暂存区,然后通过 Snowpark API 中的文件操作从笔记本电脑访问这些文件。
示例¶
本例演示如何创建暂存区,并从中存储和检索笔记本中的文件。
要创建名为 permanent_stage
的暂存区,请在 SQL 单元格中运行以下代码:
CREATE OR REPLACE STAGE permanent_stage;
接下来,在 Python 单元格中运行以下代码,创建一个名为 myfile.txt
的文件,并在其中包含一些文本:
with open("myfile.txt",'w') as f:
f.write("abc")
f.close()
请注意,myfile.txt
此时存储在笔记本的临时文件系统中。要将其移至暂存区,可以使用 Snowpark API 将 myfile.txt
上传到 permanent_stage
:
from snowflake.snowpark.context import get_active_session
session = get_active_session()
put_result = session.file.put("myfile.txt","@PERMANENT_STAGE", auto_compress= False)
put_result[0].status
如果断开会话并重新连接,可以在 SQL 单元格中运行以下代码来验证文件是否仍然出现:
LS @permanent_stage;
从本地计算机向笔记本添加文件¶
您可以从本地计算机上传文件,供 Snowflake 笔记本使用。
登录 Snowsight。
选择 Projects » Notebooks。
浏览并选择,或将文件拖放到对话框中。
选择 Upload 上传文件。
上传的文件会保存到笔记本的内部暂存区,并在会话之间持续存在。您可以使用笔记本文件中的本地路径引用上传的文件。请参阅 在笔记本中引用文件。
备注
对于容器运行时的笔记本:如果上传文件时笔记本会话处于活动状态,则需要重新启动笔记本会话才能访问上传的文件。Snowflake 建议在启动会话之前添加所有需要的文件,以便在笔记本中使用。
与 Git 中的文件同步¶
如果笔记本已连接到 Git,则与笔记本位于同一 Git 文件夹中的任何文件都会显示在 Files 选项卡中。
有关在 Git 中处理文件的更多信息,请参阅 将 Snowflake 笔记本与 Git 存储库同步。
在笔记本中引用文件¶
笔记本环境中的每个文件都有一个暂存区路径和一个本地路径。您可以使用这些路径在笔记本中引用文件。
使用 Python 引用本地路径¶
通常,Python 库使用文件的本地路径作为引用文件的方式。例如,下面的代码访问与运行该代码的笔记本位于同一目录下的 data.csv
文件:
import pandas as pd
df = pd.read_csv("data.csv")
使用 SQL 引用暂存区路径¶
在 SQL 中,Snowflake 根据暂存区路径引用文件。笔记本中文件的暂存区路径格式如下:
snow://notebook/<DATABASE>.<SCHEMA>.<NOTEBOOK_NAME>/versions/live/<file_name>
要查找与笔记本暂存区中文件关联的暂存区路径,可以使用 Copy path 菜单,按照以下步骤操作:
登录 Snowsight。
选择 Projects » Notebooks。
选择 Copy path。这会将文件路径复制到剪贴板。
然后可以使用以下 SQL 语句列出暂存区文件的详细信息:
LIST 'snow://notebook/<DATABASE>.<SCHEMA>.<NOTEBOOK_NAME>/versions/live/data.csv'
访问控制要求¶
您需要使用具有以下权限的角色,才能访问笔记本暂存区中的文件。
权限 |
对象 |
---|---|
USAGE |
包含文件的暂存区。 |
限制和注意事项¶
在启动笔记本会话前加载文件。如果在会话启动后加载文件,则必须重新启动会话才能访问这些文件。
上传文件类型不受限制。
每个文件的大小限制为 250 MB 或更小。
写入笔记本本地路径的文件不会显示在 Files 选项卡中。不过,您仍然可以在笔记本代码中使用该文件。
例如,如果您创建一个名为
data.json
的文件,即使它不会在 Files UI 中显示,您仍然可以按如下代码访问它:# Generate sample JSON file with open("data.json", "w") as f: f.write('{"fruit":"apple", "size":3.4, "weight":1.4},{"fruit":"orange", "size":5.4, "weight":3.2}') # Read from local JSON file (File doesn't show in UI) df = pd.read_json("data.json",lines=True) df
不支持打开另一个
.ipynb
文件,除非它是笔记本主文件。
其他资源¶
如何在 Snowflake Notebooks 中处理文件 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Working%20with%20Files/Working%20with%20Files.ipynb)
在 Snowflake Notebooks 中导航和浏览文件 (https://github.com/Snowflake-Labs/snowflake-demo-notebooks/blob/main/Navigating%20and%20Browsing%20Files/Navigating%20and%20Browsing%20Files.ipynb)