ノートブックでファイルを操作¶
このトピックでは、 Snowflake Notebooks からファイルをアップロードしてアクセスする方法について説明します。
ノートブック環境のファイル¶
新しいノートブックを作成すると、メインのノートブックファイルが作成されます。デフォルトでは、ノートブックファイルはノートブックと同じ名前が割り当てられます。
ファイルはノートブック環境を表す内部ステージに保存され、セッション間で持続します。ノートブックの左側にある Files タブで表示できます。ファイルの内容のプレビューを表示するには、ファイル名を選択します。
ノートブック環境の仮ファイルシステム¶
ノートブックには、アクティブなセッション中に利用できる仮のファイルシステムがあります。セッション中に作成されたファイルは、この仮ステージに保存されます。仮ステージにあるファイルは、現在のNotebooksセッションを終了すると可用性はなくなります。
次のコードでは、 myfile.txt
というファイルを作成し、そこにテキストを書き込んでいます。
with open("myfile.txt",'w') as f:
f.write("abc")
f.close()
このファイルは、作成されたセッション中にアクセスすることができます。
listdir()
メソッドを使って、仮ステージのファイルをリストアップします。
import os
os.listdir()
現在のセッションを切断し、再接続してください。もう一度 listdir()
メソッドを試行しても、 myfile.txt
ファイルは表示されません。
Notebooksセッションをまたいだファイルの永続化¶
Notebookのセッションをまたいでファイルを永続化します。
Snowflakeステージにファイルを保管する¶
セッション間でファイルを持続させ、異なるノートブック間でファイルをリファレンスしたい場合は、Snowflakeステージを使用してファイルを保存します。ステージ上にローカルコンピュータからファイルをアップロードし、Snowpark API からファイル操作を使ってノートブックからアクセスすることができます。
例¶
この例では、ステージを作成し、ノートブックからステージングされたファイルを保存および取得する方法を示します。
permanent_stage
というステージングを作成するには、 SQL のセルで以下のコードを実行します。
CREATE OR REPLACE STAGE permanent_stage;
次に、 myfile.txt
というファイルを作成し、その中にテキストを入れるために、Pythonのセルで以下のコードを実行します。
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;
Snowsight を使ってファイルを Notebooks にアップロードします。¶
ローカルコンピュータからファイルをアップロードして、Snowflakeノートブックで使用することができます。
Snowsight にサインインします。
Projects » Notebooks を選択します。
Files タブのデータベースオブジェクトエクスプローラーの横で、
アイコンを選択し、アップロードするファイルを選択します。
ファイルを参照して選択するか、ダイアログにドラッグ&ドロップします。
Upload を選択してファイルをアップロードします。
注釈
ノートブックで Python パッケージとして使用するためにファイルをアップロードする場合、Warehouse Runtime 上で実行する場合は .py
と .zip
のファイルのみがサポートされていることを考慮してください。Container Runtimeでは、 .whl
(wheel)ファイルもサポートされています。パッケージを .zip
ファイルとしてインポートする場合、Python パッケージであることを示す __init__.py
ファイルがルートにあることを確認してください。
アップロードされたファイルはノートブックの内部ステージに保存され、セッション間で永続化されます。アップロードされたファイルは、ノートブックファイルからローカルパスを使って参照できます。 Notebooks内のファイルの参照 をご参照ください。
注釈
内部ステージのみ対応。外部ステージ(Amazon S3、Google Cloud Storage、Azure Blob Storageなど)はサポートされていません。
他の編集環境を使用してファイルをアップロードまたはダウンロード¶
Snowsight のファイルブラウザを使用することに加えて、ローカルの Snowpark Python セッションまたは SnowSQL を使用して、Notebooks ステージでファイルを操作することもできます。
ローカルSnowpark Pythonセッション¶
SnowparkPythonの session.file.put
と session.file.get
メソッドを使用して、ローカルコンピュータからノートブックステージにファイルをアップロードしたりダウンロードしたりすることができます。そのためには、ローカルの編集環境からSnowparkセッションを開始する必要があります (Snowsight)。例:
# Upload a local file to the notebook stage
res = session.file.put("aaa.csv", """snow://notebook/DEMO_DB.PUBLIC."JSMITH dbapi test"/versions/live""", overwrite=True)
# Download a file from the notebook stage to your local computer
res = session.file.get("""snow://notebook/DEMO_DB.PUBLIC."JSMITH dbapi test"/versions/live/aaa.json""", "aaa.csv")
注釈
この方法は SnowSQL CLI からは使えません。SnowparkセッションがアクティブなPython環境からメソッドを実行する必要があります。
SnowSQL コマンド¶
SnowSQL コマンドを直接使って、Notebooksステージからファイルをアップロードまたはダウンロードすることもできます。
-- Download a file from the notebook stage to your local computer
GET 'snow://notebook/SNOWPUBLIC.NOTEBOOKS."ADMIN_SPCS"/versions/live/ADMIN_SPCS.ipynb' 'file://download';
-- Upload a file from your local computer to the notebook stage
PUT 'file://test.json' 'snow://notebook/SNOWPUBLIC.NOTEBOOKS.ADMIN_SPCS/versions/live' overwrite = TRUE;
これらのコマンドを実行する前に、 SnowSQL セッションで適切なデータベース、スキーマ、ウェアハウスがセットされていることを確認してください。
Gitからのファイルと同期する¶
ノートブックがGitに接続されている場合、ノートブックと同じGitフォルダにあるファイルはすべて Files タブに表示されます。
Gitでのファイルの扱い方については、 ノートブックと Git リポジトリの同期 をご参照ください。
Notebooks内のファイルの参照¶
ノートブック環境の各ファイルには、ステージパスとローカルパスがあります。これらのパスを使って、ノートブック内のファイルを参照することができます。
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 を選択します。
Files タブのデータベースオブジェクトエクスプローラーの横で、パスを取得したいファイルの横にある
アイコンを選択します。
Copy path を選択します。ファイルのパスをクリップボードにコピーします。
そして、次のSQLステートメントを使って、ステージングされたファイルの詳細をリストアップすることができます。
LIST 'snow://notebook/<DATABASE>.<SCHEMA>.<NOTEBOOK_NAME>/versions/live/data.csv'
制限と考慮事項¶
ノートブックセッションを開始する前にファイルをロードしてください。セッション開始後にファイルをロードした場合、ファイルにアクセスするにはセッションを再起動する必要があります。
アップロードするファイルの種類に制限はありません。
1ファイルあたりのサイズ制限は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}\n{"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
ファイルを開くことはサポートされていません。