Unity Catalog ボリューム内のファイルを操作する
このページには、さまざまなユーザー インターフェイス、ツール、ライブラリ、言語の Unity Catalog ボリューム 内のファイルを管理する例を示します。
Databricks では、クラウド オブジェクト ストレージ内の非表形式データへのすべてのアクセスを管理し、ワークロード サポート ファイルを格納するためにボリュームを使用することをお勧めします。たとえば、次のようなものがあります。
- 取り込み用のデータファイル (CSV、JSON、Parquet など)
- データサイエンス、ML、AI ワークロード用のテキスト、画像、オーディオファイル
- 外部システムとの統合のために Databricks によって記述された CSV または JSON アーティファクト
- ライブラリ, initスクリプト, and build アーティファクト
ボリュームは、ユーザー空間のファイルシステム (FUSE) に依存するツールおよびフレームワークで動作する Portable Operating System Interface (POSIX) スタイルのパスを提供します。これにより、POSIX スタイルのアクセスを必要とする機械学習フレームワークやオープンソースの Python モジュールに最適です。詳細については、URI スキーム、POSIX パス、およびそれらがボリュームとどのように関連しているかについては、「 データにアクセスするために URI スキームを提供する必要がありますか?」を参照してください。
ボリューム内のファイルを管理する方法
各方法の簡単な例については、「 Unity Catalog ボリューム内のファイルの操作」を参照してください。
インターフェイス | 説明 |
---|---|
Databricks ワークスペースを使用した対話型ファイル管理 | |
Apache Spark、Pandas、または SQL を使用してファイルの読み取りと書き込みを行います | |
ノートブックで | |
SQL キーワード ( | |
コマンド | |
Python、Java、または Go SDK を使用したファイル操作 | |
カスタム統合のための直接 API アクセス |
カタログエクスプローラを使用する
カタログ エクスプローラーには、Unity Catalog ボリュームに格納されているファイルの一般的なファイル管理タスクのオプションがあります。
ボリューム内のファイルを操作するには、次の操作を行います。
- Databricks ワークスペースで、
カタログ をクリックします。
- 処理するボリュームを検索または参照して選択します。
ボリュームの作成と管理の詳細については、「 Unity Catalog ボリュームの作成と管理」を参照してください。
ボリュームへのファイルのアップロード
任意の形式 (構造化、半構造化、非構造化) のファイルをボリュームにアップロードできます。UI からアップロードする場合、ファイル サイズには 5 GB の制限があります。ただし、ボリューム自体は、基盤となるクラウドストレージでサポートされている最大サイズまでのファイルをサポートします。Spark を使用して非常に大きなファイルを書き込んだり、Databricks API または SDK を使用して大きなファイルをアップロードしたりできます。
必要条件
ボリュームにアップロードする前に、次のものがあることを確認してください。
- Unity Catalog が有効になっているワークスペース
WRITE VOLUME
ターゲット・ボリューム上USE SCHEMA
親スキーマでUSE CATALOG
親カタログで
詳細については、「 Unity Catalog の特権とセキュリティ保護可能なオブジェクト」を参照してください。
アップロードステップ
- カタログエクスプローラで、「 データの追加 」>「 ボリュームへのアップロード」 をクリックします。
- [ 参照 ] をクリックするか、ファイルをドロップ ゾーンにドロップします。
- ボリュームまたはディレクトリを選択するか、ボリュームパスを貼り付けます。
- ターゲット・スキーマにボリュームが存在しない場合は、ボリュームを作成します。
- ターゲットボリューム内に新しいディレクトリを作成することもできます。
アップロード UI には、次の方法でもアクセスできます。
- サイドバーで: 新しい > データを追加 > ファイルをボリュームにアップロード
- ノートブックから: ファイル > ボリュームにファイルをアップロード する
次のステップ
ボリュームにアップロードした後、次の操作を実行できます。
- ファイルから Unity Catalog マネージドテーブルを作成します。 ボリューム 内のデータから表を作成するを参照してください。
- MLおよびデータサイエンスワークロードでファイルを使用する
- アップロードされたファイルを使用して、クラスターライブラリ、ノートブックスコープのライブラリ、またはジョブの依存関係を構成する
- Auto Loader または COPY INTO を使用したエンジニアリングパイプラインのデータの取り込み
- などの AI機能
ai_parse_document
でファイルを処理 - ジョブでの ファイル到着トリガー の設定
ボリュームからファイルをダウンロードする
ボリュームからファイルをダウンロードするには、次の操作を行います。
- 1 つ以上のファイルを選択します。
- ダウンロード をクリックして、これらのファイルをダウンロードします。
ボリュームからファイルを削除する
ボリュームからファイルを削除するには、次の操作を行います。
- 1 つ以上のファイルを選択します。
- 削除 をクリックします。
- 削除 をクリックして、表示されるダイアログで確定します。
空のディレクトリを作成する
ボリュームに新しいディレクトリを作成するには、次の操作を行います。
- [ボリュームの概要] タブで、[ ディレクトリの作成 ] をクリックします。
- ディレクトリ名を入力します。
- 作成 をクリックします。
ボリュームからのディレクトリの削除
ボリュームからディレクトリを削除するには、次の操作を行います。
- 1 つ以上のディレクトリを選択します。
- 削除 をクリックします。
- 削除 をクリックして、表示されるダイアログで確定します。
ボリュームの UI ファイル管理タスク
ファイル名の横にあるケバブメニューをクリックして、次の操作を実行します。
- パスをコピー
- ファイルをダウンロード
- ファイルを削除
- テーブルを作成
ボリューム内のデータからテーブルを作成する
Databricks は、Unity Catalogボリュームに格納されているファイル、ファイル、またはファイルのディレクトリからUnity Catalogマネージドテーブルを作成するための UI を提供します。
ターゲットスキーマに対するCREATE TABLE
権限があり、実行中のSQLウェアハウスにアクセスできる必要があります。
-
1 つ以上のファイルまたはディレクトリを選択します。ファイルは同じデータレイアウトである必要があります。
-
テーブルの作成 をクリックします。 ボリュームからテーブルを作成 ダイアログが表示されます。
-
表示されたダイアログを使用して、データのプレビューを確認し、次の構成を完了します。
-
新しいテーブルの作成 または 既存のテーブルを上書きする を選択します
-
ターゲットの カタログ と スキーマ を選択します。
-
[テーブル名] を指定します。
-
(オプション)デフォルトの列名と型を上書きするか、列を除外することを選択します。
-
詳細属性 をクリックして、追加オプションを表示します。
- テーブルを作成 をクリックして、指定した属性でテーブルを作成します。 完了すると、カタログエクスプローラにテーブルの詳細が表示されます。
ボリューム内のファイルをプログラムで操作する
次の形式を使用して、サポートされているすべての言語とワークスペース エディターからボリューム内のファイルを読み書きします。
/Volumes/catalog_name/schema_name/volume_name/path/to/files
ボリューム内のファイルは、クラウド・オブジェクト・ストレージの場所にあるファイルと対話するのと同じ方法で操作します。つまり、現在、クラウド URI、 DBFS マウント パス、または DBFSルート パスを使用してデータまたはファイルを操作するコードを管理している場合は、代わりにボリュームを使用するようにコードを更新できます。
ボリュームは、表形式以外のデータにのみ使用されます。 Databricks では、 Unity Catalog テーブルを使用して登録する表形式データから、テーブル名を使用してデータを読み書きすることをお勧めします。
ボリューム内のデータの読み取りと書き込み
Apache Spark、Pandas、Spark SQL、およびその他の OSS ライブラリを使用して、ボリューム内のデータファイルの読み取りと書き込みを行います。
次の例は、ボリュームに保存されている CSV ファイルの読み取りを示しています。
- Python
- Pandas
- SQL
df = spark.read.format("csv").load("/Volumes/catalog_name/schema_name/volume_name/data.csv")
display(df)
import pandas as pd
df = pd.read_csv('/Volumes/catalog_name/schema_name/volume_name/data.csv')
display(df)
SELECT * FROM csv.`/Volumes/catalog_name/schema_name/volume_name/data.csv`
ボリューム内のファイルに対するユーティリティー・コマンド
Databricks には、ボリューム内のファイルを管理するための次のツールが用意されています。
- Databricks ユーティリティの
dbutils.fs
サブモジュール。ファイルシステムユーティリティ (dbutils.fs)を参照してください。 %fs
マジック、これはdbutils.fs
の別名です。- ボリュームに対してbashコマンドを許可する
%sh
マジック。
これらのツールを使用して、インターネットからファイルをダウンロードしたり、ファイルを解凍したり、エフェメラル・ブロック・ストレージからボリュームにファイルを移動したりする例は、 インターネットからのデータのダウンロードを参照してください。
次の例に示すように、Python os
モジュールなどのファイルユーティリティコマンドにOSSパッケージを使用することもできます。
import os
os.mkdir('/Volumes/catalog_name/schema_name/volume_name/directory_name')
外部ツールからボリューム内のファイルを管理
Databricks には、ローカル環境または統合システムからボリューム内のファイルをプログラムで管理するための一連のツールが用意されています。
ボリューム内のファイルに対する SQL コマンド
Databricks では、ボリューム内のファイルを操作するために、次の SQL キーワードがサポートされています。
Databricks ノートブックと SQL クエリ エディターでは、 LIST
コマンドのみがサポートされています。その他の SQL コマンド (PUT INTO
、 GET
、 REMOVE
) は、ボリューム内のファイルの管理をサポートする次の Databricks SQL コネクタとドライバーから使用できます。
- Databricks SQL Connector for Python
- Databricks SQL Driver for Go
- Node.js用のDatabricks SQLドライバー
- Databricks JDBC ドライバー
- Databricks ODBC ドライバー
Databricks CLI を使用してボリューム内のファイルを管理する
databricks fs
のサブコマンドを使用します。「コマンド グループfs
」を参照してください。
Databricks CLI では、スキーム dbfs:/
をすべてのボリューム パスの前に配置する必要があります。たとえば、 dbfs:/Volumes/catalog_name/schema_name/volume_name/path/to/data
です。
SDKを使用してボリューム内のファイルを管理
次のSDKは、ボリューム内のファイルの管理をサポートしています。
- Databricks SDK for Python。WorkspaceClient.files で使用可能なメソッドを使用します。例については、「Unity Catalog ボリューム内のファイルを管理する」を参照してください。
- Databricks SDK for Java。WorkspaceClient.files で使用可能なメソッドを使用します。例については、「Unity Catalog ボリューム内のファイルを管理する」を参照してください。
- Databricks SDK for Go。WorkspaceClient.files で使用可能なメソッドを使用します。例については、「Unity Catalog ボリューム内のファイルを管理する」を参照してください。
REST API を使用したボリューム内のファイルの管理
ファイル API を使用して、ボリューム内のファイルを管理します。
ボリューム内のファイルの REST API の例
次の例では、 curl
と Databricks REST API を使用して、ボリューム内のファイル管理タスクを実行します。
次の例では、指定したボリュームに my-folder
という名前の空のフォルダを作成します。
curl --request PUT "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/my-folder/" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"
次の例では、ボリューム内の指定されたパスに指定されたデータを含む data.csv
という名前のファイルを作成します。
curl --request PUT "https://${DATABRICKS_HOST}/api/2.0/fs/files/Volumes/main/default/my-volume/my-folder/data.csv?overwrite=true" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--header "Content-Type: application/octet-stream" \
--data-binary $'id,Text\n1,Hello World!'
次の例は、指定されたパス内のボリュームの内容をリストします。この例では、 jq を使用して、読みやすくするために応答本文の JSON をフォーマットします。
curl --request GET "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq .
次の例は、指定したパス内のボリューム内のフォルダの内容をリストします。この例では、 jq を使用して、読みやすくするために応答本文の JSON をフォーマットします。
curl --request GET "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/my-folder" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq .
次の例では、ボリューム内の指定されたパスにあるファイルの内容を出力します。
curl --request GET "https://${DATABRICKS_HOST}/api/2.0/fs/files/Volumes/main/default/my-volume/my-folder/data.csv" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"
次の例では、指定されたパス内のファイルをボリュームから削除します。
curl --request DELETE "https://${DATABRICKS_HOST}/api/2.0/fs/files/Volumes/main/default/my-volume/my-folder/data.csv" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"
次の例では、指定したボリュームからフォルダーを削除します。
curl --request DELETE "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/my-folder/" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"
ボリューム内のファイルの操作の制限
ボリューム内のファイルを操作する前に、次の制限事項を考慮してください。
-
直接追加または非順次 (ランダム) 書き込みはサポートされていません。これは、Zip ファイルや Excel ファイルの書き込みなどの操作に影響します。これらのワークロードの場合:
- 最初にローカルディスクで操作を実行します
- 結果をボリュームにコピーします
例えば:
Python# python
import xlsxwriter
from shutil import copyfile
workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, "Key")
worksheet.write(0, 1, "Value")
workbook.close()
copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx') -
スパース ファイルはサポートされていません。スパースファイルをコピーするには、
cp --sparse=never
を使用します。Bash$ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
error writing '/dbfs/sparse.file': Operation not supported
$ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file