Qlik Talend Cloud (QTC) を使ったオンプレミスDB間のニアリアルタイムデータ連携

こんにちは！インサイトテクノロジーの松尾です。

本投稿では新しくなった "Qlik Replicateのクラウド版" である Qlik Talend Cloud (略してQTC) を使ったオンプレミスDB間のニアリアルタイムデータ連携をご紹介します。QTC は "クラウド版" とはいえセキュアにオンプレミスDB間でレプリケーションをする仕組みがありますので注目ですね。

## はじめに / Qlik Talend Cloud について

Qlik Talend Cloud の提供がいよいよ開始されました！

https://xtech.nikkei.com/atcl/nxt/news/24/01351/

Qlik Talend Cloud は Qlik Cloud のサービスを、大きく分析機能(Analytics)とデータ統合機能(Integration)とに分けた時の、データ統合機能に相当する部分の総称となります。さらに現時点では Talend による ETL 機能はTalend Cloud (Talend Data Fablic) という別の環境で提供されており、Qlik Talend Cloud の料金プラン(エディション)としてはバンドルされてはおりますが、機能的にはまだ密に統合はされているわけではない状態です。

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Data-services.htm

> Qlik Talend Data Integration は、Qlik Talend Cloud の複数のサブスクリプション オプションで利用できます。Qlik Talend Cloud には、Talend Data Fabric 機能も含まれています。詳細については、「Qlik Talend Cloud サブスクリプション オプション」を参照してください。

```
Qlik Cloud
├── Qlik Talend Cloud
│   ├── Qlik Talend Data Integration
│   └── Talend Data Fablic
└── Qlik Cloud Analytics
```

Qlik Talend Data Integration は以前の "Qlik Cloudデータ統合" と呼ばれていたサービスからなり、データのニアリアルタイム連携+ELT 処理をベースとします。一方で、Talend Data Fablic は Talend が得意なバッチベースの高度な ETL 機能を提供します。リアルタイム性を重視するなら Qlik Talend Data Integration を利用することになるでしょう。

Qlik Cloud ではその他にも Qlik Answers など気になるサービスも発表されているのですが、それについては私がもう少し詳細を理解してからご紹介したいと思います。

本投稿では、Qlik Talend Cloud の「Qlik Talend Data Integration」によるニアリアルタイムデータ連携についてご紹介します。

## Qlik Talend Data Integration のデータ連携機能

Qlik Talend Data Integration のデータ連携機能は大きく2つのユースケースをサポートしており、データの連携のみを利用する場合は「レプリケーション」を使用します。

そのほかの「データパイプライン」については、以下の公式ドキュメントを参照ください。プロジェクトとタスクの詳細についても記載があります。

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/Introduction/Data-services-introduction.htm

### Qlik Talend Cloud はオンプレ内のリソースへ安全にアクセス可能

今回はオンプレミスDB間のニアリアルタイムデータ連携を考えてみたいと思います。

Qlik Talend Cloud では Data Movement Gateway という、オンプレ内のリソースへ安全にアクセスするための仕組みを提供しています。Data Movement Gateway を利用すれば VPC のセキュリティグループや FW に対して、外側にいる Qlik Cloud からの "穴" を開ける必要はありません。データソースやターゲットに対して Data Movement Gateway からDBポートでアクセスできればよいため、Qlik Talend Cloud と "Cloud" の名前を冠しているものの、オンプレ環境内でのデータ連携も行うことが可能です。

なお穴をあけてもいいから手軽にやりたい、という場合には、Qlik Talend Cloud でも Data Movement Gateway を利用せずに直接 Qlik Cloud から接続してデータ連携を行うことも可能です。

:::note info
ソースのタイプにより必ず Data Movment Gateway が必要となるものもあります
https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/replication-gateway.htm
:::

## Qlik Talend Cloud によるオンプレミスDB間のニアリアルタイムデータ連携

では早速、Qlik Talend Cloud によるオンプレミスDB間のニアリアルタイムデータ連携をやってみましょう。環境については以下で行います。「オンプレ」とは謳っているものの、環境の用意が楽なので、今回はオンプレをイメージした以下のような AWS 環境で、VPC内リソース間でのデータ連携を実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/a7de5ede-6dcd-5eae-f9c1-d213e87adfd9.png)

以下のステップで行います。

1. Data Movement Gateway のセットアップ
1. ソースエンドポイントの定義
1. ターゲットエンドポイントの定義
1. プロジェクトの作成
1. タスクの作成
1. タスクの実行

### Data Movement Gateway のセットアップ

Data Movement Gateway 用のサーバーは、RHEL か RHEL互換 の OS となります。Data Movement Gateway は以下の Qlik 社のサイトの手順で用意にセットアップ可能です。

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Gateways/dm-gateway-setting-up.htm

まずはダウンロード

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/d1ea2504-3030-0d84-fa90-71f5d24b2033.png)

Data Movement Gateway 用の EC2 について、ここではここでは Oracle Linux 8 を使用しました。

```bash
[ec2-user@ip-172-31-41-40 ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.9 (Ootpa)
```

手順に記載のあるコマンドでインストールを開始します。

```bash
[ec2-user@ip-172-31-41-40 ~]$ ls -l
total 822512
-rw-rw-r--. 1 ec2-user ec2-user 842250211 Sep  4 09:28 qlik-data-gateway-data-movement.rpm
[ec2-user@ip-172-31-41-40 ~]$ sudo QLIK_CUSTOMER_AGREEMENT_ACCEPT=yes rpm -ivh qlik-data-gateway-data-movement.rpm
warning: qlik-data-gateway-data-movement.rpm: Header V4 RSA/SHA512 Signature, key ID 0a45233c: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:qlik-data-gateway-data-movement-2################################# [100%]

To set up connectivity between the Data Movement gateway and your Qlik Cloud tenant,
change your working directory to /opt/qlik/gateway/movement/bin and perform the following steps:
  1.Set the Qlik Cloud tenant URL by running:
    $ ./repagent agentctl qcs set_config --tenant_url URL
    (where URL is replaced by the actual URL e.g. mytenant.us.qlikcloud.com)
  2.Generate a registration key by running:
    $ ./repagent agentctl qcs get_registration
    The key is used to establish an authenticated connection between the Data Movement gateway and your Qlik Cloud tenant.
  3.Create a Data Movement gateway in Management Console and paste the generated key into the “Key” field.
  4.After the Data Movement gateway has been created in Management Console, start the data gateway service by running (as root):
    $ systemctl start repagent
```

表示された手順に従います。

```bash
[ec2-user@ip-172-31-41-40 ~]$ sudo su - qlik
[qlik@ip-172-31-41-40 ~]$ cd /opt/qlik/gateway/movement/bin
[qlik@ip-172-31-41-40 bin]$ ./repagent agentctl qcs set_config --tenant_url wo2qteuck8vfndr.jp.qlikcloud.com
ReplicateAgent Control Program completed successfully.
[qlik@ip-172-31-41-40 bin]$ ./repagent agentctl qcs get_registration
{"agentType":"data-movement","kid":"53aea0a8-9d99-48f1-b831-be970f0b5683","publicKey":"-----BEGIN CERTIFICATE-----xxxx 中略 xxxx\n-----END CERTIFICATE-----\n"}
ReplicateAgent Control Program completed successfully.
[qlik@ip-172-31-41-40 bin]$
```

Qlik Talend Cloud の画面上で、「管理」→「ゲートウェイ」で「作成」を選択し、必要事項の入力と、表示されたキーの貼り付けを行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/09664deb-7323-56ad-b96b-dfa64a290eff.png)

追加すると一覧に表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/9b47fd29-c8c3-b41c-bc5e-045453dc093a.png)

サービスを起動します。

```bash
[ec2-user@ip-172-31-41-40 ~]$ sudo systemctl start repagent
```

画面をリフレッシュすると、状態が「接続済み」に変わります。

また、ソースとターゲットに接続するため、Oracle (ソース) と PostgreSQL (ターゲット) に接続するためのドライバーをインストールします。Python 3 が必要になるので、その前に Python 3 をインストールしておきましょう。

```bash
[ec2-user@ip-172-31-41-40 ~]$ sudo dnf install python3
```

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Oracle/oracle-prerequisites-server.htm#anchor-1

```bash
[ec2-user@ip-172-31-41-40 ~]$ cd /opt/qlik/gateway/movement/drivers/bin
[ec2-user@ip-172-31-41-40 bin]$ sudo ./install oracle
```

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/TargetConnections/postgresql-target.htm#Driver

```bash
[ec2-user@ip-172-31-41-40 bin]$ sudo ./install postgres
```

### ソースエンドポイントの定義

ソース(Oracle)接続を定義します。

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/DataIntegration/SourcesConnections/Oracle/Oracle-source.htm#anchor-1

Oracle ソースを選択し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/4f591810-5aa3-2334-ef92-a670886e10bc.png)

Data gateway を選択し、Connection string と User / Password を設定して接続テストを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/9b9f487d-7cf0-2477-28ef-dda80f488bef.png)

"Data Movement Gateway から Oracle への接続" であることにご注意ください。同じ VPC 内であれば、プライベート IP アドレスで問題ありません。

### ターゲットエンドポイントの定義

ターゲット(Aurora PostgreSQL)接続を定義します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/46f31563-1a54-4576-49ac-4cf6713c605b.png)

PostgreSQL ターゲットを選択し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/ea2a9462-43df-3b84-7685-5c10c14fa2eb.png)

Data gateway を選択し、Aurora のエンドポイントと User / Password 、データベースを設定して接続テストを実行します。接続できたら保存します。

こちらも、"Data Movement Gateway から Aurora PostgreSQL への接続" であることにご注意ください。そのため同じVPC内であればパブリックアクセスを有効にする必要はありません。

接続を2つ作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/f54221f3-184f-9232-fea6-480cdf0233ca.png)

### プロジェクトの作成

レプリケーションを実行するには、ユースケースに「レプリケーション」を選択した「プロジェクト」を作成する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/dc5999c7-9e98-d8eb-64cb-0bea957d56ef.png)

### タスクの作成

プロジェクトの作成後、タスクを作成します。タスクは、ソースとターゲットに対して、どのテーブルをレプリケートするかの設定です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/122920a0-8e80-43d6-1a86-e1c4f0e00956.png)

レプリケートを選択し、名前を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/8d14168c-d916-51e9-7f32-901e324b7b14.png)

作成したソース (Oracle) を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/e9f510cc-9309-a36d-ed72-bbda274cab7f.png)

スキーマとテーブルを指定します。左側でまずスキーマを選択します。データセット名に「%」を入力して「検索」を選択するとテーブルの一覧が表示されるので、レプリケーション対象のテーブルを選択して追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/7a683e9e-fbdc-ba62-903b-69517fb12851.png)

ターゲットを選びます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/730a2566-d7d9-8a15-b4e6-728e6c118359.png)

フルロードのみとするか、フルロード+CDC(変更を適用)とするかを選択します。Qlikによるデータレプリケーションは、フルロードとCDCがシームレスに実行されるのも一つの特徴です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/061a342f-919d-fe3b-a0b3-ce5355b38b31.png)

最後に確認をして「作成」を実行しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/c744f3b1-58ba-4e5c-3daf-a7a4f990e9d4.png)

※設定の流れは Qlik Replicate とほぼ同じですね！

### タスクの実行

作成したタスクを開くと、まず「準備」を実行する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/d04e46f8-d623-7cbe-e18f-2d484ca7508e.png)

準備が終了し「実行」できるようになったら早速実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/2c565b34-be5a-ed26-5da4-5f292e7573fb.png)

まずフルロードのフェーズが開始します。Qlik Talend Cloud のレプリケーションのタスクでも、Qlik Replicate と同様にフルロード時の同時処理テーブル数のデフォルトは 5 並列のようです。フルロードのステータスを確認すると、現在の処理レコード数も確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/03242ad8-1616-c233-e243-c8ca8f2e9f6f.png)

また、CDCのステータスを確認すると、フルロードが終了したテーブルに対する処理状況が確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/8f2c6f99-ecd3-b483-2ec1-c6751eb7c860.png)

フルロードが終了して全てCDC処理の状態となりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/35f01a3a-b130-ca75-5660-a6c7479be29d.png)

Qlik Replicate とほぼ同じですね。円グラフが表示されないくらいでしょうか。

## おわりに

本投稿では、Qlik Talend Cloud でオンプレミスDB間 (今回のデモは自社テナント内のDB間)のニアリアルタイムデータ連携を実施する手順を紹介しました。Data Movement Gateway を使用することで、Qlik Replicate の Cloud 版である Qlik Talend Cloud でもセキュアにニアリアルタイムデータ連携を構築することが可能です。

Qlik Replicate との違いはどこにあるでしょうか？
大きな違いの一つはライセンスの考え方です。Qlik Replicate では連携対象を基準に価格が決まるのに対して、Qlik Talend Cloud では容量モデルに基づいたサブスクリプションとなります。連携対象の種類には依らないため、様々なデータソースの統合を試しやすいモデルと言えるでしょう。詳細な計測方法についてはお問合せください。

https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Admin/subscription-options-QTC.htm

また今回の投稿でご紹介したよう、環境面の違いがあります。Qlik Replicate は Qlik Replicate サーバーを構築するのに対して、Qlik Talend Cloud は、SaaS ソースであれば別のサーバーを建てる必要はなく、また、オンプレミスソースには Data Movement Gateway を介して対応可能です。構築も非常に簡単であることをご紹介しました。

新しくなり、そして使いやすくなったデータ統合サービス Qlik Talend Cloud をぜひお試しいただければと思います。

https://www.insight-tec.com/products/qlik-cloud/

また別の投稿では、SaaS ソースのデータ統合をご紹介したいと思います。どうぞお楽しみに！