Simple Data Integrator (SDI) 応用編：データ連携 (Oracle からSynapseへの連携例)

# はじめに

データの移行や統合のニーズが高まる中、既存RDBからAzure Synapse Analyticsへのデータ連携は、多くの企業にとって課題となっています。本記事では、Simple Data Integratorを使用して、OracleデータベースからAzure Synapse Analyticsにデータを連携するための手順について説明します。


# 構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/b376ebe5-9fc3-ff07-8af0-8e7969e8bd2c.png)

### 処理フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/b9ff2709-a878-f7ba-e58c-83ce98ec85e4.png)


### Source  (Oracle)
スキーマ名：SDITEST
テーブル名：SAMPLETABLE1
<table>
<tr>
<td>
テーブル構造
</td>
</tr>
<tr>
<td>

|PK|カラム名|型|
|-|-|-|
|![key_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/292a6047-9fbb-db98-6f7c-52db406207d9.png)|ID|NUMBER|
||NAME|NVARCHAR2(100) | 
||BIRTHDATE|DATE|
||SALARY|NUMBER(18,2)| 
||ISACTIVE|NUMBER(1,0)| 
||CREATEDAT|TIMESTAMP (6)| 
||EMAIL|VARCHAR2(255 BYTE) |
||LASTMODIFIEDTIME|TIMESTAMP (7)| 
||USERGUID|RAW(16)|
||WEIGHT|FLOAT(126)| 
||RATING|BINARY_FLOAT| 
||JSONDATA|NVARCHAR2(4000)|
</td>
</tr>
<tr>
<td>
DDL
</td>
</tr>
<tr>
<td>

```
  CREATE TABLE "SDITEST"."SAMPLETABLE1" 
   (	
    "ID" NUMBER(10,0) NOT NULL ENABLE, 
	"NAME" NVARCHAR2(100) COLLATE "USING_NLS_COMP", 
	"BIRTHDATE" DATE, 
	"SALARY" NUMBER(18,2), 
	"ISACTIVE" NUMBER(1,0), 
	"CREATEDAT" TIMESTAMP (6), 
	"EMAIL" VARCHAR2(255 BYTE) COLLATE "USING_NLS_COMP", 
	"LASTMODIFIEDTIME" TIMESTAMP (7), 
	"USERGUID" RAW(16), 
	"WEIGHT" FLOAT(126), 
	"RATING" BINARY_FLOAT, 
	"JSONDATA" NVARCHAR2(4000) COLLATE "USING_NLS_COMP", 
	 CONSTRAINT "SAMPLETABLE1_PK" PRIMARY KEY ("ID")
  )
 ``` 

</td>
</tr>
</table>



### Target　(Synapse)
スキーマ名：dbo
テーブル名：SampleTable1
<table>
<tr>
<td>
テーブル構造
</td>
</tr>
<tr>
<td>

|PK|カラム名|型|
|-|-|-|
|![key_icon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/292a6047-9fbb-db98-6f7c-52db406207d9.png)|Id|int|
||Name|nvarchar(100) |
||BirthDate|date|
||Salary|decimal(18,2)|
||IsActive|bit|
||CreatedAt|datetime|
||Email|varchar(255)|
||LastModifiedTime|datetime2(7)|
||Weight|float|
||Rating|real|
||JSONData|nvarchar(4000)|

</td>
</tr>
<tr>
<td>
DDL
</td>
</tr>
<tr>
<td>

```

CREATE TABLE [dbo].[SampleTable1]
( 
	[Id] [int]  NOT NULL,
	[Name] [nvarchar](100)  NULL,
	[BirthDate] [date]  NULL,
	[Salary] [decimal](18,2)  NULL,
	[IsActive] [bit]  NULL,
	[CreatedAt] [datetime]  NULL,
	[Email] [varchar](255)  NULL,
	[LastModifiedTime] [datetime2](7)  NULL,
	[Weight] [float]  NULL,
	[Rating] [real]  NULL,
	[JSONData] [nvarchar](4000)  NULL
)
WITH
(
	DISTRIBUTION = HASH ( [Id] ),
	CLUSTERED COLUMNSTORE INDEX
)
GO

ALTER TABLE [dbo].[SampleTable1] ADD CONSTRAINT PK_SampleTable1 PRIMARY KEY NONCLUSTERED (Id) NOT ENFORCED
GO
 
 ``` 

</td>
</tr>
</table>

# 設定
### コネクション設定
Source DB、Target　DB への接続を設定。
設定方法は下記の記事を参照：
https://qiita.com/RiCCT/items/787a41bb54277a3b26c2

|ソースコネクション名|ターゲットコネクション名|
|-|-|
|ORACLE-SDITEST<br />![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/102e9508-7099-42ad-4547-cdc9aae11805.png)|Synapse SDITEST ※1<br />![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/58fec139-75a7-d057-8fcb-ec7bf670707c.png)<br />  |

※1 Synapse へのコネクションを設定する際、データタイプは「SqlServer」を選択してください。
公式資料：
https://ja.sdi.ricct.com/userguide/connectionsqlserver/

### マッピング設定
#### 1 .「新規マッピング」ボタンをクリックしてマッピング設定画面を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/a55e5ced-619b-975f-37db-4a50437b4993.png)

#### 2 . ソースコネクション、テーブル、ターゲットコネクション、テーブルを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/f3d466f0-e4eb-a8ad-0e54-5282d5cbedec.png)


|No|項目|説明|
|----|----|----|
|1|マッピング名 |マッピング名を入力、任意の名前設定できます。システムは名前の重複チェックしていないですが、管理上、ユニークの名前の設定をお勧めします。 |
|2|ソースコネクション| ORACLE-SDITESTを選択|
|3|ソーステーブル | SDITEST.SAMPLETABLE1を選択|
|4|コネクションコネクション| Synapse SDITESTを選択|
|5|コネクションテーブル | dbo.SampleTable1|
|6|カラム一覧取得 |`カラム一覧取得`ボタンをクリックしてテーブル定義明細取得|

#### 3 . カラムのマッピングルールを設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/c41b4f79-2d4f-7238-2e27-4eafe1ac919d.png)

|No|項目|説明|
|----|----|----|
|7|ソースカラム |ターゲットのカラムに対してソースデータの対応のカラムを選択します。同じカラムが存在する場合デフォルト自動マッピングします。今回はフォルト設定のままにします。 |
|8|マッピング対象|データ連携するかどうかを選択。今回全カラムのデータ連携します。|
|9|更新方式 |`Merge`を選択。 <br />更新方式についての詳細説明は下記の資料を参照：<br />https://ja.sdi.ricct.com/userguide/mappingtarget/|

#### 4 . テスト実行
`マッピング実行` ボタンをクリックして、動作確認します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/402e62a6-e3ac-d3ab-d234-2a6dda6b61af.png" width="400">

:::note info
お勧め
:::
マッピング実行前に、ソースとターゲットの`テータ参照`ボタンをクリックして、データを確認した上実行します。マッピング成功の場合、もう一度ターゲットのデータを確認して、結果は期待通りかどうかを判断します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/bcabc9e5-fb43-f672-6f3b-a6cd05ba234f.png)


|No|項目|説明|
|----|----|----|
|10|ステータス |実行成功の場合、マッピングを保存して、設定完了。<br />エラーが発生した場合、詳細画面でエラー内容を確認した上対応します。 |
|11|詳細アイコン| 詳細アイコンをクリックしてLOGの詳細参照できます。|



#### 5 . 保存
`保存` ボタンをクリックして、マッピング設定を保存します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/d2b2b877-ed05-7a27-608f-728ba61e275d.png" width="400">


:::note info
定期的にデータ連携したい場合、スケジューラーを作成してマッピングを登録します。
スケジューラー設定につきまして、下記のページを参照してください。
https://ja.sdi.ricct.com/userguide/schedule/
:::


以上です。

[Simple Data Integrator (SDI) 実践入門](https://qiita.com/RiCCT/items/3dc109ff82546459a8b0 "Simple Data Integrator (SDI) 実践入門")

# 参考資料
[SDI日本語公式サイト](https://ja.sdi.ricct.com/ "SDI日本語公式サイト")
[SDI English Official Website](https://sdi.ricct.com/ "SDI English Official Website")
[SDIマップイング設定](https://ja.sdi.ricct.com/userguide/mapping/ "SDIマップイング設定")