AWS Glue DataBrewでよくある悩みを解決!初心者必見のテクニック

記事タイトルとURLをコピーする

こんにちは!アプリケーションサービス部の濱岡です!

アイスが美味しい季節ですね! 最近はビスケットサンドにハマってます!

今回は、私がAWS Glue DataBrewを使った際にちょっと詰まったところや悩んだところをまとめてみました。

AWSGlue DataBrewについて知りたいという方はこちらの記事をご覧ください。

blog.serverworks.co.jp

あるはずのデータが出てこない

プロジェクトでETL実装をしている際に例えばフィルターしたらこういう値が残るはずだと思っていたのに画面上にはでてこなかったということはありませんか? ETL処理を作っている時にあるはずのデータがない?という疑問を思った人もいるはずです。

こういう場合は、サンプルデータのどこをサンプルデータとして使うかを変えてみてください。

プロジェクトではデータソースのデータをすべて利用しているわけではなく、特定の行をサンプルデータとして読み込み、そのサンプルデータに対してETL処理を適用します。 デフォルトだと、前から500行が設定されています。 この設定になっていると、自分があると思っていたデータが、前から500行になければ画面上には出てこないわけです。

この設定は変更可能です。 プロジェクト上部にあるサンプルの隣の青文字部分を押下します。

タイプは最初のn行、最後のn行、ランダムな行の3つから選べ、サンプルする行の数は、500、1000、2500、カスタムサイズの中から選べます。 カスタムサイズでは最大5000行まで入力が可能です。

プロジェクトを開いていない状態でも[編集]を押下し、サンプリングから変更が可能です。

複数のフィルターをかけたい

例えばとあるカラムに0-499までの値があるとして、そのカラムの0-50と60-100のデータだけがほしいとします。

普通考えれば、フィルターで0-50と400-450のフィルター2つ作ればいいのではないかとなりますが、AWS Glue DataBrewだとそれができません。 1つ目のフィルターをかけた時点で0-50の値しかでてこなくなるんです。。。 フィルターの設定で複数設定できないのは不便ですよね。。。

色々やり方はあるかなと思うのですが、今回は2つ紹介します。

フィルターする値を大きくとってその間を除外する

1つ目の方法は、0-100のフィルターをかけて51-59までを除外するという方法です。 今回はIdというカラムをフィルターしてみます。

[フィルター]の[条件別]の[は次の間にある:]を選択します。

ソース列はIdを選択し、[次以上:]に0、[次よりも小さい:]に100を入力して[適用]を押下します。

次に51-59を除外します。

[フィルター]の[条件別]の[次ではない:]を選択します。 ソース列でIdを選択し、51-59を1つ1つ選択し、[適用]を押下するとフィルターは完了です。 ここからここまでの範囲を除外するというのがないので1つ1つ入力しないといけないのが大変ですが、小さな値であればこれで十分です。

条件IFを使う

先ほどのやり方だと除外する範囲が広ければ広いほど実装が難しくなってきます。

条件IFの中のOR条件が使えれば簡単にできそうなので、それを使ってやってみます。

[条件]の[IF]を選択します。

一致条件を[いずれかの条件に一致(OR)]を選択してフィルターする範囲を入力します。

[次として結果の値にフラグをつける:]に[1または0]、送信先列に[flag]と入力して[適用]を押下します。 ここは、フィルター範囲なのか範囲ではないのか判断できる他の値を入れてもらっても問題ないです。

flagのカラムにフィルター範囲のものは1、範囲外のものは0が入っているので、1だけ残るようにフィルターをします。

[フィルター]の[条件別]の[次と等しい:]を選択します。

ソース列はflagを選択し、フィルター条件のところは1を選択し、[適用]を押下します。

最後にflagを削除します。

カラム名の横にある[•••]から[削除]を押下します。

[適用]を押下します。

数値へ変換したときにNull値になる

プロジェクトの画面上で数値で扱いたいのに文字列できているとき、数値として扱いたいから数値へ変換することってよくありますよね。 ただ、その際、文字列だと値があったのに、数値に変換したときに、nullになってるということはありませんか?

そういうときは、もしかしたら空白が邪魔しているかもしれません。 私が出会ったのはマイナスと数値の間に空白があり数値にうまく変換できていないというものでした。 空白があることは絶対の原因とは言えませんが、数値に変換してnull値が出てきた時、空白があるかもとみてみるのがいいかもしれません。

この場合は、プロジェクトの[クリーン]を使って空白値を削除してから、数値へ変換すればうまくいきます。

まとめ

AWS Glue DataBrewでちょっと詰まったところや悩んだところをまとめてみました。 ETL処理をやってみると少し手の届かないところが出てくることはありますが、少し工夫するとできることもあるので、参考にしてみてください。

みなさまのお役に立てれば幸いです!

以上、濱岡でした!

はまおか(執筆記事の一覧)

アプリケーションサービス部

プログラムを書くことが好きです