「S3 にあるダブルクォーテーション引用符の CSV データを Glue のクローラで検出し、Athena でクエリ実行する」で分類子を使ってみた

2021.02.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

いわさです。

S3に格納したCSVからGlueクローラでデータカタログを作成する際に、ダブルクォーテーションの処理を行うために シリアル化ライブラリに OpenCSVSerDe を設定する必要があります。
弊社の以下のブログにて設定方法が紹介されています。

今回、Glueに関する技術調査をする中でカスタム分類子を試しました。
調査の副産物ではあるのですが、CSV読み込む時、これ便利なのでは気づいたので記事にしてみました。

分類子とは

クローラでメタデータ判定する際に使用されるのですが、データ形式が一致する場合にスキーマ定義やシリアライザなど諸々を良い感じに設定してくれます。
通常クローラに完全に任せた場合だとシリアライザやデータ型が期待どおりにならないケースがありますが、分類子を使うとある程度指定することが出来ます。

今回のケースですと、CSV用に設定した分類子を使うことでCSVとして分類され、OpenCSVSerDeシリアライザが設定されます。

やってみた

まずは、前述した記事を参考に price-list.csv をS3に配置します。
パーティションキーを設定したかったので、Hive形式で格納します。

メニューの分類子から追加を行います。

分類子タイプにCSVを指定し、列の区切り文字と引用符、列見出しと処理オプションを指定します。
今回のサンプルデータは見出しがあるので、「見出しあり」を指定しました。

分類子が作成出来たら、次はクローラを作成しましょう。

クローラ作成時にカスタム分類子を指定するだけで良いです。
他は通常どおりで。

オンデマンドで作成したので手動実行が必要です。
早速、クローラを実行してみましょう。

今回のサンプルだとクローラの処理完了まで、1~2分でしょうか。
完了したら、メニューのデータテーブルからテーブル詳細を確認してみましょう。

シリアル化ライブラリに org.apache.hadoop.hive.serde2.OpenCSVSerde が選択されており、各パラメータも設定されていますね。

Athenaでクエリを投げてみましょう。

ダブルクォーテーションが考慮されたデータを取得することが出来ました。

まとめ

分類子を使わずにHive形式のCSVをOpenCSVSerDeで処理したくて試行錯誤していました。
手動で行う際にはデータ型の変更などが必要になるのですが、分類子で簡単に処理できる場合はクローラに組み込んで利用するのは便利だと感じました。