メインコンテンツまでスキップ

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 操作を使用します。

Text
  PUT '/tmp/test.csv' INTO '/Volumes/main/default/e2etests/file1.csv' OVERWRITE

ファイルのダウンロード

Unity Catalog のボリューム パス /Volumes/main/default/e2etests/file1.csv からローカル ファイル /tmp/test.csvにファイルをダウンロードするには、GET 操作を使用します。

Text
  GET '/Volumes/main/default/e2etests/file1.csv' TO '/tmp/test.csv'

ファイルを削除する

Unity Catalog ボリューム パスが /Volumes/main/default/e2etests/file1.csvのファイルを削除するには、REMOVE 操作を使用します。

Text
  REMOVE '/Volumes/main/default/e2etests/file1.csv'

ストリームを使用したデータの読み取り/書き込み

JDBC ドライバーは、インターフェイス (IDatabricksVolumeClient) を提供することにより、Unity Catalog ボリュームとの間でデータを読み書きするためのストリーミングをサポートします。使用可能な については、「 IDatabricksVolumeClient リファレンス API」を参照してください。

IDatabricksVolumeClientは、DatabricksVolumeClientFactoryファクトリユーティリティを使用して初期化できます。

Java
import com.databricks.jdbc.api.impl.volume.DatabricksVolumeClientFactory;
import com.databricks.jdbc.api.volume.IDatabricksVolumeClient;

IDatabricksVolumeClient volumeClient = DatabricksVolumeClientFactory.getVolumeClient(Connection conn);

ストリームからボリュームにファイルを書き込む

Java
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 */);

ボリュームファイルをストリームとして読み取ります

Java
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);