Fivetran の Hybrid Deployment によるデータ連携方法に関する基本的な手順

## 概要

本記事では、Fivetran の Hybrid Deployment を利用したデータ連携手法の検証結果を紹介します。Windows の WSL 上の Ubuntu 環境に Fivetran Hybrid Deployment のエージェントを構築し、データ連携を実施する流れを説明します。

本記事は下記記事の一部です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d5372a04-4384-4eb1-8120-075f8cbbb7e6.png)

出所：[フルマネージドなデータ連携：データ統合の自動化を実現する Fivetran の全貌 #fivetran - Qiita](https://qiita.com/manabian/items/2a760238d3fc1021aae7)


## 事前準備

- Databricks 環境の準備  
- Fivetran 環境の構築  
- Azure Blob Storage 環境の構築  
- Azure SQL Database 環境の構築  
- WSL 環境の準備  
  - Docker 環境の構築  
  - Docker デーモンの実行  

## 検証手順

### エージェントに関するトークンを取得

Fivetran にアクセスし、`Destination` -> `Add destination` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/82a531a0-379a-49f6-8f69-ea3298630156.png)

`Hybrid Deployment` の Destination（例：Databricks）を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/57ff4af3-9328-4d0e-9958-05dde20dbd9b.png)

Destination 名称を入力し、`Add` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8a657976-c3b7-4732-b281-e98693e8a8e0.png)

`Select deployment model` 画面で `+ Configure a new agent` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d9ad7215-35af-40ac-af09-cd663c5786a5.png)

利用規約に同意し、`Next` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bc218491-7df5-40ab-8906-6d55acae3645.png)

`Docker` を選び、`Next` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/3de4283b-049b-4e07-ad10-a4680fa28fea.png)

`Agent name` に名称を入力し、`Generate agent token` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/933fc06b-380d-46e9-af57-5ba6d2a1eb59.png)

その後、`Install and start agent` の手順を控えておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5b71b821-baff-4c84-8f53-7697640eacad.png)

### エージェントのインストール

先ほど控えた `Install and start agent` の内容を WSL 環境で実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/50aa9304-dc96-49be-803f-c8cf62d80281.png)

Fivetran に再度アクセスし、`Account settings` -> `General` -> `Hybrid Deployment Agents` でエージェントが追加されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/affb7aed-9afa-4198-9c72-c5f1400dfa65.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e7b8a7f4-7bcd-4da7-ab95-3565fdf88409.png)

### Destination を作成

`Select an existing agent` で作成したエージェントを選び、Databricks のコネクターを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4b256b63-57d9-4a88-91c4-5e41e2c3a94f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/865ce725-c58e-45c8-92b5-ee87bae02985.png)

Azure Blob Storage をステージングストレージとして利用する場合、SoftDelete 機能を無効にする必要があります。詳細は以下の記事を参照してください。  
- [Fivetran Hybrid Deployment における SoftDelete が有効な Azure Blob Storage 設定時のエラーに対する解決方法 #fivetran - Qiita](https://qiita.com/manabian/items/e64c1c21df41e5041267)

### Azure SQL Database 側にテーブルを準備

Azure SQL Database に Change Tracking を有効にします。

```sql
ALTER DATABASE fivetrantestsqldb 
SET CHANGE_TRACKING = ON 
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/860ad6d5-9305-4192-a3e0-edd57870dec7.png)

テーブルを作成し、Change Tracking を有効化します。

```sql
CREATE TABLE dbo.Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName NVARCHAR(50),
    LastName NVARCHAR(50),
    Email NVARCHAR(100)
);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bf7c4db1-02b9-44d2-b8f2-0bee5330e1c2.png)

```sql
ALTER TABLE dbo.Employees 
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/e2e6314b-80b1-425b-a077-adc63cbd52fb.png)

テーブルにデータを挿入し、内容を確認します。

```sql
INSERT INTO dbo.Employees (EmployeeID, FirstName, LastName, Email)
VALUES (1, 'Taro', 'Yamada', 'taro.yamada@example.com');
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0d1d098c-8621-42d3-bc48-69fe0822dfcd.png)

```sql
SELECT TOP (1000) * FROM [dbo].[Employees]
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d6aeb4f1-ca15-431b-8d99-820980c1e144.png)

### Connection の作成

Connection を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/11a86a87-eeaa-448c-8a02-1faa0f8a0421.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/27408e14-3bb6-4894-8a42-5b6a233c94de.png)

### データ連携の確認

Fivetran で Sync を実行し、Destination 側にデータが連携されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/837ab531-362a-4456-8101-85453b53d217.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/750eae55-8fd6-4b6d-a88c-d7a8657e5ac1.png)