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

Glue and Lake Formation

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

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

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

以下の流れで構成されており、今回はいよいよ「データカタログ作成」です。

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

AWS Glue Data Catalogとは

AWS公式サイトでは、以下のように説明されています。

AWS Glue Data Catalog
  • AWS Glue Data Catalog には、AWS Glue での抽出、変換、ロード (ETL) ジョブのソースおよびターゲットとして使用するデータへのリファレンスが含まれています。データウェアハウスやデータレイクを作成するには、このデータを分類する必要があります。
  • AWS Glue Data Catalog は、データの場所、スキーマ、およびランタイムメトリクスへのインデックスです。データカタログ内の情報は、ETL ジョブの作成と監視に使用します。
  • Data Catalog の情報はメタデータテーブルとして保存され、各テーブルが 1 つのデータストアを指定します。一般的には、クローラーを実行してデータストア内のデータのインベントリを行いますが、データカタログにメタデータテーブルを追加する別の方法もあります。

引用元:https://docs.aws.amazon.com/glue/latest/dg/catalog-and-crawler.html

データカタログはどのように編成されているか

データベースとテーブルの関係

データベースとテーブルの関係
  • Data Catalogは複数のデータベースを作成できる
  • 各データベースに複数のテーブルを作成できる
  • 各テーブルがデータに関する情報を保持する(スキーマ)
  • 例えば、あるS3バケットに1ファイル存在する場合、1つのデータベースに1つのテーブルが存在するように表現する

テーブルの構造

データロケーション、フォーマット
データロケーションの例

テーブル名や属するデータベース、データ形式、データの場所(ここではS3)といった情報

スキーマ
スキーマの例

例えばあるCSVファイルの構造について、カラム名とデータ型、パーティションキー、コメントで表現される

Glueデータカタログの代表的な作成方法

カタログの作成方法は主に3つ

aws sdk or cli

SDKやCLIを用いてデータカタログ作成のAPIをコールする

aws management console

マネジメントコンソールから手動でデータカタログを作成する

glue crawler

Glueクローラーを使って自動でデータカタログを作成する

ハンズオン

ハンズオン用のサンプルデータが提供されています。
Youtubeの概要欄リンクから事前に入手しておきます。

S3バケットにデータをアップロード

バケットを作成します。
S3バケット作成
バケットに3つのフォルダを作成します。

・athenaフォルダは、後ほど使用するAthenaのメタデータ保存用
・customerフォルダは、テーブルの元となるデータ格納先
・scriptsフォルダは謎(笑)※今回のハンズオンでは使用しません

バケットに3つのフォルダを作成
customerフォルダにcustomers.csvをアップロードします。
データをバケットにアップロード
「Query with S3 Select」を選択します。
「Query with S3 Select」を選択
すべてデフォルトでクエリを実行します。
「Query with S3 Select」の設定1
「Query with S3 Select」の設定2
クエリ結果が表示されました。
「Query with S3 Select」の結果
customers.csvの先頭5行。想定通りですね。
customers.csvの内容

AWS Lake Formation の設定

Lake Formationを選択します。
Lake Formationを選択
管理者として自身を追加します。
管理者として自身を追加
データレイクロケーションを登録します。
データレイクロケーションを登録
対象のフォルダを選択(ここではトップレベルのS3バケットを選択)します。
対象のS3フォルダを選択
「Register location」を押下し、登録完了しました。
「Register location」を押下
データレイクロケーション登録完了

手動でデータベース作成

「Create database」を押下します。
「Create database」ボタンを押下
データベース名とロケーションを入力して「Create database」を押下します。
(後にLake Formationのセキュリティを使用するため、IAMのアクセスコントロールをオフにします。)
情報を入力して「Create database」を押下
データベースを作成できました。
データベース作成完了

手動でテーブル作成

作成したデータベースに顧客テーブルを作成します。
このテーブルが、S3バケットに格納したデータ(customers.csv)のカタログになります。

「Create table」を押下します。
「Create table」ボタンを押下
テーブル情報を入力していきます。
テーブル情報を入力

今回「Data management and security」はオフのままで。

「Data management and security」はオフ

データストアはcustomerフォルダを、データフォーマットはcsvをセット。

データストアとデータフォーマットを入力

今回、スキーマは手動で作成します。
クローラーを使用している場合は自動で識別されますが、後のセクションで出てくるみたいです。
jsonファイルをアップロードして定義することもできますが、ここでは地道にカラムを追加します。

「Add column」ボタンを押下
1列目のカラム名やデータ型を入力
2列目のカラム名やデータ型を入力
3列目のカラム名やデータ型を入力
4列目のカラム名やデータ型を入力

4カラム追加してスキーマが出来ました。
以上でテーブル作成に必要な入力は完了。「Submit」します。

スキーマ作成完了

テーブル作成が完了しました。

テーブル作成完了
テーブルへのアクセス許可を行います。

Lake Formationのセキュリティを使用するようにしましたが、現在ログインしているIAMユーザにはcustomersテーブルへのアクセス権がないので付与します。

テーブル指定して「Grant」を選択

IAMユーザを選択。データベースとテーブルは自動入力されました。
今回はLFタグではなく、名前付きデータカタログリソースを使用します。
テーブルパーミッションは、ここでは管理者権限の「Super」を選択します。

アクセス許可を設定
IAMユーザへのアクセス付与が完了しました。
IAMユーザへのアクセス付与完了

フル権限です(笑)。

権限内容を表示

Athenaでデータ参照

Athenaを選択します。
Athenaを選択
「Setting」タブを開きます。
Settingタブを選択

Athenaはサーバレスサービスですが、クエリ結果や一時的な値を格納する場所としてS3バケットを指定して同期するようにします。
最初に作ったS3バケットの「athena」フォルダを選択して保存しました。

S3データセットの選択

設定完了です。

Athena設定完了
データソースを確認します。

「AwsDataCatalog」に作成したデータベースとcustomersテーブルが存在することを確認しました。

データソースを確認
クエリエディタに戻り、customersテーブルに対して「Preview Table」を選択します。
customersテーブルに対し「Preview Table」を選択
無事、customersテーブルをクエリすることができました。
customersテーブルへのクエリ結果

おわりに

今回は以下を行いました。

  • S3へのデータアップロード
  • Lake FormationによるGlueデータカタログ(データベース、テーブル)作成
  • Lake Formationを用いてテーブルへのアクセス許可
  • Athenaによるテーブルへのクエリ発行

実施する中で、以下が気になりました。

・ Lake Formationを使用せず、既にGlueデータカタログを作っていた場合の挙動
・ customerフォルダに複数のCSVが存在する場合の挙動
 (今回、customerフォルダにはcustomers.csvしか存在しなかった)

ひとまずここに残しておき、今後紐解いていきたいと思います。

よかったらシェアしてね!
  • 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件)

目次