ETL(抽出、変換、格納)は、システム間の効率的なデータ転送が実現するため、データウェアハウスの重要な要素であり、現在のシナリオでは、Python は ETL のための最も一般的な言語と考えられています。Python ベースの ETL ツールは数多く販売されており、データウェアハウスのワークフローを確定するのに使うことができます。ただ、自分のニーズに合った ETL ツールを選ぶのは大変な作業であり、JavaScript、Java、Apache Hadoop、Goで書かれたものなど、さまざまな ETL ソリューションから選ぶことができますが、その中でも Python は ETL の領域で最も広く使われている言語です。Python は高水準かつ汎用的なプログラミング言語であり、世界的な大企業の多くで活用されているのです。
2024年には、フレームワーク、ライブラリ、ソフトウェアを含め、ETL に利用できる Python ツールは100を超えると思われます。本記事で Python の ETL ツールのうち、上位6つを以下に紹介しますが、それを使うには Python の基礎知識が必要であることを頭に入れておいてください。ちなみに、Python の基本を学ぶのに平均8週間かかります。
ただ、Python を学ぶ時間がない場合や、よりわかりやすい代替手段を探している場合は、Integrate.io がいい選択肢になるかもしれません。Integrate.io はクラウドベースのノーコードソリューションで、フォーチュン500社の企業が BI(ビジネスインテリジェンス)と分析のためにデータを抽出、変換、格納するために使用しています。コーディングを必要としないため、Python を習得していなくても利用できます。Integrate.io の詳細については、後ほどご紹介します。
2024年に ETL パイプラインに Python を使う理由
Python は、2024年に ETL パイプラインに広く使用されている汎用性の高いプログラミング言語です。組織が Python を使った ETL パイプラインの構築を選択する理由はたくさんありますが、主な理由の1つに、Python が複雑なスキーマや大量のビッグデータを扱うのに適しており、データ駆動型の組織にとってより良い選択肢となる点が挙げられます。確かに、SQLAlchemy のようなものを使って、Python で ETL を実行することはできますが、このプロセスは時間がかかり、圧倒されます。さらに、Python には大規模で活発なデベロッパー向けコミュニティがあり、彼らは常に ETL ツールやライブラリの作成や更新をしています。
ETL ツールを使ってETL パイプラインを設定することも可能ですが、Python にはより柔軟でカスタマイズ性の高いオプションがあり、Python を使えば、特定のニーズに合わせた ETL ツールを構築することができます。また、Pythonでは最小限のコーディングで簡単なETLタスクを実行できるため、小規模なプロジェクトに有効です。
Python が ETL にとって都合がいい場面は、以下の3つのみです:
- Python を使った経験があり、ETL ツールをゼロから作りたい。
- シンプルな ETL の要件があり、軽量なソリューションを求めている。
- Python を使った ETL ソリューションのカスタムコーディングでしか対応できない独自のニーズがある。
2024年には多くの Python ベースの ETL ツールが登場しますが、Python ETL ツール6選を以下で見てみましょう。この6ツールは、【使いやすさ】、【人気】、【多様性】に基づいて選択されています。ただし、このようなツールを使うには、Python の基本的な知識が必要であることは頭に入れておく必要があります。なので Python を知らない、あるいはパイプラインを一からコーディングしたくないという方は、Integrate.io の機能の利用を検討されるといいでしょう。
おすすめ記事: 2024年版・ETLツール14選
1.Pythonベースのワークフローを実現する Apache Airflow
Apache Airflow は、オープンソースの Python ベースのワークフロー自動化ツールで、強力なデータパイプラインの設定や維持に使用されます。ETL ツールではありませんが、DAG(有向非巡回グラフ)を用いて ETL パイプラインを管理、構造化、整理することができます。また、DAGは、タスク間の関係や依存関係の形成に使われ、1つのブランチを複数回実行したり、必要に応じてシーケンスからブランチを飛び越したりすることが可能です。
例えば、タスク A をタスク B の後に実行させ、タスク C を2分ごとに実行させることができます。あるいは、タスク A とタスク B を2分おきに実行させ、タスク C をタスク B の後に実行させるのもいいでしょう。
Apache Airflow の典型的なアーキテクチャは以下の通りです:
- Metadata database(メタデータデータベース) > scheduler (スケジューラ)> executor(エグゼキュータ) > workers(ワーカー)
メタデータデータベースはワークフロー/タスク(DAG)を格納し、スケジューラ(通常サービスとして実行)は DAG の確定を使ってタスクを選択し、エクゼキュータはタスクを実行するワーカーを決定し、ワーカーとはワークフロー/タスクの論理を実行するプロセスのことです。
Apache Airflowは、管理や整理に役立つので、ツールボックスに追加する価値があります。また、Google Cloud や AWS のフック や オペレータを備えており、クラウドウェアハウス環境にも有効です。ただし、Apache Airflow はライブラリではないため、デプロイする必要があり、小規模な ETL ジョブには実用的でない可能性があることを頭に入れておかないといけません。
Apache Airflow は、長い ETL ジョブを実行する場合や、ETL に複数のステップがある場合に最も便利です。
Apache Airflow に関する事実:
- 2020年に InfoWorld の 最優秀オープンソースソフトウェア賞 を受賞。
- Airflow のユーザーの大半は、実行管理のシンプル化のために Celery を活用している。
- Airflow の WebUI から自動化された DAG ワークフローをスケジュールできる。
- Airflow は CLI(コマンドラインインターフェース)を採用しており、スケジューラのワークフローから外れた実行タスクの切り分けに非常に便利である。
- Prefect は、Airflow に代わる先進的な機能を備えており、DAG をそのまま移行できる。
ご覧のように、Apache Airflow の実行は複雑な場合があります。Integrate.io は、Python に代わるノーコードで、複雑なデータパイプラインを自動化することができます。
2.複雑な Python パイプラインに対応した Luigi
Luigi はオープンソースの Python ベースのツールで、複雑なパイプラインの構築に使われます。Spotify が重いワークロードを自動化するために開発されたもので、Stripe や Red Hat といったデータ駆動型の企業で使用されています。
Luigiを使うメリットは主に3つあります:
- 可視化に優れた依存関係管理
- チェックポイントを利用した障害回復機能
- CLI の統合
Luigi と Airflow の主な違いは、タスクと依存関係を実行する方法です。Luigi では、「タスク」と「ターゲット」があり、タスクはターゲットを消費します。このターゲットベースのアプローチは、単純な Python ベースの ETL には最適ですが、Luigi は非常に複雑なタスクに四苦八苦することがあります。
Luigi は、ログなどの単純な ETL プロセスを最小限の設定で素早く処理できるため、自動化に最も適していますが、その厳格なパイプラインのような構造で、複雑なタスクを処理する能力が制限されます。さらに、単純な ETL プロセスであっても、一定レベルの Python コーディングスキルが必要です。
Luigiに関する事実:
- Luigi がタスクを実行すると、そのプロセスとの対話はできない。
- Airflowと違い、Luigiは、ワーカーへのタスクの自動スケジュール、アラート、監視、同期を行わない。
- ユーザーに優しいインターフェースがないことが Luigi のペインポイントである。
- Towards Data Scienceによると、Luigiは「ターゲットベースのアプローチ」を採用しているが、その UI は「最小限」であり、実行中のプロセスに対するユーザーインタラクションはない。
つまり、Luigi は Python ベースの強力なツールで、単純な ETL タスクを自動化できますが、Apache Airflow や Integrate.io といった他の ETL ツールのような柔軟性や拡張性には欠けるのです。
おすすめ記事: Building an ETL Pipeline in Python(PythonによるETLパイプラインの構築)
3.データ構造と解析ツールのための pandas
Python のトップ ETL ツールをしばらく使っていると、pandas について知っているかもしれません。pandas は、Python のデータ構造と分析ツールを提供する、広く使われているオープンソースのライブラリです。特に ETL タスクに有用で、Rスタイルのデータフレームを追加することで、データのクレンジングや変換などのETLプロセスがしやすくなります。pandasを使えば、さまざまなソースからデータを格納してデータをクリーンにして変換し、Excel、CSV、SQLデータベースなどさまざまな形式にデータを書き込むシンプルなスクリプトを簡単に設定することができます。
ただし、pandasが大規模なデータ処理やインメモリ操作に最適な選択ではない可能性があることに注意しましょう。並列チャンクを使ってpandasを拡張することは可能ですが、Apache Airflowのような他のトップ Python ETLツールを使うほど簡単ではありません。
pandasが便利な時
pandasは、中小規模のデータセットを扱うETLタスクや、データのクレンジング、変換、操作に主眼を置く場合に最適です。特に、データの抽出、クリーニング、変換、ExcelやCSVファイル、SQLデータベースへの書き込みを行う場合に便利です。ただし、大規模なデータ処理やインメモリ処理には、より専門的な他のツールの使用が推奨されます。
Pandas に関する事実:
- NumFocus は pandasを後援している。
- 多くの Python ユーザが ETL のバッチ処理に pandas を選んでいる。
- Pandas は G2.comで5点中4.5という高い評価を得ており(これはAirflowよりも高評価である)、ユーザーは「パワフル」「非常に実用的」だが「学習曲線がある」と述べている。
4.Python の ETL ソリューションとしての petl
一般的に、petl は最もわかりやすいトップ Python ETL ツールの1つであり、テーブルの構築、様々なソースからのデータの抽出、様々なETLタスクの実行のプロセスを簡素化する、広く使われているオープンソースの Python ETL ツールです。pandas と機能的には似ていますが、同じレベルのデータ分析機能はありません。
petl は、複雑なデータセットを効率的に扱うことができ、それによってシステムメモリを活用し、確実なスケーラビリティを実現していることで知られていますが、市場にある他の ETL ツールほど高速ではありません。ただ、SQLAlchemyやその他のカスタムコードによる ETL 構築と比べると、使いやすいオプションであると考えられています。
petl が便利な時
petl は、高度な分析を必要としない基本的な ETL 機能が必要で、速度が重要な要素ではない場合に適しています。
petl に関する事実:
- 速度や大規模なデータセットの取り扱いに定評があるわけではない。
- petl は "Python ETL" の略である。
- 基本的でつまらないツールであると広く認知されているが、仕分け、結合、集計、行操作などの標準的な変換をサポートしていることが評価されている。
5.軽量 Python ETL フレームワークとしての Bonobo
Bonobo は軽量で使いやすい Python の ETL フレームワークで、データパイプラインの迅速な展開と並列実行を可能にします。また、CSV、JSON、XML、XLS、SQLなど幅広いデータソースをサポートし、原子UNIXの原則を遵守しています。Bonoboを使用する主な利点の1つに、新しい API の学習が最小限で済むため、Python の基礎知識があれば利用できる点があり、さらに、グラフの構築、ライブラリの作成、簡単なETLバッチ処理の自動化などに利用することができます。Bonobo はシンプルでありながら、オープンソースでスケーラブルであり、半複雑なデータスキーマを扱うことができます。
Bonobo が便利な時
Bonoboは、シンプルで軽量な ETL ジョブや、新しい API を習得する時間やリソースがない人に最適です。ただし、Python の基本的な理解が必要なので、ノーコードのソリューションをお探しの方は、Integrate.io の方がいいかもしれません。
Bonoboに関する事実:
- Docker コンテナ内でジョブを実行できる Docker エクステンションがある。
- 実行のための CLI がある。
- ETL ジョブのグラフを可視化するための Graphviz サポートが内蔵されている。
- SQLAlchemy エクステンションもある(現在アルファ版)。
- Bonobo を使って Python で初めて ETL を書くという体験は、ユーザーにとってシンプルでわかりやすいものだった。
6.ETL のための Python フレームワークとしての Bubbles
Bubbles は、ETL プロセスをシンプルにする多用途の Python フレームワークであり、他のトップクラスの Python ETLツールとは違って、パイプラインを記述するためにメタデータを利用し、様々なデータ統合、データクレンジング、データ監査などに利用することができます。
Bubbles は Python で書かれていますが、 Python だけに限定されているわけではなく、他の言語でも使用できます。
Bubbles の主な利点の1つに、技術的な不可知論であり、ユーザーは基盤技術やデータアクセスを気にすることなく、ETL プロセスのみに集中することができる点があります。
Bubbles が便利な時
Bubblesは、迅速な ETL セットアップが必要で、基礎技術に制限されることなくETL プロセスのみに自由に集中したい方に最適な選択肢です。
Bubbles に関する事実
- 特定のプログラミング言語の習得よりも、ETL に焦点を当てた抽象的なフレームワークである。
- Open Knowledge Labsによると、「Bubblesは、Python で書かれた ETL のためのフレームワークである、というか、そうなることを意図しているが、必ずしも Python のみから利用することを意図していない 」らしい。
その他のETLツール、ライブラリおよびフレームワーク
Python のトップ ETL ツールは、本記事で紹介しきれないほどたくさんありますが、異なるユースケースがあるよく使われている ETL オプションを含めることで、リストをシンプルに保つことを試みました。ただそれでも、言及すべき他のツールはたくさんあります。
このセクションでは、その他の ETL プラットフォームを言語別にリストアップします。
Python
- BeautifulSoup: PythonのトップETLツールで、Webページ(XML、HTML)からデータを取り出し、petlなどのETLツールと統合するもの。
- PyQuery: Webページからデータを抽出するが、jquery のような構文で抽出する。
- Blaze: データに問い合わせを行うインターフェースであり、Blaze、Dask、Datashape、DyND、Odo を利用したETLのフレームワークである「Blaze Ecosystem」の一部。
- Dask: タスクスケジューリングによる並列コンピューティングに使用される。また、連続的なデータストリームを処理し、"Blaze Ecosystem "の一部となっている。
- Datashape: NumPly に似たシンプルなデータ記述言語。正規変換のないその場限りの構造化データを記述する。
- DyND: 動的な多次元配列のための C++ライブラリである DyND の Python版。
- Odo: 複数のコンテナ間でデータを移動する。Odo には SQL データベースのネイティブな CSV 読み込み機能が利用されているため、Python で読み込むよりも高速である。
- Joblib: パイプラインに Python の関数を使うツールは増えているが、Joblib は NumPy の配列など特定のジョブに適した独自の特典がある。
- lxml: Python でHTML や XML を処理する。
- Retrying: 実行に再試行動作を追加できる。
- riko: Yahoo!Pipes の代替品で、ストリームデータに便利。本格的な ETL ソリューションではないが、純粋な Python で、データストリームの抽出がしやすくなる。
クラウドベース
- Integrate.io: 最高の可視化と迅速な統合を使って、さまざまなソースに自動パイプラインを設定したいと思っている人には Integrate.ioが必要。ポイント&クリック、200以上の統合機能、Salesforce 同士の統合など多数備わっており、コードは一切必要なくETL のための唯一のソリューションである。
- AWS Data Pipeline: Amazon のデータパイプラインソリューション。AWS インスタンスとレガシーサーバー間のパイプラインをセットアップする。
- AWS Glue: Amazon のフルマネージド ETL ソリューション。AWS Management Consoleで直接管理される。
- AWS Batch: AWSリソース上でのバッチ計算ジョブに使われる。大規模ジョブのエンジニアに適したスケーラビリティが備わっている。
- Google Dataflow: バッチジョブやストリームに対応した Google の ETL ソリューション。
- Azure Data Factory: Microsoft の ETL ソリューション。
その他
- Toil: この USCS プロジェクトは、Luigi とほとんど同じように ETL を処理する。(追加のチェックポイントのために Toil パイプラインをラップするためにLuigiを使用)。
- Pachyderm: Airflow のようなツールのもう一つの選択肢。Airflow と Pachyderm の簡単な違いについては、GitHub の記事を参照。 (プロによるアドバイス: PachydermのWebサイトに、オープンソース版有。)。
- Mara: Python の機能を利用したもう一つのETLフレームワーク。純粋な Python と Apache Airflow の中間に位置し、高速でシンプルなセットアップが可能。
- Pinball: 自動再試行、優先順位、オーバーランポリシー、水平スケーラビリティを備えたPinterest のワークフローマネージャ。
- Azkaban: LinkedIn によって作成。Hadoop バッチのための Java ベースのツールであるが、超複雑な Hadoop バッチを実行しようとしているのであれば、代わりにOozie を考えた方がいいかもしれない。
- Dray.it: リソース管理を支援する Docker ワークフローエンジン。
- Spark: バッチストリーミング ETL の全体を設定。
他の言語
以下では、ツールについてあまり深く掘り下げることはしませんが、ここではPython の領域以外の ETL プラットフォームのリストをご紹介します。
Java
GO
JavaScript (Node.js)
より良いETLソリューション
このリストの上位の Python ETLツールは、それほど複雑でない仕事には便利であることがわかりますが、成長企業では大抵、包括的な ETL のために複数のツールレイヤーを活用する、より迅速でスケーラブルなソリューションが必要です。
Integrate.io は、数分で強固なパイプラインを構築するノーコードのクラウドベースソリューションです。200以上の統合機能によってETLが簡単に実現され、データエンジニアリングの経験を必要とせず、無限の機能を備えています。Python ETL ツールの多くは、Salesforce からウェアハウスにデータを移動させますが、Integrate.io はそれを再び移動させるのです。さらに、タスク間の依存関係を確定するための超シンプルなワークフロー作成、簡単なデータ変換、信頼性の高い REST API によるデータセキュリティとコンプライアンスの強化、そしてすべてのユーザーに対する無料のカスタマーサポートがあります。これこそ皆さんに必要とされる ETL ソリューションですね。
Python ベースのツールは2024年で忘れてください。ゼロから始めることなく、データの抽出、変換、読み込みができるノーコード ETL ソリューションが必要なのです。Integrate.io は手間がかかりませんが、最も要求の厳しいワークロードにも対応できるよう頑丈に作られています。
Integrate.io はETLの未来です。コードもないですし、面倒なことは一切ありません。自らの言葉で実現するデータ変換なのです。
サポートチームとのデモをコチラからご予約いただき、Integrate.io がチームに合うのかぜひご確認ください。