見出し画像

【AWS】 Glue CrawlerでS3データを自動検出・テーブル登録してみた|1日1ハンズオン Day 39

こんにちは、ぽめら です。
本記事は1日1ハンズオン企画、第39回です!
前回に続き、AWS Glue に触れていきます🧙‍♂️

今回は Glue Crawler(クローラー) を使って、S3上のデータを自動検出し、Glue Data Catalog登録してみました。




1.はじめに

前回は、Glueの概要を眺めてどのようなサービスかを整理しました。

今回は実践として、S3上のデータをGlueでスキャンし、Catalog化(Athenaで検索可能な形に変換)にチャレンジしてみたいと思います。
これにより、Athenaなどの分析サービスで該当データを「テーブル」として扱えるようにできます。

フローイメージ👇

[S3(CSV)] → [Glue Crawler(自動スキャン)] → [Glue Data Catalog(テーブル化)] → [Athena(SQLクエリ)]

2.Glue Crawlerとは

Glue Crawlerは、S3やRDSなどのデータソースを自動的にスキャンし、スキーマ情報(列名・型)をGlue Data Catalogに登録する仕組みです。

行ってくれる内容のイメージは下記👇

・自動スキーマ検出
👉ファイル構造を解析して列名・型を推定

・Data Catalog登録
👉スキーマをGlueのメタデータベースに保存

・再利用可能
👉Athena・Redshift Spectrumで参照可能なデータとして登録

・スケジュール化
👉定期クロールも可能

Crawler(徘徊する者)の名の通り、S3のファイルをル◯バのようにクロールして検出してくれるわけですね🧹


3.Glue CrawlerでS3上データを自動検出・テーブル登録してみた

今回の主な流れは下記の通りです。

  • S3 にサンプルデータを配置

  • Glue Crawlerの作成&実行(データ構造の検出)

  • Glue Data Catalogを確認

  • Athenaからクエリで確認


3-1.S3にサンプルデータを配置

まずはクロール対象となるS3データを用意。

① S3 バケットの作成
いつものように下記のように詳細指定をしてもOKだし、

aws s3api create-bucket \
  --bucket pomera-handson-day39 \
  --region ap-northeast-1 \
  --create-bucket-configuration LocationConstraint=ap-northeast-1

単純にバケット作成するだけなら mb コマンドでもOK!

aws s3 mb s3://pomera-handson-day39 --region ap-northeast-1
☝️こんな感じで作成したら返ってくる

作ったら確認:

aws s3 ls
☝️ちゃんとできました

② サンプルデータの作成(今回はCSVファイルを用意)

echo "id,product,price" > crawler_sample.csv
echo "1,apple,120" >> crawler_sample.csv
echo "2,banana,150" >> crawler_sample.csv
echo "3,orange,200" >> crawler_sample.csv

中身を一応確認。

cat crawler_sample.csv

S3 にコピー。

aws s3 cp crawler_sample.csv s3://pomera-handson-day39/input/

アップされているかを確認。

aws s3 ls s3://pomera-handson-day39/input/
無事サンプルデータの用意は完了✌️

3-2.Crawlerを作成

では、いよいよGlueコンソールからクローラーを作成します。

① Glue コンソールを開く

検索窓で「Glue」で検索

② Glue が 他AWSサービスにアクセスできるようにIAM ロールを設定
「Set up roles and users」をクリック

Set up roles and users

▼Step1:Glueで使うユーザー・ロールを選択
IAM ロールは流れで作成できるようなので、IAM ユーザーのみ選択しました(本当は分けた方がいいのはわかっているのですが、私はいつもの管理者権限を持ったIAM ユーザーを今回は使用しました🫠)。

choose rolesをクリック

▼Step2:S3へのアクセス権設定
Step1で個別のオリジナルのIAM ロールをすでに設定している方はここはデフォルトの「No additional access」でOK。

私は今回の学習用に対象バケットを選択して、Read and Write を許可した。

設定で問題なければ「Next」

▼Step3:IAM ロールの指定
Glue用のIAM ロールを指定する。Defaultを選択すると最低限のアクセス権で作成も可能。もちろん個別のIAM ロールを選択することも可能。

私は今回Defaultで作成してみました。

▼Step4:確認画面
内容に問題なさそうであれば「Apply changes」!

☝️無事 IAM ロールが作成された様子

③ クローラーを作成する
左側の「Data Catalog」欄にある「Crawlers」をクリック。

「Create Crawler」をクリック。

▼ Step1:任意の名前をつける

▼ Step2:クローラーの対象データソースを指定する
今回既存のテーブルを使用せず、新たに作成したファイルのスキャンを想定しているので「Not yet」で「Add a data source」をクリック。

データソースの指定を求められるので、今回は同一アカウント上のS3。で、S3のパスを指定してあげる(Browse S3でGUIでの選択も可能)。

<この設定での動作イメージ>
下記のようにCrawlerが動いてくれる想定です。

・s3://pomera-handson-day39/input/ にあるファイルを探索
・CSVのヘッダー行を読み取り、型を推定(id:int, product:string, price:int)
・Glue Data Catalog にテーブルとして登録

▼ Step3:IAM ロールを指定する

※ IAM ロールは②で作成したものを選択できる

※ Lake Formationを利用する場合はここで選択できる

▼ Step4:登録データベース・スケジュールを設定する
Crawlerの結果保存のためのデータベースと、スケジュールを設定します。

今回まだデータベースは作成してなかったので「target datavase」欄の「Add database」をクリック。するとデータベース名の設定ができる画面が立ち上がるので最低限名前をつけて「Create Database」をクリック。

先ほどのCrawlerページに戻り、ぐるぐる矢印の更新マークをクリックすると作成したデータベースが表示されるのでこれを選択します🌀

オプションは今回すっ飛ばして、スケジュールを設定します。今回は手動実行したいので「On demand」のままでOK。日次・週次など複数選択できるようになっています。

ここまでで問題なければ「Next」をクリック。

▼ Step4:確認画面
ここまで設定した内容が表示されるので、問題なければ「Create Crawler」をクリック。

無事Crawlerの作成ができました✌️(結構大変だったなあ…)

3-3.Crawlerを実行

無事作成を終えたので、あとは実行するのみです…!
実行は簡単。Crawler詳細画面右上の「Run Crawler」をクリックするだけ🖱️

画面右上、更新のぐるぐるマークの右隣に「Run Crawler」ボタンがある
無事成功✌️

単純な内容だったからか、ボタンクリックですぐに終了しました🎉


3-4.Glue Data Catalogを確認

今回の作業は、Crawlerに構造をスキャンしてもらい、自動でData Catalog(テーブル)を出力してもらうための手順でした。というわけで、実行したものを確認しに行きます。

Glue左側メニューの「Data Catalog」>「Databases」>「Tables」をクリックすると作成されたテーブルが表示されているはずです👇

作成されたテーブル名「input」をクリックすると詳細が表示されます。
この画面上で「Schema」タブを選択する。

カラム名:id, product, price

GlueがS3上のCSVをスキャン&スキーマを推定・登録してくれました!
このCatalog情報はAthenaなど他サービスから共通で参照できます。


3-5.Athenaからクエリしてみる

では、Glueで作成されたCatalogをAthenaで使ってみましょう。

Athena クエリエディタに移動。

「設定タブ」で出力バケットを設定。

Athena クエリエディタで、次のSQLを実行👇

SELECT * FROM input;

結果:


👉 AthenaがGlue Data Catalogを参照し、S3上のデータをSQLで直接取得できました!「S3 → Glue → Athena」のデータパイプラインが完成です✨


4.まとめ

今回は、Glue Crawlerを使ってS3上のデータを自動検出し、Glue Data Catalogに登録してみました。

・Glue Crawler
👉S3のデータ構造を自動でスキャン、スキーマ情報を抽出してData Catalogにテーブルとして登録する

・Data Catalog
👉AthenaやRedshiftが参照するメタデータ辞書(テーブル構造)

手動でスキーマを作成しなくても、S3にファイルを置いたあとで実行すると、テーブル構造を自動的に認識・更新できる仕組みがGlue Crawlerということを学べました👀

多量のファイル処理が必要な場合などに使用するイメージですね。ふむ。

というわけで今日はここまで!
ではまた明日👋


5.参考リンク

・AWS Glue でのデータ検出とカタログ化

・クローラーでデータカタログの入力について

・Amazon Athena


いいなと思ったら応援しよう!