Snowflake Notebooks でのファイルの操作¶
このトピックでは、 Snowflake Notebooks からファイルをアップロードしてアクセスする方法について説明します。
ノートブック環境のファイル¶
新しいノートブックを作成すると、2つのファイルが作成されます。ノートブックの左側にある 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
ファイルは表示されません。
Notebookセッションをまたいで永続化されるファイル¶
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;
ローカルコンピュータからノートブックにファイルを追加する¶
ローカルコンピュータからファイルをアップロードして、Snowflakeノートブックで使用することができます。
Snowsight にサインインします。
Projects » Notebooks を選択します。
Files タブのデータベースオブジェクトエクスプローラーの横で、
アイコンを選択し、アップロードするファイルを選択します。
ファイルを参照して選択するか、ダイアログにドラッグ&ドロップします。
Upload を選択してファイルをアップロードします。
アップロードされたファイルはノートブックの内部ステージに保存され、セッション間で永続化されます。アップロードされたファイルは、ノートブックファイルからローカルパスを使って参照できます。 ノートブックのファイルの参照 をご参照ください。
警告
ファイルをアップロードしたときにノートブックセッションがアクティブになっている場合、アップロードしたファイルにアクセスするにはノートブックセッションを再起動する必要があります。これは既知のバグです。Snowflakeでは、セッションを開始する前に、ノートブックで使用するために必要なすべてのファイルを追加することをお勧めします。
Gitからのファイルと同期する¶
ノートブックがGitに接続されている場合、ノートブックと同じGitフォルダにあるすべてのファイルが Files タブに表示されます。
Gitでのファイルの扱い方については、 Snowflake Notebooksと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 を選択します。
Files タブのデータベースオブジェクトエクスプローラーの横で、パスを取得したいファイルの横にある
アイコンを選択します。
Copy path を選択します。ファイルのパスをクリップボードにコピーします。
そして、次のSQLステートメントを使って、ステージングされたファイルの詳細をリストアップすることができます。
LIST 'snow://notebook/<DATABASE>.<SCHEMA>.<NOTEBOOK_NAME>/versions/live/data.csv'
アクセス制御の要件¶
ノートブックのステージからファイルにアクセスするには、以下の権限を持つロールを使用する必要があります。
権限 |
オブジェクト |
---|---|
USAGE |
ファイルを含むステージ。 |
制限と考慮事項¶
ノートブックセッションを開始する前にファイルをロードしてください。セッション開始後にファイルをロードした場合、ファイルにアクセスするにはセッションを再起動する必要があります。
アップロードするファイルの種類に制限はありません。
1ファイルあたりのサイズ制限は250 MB以下です。
ノートブックのローカルパスに書き込まれたファイルは、 Files UI に表示されません。これは既知のバグです。しかし、ノートブックのコードでそのファイルを使うことはできるはずです。
例えば、
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
ファイルを開くことはサポートされていません。
追加のリソース¶
その他の例については、Githubにある以下のサンプルノートブックをご参照ください。