概要

このページでは「ETL(イー・ティー・エル)」というデータエンジニア用語について解説していきます。

まずは用語の定義についてですが、「ETL」は「Extract / Transform / Load」という3語の頭文字を取った略語です。これら3語は、データ分析におけるデータ処理プロセスを表しており、日本語に翻訳すると以下のような意味になります。

  • Extract = 抽出
  • Transform = 変換
  • Load = 格納

データ処理を行うために任意の場所からデータを「抽出」し、プログラムなどにより「変換」を行った後、任意の場所(DWHなど)に「格納」するというデータ処理プロセスの一連の流れを示しています。

データ分析における立ち位置

前述の通り、「ETL」がデータ処理プロセスの一連の流れを示していることはわかりましたが、ここではデータ分析におけるETLの立ち位置について、より詳細に解説していきます。

一般的なデータ基盤を整備する際に利用されるデータ層(青緑色)と、それらを連携・接続するための技術(オレンジ色)を下の図に表しました。

図の中央にあるデータレイク・DWH(データウェアハウス)・データマートの3層構造を作ることは一般的になってきました。今回3層構造の詳細については省略しますが、それらの元となるデータが「データソース」です。
データソースは様々な形態で企業の中に存在しており、例えば汎用DB(RDBMS)に格納されている場合もあれば、SalesforceなどのSaaS型サービスに格納されている事もあります。
これらのデータソースを分析に利用したい場合(DWHなどに格納する際)にETLが必要となってきます。

また、図中にETLが2箇所出てきていますが、それぞれの処理内容には大きな違いはなく、出力先の場所や形式が異なるだけです。
一方で「DWH→データマート」の箇所については「ELT(イー・エル・ティー)」という新しい用語が出てきています。これはETLの「Transform / Load」の順序を入れ替えたデータ処理のことです。
データ処理には、DWHにデータロードする前に変換処理を行う「ETL」と、DWHにデータロードした後に変換処理を行う「ELT」の2つがあり、全社はプログラム言語を用いて変換処理を行うのに対し、後者はDWH上でSQLを用いて処理を行うといった違いがあります。

ETLの実装内容

データ分析におけるETLの立ち位置を説明してきましたが、ここからは具体的なETLの処理内容について解説していきます。
ETLの実装は大きく分けて以下3ステップに分類されます。

  1. データ抽出処理:API連携やDB接続などを用いて、ETL処理サーバにデータを持ってくる
  2. データ変換処理:持ってきたデータを、処理可能な形式に変換し、変換・加工などを行う
  3. データ出力処理:変換処理したデータを、目的の形式に変換後、目的地に転送する

1と3のステップでは、データソースの配置場所や形式に応じて都度プログラムを書く必要があるため、最も実装工数がかかります。例えばGoogle広告からデータを取得する際は、Google広告のAPIドキュメントを参照して、ライブラリやSDKを使ってプログラムを書きますが、MySQLからデータを取得する際には全然別のドキュメントやライブラリを利用するため、0から実装しなおす必要があるのです。
しかも一般的にデータ分析におけるデータソースは、データ分析基盤の進化に応じて増えていくため、将来的にこの部分の実装工数はかなりの量になることが予想されます。

2のステップでは、ETL処理サーバに持ってきたデータに対して以下のような処理を実装していきます。

DecodeとParseでは、ローカルに持ってきたデータを処理可能な形に変換します。データソースによってデータの形式は様々であることが想定されるため、圧縮ファイルを解凍し、行列形式のデータに解析・変換する必要があるのです。
Transformはデータに対して任意の変換を行っていきます。不要なデータを排除したり、入力形式がバラバラなフィールドを正規化したり、処理内容は様々です。なお、そのままデータレイクにデータを置くだけの場合、このステップは省略されることもあります。
最後のFormatとEncodeでは、転送先に応じたファイル形式・圧縮形式に変換を行います。

これらは通常のWebアプリケーションなどを実装する感覚でプログラムを書くと問題が起きる場合が多々あります。通常データ分析用のデータはボリュームが非常に多く、処理時間が長すぎる(日次のバッチなのに処理時間が24時間を超えてしまうなど)などの問題が発生するためです。なのでデータ量が増えた場合を考慮して並列分散処理を行ったり、ETL用のフレームワークやツールなどを検討する必要が出てきます。

ETLの実装方法

では、最後にETLを実装する方法をご紹介します。大きく分けると以下の3分類になることが多いです。

  1. フルスクラッチ開発
  2. ETL用のフレームワークを利用してスクラッチ開発
  3. ETL用のSaaS型サービスを利用

フルスクラッチ開発は、文字通り0ベースでプログラムで実装を行う方法です。フレームワークなどは利用せず、必要に応じてライブラリやSDKなどを利用しながら実装を行います。少量データや、単発のデータ連携などではこの方法を用いることがありますが、データ量が増えると問題が出る・エラー処理などの運用面が考慮不足などの潜在的な問題をはらんでいるため、長期間利用するバッチなどにはおすすめしません。

一方、ETL用のフレームワークを利用してスクラッチで開発する方法もあります。ETL用フレームワークとしては、OSSで利用できるSparkやEmbulkなどが有名です。
Sparkはできるだけインメモリで処理を行うため処理速度が高く、並列分散処理も実装できる点がメリットです。ただしほぼ全ての実装を、自らの手でプログラムを書く必要があるため、難易度と工数はかなり高くなります。
Embulkはプログラムを書かずにYAML形式の設定ファイルを記述するだけでETLが実装できるOSSで、手軽に始められる点・実装難易度と工数が比較的低い点がメリットです。ただし変換処理は簡単に実装できますが、YAML形式で全てを記述する必要があるため難易度はまだ高く、またEmbulkを動かすためのJava実行環境を整備する必要があり、工数もそれなりに掛かります。

これらの課題をほぼ全て解決できるのが「SaaS型サービスを利用」する方法です。国内では「ETL & ワークフロー用サービス trocco(トロッコ)」というSaaS型サービスがあり、Webブラウザから100種以上のデータソースに連携し、変換処理を実装することが出来ます。しかも国産ETLフレームワークであるEmbulkがベースになっており、パワフルな転送処理が実現可能です。
また、実装が楽になるだけでなく、実行環境も提供してくれるので、難易度の高い分散処理などを考える必要はありません。エラー処理などもtrocco側で設定出来るので、例えば「処理が長引いてしまったらSlackに通知を行う」といった事が画面上を数クリックするだけで実現できます。

trocco®を試してみる

troccoは14日間の無料トライアルが可能です。是非パワフルな転送機能をお試し下さい。

無料トライアル

まとめ

この記事ではETLの意味や実装方法について解説してきました。データ分析基盤の成長とともにETLパイプラインの数は増えていくため、実装はかなりの工数掛かることが想定されます。
本来行いたい「データ分析」に注力するためにも、ETL実装工数を削減することは必要不可欠で、SaaS型サービスやOSSフレームワークの利用を積極的に検討することをオススメいたします。

ETLの課題解決策:「trocco(トロッコ)」

ETLで困ったときは、まずはtroccoを検討してみてください。

以下のような解決事例もあります。

EmbulkでETLを行っていた所をtroccoに置き換えて業務効率を50%削減した事例

詳しい機能や連携サービスは公式サイトでご確認ください。今なら無料トライアルも実施しています。

trocco公式サイト