ノートブックでファイルを操作

このトピックでは、 Snowflake Notebooks からファイルをアップロードしてアクセスする方法について説明します。

ノートブック環境のファイル

新しいノートブックを作成すると、メインのノートブックファイルが作成されます。デフォルトでは、ノートブックファイルはノートブックと同じ名前が割り当てられます。

ファイルはノートブック環境を表す内部ステージに保存され、セッション間で持続します。ノートブックの左側にある Files タブで表示できます。ファイルの内容のプレビューを表示するには、ファイル名を選択します。

ノートブック環境の仮ファイルシステム

ノートブックには、アクティブなセッション中に利用できる仮のファイルシステムがあります。セッション中に作成されたファイルは、この仮ステージに保存されます。仮ステージにあるファイルは、現在のNotebooksセッションを終了すると可用性はなくなります。

次のコードでは、 myfile.txt というファイルを作成し、そこにテキストを書き込んでいます。

with open("myfile.txt",'w') as f:
    f.write("abc")
f.close()
Copy

このファイルは、作成されたセッション中にアクセスすることができます。

listdir() メソッドを使って、仮ステージのファイルをリストアップします。

import os
os.listdir()
Copy

現在のセッションを切断し、再接続してください。もう一度 listdir() メソッドを試行しても、 myfile.txt ファイルは表示されません。

Notebooksセッションをまたいだファイルの永続化

Notebookのセッションをまたいでファイルを永続化します。

Snowflakeステージにファイルを保管する

セッション間でファイルを持続させ、異なるノートブック間でファイルをリファレンスしたい場合は、Snowflakeステージを使用してファイルを保存します。ステージ上にローカルコンピュータからファイルをアップロードし、Snowpark API からファイル操作を使ってノートブックからアクセスすることができます。

この例では、ステージを作成し、ノートブックからステージングされたファイルを保存および取得する方法を示します。

permanent_stage というステージングを作成するには、 SQL のセルで以下のコードを実行します。

CREATE OR REPLACE STAGE permanent_stage;
Copy

次に、 myfile.txt というファイルを作成し、その中にテキストを入れるために、Pythonのセルで以下のコードを実行します。

with open("myfile.txt",'w') as f:
  f.write("abc")
f.close()
Copy

この時点で、 myfile.txt はノートブックの仮ファイルシステムに保存されていることに注意してください。これをステージングに移すには、Snowpark API を使って myfile.txtpermanent_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
Copy

セッションを切断して再接続すると、 SQL のセルで以下のコードを実行して、ファイルがまだ表示されているかどうかを確認できます。

LS @permanent_stage;
Copy

Snowsight を使ってファイルを Notebooks にアップロードします。

ローカルコンピュータからファイルをアップロードして、Snowflakeノートブックで使用することができます。

  1. Snowsight にサインインします。

  2. Projects » Notebooks を選択します。

  3. Files タブのデータベースオブジェクトエクスプローラーの横で、 ダッシュボードタイルを追加する アイコンを選択し、アップロードするファイルを選択します。

  4. ファイルを参照して選択するか、ダイアログにドラッグ&ドロップします。

  5. 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.putsession.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")
Copy

注釈

この方法は 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;
Copy

これらのコマンドを実行する前に、 SnowSQL セッションで適切なデータベース、スキーマ、ウェアハウスがセットされていることを確認してください。

Gitからのファイルと同期する

ノートブックがGitに接続されている場合、ノートブックと同じGitフォルダにあるファイルはすべて Files タブに表示されます。

Gitでのファイルの扱い方については、 ノートブックと Git リポジトリの同期 をご参照ください。

Notebooks内のファイルの参照

ノートブック環境の各ファイルには、ステージパスとローカルパスがあります。これらのパスを使って、ノートブック内のファイルを参照することができます。

Python でのローカルパスの参照

一般的に、Pythonライブラリはファイルへのリファレンスとしてファイルへのローカルパスを使用します。例えば、次のコードは、このコードが実行されているノートブックと同じディレクトリにアップロードされた data.csv ファイルにアクセスします。

import pandas as pd
df = pd.read_csv("data.csv")
Copy

SQL でステージパスを参照します。

SQLで、Snowflakeはステージパスに基づいてファイルを参照します。ノートブックのファイルのステージパスは、以下のフォーマットに基づいています。

snow://notebook/<DATABASE>.<SCHEMA>.<NOTEBOOK_NAME>/versions/live/<file_name>
Copy

Copy path メニューを使って、ノートブックステージのファイルに関連するステージパスを検索します。

  1. Snowsight にサインインします。

  2. Projects » Notebooks を選択します。

  3. Files タブのデータベースオブジェクトエクスプローラーの横で、パスを取得したいファイルの横にある その他のオプション アイコンを選択します。

  4. Copy path を選択します。ファイルのパスをクリップボードにコピーします。

そして、次のSQLステートメントを使って、ステージングされたファイルの詳細をリストアップすることができます。

LIST 'snow://notebook/<DATABASE>.<SCHEMA>.<NOTEBOOK_NAME>/versions/live/data.csv'
Copy

制限と考慮事項

  • ノートブックセッションを開始する前にファイルをロードしてください。セッション開始後にファイルをロードした場合、ファイルにアクセスするにはセッションを再起動する必要があります。

  • アップロードするファイルの種類に制限はありません。

  • 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
    
    Copy
  • メインのノートブックファイルではない別の .ipynb ファイルを開くことはサポートされていません。

追加のリソース