Talend Big Data で DynamoDB のデータを操作する
English: Talend logo Français : Talend logo (Photo credit: Wikipedia) |
Talend Open Studio for Big Data とは?
Talend Big Data というソフトウェアは、近年話題になっているビッグデータを処理するためのソフトウェアです。ビッグデータとは主に NoSQL と呼ばれる新しいデータベースで、ElasticSearch、MongoDB、Cassandra、Amazon DynamoDB 等が有名です。Oracle や SQL Server、MySQL、PostgreSQL 等のリレーショナル・データベースとは異なり、大規模データを扱うことを指しています。ソーシャルネットワークの流行などでデータの増加量は膨大で、爆発的に増えていますので、そのような大規模データは既存のデータベース扱うにはパフォーマンスの観点からも非常に難しいです。
しかしビッグデータを扱うことに特化したデータベースを使うことによって、膨大なデータの中から必要なデータを瞬時に取り出すことが出来ますが、これまで慣れ親しんできた SQL が使えなかったりと、とても操作が面倒です。
そのような面倒な処理は、 Talend Open Studio for Big Data を使えばとても簡単にデータを取得して加工したりすることが出来ます。このような処理を行うツールは、一般的に ETL ツールと呼ばれています。よほど難しい処理をしようとしない限り、プログラムを書いたりする必要もありません。
Talend Open Studio for Big Data には無料版と有償版がありますが、この記事では無料版を使います。無料版でも特に制限なく利用できますので、ダウンロードしてみましょう。
今回作成する Talend のジョブ
今回は Talend Open Studio for Big Data を使って、DynamoDB からデータを取得し、そのデータをグループ化して集計する方法を説明します。今回作成する Talend のジョブは次のようになります。大半のビッグデータ対応データベース (NoSQL) では、データをグループ化する GROUP BY 等の処理を実行することが出来ません。このような処理を実行できないようにすることで、非常に良いパフォーマンスと耐障害性を備えたものとなっています。しかし Talend Big Data を使うことによって、容易に NoSQL データベースのデータを集計することが可能です。
Amazon DynamoDB にテーブルとデータを用意する
DynamoDB には、あらかじめ以下のような test テーブルを DynamoDB に作成してデータも投入しておきます。$ dql -r ap-northeast-1 ap-northeast-1> scan * from test ; -------------------------- | order_id | uuid | qty | -------------------------- | 100 | '2' | 8 | | 200 | '1' | 21 | | 300 | '5' | 3 | | 200 | '4' | 7 | | 100 | '200' | 3 | | 100 | '100' | 24 | | 100 | '3' | 2 | --------------------------
このデータを DynamoDB から取得し、order_id 毎に行をグループ化(集約)して数量(qty)の合計値を求めるジョブを作成します。
処理を実行するための部品を配置する
Talend Big Data には DynamoDB に接続してデータを取得してくれる部品(コンポーネント)があります。tDynamoDBInput という部品を配置します (tDynamoDBInput_1)。また DynamoDB のデータをグループ化(集約)するために、tAggregateRow という部品も配置します (tAggregateRow_1)。
そして最後に集計したデータを画面に出力するために tLogRow という部品を配置し、それぞれの部品を以下のようにつなぎます。
DynamoDB からデータを取得する設定
次に "Edit schema" というボタンを押して各テーブルの列と同じ情報を追加します。また qty の数値を足し算しますので "qty" の "Db Column" の "Type" を "Integer" にしましょう (下図)。
DynamoDB のデータをグループ化(集約)する
次に DynamoDB から取得したデータをグループ化するために、tAggregateRow という部品の設定を行います。今回は order_id 毎にグループ化しますので、下図のように "Group by" の部分に order_id を設定します。また order_id 毎にグループ化したら、数量(qty)の合計値を求めますので、"Operations" 部分に qty 列を選択して "Function" 部分には合計値を求める関数である "sum" を選択します (下図)。
このように設定することで、order_id 毎にデータをグループ化し、かつ数量(qty)の値の合計値を自動的に算出してくれます。
また上図の "Edit schema" ボタンを押して、下の図のように列定義を変更します。グループ化することによって列定義が異なってきますので、下図の左側は DynamoDB からの入力値、そして下図の右側がグループ化後の出力内容となっています。
下図の右側の定義は、最終的に order_id 毎にグループ化された数量(qty)の合計値を出力するために、下図のような定義としています。