COBOLコピーブックをもとにマルチレイアウト・ファイルからデータを抽出してみる

本記事では Informatica Intelligent Cloud Services の データ統合/Cloud Data Integration で利用できる「インテリジェント構造モデル」についてご紹介します。

#はじめに
システム間のデータ連携では主にCSVファイルやデータベースのテーブル、Salesforceなどのアプリケーションからデータを抽出し処理します。これらは項目(カラム)の名前やデータ型などの構造を簡単に取得できるので、データ連携処理の開発も容易です。
それでは、ログファイルやExcelファイル、JSONやParquetなどの非構造化データ/半構造化データをからデータを抽出したい場合はどうでしょうか。複雑なデータの構造を一つ一つ確認して手動で定義するためデータ連携処理の開発に時間がかかるかもしれません。
Cloud Data Integration (CDI) では「__インテリジェント構造モデル__」機能を利用して簡単にデータの構造を定義できます。

#インテリジェント構造モデルとは
「インテリジェント構造モデル」はデータファイルや定義ファイルを解析し、パターン、繰り返し、関係性、データの種類などの構造を自動解析してモデル化することにより、データ連携処理で簡単にデータを抽出できるようにします。
次の非構造化データ、半構造化データ、および構造化データを解析できます。

- 区切りファイル（CSVファイルなど）
- 機械生成されたファイル（Webログやクリックストリームなど）
- JSONファイル
- XMLファイル
- ORCファイル
- Avroファイル
- Parquetファイル
- Microsoft Excelファイル
- PDFフォームフィールド内のデータ
- Microsoft Wordテーブル内のデータ
- XSDファイル
- COBOLコピーブック 

:::note info
XSDファイルとCOBOLコピーブックはTechnical Previewです。開発環境における機能評価の目的にのみご利用ください。
:::

#インテリジェント構造モデルの作成
本記事ではCOBOLワークブックをもとにマルチレイアウトのフラットファイルからデータを抽出してみます。
なお、前述したようにCOBOLワークブックはTechnical Previewとなりますのでご注意ください。

##COBOLワークブック
インテリジェント構造モデルで解析するCOBOLコピーブックです。

```
000100******************************************************************
000200******************************************************************
000300      03  COLUMN01             PIC  X(05).
000400      03  COLUMN02             PIC  X(05).
000500      03  SAMPLE-PACK          PIC  S9(05) COMP-3.
000600      03  SAMPLE-PACK2         PIC  S9(03) COMP-3.
000700      03  SAMPLE-PACK3         PIC  S9(07) COMP-3.
000800      03  FLAGS                PIC  X(01)  OCCURS 6.
000900      03  WORK-DATE            PIC  X(08).
001000      03  WORK-DATE-R          REDEFINES WORK-DATE.
001100         05 WORK-YEAR          PIC  9(04).
001200         05 WORK-MONTH         PIC  9(02).
001300         05 WORK-DAY           PIC  9(02).
```
##インテリジェント構造モデルの作成
CDI の[新規]をクリックして、[コンポーネント]-[インテリジェント構造モデル]を新規作成します。
![01_New.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/f03a7000-bed8-f971-bcad-fc5f10427e51.png)![02_ISD_Asset.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/310a70d5-dd11-2bb9-af85-81e30505d201.png)

[スキーマ/サンプルファイル]のファイルアイコンをクリックし、COBOLコピーブックを選択します。
![03_ISD_File.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/09393698-c277-c7f7-1bdb-0c5caf910b98.png)

ファイルが読み込まれたら[構造の検出]をクリックし、解析を開始します。
![04_ISD_Discover.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/e673d155-5b52-9f38-ec8b-75a1da26a9f4.png)

コピーブックに基づき構造が解析されます。解析結果はツリー形式で表示されます。各ノードの名前を変更したり構造から除外するなどの編集もできます。
![05_ISD_VisualModel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/c364ea74-9018-de35-4035-fbc820f0c0d5.png)

正しくデータが取得できることをテストできます。[テスト]タブを選択します。
![06_ISD_TestTab.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/51357272-dc50-0a81-3874-b4bec4c51f42.png)

[テスト出力フォーマット]で出力するファイルのフォーマットを選択します。[選択して変換]をクリックし、データが含まれるフラットファイルを選択します。
![07_ISD_RunTest.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/d953d829-49c0-4427-f5af-5a1af33b938d.png)

インテリジェント構造モデルに基づき解析されたデータがファイルとして出力されます。
<details><summary>リレーショナル</summary>
![08_ISD_CSV.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/1f7dce26-62ca-644d-e18c-05661fb76c99.png)
</details>
<details><summary>JSON</summary>
![09_ISD_JSON.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/3f25d388-d989-e5da-8926-f3a3f551453a.png)
</details>
<details><summary>XML</summary>
![10_ISD_XML.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/89bc4d15-8ddb-3e5d-af7a-5908ef97b0de.png)
</details>
<details><summary>JSON LINES</summary>
![11_ISD_JSONLINES.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/b281717a-361d-8895-4b69-aa0631faa674.png)
</details>

##マッピングへの組み込み
インテリジェント構造モデルはマッピングの [構造パーサー] トランスフォーメーションで利用することができます。
![12_Mapping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/2b143f19-e7f2-f2ac-658b-30149bac27c6.png)

#まとめ
インテリジェント構造モデルを利用することにより、非構造化データや半構造化データなどを簡単に処理することできます。
本記事ではCOBOLコピーブックを例にしましたが、他の形式のファイルもぜひ試してみてください。

#おまけ
Excelファイルは次のように解析されます。複数シートにも対応しています。
![13_EXCEL_XLSX.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/25cd6952-7f3d-8bdb-2ef6-ae6ec7dad62b.png)
![14_EXCEL_ISD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2253766/096e66cb-2160-9528-e583-b2833f188762.png)