5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

KaggleのネストされたJSONファイルをInformatica IDMC(旧称IICS)のCloud Data Integrationで解析してみた

Last updated at Posted at 2023-02-21

NTTデータ ソリューション事業本部 デジタルサクセスソリューション事業部 の nttd-nagano です。

12月13日の記事 で、Informatica社 のオールインワンのクラウドデータマネージメントプラットフォーム「Intelligent Data Management Cloud」(※1)をご紹介しましたが、今回はこの IDMCのデータ統合サービス「Cloud Data Integration」(※2)の機能「インテリジェント構造検出」(Intelligent Structure Discovery)にて、 Kaggle で入手したネストされたJSONファイルを解析してみました ので、ご報告します。

※1. Intelligent Data Management Cloud 略称はIDMC。旧称はIICS。クラウドデータマネジメントプラットフォーム。以下IDMCと記載。
※2. Cloud Data Integration 略称はCDI。データ統合サービス。ETL処理(※3)やELT処理(※4)を担う。以下CDIと記載。
※3. ETL処理 データベースなどに蓄積されたデータから必要なものを抽出(Extract)し、目的に応じて変換(Transform)し、データを必要とするシステムに格納(Load)すること。
※4. ELT処理 ETL処理(※3)と対比して使われることが多い言葉。データ統合処理の順序を従来型のE→T→Lの順ではなく、E→L→Tの順でおこなう。近年ではDBMSの性能が爆発的に向上したことから、その性能を有効活用するために使われる手法。

近年、検索のしやすさから構造化ログ(Structured Logging)が注目されており、AWS CloudWatch Logs Insightなども構造化ログに対する検索に対応しています。構造化ログの中でも多いのがJSON形式です。

このように、JSONファイルはさまざまな所で使われています。

さて、社内で活用できるデータはないかと探し回って見つけたデータがJSONファイルで、なおかつそれがネストされたJSONファイルであった場合、 JSONスキーマなどの事前情報がすぐには分からない状況だと、階層構造を人力で解析していく必要があって、結構面倒ですよね。 そんなときに使えるのが、IDMCの 「インテリジェント構造検出」(Intelligent Structure Discovery)機能 です。

「データ連携」という文脈では、事前情報なしにJSONファイルを扱うということはないかと思いますが、このように データ分析者がセルフサービスでデータを見つけてきて、前処理としてその形を整えつつ分析環境に持ってきたいときなどは、役に立つ機能かと思います。

この機能は、JSONファイルの他に下記をサポートしています。

  • テキストファイル(CSVファイルなどの区切りファイルや階層を含む複雑なファイルを含む)
  • 機械生成されたファイル(Webログやクリックストリームなど)
  • JSONファイル
  • XMLファイル
  • ORCファイル
  • Avroファイル
  • Parquetファイル
  • Microsoft Excelファイル
  • PDFフォームフィールド内のデータ
  • Microsoft Wordテーブル内のデータ
  • XSDファイル
  • COBOLコピーブック

今回は、複雑にネストされたJSONファイルのサンプルとして、 Kaggle の「NY Philharmonic Performance History」を使います。

はじめに以降の手順の全体感をお伝えしておくと、
まず、「インテリジェント構造モデル」(Intelligent Structure Model)を作り、次に、そのモデルをマッピングの「構造パーサートランスフォーメーション」にて使う、という流れになります。

所要時間は、1時間ほどでした。今回はスクリーンショットを撮りつつでしたので1時間かかりましたが、実際はもっと手早く実施できるかと思います。

インテリジェント構造モデルを作る

まず、インテリジェント構造モデルを作っていきます。

IDMCにログインしたら、アプリケーションピッカーで「データ統合」をクリックします。

次に、左ペインにて「新規」をクリックします。

「新しいアセット」ダイアログで、「コンポーネント」>「インテリジェント構造モデル」をクリックし、「作成」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_001.png

名前を入力し、「Choose File」の右側のファイルアイコンをクリックします。

informatica_cdi_intelligent_structure_model_002.png

ダイアログにて raw_nyc_phil.json を選択し、「開く」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_003.png

「構造の検出」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_004.png

検出処理が開始されます。

informatica_cdi_intelligent_structure_model_005.png

検出処理が終了すると、「ビジュアルモデル」タブに、結果が表示されます。

結果のツリーを見ると、今回のJSONファイルには、id2 ごとに複数の concertsworks がぶら下がっているような構造であることが分かりました。(id2 は本来JSONファイルの中では id ですが、ツリーの他の要素と名称が衝突していたため、CDIが自動的に連番を付与したようです)

以降では、この2つをそれぞれフラットファイルとして出力するようなマッピングを作成してみましょう。

informatica_cdi_intelligent_structure_model_006.png

「保存」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_007.png

ちなみに、「リレーショナル出力」タブをクリックすると、モデルデータの表示方法を選択したり、モデルのデータ正規化モードを選択したり、モデル内の出力グループに対してアクションを実行したりすることができます。

informatica_cdi_intelligent_structure_model_008.png

Data Integration ServerのDTMのJavaヒープサイズを拡張する

さて、マッピングを作る前に、Secure AgentのData Integration ServerのDTMのJavaヒープサイズを拡張しておきましょう。

というのも、これから作るマッピングをデフォルトの状態で実行したところ、セッションログに下記のようなエラーが出力されたためです。

WRITER_1_*_1> WRT_8167 [2023-02-17 05:47:38.770] Start loading table [output_raw_nyc_phil_work_csv] at: Fri Feb 17 05:47:38 2023
WRITER_1_*_1> WRT_8167 [2023-02-17 05:47:38.870] Start loading table [output_raw_nyc_phil_concert_csv] at: Fri Feb 17 05:47:38 2023
TRANSF_1_1_1> CMN_1761 [2023-02-17 05:47:43.258] Timestamp Event: [Fri Feb 17 05:47:43 2023]
TRANSF_1_1_1> STRUCTURE_PARSER_5 [2023-02-17 05:47:43.258] [ERROR] A Structure Parser runtime exception occurred : [Unknown error encountered in parsing]
TRANSF_1_1_1> CMN_1761 [2023-02-17 05:47:43.260] Timestamp Event: [Fri Feb 17 05:47:43 2023]
TRANSF_1_1_1> STRUCTURE_PARSER_3 [2023-02-17 05:47:43.260] [ERROR] An error occurred while performing data conversion : [com.informatica.atlantic.api.AtlanticRuntimeException: Unknown error encountered in parsing
	at com.informatica.atlantic.api.runtime.impl.AtlanticDefaultExecutor.internalParse(AtlanticDefaultExecutor.java:288)
【略】
TRANSF_1_1_1> CMN_1761 [2023-02-17 05:47:43.260] Timestamp Event: [Fri Feb 17 05:47:43 2023]
TRANSF_1_1_1> TM_6085 [2023-02-17 05:47:43.260] A fatal error occurred at  transformation [src_raw_nyc_phil], and the session is terminating. 

前述のDTMとは、Data Transformation Managerの略で、これはETL/ELTの実際の処理(データを抽出し、変換し、ロードする)をおこなうデータ統合サービスのコンポーネントです。このDTMのJavaヒープサイズの最大値が、デフォルトの値では小さすぎて処理しきれないため、拡張しておきます。

拡張の方法は、「 FAQ:Informatica Intelligent Cloud Secure AgentのJavaヒープサイズと他のメモリ属性を増やすためのガイドラインとベストプラクティスについて 」に従って、操作していけば問題ありません。

まず、IDMCにログイン後、アプリケーションピッカーにて「管理者」をクリックします。

次に、左ペインにて「ランタイム環境」をクリックします。

Secure Agentをクリックします。

informatica_cdi_intelligent_structure_model_009.png

「編集」ボタンをクリックします。

「システム構成の詳細」パートを開き、「サービス」で「Data Integration Server」をクリックします。

informatica_cdi_intelligent_structure_model_010.png

タイプが「DTM」である「JVMOption3」の値として、 -Xms1024m を指定します。

また、タイプが「DTM」である「JVMOption4」の値として、 -Xmx4096m を指定します。

informatica_cdi_intelligent_structure_model_011.png

「保存」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_012.png

Secure Agentを再起動します。

informatica_cdi_intelligent_structure_model_013.png

フラットファイル接続を作る

フラットファイル接続を作っていきます。

まず、IDMCにログイン後、アプリケーションピッカーにて「管理者」をクリックします。

次に、左ペインにて「接続」をクリックします。

「新しい接続」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_014.png

「接続名」「タイプ」「ディレクトリ」「日付形式」を入力し、「接続のテスト」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_015.png

「保存」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_016.png

informatica_cdi_intelligent_structure_model_017.png

入力ファイルを配置する

接続で設定したディレクトリに raw_nyc_phil.json を配置します。

このファイルは、マッピングの途中の「構造パーサートランスフォーメーション」で読むことになります。

一方、マッピングの先頭の「ソーストランスフォーメーション」では、このファイルのファイルパスを記載したファイルを読むことになります。そのため、下記のスクリーンショットのようにして、そのファイルを作ります。

informatica_cdi_intelligent_structure_model_018.png

マッピングを作る

マッピングを作っていきます。

まず、IDMCにログイン後、アプリケーションピッカーにて「データ統合」をクリックします。

次に、左ペインにて「新規」をクリックします。

「新しいアセット」ダイアログで、「マッピング」>「マッピング」をクリックし、「作成」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_019.png

マッピングの「名前」を変更します。

informatica_cdi_intelligent_structure_model_020.png

ソーストランスフォーメーションを設定する

ソーストランスフォーメーションをクリックします。

ソーストランスフォーメーションの「名前」を変更します。

informatica_cdi_intelligent_structure_model_021.png

「ソース」タブをクリックします。

「接続」にて先ほど作ったフラットファイル接続を指定します。

「選択」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_022.png

ダイアログにて、先ほど作ったファイルパスを記載したファイルを指定し、「OK」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_023.png

指定したファイルが「オブジェクト」に表示されました。

informatica_cdi_intelligent_structure_model_024.png

構造パーサートランスフォーメーションを設定する

矢印部の「i」アイコンをクリックし、「構造パーサー」をクリックします。

informatica_cdi_intelligent_structure_model_025.png

構造パーサーの「名前」を変更します。

informatica_cdi_intelligent_structure_model_026.png

「構造パーサー」タブをクリックし、「インテリジェント構造モデル」の右の「選択」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_027.png

先ほど作ったインテリジェント構造モデルを指定し、「選択」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_028.png

指定したモデルが「インテリジェント構造モデル」に表示されました。

ソーストランスフォーメーションの出力側から構造パーサーの入力側に対して、ドラッグアンドドロップし、矢印を繋ぎます。

informatica_cdi_intelligent_structure_model_029.png

構造パーサーをクリックします。

「フィールドマッピング」タブをクリックし、「フィールドマップオプション」にて「自動」を選択します。

informatica_cdi_intelligent_structure_model_030.png

「受信フィールド」側の「フィールド名」が、「構造パーサー入力フィールド」の「マッピングされたフィールド」に転記されていることを確認します。

informatica_cdi_intelligent_structure_model_031.png

「出力フィールド」タブをクリックします。この中のconcertの配下とworkの配下に「id_FK2」というフィールド」があるのですが、現在この精度(桁数)が36になっているかと思います。これを拡張しておきましょう。

informatica_cdi_intelligent_structure_model_032.png

というのも、「精度」が36の状態で実行したところ、セッションログに下記のようなエラーが出力されたためです。

*****START LOAD SESSION*****
【略】
WRITER_1_*_1> WRT_8167 [2023-02-17 05:26:09.566] Start loading table [output_raw_nyc_phil_work_csv] at: Fri Feb 17 05:26:08 2023
TRANSF_1_1_1> CMN_1761 [2023-02-17 05:26:09.578] Timestamp Event: [Fri Feb 17 05:26:09 2023]
TRANSF_1_1_1> STRUCTURE_PARSER_7 [2023-02-17 05:26:09.578] [ERROR] The output port data is truncated. To avoid truncation, in the Structure Parser transformation Output Fields tab increase the output port precision, then run the mapping.
TRANSF_1_1_1> CMN_1761 [2023-02-17 05:26:09.578] Timestamp Event: [Fri Feb 17 05:26:09 2023]
TRANSF_1_1_1> JAVA PLUGIN_1762 [2023-02-17 05:26:09.578] [ERROR] com.informatica.powercenter.sdk.SDKException: com.informatica.powercenter.sdk.SDKException: com.informatica.cloud.api.adapter.runtime.exception.DataConversionException:  failure on [id2_FK]: 
Data Truncation occured
	at com.informatica.isd.plugin.utils.SDOutputBuffer.setData(SDOutputBuffer.java:110)
【略】
TRANSF_1_1_1> CMN_1761 [2023-02-17 05:26:09.579] Timestamp Event: [Fri Feb 17 05:26:09 2023]
TRANSF_1_1_1> TM_6085 [2023-02-17 05:26:09.579] A fatal error occurred at  transformation [src_raw_nyc_phil], and the session is terminating. 

Informaticaソリューションでは一般的に文字列項目に対して「精度」という単語を使った場合は、「桁数」を意味します。

ここでは、「精度」を100に拡張しました。

informatica_cdi_intelligent_structure_model_033.png

ターゲットトランスフォーメーションを設定する (1/2)

ターゲットトランスフォーメーションをクリックします。

ターゲットランスフォーメーションの「名前」を変更します。

informatica_cdi_intelligent_structure_model_034.png

「ターゲット」タブをクリックします。

「接続」にて先ほど作ったフラットファイル接続を指定します。

「選択」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_035.png

ダイアログの「ターゲットオブジェクト」にて、「実行時に新規作成」をクリックし、「静的ファイル名」に output_raw_nyc_phil_work.csv と入力し、「OK」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_036.png

指定したファイルが「オブジェクト」に表示されました。

informatica_cdi_intelligent_structure_model_037.png

構造パーサーの出力側からターゲットトランスフォーメーションの入力側に対して、ドラッグアンドドロップし、矢印を繋ぎます。

ダイアログにて、 concert を選択し、「OK」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_038.png

矢印が繋がりました。

informatica_cdi_intelligent_structure_model_039.png

ターゲットトランスフォーメーションを設定する (2/2)

ターゲットトランスフォーメーションを新たに配置し、ターゲットトランスフォーメーションをクリックします。

ターゲットランスフォーメーションの「名前」を変更します。

informatica_cdi_intelligent_structure_model_040.png

「ターゲット」タブをクリックします。

「接続」にて先ほど作ったフラットファイル接続を指定します。

「選択」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_041.png

ダイアログの「ターゲットオブジェクト」にて、「実行時に新規作成」をクリックし、「静的ファイル名」に output_raw_nyc_phil_work.csv と入力し、「OK」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_042.png

指定したファイルが「オブジェクト」に表示されました。

informatica_cdi_intelligent_structure_model_043.png

構造パーサーの出力側からターゲットトランスフォーメーションの入力側に対して、ドラッグアンドドロップし、矢印を繋ぎます。

ダイアログにて、 work を選択し、「OK」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_044.png

矢印が繋がりました。

informatica_cdi_intelligent_structure_model_045.png

検証して保存する

「検証」アイコンをクリックします。

informatica_cdi_intelligent_structure_model_046.png

「保存」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_047.png

マッピングを実行する

「実行」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_048.png

「実行」ボタンをクリックします。

informatica_cdi_intelligent_structure_model_049.png

左ペインにて「マイジョブ」をクリックします。

「ステータス」が「実行中」になっています。

informatica_cdi_intelligent_structure_model_050.png

「ステータス」が「成功」になりました。

informatica_cdi_intelligent_structure_model_051.png

インスタンス名をクリックし、ジョブの詳細を見てみます。

informatica_cdi_intelligent_structure_model_052.png

「個々のソース/ターゲットの結果」パートを見ると、concert は21607個、work は82793個あったようですね。

続いて、出力ファイルができているかを確認してみます。

できていました。

informatica_cdi_intelligent_structure_model_053.png

output_raw_nyc_phil_concert.csv の内容を確認してみましょう。

informatica_cdi_intelligent_structure_model_054.png

output_raw_nyc_phil_work.csv の内容も確認してみましょう。

informatica_cdi_intelligent_structure_model_055.png

問題なさそうです。

おわりに

以上、「Informatica IDMC(旧称IICS)のCloud Data IntegrationでKaggleのネストされたJSONファイルを解析してみた」でした。

ネストされたJSONファイルを処理したくなった場合に、 JSONスキーマなどの事前情報がない状況でも、IDMCの「インテリジェント構造検出」(Intelligent Structure Discovery)機能を使うと、スムーズに変換処理を実現することができることを分かっていただけたかと思います。

CDIは30日間の無料体験ができる ので、この機会に試してみてはいかがでしょうか。

仲間募集

NTTデータ ソリューション事業本部 では、以下の職種を募集しています。

1. クラウド技術を活用したデータ分析プラットフォームの開発・構築(ITアーキテクト/クラウドエンジニア)

クラウド/プラットフォーム技術の知見に基づき、DWH、BI、ETL領域におけるソリューション開発を推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/cloud_engineer

2. データサイエンス領域(データサイエンティスト/データアナリスト)

データ活用/情報処理/AI/BI/統計学などの情報科学を活用し、よりデータサイエンスの観点から、データ分析プロジェクトのリーダーとしてお客様のDX/デジタルサクセスを推進します。
https://enterprise-aiiot.nttdata.com/recruitment/career_sp/datascientist

3.お客様のAI活用の成功を推進するAIサクセスマネージャー

DataRobotをはじめとしたAIソリューションやサービスを使って、
お客様のAIプロジェクトを成功させ、ビジネス価値を創出するための活動を実施し、
お客様内でのAI活用を拡大、NTTデータが提供するAIソリューションの利用継続を推進していただく人材を募集しています。
https://nttdata-career.jposting.net/u/job.phtml?job_code=804

4.DX/デジタルサクセスを推進するデータサイエンティスト《管理職/管理職候補》 データ分析プロジェクトのリーダとして、正確な課題の把握、適切な評価指標の設定、分析計画策定や適切な分析手法や技術の評価・選定といったデータ活用の具現化、高度化を行い分析結果の見える化・お客様の納得感醸成を行うことで、ビジネス成果・価値を出すアクションへとつなげることができるデータサイエンティスト人材を募集しています。

https://nttdata-career.jposting.net/u/job.phtml?job_code=898

ソリューション紹介

Trusted Data Foundationについて

~データ資産を分析活用するための環境をオールインワンで提供するソリューション~
https://www.nttdata.com/jp/ja/lineup/tdf/
最新のクラウド技術を採用して弊社が独自に設計したリファレンスアーキテクチャ(Datalake+DWH+AI/BI)を顧客要件に合わせてカスタマイズして提供します。
可視化、機械学習、DeepLearningなどデータ資産を分析活用するための環境がオールインワンで用意されており、これまでとは別次元の量と質のデータを用いてアジリティ高くDX推進を実現できます。

TDFⓇ-AM(Trusted Data Foundation - Analytics Managed Service)について

~データ活用基盤の段階的な拡張支援(Quick Start) と保守運用のマネジメント(Analytics Managed)をご提供することでお客様のDXを成功に導く、データ活用プラットフォームサービス~
https://www.nttdata.com/jp/ja/lineup/tdf_am/
TDFⓇ-AMは、データ活用をQuickに始めることができ、データ活用の成熟度に応じて段階的に環境を拡張します。プラットフォームの保守運用はNTTデータが一括で実施し、お客様は成果創出に専念することが可能です。また、日々最新のテクノロジーをキャッチアップし、常に活用しやすい環境を提供します。なお、ご要望に応じて上流のコンサルティングフェーズからAI/BIなどのデータ活用支援に至るまで、End to Endで課題解決に向けて伴走することも可能です。

NTTデータとInformaticaについて

データ連携や処理方式を専門領域として10年以上取り組んできたプロ集団であるNTTデータは、データマネジメント領域でグローバルでの高い評価を得ているInformatica社とパートナーシップを結び、サービス強化を推進しています。
https://www.nttdata.com/jp/ja/lineup/informatica/

NTTデータとTableauについて

ビジュアル分析プラットフォームのTableauと2014年にパートナー契約を締結し、自社の経営ダッシュボード基盤への採用や独自のコンピテンシーセンターの設置などの取り組みを進めてきました。さらに2019年度にはSalesforceとワンストップでのサービスを提供開始するなど、積極的にビジネスを展開しています。

これまでPartner of the Year, Japanを4年連続で受賞しており、2021年にはアジア太平洋地域で最もビジネスに貢献したパートナーとして表彰されました。
また、2020年度からは、Tableauを活用したデータ活用促進のコンサルティングや導入サービスの他、AI活用やデータマネジメント整備など、お客さまの企業全体のデータ活用民主化を成功させるためのノウハウ・方法論を体系化した「デジタルサクセス」プログラムを提供開始しています。
https://www.nttdata.com/jp/ja/lineup/tableau/

NTTデータとAlteryxについて
Alteryxは、業務ユーザーからIT部門まで誰でも使えるセルフサービス分析プラットフォームです。

Alteryx導入の豊富な実績を持つNTTデータは、最高位にあたるAlteryx Premiumパートナーとしてお客さまをご支援します。

導入時のプロフェッショナル支援など独自メニューを整備し、特定の業種によらない多くのお客さまに、Alteryxを活用したサービスの強化・拡充を提供します。

https://www.nttdata.com/jp/ja/lineup/alteryx/

NTTデータとDataRobotについて
DataRobotは、包括的なAIライフサイクルプラットフォームです。

NTTデータはDataRobot社と戦略的資本業務提携を行い、経験豊富なデータサイエンティストがAI・データ活用を起点にお客様のビジネスにおける価値創出をご支援します。

https://www.nttdata.com/jp/ja/lineup/datarobot/

NTTデータとDatabricksについて
NTTデータでは、Databricks Inc.とソリューションパートナー契約を締結し、クラウド・データプラットフォーム「Databricks」の導入・構築、および活用支援を開始しています。

NTTデータではこれまでも、独自ノウハウに基づき、ビッグデータ・AIなど領域に係る市場競争力のあるさまざまなソリューションパートナーとともにエコシステムを形成し、お客さまのビジネス変革を導いてきました。
Databricksは、これら先端テクノロジーとのエコシステムの形成に強みがあり、NTTデータはこれらを組み合わせることでお客さまに最適なインテグレーションをご提供いたします。

https://www.nttdata.com/jp/ja/lineup/databricks/

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?