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

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 リファレンス APIs」を参照してください。

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

IDatabricksVolumeClient インターフェイス

プレフィックスが存在する

boolean prefixExists(String catalog, String schema, String volume, String prefix, boolean caseSensitive) throws SQLException

特定のプレフィックス (フォルダーのような構造) が Unity Catalog ボリュームに存在するかどうかを判断します。プレフィックスは、ファイル名の一部である必要があります。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージの Unity Catalog ボリューム名。
  • prefix - 存在を確認するプレフィックスと、ルートディレクトリとしてのボリュームからの相対パス。
  • caseSensitive - チェックで大文字と小文字を区別するかどうか。

収益:

プレフィックスが存在するかどうかを示すブール値。

オブジェクトが存在する

boolean objectExists(String catalog, String schema, String volume, String objectPath, boolean caseSensitive) throws SQLException

特定のオブジェクト (ファイル) が Unity Catalog ボリュームに存在するかどうかを判断します。オブジェクトはファイル名と完全に一致する必要があります。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージの Unity Catalog ボリューム名。
  • objectPath - ボリューム内(任意のサブフォルダ内)に存在するかどうかを確認するためのルートディレクトリとしてのボリュームからのオブジェクト(ファイル)のパス。
  • caseSensitive - チェックで大文字と小文字を区別するかどうかを示すブール値。

収益:

オブジェクトが存在するかどうかを示すブール値。

ボリュームが存在する

boolean volumeExists(String catalog, String schema, String volumeName, boolean caseSensitive) throws SQLException

特定のボリュームが特定のカタログとスキーマに存在するかどうかを判断します。ボリュームは、ボリューム名と正確に一致する必要があります。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volumeName - 存在を確認するボリュームの名前。
  • caseSensitive チェックで大文字と小文字を区別するかどうかを示すブール値。

収益:

ボリュームが存在するかどうかを示すブール値。

リストオブジェクト

List<String> listObjects(String catalog, String schema, String volume, String prefix, boolean caseSensitive) throws SQLException

Unity Catalog ボリューム内で、指定したプレフィックスで始まるすべてのファイル名の一覧を返します。プレフィックスは、ルートとしてのボリュームからのファイルパスの一部である必要があります。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージのUCボリューム名。
  • prefix - リストするファイル名のプレフィックス。これには、ボリュームからの相対パスがルートディレクトリとして含まれます。
  • caseSensitive - チェックで大文字と小文字を区別するかどうかを示すブール値。

収益:

指定したプレフィックスで始まるファイル名を示す文字列のリスト。

getObject (ファイル)

boolean getObject(String catalog, String schema, String volume, String objectPath, String localPath) throws SQLException

Unity Catalog ボリュームからオブジェクト (ファイル) を取得し、指定したローカル パスに格納します。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージのUCボリューム名。
  • objectPath - ボリュームからのオブジェクト(ファイル)のパスをルートディレクトリとして。
  • localPath - 取得したデータを格納するローカル パス。

収益:

GET 操作のステータスを示すブール値。

getObject (ストリーム)

InputStreamEntity getObject(String catalog, String schema, String volume, String objectPath) throws SQLException

Unity Catalog ボリュームからオブジェクトを入力ストリームとして取得します。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージのUCボリューム名。
  • objectPath - ボリュームからのオブジェクト(ファイル)のパスをルートディレクトリとして。

収益:

入力ストリームエンティティのインスタンス。

putObject (ファイル)

boolean putObject(String catalog, String schema, String volume, String objectPath, String localPath, boolean toOverwrite) throws SQLException

ローカル パスから Unity Catalog ボリューム内の指定したパスにデータをアップロードします。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージのUCボリューム名。
  • objectPath オブジェクト(ファイル)がアップロードされる宛先パスは、ルートディレクトリとして「ボリューム」です。
  • localPath データのアップロード元となるローカル パス。
  • toOverwrite オブジェクトが既に存在する場合に上書きするかどうかを示すブール値。

収益:

PUT 操作のステータスを示すブール値。

putObject (ストリーム)

boolean putObject(String catalog, String schema, String volume, String objectPath, InputStream inputStream, long contentLength, boolean toOverwrite) throws SQLException

入力ストリームから Unity Catalog ボリューム内の指定されたパスにデータをアップロードします。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージのUCボリューム名。
  • objectPath - オブジェクト(ファイル)がルートディレクトリとしてボリュームからアップロードされる宛先パス。
  • inputStream - データのアップロード元となる入力ストリーム。
  • contentLength - 入力ストリームの長さ。
  • toOverwrite オブジェクトが既に存在する場合に上書きするかどうかを示すブール値。

収益:

PUT 操作のステータスを示すブール値。

deleteObjectの

boolean deleteObject(String catalog, String schema, String volume, String objectPath) throws SQLException

Unity Catalog ボリューム内の指定したパスからオブジェクトを削除します。

パラメーター:

  • catalog - クラウドストレージのカタログ名。
  • schema - クラウドストレージのスキーマ名。
  • volume - クラウドストレージのUCボリューム名。
  • objectPath - ボリュームからのオブジェクト (ファイル) のパスを、削除するルート ディレクトリとして指定します。

収益:

DELETE 操作のステータスを示すブール値。