Databricks JDBC Driver (OSS) を使用してボリューム内のファイルを管理する
Databricks は、Unity Catalog ボリュームを使用した一括取り込み機能を提供しており、ユーザーは CSV ファイルなどのローカル ファイルとの間でデータセットを転送できます。Unity Catalogボリュームとはを参照してください。
この記事では、 Databricks JDBC Driver (OSS) を使用して、ボリューム内のファイルを管理する方法と、ボリュームとの間でストリームの読み取りと書き込みを行う方法について説明します。
ボリューム操作を有効にする
Unity Catalog ボリューム操作を有効にするには、接続プロパティ [ VolumeOperationAllowedLocalPaths
] を、ボリューム操作で許可されるローカル パスのコンマ区切りリストに設定します。その他の機能プロパティを見る
この機能を使用するには、Unity Catalog を有効にする必要があります。同様の機能は、Databricks UI を使用して使用できます。「Unity Catalog ボリュームへのファイルのアップロード」を参照してください。
Unity Catalog インジェスト コマンドは SQL ステートメントです。次の例は、PUT、GET、および REMOVE 操作を示しています。
ローカルファイルのアップロード
ローカル ファイル /tmp/test.csv
を Unity Catalog ボリューム パスに /Volumes/main/default/e2etests/file1.csv
としてアップロードするには、PUT 操作を使用します。
PUT '/tmp/test.csv' INTO '/Volumes/main/default/e2etests/file1.csv' OVERWRITE
ファイルのダウンロード
Unity Catalog のボリューム パス /Volumes/main/default/e2etests/file1.csv
からローカル ファイル /tmp/test.csv
にファイルをダウンロードするには、GET 操作を使用します。
GET '/Volumes/main/default/e2etests/file1.csv' TO '/tmp/test.csv'
ファイルを削除する
Unity Catalog ボリューム パスが /Volumes/main/default/e2etests/file1.csv
のファイルを削除するには、REMOVE 操作を使用します。
REMOVE '/Volumes/main/default/e2etests/file1.csv'
ストリームを使用したデータの読み取り/書き込み
JDBC ドライバーは、インターフェイス (IDatabricksVolumeClient
) を提供することにより、Unity Catalog ボリュームとの間でデータを読み書きするためのストリーミングをサポートします。使用可能な については、「 IDatabricksVolumeClient リファレンス APIs」を参照してください。
IDatabricksVolumeClient
は、DatabricksVolumeClientFactory
ファクトリユーティリティを使用して初期化できます。
import com.databricks.jdbc.api.impl.volume.DatabricksVolumeClientFactory;
import com.databricks.jdbc.api.volume.IDatabricksVolumeClient;
IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);
ストリームからボリュームにファイルを書き込む
Connection connection = DriverManager.getConnection(url, prop);
File file = new File("/tmp/test.csv");
FileInputStream fileInputStream = new FileInputStream(file);
// Upload the file stream to UC Volume path
IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);
volumeClient.putObject(catalog, schema, volume, objectPath, inputStream, contentLength, true /* overwrite */);
ボリュームファイルをストリームとして読み取ります
import org.apache.http.entity.InputStreamEntity;
Connection connection = DriverManager.getConnection(url, prop);
File file = new File("/tmp/test.csv");
FileInputStream fileInputStream = new FileInputStream(file);
// Upload the file stream to UC Volume path
IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);
InputStreamEntity volumeDataStream = volumeClient.getObject(catalog, schema, volume, objectPath);
IDatabricksVolumeClient インターフェイス
プレフィックスが存在する |
---|
特定のプレフィックス (フォルダーのような構造) が Unity Catalog ボリュームに存在するかどうかを判断します。プレフィックスは、ファイル名の一部である必要があります。 パラメーター:
収益: プレフィックスが存在するかどうかを示すブール値。 |
オブジェクトが存在する |
---|
特定のオブジェクト (ファイル) が Unity Catalog ボリュームに存在するかどうかを判断します。オブジェクトはファイル名と完全に一致する必要があります。 パラメーター:
収益: オブジェクトが存在するかどうかを示すブール値。 |
ボリュームが存在する |
---|
特定のボリュームが特定のカタログとスキーマに存在するかどうかを判断します。ボリュームは、ボリューム名と正確に一致する必要があります。 パラメーター:
収益: ボリュームが存在するかどうかを示すブール値。 |
リストオブジェクト |
---|
Unity Catalog ボリューム内で、指定したプレフィックスで始まるすべてのファイル名の一覧を返します。プレフィックスは、ルートとしてのボリュームからのファイルパスの一部である必要があります。 パラメーター:
収益: 指定したプレフィックスで始まるファイル名を示す文字列のリスト。 |
getObject (ファイル) |
---|
Unity Catalog ボリュームからオブジェクト (ファイル) を取得し、指定したローカル パスに格納します。 パラメーター:
収益: GET 操作のステータスを示すブール値。 |
getObject (ストリーム) |
---|
Unity Catalog ボリュームからオブジェクトを入力ストリームとして取得します。 パラメーター:
収益: 入力ストリームエンティティのインスタンス。 |
putObject (ファイル) |
---|
ローカル パスから Unity Catalog ボリューム内の指定したパスにデータをアップロードします。 パラメーター:
収益: PUT 操作のステータスを示すブール値。 |
putObject (ストリーム) |
---|
入力ストリームから Unity Catalog ボリューム内の指定されたパスにデータをアップロードします。 パラメーター:
収益: PUT 操作のステータスを示すブール値。 |
deleteObjectの |
---|
Unity Catalog ボリューム内の指定したパスからオブジェクトを削除します。 パラメーター:
収益: DELETE 操作のステータスを示すブール値。 |