Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
DMSCube_LT_初心者だった頃の自分に教えてあげたいこと_その2.pdf
Search
吉田彰宏
September 15, 2023
Technology
0
610
DMSCube_LT_初心者だった頃の自分に教えてあげたいこと_その2.pdf
2023.09.13 DMS Cube トーーク!のLT資料
https://dmscube.com/view/event/7118
吉田彰宏
September 15, 2023
Tweet
Share
More Decks by 吉田彰宏
See All by 吉田彰宏
DMSCube_DataSpiderの見逃しがちな便利機能(データチェック処理編)
ayoshida
1
270
DMSCube祭り2024_パネルディスカッション
ayoshida
0
190
DMSCube_LT_初心者だった頃の自分に教えてあげたいこと.pdf
ayoshida
0
190
DMSCube_LT_DataSpider_気を付けろ_クラウド版はオンプレ版とここが違う_.pdf
ayoshida
0
100
Other Decks in Technology
See All in Technology
Should Our Project Join the CNCF? (Japanese Recap)
whywaita
PRO
0
280
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1.2k
Tokyo_reInforce_2025_recap_iam_access_analyzer
hiashisan
0
130
使いたいMCPサーバーはWeb APIをラップして自分で作る #QiitaBash
bengo4com
0
1k
CursorによるPMO業務の代替 / Automating PMO Tasks with Cursor
motoyoshi_kakaku
2
640
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
210
Node-REDのFunctionノードでMCPサーバーの実装を試してみた / Node-RED × MCP 勉強会 vol.1
you
PRO
0
120
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
26k
より良いプロダクトの開発を目指して - 情報を中心としたプロダクト開発 #phpcon #phpcon2025
bengo4com
1
3.2k
ネットワーク保護はどう変わるのか?re:Inforce 2025最新アップデート解説
tokushun
0
140
ドメイン特化なCLIPモデルとデータセットの紹介
tattaka
1
300
開発生産性を組織全体の「生産性」へ! 部門間連携の壁を越える実践的ステップ
sudo5in5k
0
210
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
82
9.1k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
17
950
Building Applications with DynamoDB
mza
95
6.5k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
The World Runs on Bad Software
bkeepers
PRO
69
11k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Statistics for Hackers
jakevdp
799
220k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
107
19k
Transcript
2023年 9月13日 株式会社テトラ・コミュニケーションズ 初心者だった頃の自分に 教えてあげたいこと その2
名前: 吉田 彰宏 現職: 株式会社テトラ・コミュニケーションズ 生命保険会社に特化した業務&システムコンサルティング及び システムの開発・構築・運用・保守 DataSpider歴: 2009年~現在 オンプレ版を利用することが多く、クラウド版の利用は少々。
会社の資格試験報奨金の対象にDataSpider認定資格が含まれる ようになったため、Advanceの受験に再チャレンジを検討中。
DataSpiderを使い始めた時、 分からない点を聞ける人が周りにいましたか?
私の場合、 お客様、同僚、含めて有識者ゼロ。 前任者が作った設計書、スクリプトを 読み解くことに。。。。
最初の頃は、無駄に複雑なことをやったりもしていました。 しかし、少しずつ 「あれ、こんな風にできるんだ」という気づき 「こうすれば便利だな」という発見 をするようになりました。 そういった情報を前回に続き、紹介します。
教えてあげたいこと try~catchのエラーメッセージの拾い方
DataSpiderの便利機能(try~catch) ①の枠内のどこかでエラーが発生すると、 ②に処理が移り、その後、try~catchを抜ける。 ① ② 直感的で分かりやすい!
DataSpiderの便利機能(try~catch) どんな情報を取得できるかも 一目瞭然!! 変数名を覚える 必要がなくて楽チン
DataSpiderの便利機能(try~catch) ある時、エラーが発生!! こんな時のためのアプリケーションログ。 中身を確認すると・・・
DataSpiderの便利機能(try~catch) 赤枠の3つアイコンのどこかでエラーが発生していることに なります。でも・・・、どこで起きている? せっかくログに出力したのに、 エラーメッセージを見ても分からない。。。 2023/09/12 09:51:39 [INFO] [スクリプト001] 処理を開始します。
2023/09/12 09:51:39 [ERROR] [スクリプト001] エラーが発生しました。 [com.appresso.ds.vp.mapper.fastconverter.CannotConvertException|2列目でエラー発生: Columnロジック - String型からBigDecimal型に変換できませんでした] 2023/09/12 09:51:39 [INFO] [スクリプト001] 処理を終了します。
DataSpiderの便利機能(try~catch) 改善してみよう その1 問題 try~catchに複数のアイコンを配置するからエラーメッセージの 区別がつかなくなってしまっている。 対応 それならtry~catchを細かく配置すればいいのでは!?
try~catchを改善してみよう その1 見分けがつきやすいように アプリケーションログにも メッセージを追加。 これならOKなはず。。。
これなら、ひと目でマッピング処理でエラーが起きていると分かる!! 2023/09/12 09:48:52 [INFO] [スクリプト002] 処理を開始します。 2023/09/12 09:48:52 [ERROR] [スクリプト002]
マッピング処理でエラーが発生しました。 [com.appresso.ds.vp.mapper.fastconverter.CannotConvertException|2列目でエラー発生: Columnロジック - String型からBigDecimal型に変換できませんでした] try~catchを改善してみよう その1
待っていたのはtry~catch地獄。。。 画面中がtry~catchだらけ。 スクリプトも見にくくなり、やたら長くなってしまうことに。 try~catchを改善してみよう その1
DataSpiderの便利機能(try~catch) 改善してみよう その2 問題 try~catchの数はできるだけ増やさず、かつ、どのアイコンで 発生したエラーであるかをどうやって区別すればよいのか? 対応 エラーが発生すると、そのアイコンのerror_typeに情報が 設定されるはず。そこで判断できるのでは!?
try~catchを改善してみよう その2 処理フローは一番最初と同じ。 やはりtry~catchは少ない方がよいですね。
try~catchを改善してみよう その2 そのかわりに変数Mapperを頑張ってみた!!
try~catchを改善してみよう その2 csv_readのerror_typeが 空ではない場合、エラー メッセージを組み立て、 スクリプト変数へ設定。 その変数の値をログへ出力。 csv_readのerror_typeが空の場合、 次のアイコンのerror_typeのチェックに移る。
これなら、ひと目でマッピング処理でエラーが起きていると分かる!! 2023/09/12 10:07:32 [INFO] [スクリプト003] 処理を開始します。 2023/09/12 10:07:32 [ERROR] [スクリプト003]
エラーが発生しました。[マッピング処理 |com.appresso.ds.vp.mapper.fastconverter.CannotConvertException|2列目でエラー発生: Columnロジック - String型からBigDecimal型に変換できませんでした] 2023/09/12 10:07:32 [INFO] [スクリプト003] 処理を終了します。 try~catchを改善してみよう その2
待っていたのは変数Mapper地獄。。。 先ほどのたった3つのアイコンでもMapper画面がぐちゃぐちゃに。 これ以上のアイコン追加は勘弁してください。 ぐちゃぐちゃなため、マッピングミスも発生。 try~catchを改善してみよう その2
DataSpiderの便利機能(try~catch) 改善してみよう その3 問題 try~catchの数はできるだけ増やさず、かつ、シンプルなマッピングで どのアイコンで発生したエラーであるかをどうやって区別すれば よいのか? 対応 DataSpiderにはきっと便利な機能があるはず!! ヘルプを見ながら試行錯誤の旅へ。
try~catchを改善してみよう その3 ヘルプにはこう書かれているけど、 まずは使ってみよう! ずっと無視をしていたけど、 君たちは何者??
try~catchを改善してみよう その3 処理フローは一番最初と同じ。 変数Mapperもシンプルに。 結果はいかに。
この方法でも、ひと目でマッピング処理でエラーが起きていると分かる!! try~catchの数も抑え、マッピングも簡単。 求めていたものに、やっとたどり着きました。 2023/09/12 10:46:43 [INFO] [スクリプト004] 処理を開始します。 2023/09/12 10:46:43
[ERROR] [スクリプト004] エラーが発生しました。[mapping|変換/基本/マッピング |com.appresso.ds.vp.mapper.fastconverter.CannotConvertException|2列目でエラー発生: Columnロジック - String型からBigDecimal型に変換できませんでした] 2023/09/12 10:46:43 [INFO] [スクリプト004] 処理を終了します。 try~catchを改善してみよう その3 component_name component_type
素朴な疑問 先ほどのログにはcomponent_nameにmappingと表示されていたけど、 スクリプト内にMapperが複数ある場合は区別がつくの? try~catchを改善してみよう その3 2023/09/12 10:46:43 [INFO] [スクリプト004] 処理を開始します。
2023/09/12 10:46:43 [ERROR] [スクリプト004] エラーが発生しました。[mapping|変換/基本/マッピング |com.appresso.ds.vp.mapper.fastconverter.CannotConvertException|2列目でエラー発生: Columnロジック - String型からBigDecimal型に変換できませんでした] 2023/09/12 10:46:43 [INFO] [スクリプト004] 処理を終了します。
結果 問題なし!! try~catchを改善してみよう その3 2023/09/12 11:06:43 [INFO] [スクリプト004] 処理を開始します。 2023/09/12
11:06:43 [ERROR] [スクリプト004] エラーが発生しました。[CSVファイルmapping|変換/基本/マッピ ング|com.appresso.ds.vp.mapper.fastconverter.CannotConvertException|2列目でエラー発生: Columnロジック - String型からBigDecimal型に変換できませんでした] 2023/09/12 11:06:43 [INFO] [スクリプト004] 処理を終了します。 component_nameとはこの名前のこと。
注意点 今回紹介したスクリプト、および、実行結果は、 パラレルストリーミング処理(PSP)を利用しない ことが前提となります。 詳しくは、ヘルプのパラレルストリーミング処理 仕様制限 を参照してください。
今回は過去の私の試行錯誤の内容を紹介しましたが、 「こうするともっと良いよ」というものをご存じであれば、 お話をぜひ聞かせてください。
ご清聴ありがとうございました。 株式会社テトラ・コミュニケーションズ