AWS Glue + S3 + csv ファイルでデータレイク


AWS Glue サービス、そのデータカタログ機能を利用してデータレイクを実現する方法のメモ書きを残します。

・S3にcsv をアップロードしたら自動でデータカタログを生成して欲しい。(要するにテーブルのカラムのスキーマを毎回設定しない)。Crawlerが自動でテーブルを推測して作成するということ。カラムの数字、文字列、日付なども自動で推測。csv をアップロードするたびに開発者側がテーブルの定義をするのではデータレイクの意味がない。

・crawler は1時間に一度や一日に一度、あるいは手動実行などで実行が可能。cralwer が指定したS3バケットをチェックして、csv が有ればデータカタログ内のデータベースのテーブルを作成する。(RDSのテーブルではない、あくまでも Glue 上のテーブル)
・作成するデータカタログ上のデータベースやテーブルはあくまでもメタ情報のみ。実態はS3のCSVのまま。

・csvに日付タイプで設定されていても文字列としてカラムが作成されてしまう。query 時など日付型に変更する必要がある。

【Q】crawlしましたが、テーブルが生成されません。
【A】テーブル名はcsvのファイル名が利用されるようです。もしcsvファイル名が日本語の場合は(日本語のテーブル名は作成できないため)失敗するようです。

ちなみに classifier は必須ではないようです。

【Q】テーブルはインポートされるが実データがテーブルから見えない。要するに Athena から query しても 0 件となる。
【A】csv はバケットごとに配置する必要があるようです。同一バケットに異なるスキーマと持つcsv を配置した場合、テーブルは生成されますが、athena からの query ではデータは参照することはできないようです。



【Q】カラム名が col1 , col2 . col3 など csv の1行目のカラムがカラム名として設定されていない。1行目のカラム名が実データとして表示されてしまう。
【A】crawler が判別できないためこのような現象となる。データに数字が有ればカラム名が文字列なので1行目がカラム名と判定される。しかしcsv 内のデータがすべて文字列の場合は、cralwer が判定できないため(要するに1行目が文字列なので)1行目からデータと判定されてしまう。これを避けるにはダミーな列を追加してそこに 0 などの数字を入れて1行目がカラム名であることを明白にする。


[トップへ]