SlideShare a Scribd company logo
1 of 9
ETLやデータ分析で扱うスクリプトにおける
設計面で気をつけているあれやこれや。
2018/3/14 Kichijojipm-mini #012
やっさん @yassan168
非常に特殊な環境での話です。
前提
制約
• データソースが遅延と欠損を含む種々のcsv
• 相性の悪いインフラ構成の為、RDB側で重たいSQLを流せない
→複数のCSVをスクリプトで時間をかけてETL処理を実施する
(kuroko2で制御して、最終的にはembulk使ってロードしている)
対象
• 複数のcsvを組み合わせたETL(Extract / Transform / Load)処理
• 分析する際にデータをいじるために作成するコード
:Cookpad製のジョブスケジューラ&ワークフローエンジン (https://github.com/cookpad/kuroko2)
:Treasure Data製のバルクデータローダ (https://github.com/embulk/embulk)
気をつけている事
•コードを可能な限り書かない
•実装はシンプルに
•Perl力をあまり必要とさせない
コードを可能な限り書かない
コードがあればある程バグるし、メンテも大変。
書かないで済むなら書きたくない(=もっと別の事やりたい)
→ 同じ処理はまとめて、違う部分だけ書く
例:特定のCSVの抽出処理について、用途に応じて利用する列だけ違う
取得と加工する処理を共通化。
抽出する箇所だけ無名サブルーチンとして実装して、その無名サブルーチ
ンのリファレンスを変数に入れて、加工処理に渡す
シンプルであること
• 1つのモジュールに何でもかんでも詰め込んだUtilを作らない
• モノリシックにしない。分ける。
• ETLを1つでやるモジュールにしない。少なくともEとTとLは分ける。
役割を複数持たない。
→1つにすると集計の仕方だけ換えたい場合に集計処理が肥大化して複雑になる
(日次、月次、四半期etc)
→個別に同じ抽出処理をやってしまうと、辻褄が合わなくなるので、同じ情報ソース
なら抽出処理から出すデータは同じもの使い、見せ方だけを替えるモジュールを複
数作る
Perl力をあまり必要とさせない
コードゴルフは必要無いので多少冗長でも簡易的な記述に寄せる。
黒魔術ダメ!絶対!
• ただでさえエンジニア探すのが難しいのに、さらにPerl書ける人となる
ともっと大変
• 凝った記述にしない事で、他の言語が出来る人でもとっかかりやすい
結局の所。。。
上手く回っているスクリプトは、以下を無意識下でやってた。
そして、これを言語化した しんぺいさん パないッス。
https://speakerdeck.com/shinpeim/jin-aetedryyuan-ze-nixiang-kihe-u
以上です。

More Related Content

More from YASUKAZU NAGATOMI

Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.YASUKAZU NAGATOMI
 
データ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみたデータ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみたYASUKAZU NAGATOMI
 
続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~
続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~
続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~YASUKAZU NAGATOMI
 
Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~
Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~
Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~YASUKAZU NAGATOMI
 
redashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレやredashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレやYASUKAZU NAGATOMI
 
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話YASUKAZU NAGATOMI
 
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?YASUKAZU NAGATOMI
 
PM Beginners #06 : MTGの理想と現実
PM Beginners #06 : MTGの理想と現実PM Beginners #06 : MTGの理想と現実
PM Beginners #06 : MTGの理想と現実YASUKAZU NAGATOMI
 
プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!YASUKAZU NAGATOMI
 
PM Beginners #3:メンバの考えていること、共有できてます?
PM Beginners #3:メンバの考えていること、共有できてます?PM Beginners #3:メンバの考えていること、共有できてます?
PM Beginners #3:メンバの考えていること、共有できてます?YASUKAZU NAGATOMI
 
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]YASUKAZU NAGATOMI
 

More from YASUKAZU NAGATOMI (11)

Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
 
データ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみたデータ分析基盤として Rancher・k8s で始まるのか調査してみた
データ分析基盤として Rancher・k8s で始まるのか調査してみた
 
続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~
続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~
続Rancherで始めるRedmine生活~Redmineのプライベートカタログを作ってみた~
 
Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~
Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~
Rancherで始めるRedmine生活 ~ Redmineのプライベートカタログを作ってみた~
 
redashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレやredashのプラベートカタログ作成してつまづいたアレやコレや
redashのプラベートカタログ作成してつまづいたアレやコレや
 
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
オンプレ&HTTP Proxyな環境でRancherOS入れてみた話
 
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
 
PM Beginners #06 : MTGの理想と現実
PM Beginners #06 : MTGの理想と現実PM Beginners #06 : MTGの理想と現実
PM Beginners #06 : MTGの理想と現実
 
プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!プロジェクトマネジメントと開発を両立したい!
プロジェクトマネジメントと開発を両立したい!
 
PM Beginners #3:メンバの考えていること、共有できてます?
PM Beginners #3:メンバの考えていること、共有できてます?PM Beginners #3:メンバの考えていること、共有できてます?
PM Beginners #3:メンバの考えていること、共有できてます?
 
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
技術的負債だらけのチームで技術マネージメントしてみた Kichijoji.pm7[talk2]
 

ETLやデータ分析で扱うスクリプトにおける 設計面で気をつけているあれやこれや。