Pentaho Data Integration から MariaDB ColumnStore へバルクデータロード

spacer

MariaDB の BI(Business Intelligence)/データ分析/DWH(Data Warehouse)用列指向データベース,MariaDB ColumnStore は現時点では Linux しかサポートしていません。

しかしながら多くの企業において,Linux デスクトップが利用されていることはほとんどなく,Windows クライアントから ColumnStore サーバに SSH ログインし,cpimport によるデータインポートには煩雑さが伴います。

ColumnStore 1.2 では新たに Windows 版 PDI(Pentaho Data Integration)用 MariaDB ColumnStore bulk loader plugin が追加され,Windows 上で PDI を利用する場合,GUI で簡単にデータインポート,ETL等の作業を行うことが可能となりました。
今回はその利用法に関して解説致します。

実行環境

クライアント
ColumnStore サーバ

PDI CE のインストール

PDI CE は SourceForge 上で公開されており,以下からダウンロード可能です。

https://sourceforge.net/projects/pentaho/files/Pentaho%208.2/client-tools/

ダウンロード後,適当なフォルダに展開します。今回は C:\pdice8.2 に展開します。
なお,Pentaho Enterprise Edition でも MariaDB ColumnStore bulk loader plugin は利用可能です。

MariaDB ColumnStore PDI プラグインのインストール

mariadb-columnstore-kettle-bulk-exporter-plugin-1.2.3-1-x64-win.zip をダウンロード,PDI CE 8.2 plugin フォルダ(今回はC:\pdice8.2\data-integration\plugins)に展開します。

MariaDB Connector/J のインストール

執筆時点での最新版,mariadb-java-client-2.4.1.jar をダウンロード,PDI CE 8.2 lib フォルダ(C:\pdice8.2\data-integration\lib)にコピーします。

Columnstore.xml のコピー

ColumnStoreサーバの /usr/local/mariadb/columnstore/etc/Columnstore.xml をSFTP等でクライアントWindows PCにコピーします。Columnstore.xml 内でIPアドレスが 127.0.0.1 になっている場合,Windows PCからアクセス可能となるよう,IPアドレスを一括置換します。

修正前:

<IPAddr>127.0.0.1</IPAddr>

修正後(例):

<IPAddr>192.168.2.12</IPAddr>

CSV File Input ステップの設定

今回は GitHub で公開されている ColumnStore 用サンプルデータの opps(opportunities) を用います。
CSV データは mock_opp_data.csv になりますが,事前に ColumnStore サーバ上で create_opps_tab.sh を実行し,テーブルを作成しておきます。
PDI 上で File – New – Transformation で新規の Transformation を作成し,Canvas に CSV FIle Input を drag & drop します。

CSV ファイルの選択,File encoding の選択等を行います。
CSVファイルからインポートを行う場合,先頭行(Header row)に各フィールド名を含めることで,各フィールドのマッピングを半自動的に行うことができます。その場合は Header row present ? をチェックします。

MariaDB ColumnStore bulk loaderステップの設定

左ペイン(Designタブ)から MariaDB ColumnStore Bulk Loaderステップを Canvas に drag & dropし,CSV File Input ステップと接続します。

Target database, table 等を指定,下部の Settings タブで Columnstore.xml を選択,デーテベース接続設定を行います。

データベース接続設定

事前に以下のようにColumnStoreサーバ上で接続ユーザを作成しておきます。

GRANT ALL ON *.* to pentaho@’%’ IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;

接続設定ウインドウで以下の項目を設定します。

  • 接続タイプ: MariaDB(JDBC)
  • ホスト名/IPアドレス
  • インポート先データベース名
  • 待受Port番号(デフォルト: 3306)
  • ユーザ名
  • パスワード

CSV – ColumnStore テーブル間の Field マッピング

MariaDB ColumnStore Bulk Loaderステップの Filed mapping タブを選択すると,CSV データと ColumnStore テーブル間のfield(カラム)のマッピングの確認,修正を行うことができます。
CSVファイルからのインポートを行う場合,先頭行(Header row)に各フィールド名を含めることで,各フィールドのマッピングを半自動的に行うことができます。

ColumnStore へ bulk load

Canvas 左上にある Run ボタンをクリックすることで CSV ファイルからのバルクロードを開始することができます。ロード開始後,Canvas 下部に Execution Results ペインが表示されますので,Logging タブに以下のようなログが記録され,最後に Spoon – The transformation has finished!! と表示されていれば正常にインポートが完了したことが確認できます。

2019/04/05 12:20:02 - Spoon - Using legacy execution engine
2019/04/05 12:20:02 - Spoon - Transformation opened.
2019/04/05 12:20:02 - Spoon - Launching transformation [test-bulk-load-123]...
2019/04/05 12:20:02 - Spoon - Started the transformation execution.
2019/04/05 12:20:02 - test-bulk-load-123 - Dispatching started for transformation [test-bulk-load-123]
2019/04/05 12:20:02 - CSV file input.0 - Header row skipped in file 'C:\pdice8.2\mariadb-columnstore-samples\opps\mock_opp_data.csv'
2019/04/05 12:20:02 - CSV file input.0 - Finished processing (I=1001, O=0, R=0, W=1000, U=0, E=0)
2019/04/05 12:20:02 - MariaDB ColumnStore Bulk Loader.0 - mcsapi version: 1.2.3-3d1ab30
2019/04/05 12:20:02 - MariaDB ColumnStore Bulk Loader.0 - javamcsapi version: 1.2.3-3d1ab30
2019/04/05 12:20:03 - MariaDB ColumnStore Bulk Loader.0 - Finished processing (I=0, O=0, R=1000, W=1000, U=0, E=0)
2019/04/05 12:20:03 - Spoon - The transformation has finished!!

まとめ

今回は Windows 上で Pentaho Data Integration を利用し,リモート MariaDB ColumnStore サーバに CSV ファイルからバルクデータロードを行う手順について解説いたしました。
なお,2019年2月末開催の MariaDB Corporation ユーザ会議,OpenWorks 2019 にて Pentaho EE / Tableau 2019.1 と MariaDB ColumnStore との連携について講演しており,スライド(英語版)を以下のリンクより閲覧/ダウンロードいただけます。

Using Pentaho/Tableau with MariaDB ColumnStore @ OpenWorks 2019