[AWS]AWSGlueを使ってデータをクレンジングする


出会いは突然に…

ふらっとDynamoDBを眺めていると、信じられないアトリビュートでデータがputされているのを発見しました。
まぁ何かって言うと、アトリビュートに半角スペースが入っているだとぉ!?!?

{
  "id": "hoge",
  "record_time": "2018/10/26T00:00:00Z",
  "sensor value": "100"
}

sensor value みたいな感じで半角スペースが入っていました。

何が困るか

DynamoDBからJSONをS3に吐き出してAthenaでデータを解析しようとすると、当然半角スペースが存在しているので失敗します。
SQLで半角スペースがアトリビュートに入っているなんてことありえませんからね…

そんなときにAWSGlue

AWSGlueはETLのサービスです。
最近DynamoDBをデータソースに指定することができるようになりました。
AWSGlueではデータソースから取得したデータをJSONなどに変換してS3などに置くことができます。
なので半角スペースを _ などに変換してJSONを吐き出していきます。

Glueを使っていく

テーブルの作成

まずテーブルを作成する必要があります。
このテーブルはGlueのデータソースになるものです。
テーブルといっても実際のデータを持っているのではなく、対象となるデータソースのプロパティだったりとか、スキーマなどを持っているものになります。
クローラを回して作成していきましょう。

完了を押すと、クローラのリスト画面に戻りこのようなメッセージが出るので、「今すぐ実行しますか?」をクリックして、クローラを実行します。

対象クローラのステータスが「Stopping」になれば完了しています。

作成したテーブルの情報は、テーブルのリスト画面で確認することができます。

ジョブの追加 / 実行

ジョブを追加していきます。

成功するとS3にファイルが生成されています。
中身はこんな感じ

{
  "id":"hoge",
  "record_time":"2018/10/26T00:00:00Z",
  "sensor_value":"100"
}

ちゃんと sensor valuesensor_value に変換されていますね!

さいごに

今回はDynamoDBからデータを抽出して、変換・加工してS3にオブジェクトをputするようなジョブを書きました。
DynamoDBを利用していると、割とアトリビュートの命名規則などがなんでもOKみたいな世界があり、今回のように半角スペースが含まれているなんて自体が発生します。
もちろんデータ設計、テーブル設計の段階で弾ければいいのですが、そうも行かない場合があります。
せっかく溜まったデータを分析できないままではただのゴミデータになってしまうので、Glueのようなサービスを活用してデータをクレンジングしましょう。
ではまた!