Unity Catalogのボリュームを操作してみる

早速、こちらの新機能を試してみます。

これまではDBFS(Databricks File System)を使うか、別のS3やADLSを[DBFSマウント](https://qiita.com/taka_yayoi/items/897264c486e179d72247#dbfs%E3%81%B8%E3%81%AE%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%B9%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B8%E3%81%B8%E3%81%AE%E3%83%9E%E3%82%A6%E3%83%B3%E3%83%88)して使うという方法、あるいは、[Unity Catalogの外部ロケーションとストレージ資格情報](https://qiita.com/taka_yayoi/items/18fee92365eee58e0b94)を使うしかなかったのですが、ボリュームを活用することで、Unity Catalogのガバナンス機能を活用しながら簡単に任意のファイルを操作できるようになります。

https://qiita.com/taka_yayoi/items/f72b27df9d630235750c

こちらのサンプルノートブックをウォークスルーします。

https://docs.databricks.com/_extras/notebooks/source/unity-catalog-volumes.html

# 準備

Unity Catalogのボリュームを操作するには、Databricksランタイム13.2以降が動作しているクラスターが必要です。

# スキーマ(データベース)の作成

カタログがない場合には、別途作成ください。

```sql:SQL
USE CATALOG takaakiyayoi_catalog;
```

```sql:SQL
CREATE SCHEMA IF NOT EXISTS quickstart_schema
COMMENT "quickstart_schemaという新たなUnity Catalogのスキーマ";
```

```sql
DESCRIBE SCHEMA EXTENDED quickstart_schema;
```
![Screenshot 2023-07-14 at 20.15.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c8be4921-ac13-e31c-df4c-9cf54f2f3d20.png)

```sql:SQL
USE SCHEMA quickstart_schema;
```

必要に応じて権限を付与してください。

# ボリュームの作成

```sql:SQL
CREATE VOLUME IF NOT EXISTS takaakiyayoi_catalog.quickstart_schema.quickstart_volume
COMMENT 'これはサンプルのマネージドボリュームです'
```

データエクスプローラで確認すると、ボリュームが作成されています。
![Screenshot 2023-07-14 at 17.56.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/37beffd0-d70e-f159-0419-d88d25b51a87.png)

# ファイルの操作

ボリュームにファイルをコピーします。

```py:Python
%python
dbutils.fs.cp("dbfs:/databricks-datasets/wine-quality/winequality-red.csv", "/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/")
```

ファイルがコピーされています。
![Screenshot 2023-07-14 at 17.57.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/02a71749-bac6-4e1a-3069-2dd8d5ce7c85.png)

ボリュームにディレクトリを作成します。

```py:Python
%python
dbutils.fs.mkdirs("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/destination")
```

ファイルを移動します。

```py:Python
%python
dbutils.fs.mv("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/winequality-red.csv", "/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/destination/")
```

```py:Python
%python
display(dbutils.fs.ls("/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/destination"))
```
![Screenshot 2023-07-14 at 20.22.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1776ddd5-dcd7-cb5d-4d28-75b4c5209df1.png)

# ボリュームからのデータの読み込み

これまで同様にファイルにアクセスできます。

```sql:SQL
SELECT * FROM csv.`dbfs:/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/destination/winequality-red.csv`
```
![Screenshot 2023-07-14 at 20.23.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/99b56af2-3204-1f40-87af-00a2dc10955f.png)

PySparkでも同様に。

```py:Python
%python
df1 = spark.read.format("csv").load("dbfs:/Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/destination/winequality-red.csv")
display(df1)
```

`%sh`マジックコマンドを用いたシェルからもアクセスできます。

```bash:Shell
%sh
ls /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/
```

```
destination
```

```sh:Shell
%sh
cat /Volumes/takaakiyayoi_catalog/quickstart_schema/quickstart_volume/winequality-red.csv
```

```
"fixed acidity";"volatile acidity";"citric acid";"residual sugar";"chlorides";"free sulfur dioxide";"total sulfur dioxide";"density";"pH";"sulphates";"alcohol";"quality"
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
7.8;0.88;0;2.6;0.098;25;67;0.9968;3.2;0.68;9.8;5
7.8;0.76;0.04;2.3;0.092;15;54;0.997;3.26;0.65;9.8;5
11.2;0.28;0.56;1.9;0.075;17;60;0.998;3.16;0.58;9.8;6
7.4;0.7;0;1.9;0.076;11;34;0.9978;3.51;0.56;9.4;5
7.4;0.66;0;1.8;0.075;13;40;0.9978;3.51;0.56;9.4;5
7.9;0.6;0.06;1.6;0.069;15;59;0.9964;3.3;0.46;9.4;5
7.3;0.65;0;1.2;0.065;15;21;0.9946;3.39;0.47;10;7
7.8;0.58;0.02;2;0.073;9;18;0.9968;3.36;0.57;9.5;7
```

パブリックプレビューですが、非常に便利な機能だと思います。是非ご活用ください！

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)