Glue。。接着剤?
なるほど、わからん!というレベルの非エンジニアが
実際に触りながら、理解するためにまとめている記事。
ゴール
Glueを実際に触って、利便性が理解出来ることを目指す
なには、ともあれ触っていきましょう!
S3での操作
まずは、いろいろ利用するストレージの確保
手順
まずは、S3でテスト用のバケットを作成(設定はデフォルト)
構成は下記の通り。
s3
├ 20200921testglue001in - 入力CSV置き場
├ 20200921testglue001out - 出力ファイルの置き場所(今回は、parquetファイルを格納)
├ 20200921testglue001athena - athena実行用
├ 20200921testglue001script - Glueジョブの実行用
└ 20200921testglue001temp - Glueジョブの為の一次領域
続いて、下記CSVファイルを「20200921testglue001in」へアップロード
deviceid,uuid,appid,country,year,month,day,hour
iphone,11111,001,JP,2017,12,14,12
android,11112,001,FR,2017,12,14,14
iphone,11113,009,FR,2017,12,16,21
iphone,11114,007,AUS,2017,12,17,18
other,11115,005,JP,2017,12,29,15
iphone,11116,001,JP,2017,12,15,11
pc,11118,001,FR,2017,12,01,01
pc,11117,009,FR,2017,12,02,18
iphone,11119,007,AUS,2017,11,21,14
other,11110,005,JP,2017,11,29,15
iphone,11121,001,JP,2017,11,11,12
android,11122,001,FR,2017,11,30,20
iphone,11123,009,FR,2017,11,14,14
iphone,11124,007,AUS,2017,12,17,14
iphone,11125,005,JP,2017,11,29,15
iphone,11126,001,JP,2017,12,19,08
android,11127,001,FR,2017,12,19,14
iphone,11128,009,FR,2017,12,09,04
iphone,11129,007,AUS,2017,11,30,14
Glueでの操作
クローラの設定(データカタログを作成する準備~実行)
まずは、クローラーを作成してみます。
CSVファイルを取り込みテーブルを自動で作成してくれます。
クローラに関する情報の追加
クローラーの名前は、任意につけてしまってOK
Specfy crawler source type
クローラーのソースタイプ
ここはデフォルト値のまま
データストアの追加
インクルードパスは、先ほどCSVファイルをアップロードしたファイルを選択
別のデータストアの追加
「いいえ」ここでは特に追加しない
IAMロール
以下のポリシーを付与した任意の名前のロールを作っておく。
・AmazonS3FullAccess
・AWSGlueServiceRole
スケジュール
オンデマンドで実行を選ぶ
クローラの出力を設定する
出力されるテーブルの設定
データベースがなければ、「データベース」の追加をクリック
すべてのステップの確認
最後に、確認画面がでるので、「完了」をクリックすればクローラの設定は完了
クローラの実行
オンデマンドでの設定をしているので、クローラーを選択しクローラ時の実行を選ぶ
↓
1分程度で処理が終わる
作成されたテーブルを確認してみよう
サイドバーのテーブルを接続すると、新しいテーブルが出来ていることが確認できる
テーブルの情報各種が見れる状態となっている。
不要なカラムを削除したりすることもできる
Athenaでの操作(データカタログへのアクセス)
ここまでできたら、作成されたData catalogにAthenaでアクセスし、
データが取り出せるかをテストする
シンプルなSQLを記述して実行、
無事にCSVファイルを取り込んだものからSQLが実行できることが確認できる。
※初回などS3に保存場所を確保していないときは、Run Queryが出来ないので設定してください。
Glueでの操作
ジョブを作成
ジョブのプロパティ設定
名前:適当に
IAMロール:先ほどの、Athenaで使用したものと同じ
Type:今回はSpark
スクリプトファイル名:デフォルト
スクリプトが保存されているS3パス:任意のパスを指定
一次ディレクトリ:任意のパスを指定
データソースの選択
最初にアップロードしたCSV選択
変換タイプの選択
デフォルト値
データターゲットの選択
データストア:AmazonS3
形式:Parquet
ターゲットパス:出力したいS3パスを指定
ソース列をターゲット列にマッピング
必要があれば修正、今回はそのまま次へ
ジョブの実行
エラーの時は、Cloud watch logに内容が書き出される
成功時にはステータスがSuccessedとなり
S3のout用フォルダに、Parquetフォーマットのファイルが作成されている。
もう一度、クローラ設定で、読み込ませてみる。
先ほどと同様に、クローラ設定をし、今度はparquetフォーマットのファイルを読み込ませて
同様にAthenaで取り出してみる
フォーマットがparquetに変換されたので
列単位での集計処理などが高速化されるデータフォーマットに変換ができました。
最後に
ここでやった処理は、以下の通りです。
CSV→テーブル変換→parquetで出力→テーブル変換
これだけだと、何が便利かわかりづらいのですが。
今回はオンデマンドで実行していたのですが、
実践の場面では、トリガーを組み合わせることで、
以下のような事が出来るようになる為、便利そうだと感じました。
- 何かしらのフォーマットをアップロード→スケジュールが来れば実行→最適な形式へ変換
- 定期出力されるCSV→スケジュールごとに実行して最適な形式へ変換