Databricks CLI （Windows）にてローカルから Databricks Repos 上にコードを配置する方法

## 概要

Windows 環境の Databricks CLI(versions 0.200) にて、ローカルから Databricks Repos へのコードの同期方法を共有します。通常であれば Git 連携を実施しますが、Git 連携を行えない状況があったため 本記事の検証を検討しました。

次の手順を説明します。

1. Databricks 環境の準備
2. Databricks CLI 環境の構築
3. Databricks CLI による コードの連携

Azure CLI 認証により実行したい場合には、次の記事を参考に本記事の手順を変更してください。

- [Databricks CLI （Windows）にて Azure CLI 認証により Databricks Repos 上にコードを配置する方法 #Databricks - Qiita](https://qiita.com/manabian/items/394dda5c1dda2ae567de)

## 実施手順

### 1. Databricks 環境の準備

#### 1-1. Databricks Workspace にログイン後、`Repos`を右クリック -> `create` -> `Folder`を選択して、フォルダ（フォルダ名例：`databricks_pipelines`）を作成する。 

![image-20230626164354441.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/af13607b-b8b0-3abb-df2d-5efb1c931a82.png)


#### 1-2. 作成したディレクトリ上にて、右側にある`ADD` -> `Repo` を選択後、表示された`Add Repo`ウィンドウにて`Create repo by  cloning a Git Repository`のチェックを外し、`Repository name`に想定の名称（例：`db_pipeline_01`） を入力 -> `Create Repo` を選択する。

![image-20230626164651868.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3bdbdf15-4417-36cb-00f0-99ad6668de9e.png)

#### 1-3. 空の `Repo` 領域が作成されたことを確認する。

![image-20230626183257095.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9db228d5-8e2f-1404-16c7-bb5e82c245b5.png)

#### 1-4. 右上にある `User Settings` -> `Generate new token` --> `Generate`を選択し、Databricks CLI  を利用するための Databricks Token を取得する。

![image-20230626165400557.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/77072bb6-2789-3114-bdf7-c117f1c59b4a.png)

### 2. Databricks CLI 環境の構築

#### 2-1. [Releases · databricks/cli (github.com)](https://github.com/databricks/cli/releases) から、ローカル環境に応じたインストールファイル（Windows（x86）の場合には、 `databricks_cli_#.###.#_windows_386.zip`）をダウンロードする。

![image-20230626163104458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8bdb3a24-e73a-07ba-a6df-b7ec1b3df356.png)

引用元：[Releases · databricks/cli (github.com)](https://github.com/databricks/cli/releases)

#### 2-2. ダウンロードファイルの圧縮展開後、所定のディレクトリ（例：`C:\databricks_cli`）上に展開したファイルを配置を実行する。

![image-20230626163158180.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f9361b7e-8ab0-6d8b-2d51-ec29f1c51d13.png)

#### 2-3. PowerShell 起動後、次のコマンドが想定通りに動作することを確認する。

```powershell
Set-Location -Path C:\databricks_cli
./databricks.exe -v
```

![image-20230626164126058.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/221c70bc-d7c7-025e-6ff3-263870269caa.png)

### 3. Databricks CLI による コードの連携

#### 3-1. Databricks CLI の認証情報の設定 

次のコマンドを実行すし、`Personal Access Token`に取得済みの Databricks Token を入力する。host を、Databricks Workspace の URL （例：`https://adb-################.#.azuredatabricks.net`）に変更する必要あり。

```powershell
./databricks.exe configure --host {host}
```

![image-20230626180646123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/dd2278e6-34ab-248d-1d89-b44da8144148.png)


#### 3-2.  Databricks CLI の認証情報の確認

ユーザーディレクトリ配下（`C:\Users\{UserName}`）にある`.databrickscfg`ファイルを開き、想定通りに設定されていることを確認する。

```powershell
$UserName = $env:UserName
$Path = "C:\Users\$UserName\"
explorer $Path
```

![image-20230626182231979.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/796bc68d-b84d-fb6f-ce1a-30d41fdbf036.png)

#### 3-3. Databricks CLI にて Repos を参照できることを確認

```powershell
./databricks.exe workspace list /Repos/databricks_pipelines
```

![image-20230626171538461.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/c801d717-22c4-3675-310f-0831451aaf66.png)

#### 3-4. ローカル環境にあるソースコード（例`C:\databricks_cli\src`上のコード群を配置）を Databricks Repos 上に配置

```powershell
./databricks.exe workspace import-dir C:\databricks_cli\src /Repos/databricks_pipelines/db_pipeline_01 --overwrite
```

![image-20230626182826857.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6dfc1e25-94b6-f8d5-47e0-49c8ce047a22.png)

#### 3-5. Databricks Repos 上にファイルがあることを確認

![image-20230626182802394.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0ba9561a-97f1-1f49-f8d0-384e1d00fd01.png)

#### 3-6. 必要に応じて、`.databrickscfg`ファイルを削除

```power
$UserName = $env:UserName
$Path = "C:\Users\$UserName\"
explorer $Path
```

## 課題

### 課題1. sync コマンドをフォルダ（例`/Repos/{folder_name}`）上に同期できない事象への対応方法

2023 年 6 月 26 日時点で sync コマンドを自分のアカウント以外の Repos ディレクトリに実行すると、エラーとなってしまうため、sync コマンドを利用しないこととしました。

```powershell
./databricks.exe sync C:\databricks_cli\src /Repos/databricks_pipelines/db_pipeline_01
```

![image-20230626180343630.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5f429292-2aa5-ee9e-dfac-cd45ae1a2ab0.png)

```text
Error: path must be nested under /Users/{user_name} or /Repos/{user_name}
```