AWS GlueとLake Formationを試してみた(Vol.5)

Glue and Lake Formation

前回のハンズオンの続きです。

データガバナンスにどんなサービスを使い、どのようなことが出来るのか。

以下のYoutubeを参考にさせていただき学習します。

以下の流れで構成されており、今回は「Glueデータカタログのその他機能」です。

  • Glue Data Catalog
  • Data Access Control
  • Glue Crawler
  • Glue Data Catalog Revisited
  • Glue Job and Glue Studio
  • Glue Workflow
  • Advanced Topics
目次

Glueテーブルのスキーマバージョン

  • Glueデータカタログ内のテーブルのスキーマの変更履歴を表すバージョン番号
  • スキーマが更新されるたびに新たなバージョンが出来る
  • 2つのバージョンのスキーマを比較できる
Glueテーブルのスキーマバージョン
Glueテーブルのスキーマバージョン比較

引用元:https://www.youtube-nocookie.com/embed/WUojHQTyTaY

データのパーティショニング

  • Glueパーティションは、全体的にデータ転送と処理を削減し、クエリの処理時間を短縮するために使用される
  • Glueクローラーはデータ内のパーティションを自動的に識別できる
  • 日時(年、月)や地域などで分割

アップロードしたデータをS3バケットに保存する際、例えば地域や日時に基づいてフォルダを分割(パーティションニング)しておくと、クローラーはその分割を自動で認識します。

データのパーティショニング

引用元:https://www.youtube-nocookie.com/embed/WUojHQTyTaY

テーブルプロパティ、列プロパティ

  • テーブルレベル、列レベルでキーバリュー形式のプロパティを保持できる
  • それらはテーブルや列の情報として使われたり、それらを使って特定の決定を下すカスタムロジックの実装に使用する
テーブルプロパティ、列プロパティ

引用元:https://www.youtube-nocookie.com/embed/WUojHQTyTaY

ハンズオン

今回の内容です。

  • Glueデータカタログのスキーマ更新、スキーマバージョン比較
  • S3バケットのパーティションをGlueクローラーが自動的に識別し、データカタログに取り込む

前回のハンズオンで作成したGlueテーブルのスキーマ

前回のハンズオン1
前回のハンズオン2

まず、このテーブルのスキーマを変更してGlueクローラーを再度実行します。

そして、スキーマの変更をクローラーが検知するかを確認します。

今回、提供された資材の「5_Glue_Data_Catalog_Revisted」を使います。

使用資材

[RDS] テーブルスキーマ変更

クエリエディタにて「RDS_Table_Data_Update_Script.sql」を実行します。

[RDS] テーブルスキーマ変更
[RDS] テーブルスキーマ変更2
[RDS] テーブルスキーマ変更3

ALTER文実行により、createdonカラムを追加しました。
続いて前回作成したGlueクローラーを再度実行して、Glueスキーマの変更とカタログテーブルへ取り込みを行います。

[Glue] クローラー再実行

[Glue] クローラー再実行1
[Glue] クローラー再実行2

終わりました。

[Glue] クローラー再実行3

Glueスキーマを見てみると、createdonカラムが追加されてVersion 1 になっています。

[Glue] クローラー再実行4

Version0と1を並べて比較してみます。

[Glue] クローラー再実行5

変更点がわかりやすいね!

次は、パーティショニングがどのように機能するのか学習します。

[S3] ordersフォルダをアップロード

はじめに提供資材を確認します。

利用資材2
資材3
資材4

ordersフォルダー配下に年ごとのフォルダがあり、各年フォルダにorders.csvが入っています。

つまり、年でパーティショニングされているということです。
ordersフォルダをS3にアップロードし、クローラーでカタログ化します。
パーティションを認識できるでしょうか?

前回作成したS3バケットにordersフォルダをアップロードします。

[S3] ordersフォルダをアップロード1
[S3] ordersフォルダをアップロード2
[S3] ordersフォルダをアップロード3

ordersフォルダをアップロードできました。

[S3] ordersフォルダをアップロード4
[S3] ordersフォルダをアップロード5

[Glue] ordersフォルダーをカタログ化するクローラーを作成

[Glue] クローラー作成1
[Glue] クローラー作成2
[Glue] クローラー作成3
[Glue] クローラー作成4
[Glue] クローラー作成5

今回はS3なので、接続コネクション(Network connection)を指定する必要はありません

[Glue] クローラー作成6
[Glue] クローラー作成7
[Glue] クローラー作成8

s3orderscrawlerを追加できました。

[Glue] クローラー作成9

[IAM] ポリシー追加

クローラーにアタッチしたロールを確認します。

[IAM] ポリシー追加1

このポリシーを見ると「特定の名前で始まるバケット」もしくは「特定の名前を含むバケット」になっているため、今回カタログ化対象のバケット(ここではtest-glue-lake-0409)にアクセスすることが出来ません

[IAM] ポリシー追加2

インラインポリシーを追加します。

[IAM] ポリシー追加3

提供資材「crawler_inline_policy.json」をペーストします。
このとき、バケット名を自分のバケット名に変更しておきます。

[IAM] ポリシー追加4
[IAM] ポリシー追加5

インラインポリシーを追加できました。
これで、S3クローラーは当該バケットにアクセスできるパーミッションを取得しました。

[IAM] ポリシー追加6

[Glue] S3クローラー実行

s3orderscrawlerを実行します。

S3クローラー実行1
S3クローラー実行2

完了後、Glueカタログにordersテーブルが追加されていました。
年フォルダでパーティションが適用されていることもわかります。

S3クローラー実行3
S3クローラー実行4
S3クローラー実行5

パーティションを追加することで、データが増加してもクエリのパフォーマンスを向上することができます。

[Lake Formation]テーブルプロパティ、列プロパティ

テーブルプロパティを追加してみます。

[Lake Formation]テーブルプロパティ、列プロパティ1
[Lake Formation]テーブルプロパティ、列プロパティ2

続いて列プロパティの追加です。

[Lake Formation]テーブルプロパティ、列プロパティ3
[Lake Formation]テーブルプロパティ、列プロパティ4
[Lake Formation]テーブルプロパティ、列プロパティ5

追加したテーブルプロパティや列プロパティは、ビジネスロジックやカタログ内のデータ処理で利用することが出来ます。

おわりに

今回は以下を学習しました。

  • Glueデータカタログのスキーマ更新、スキーマバージョン比較
  • S3バケットのパーティションをGlueクローラーが自動的に識別し、データカタログに取り込む
  • データカタログのテーブルプロパティ、列プロパティの追加

S3クローラーのIAMロールにインラインポリシーを追加しましたが、実は追加する前にクローラーを実行してみました。
想定ではクローラーが失敗するはずだったのですが、エラーなく終了しました。
Glueにordersテーブルは存在しておらず、ログも特筆すべきものは出ていませんでした。

今後またGlueクローラーでS3バケットをデータカタログに取り込む機会があれば、今回のことを思い出したいと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

個人ブログ「Tech Up Labo」を運営する、おーすけ と申します。

IT業界に携わるエンジニアとして、クラウドサービスを用いたデータ分析関連、Webサービス関連の開発において、私自身が学んだことや実際に経験したこと、あるいはその他の情報に基づき情報発信しております。

これらの情報が私自身の備忘録となる一方で、時には他の方が抱える問題に対する解決の一助になることを願っております。

■保有資格
AWS Certified Solutions Architect Associate
JDLA Deep Learning For GENERAL 2020#2
JDLA Deep Learning For ENGINEER 2022#2
PMP、Python3 エンジニア認定基礎、他

コメント

コメント一覧 (1件)

目次