AWS Glue Data Catalog を理解する

# AWS Glue Data Catalog を理解するために
初めてクラウドサービスを使用する&初めてAWS Glue で ETL 処理のジョブを作って色々やってみようとするとき、不意に登場するのが　AWS Glue Data Catalog ではないだろうか。
**「何のために Data Catalog は存在するのだ？」**
**「Data Catalog はなくても ETL できるんじゃないの？」**
こんな思いをした皆さんにこの記事が参考になれば幸いです。
本来はより詳細な Data Catalog の技術記事を紹介しようと思いましたが、今回は「Data Catalog は重要なのね」と理解することがゴールになります。また、ただのツール説明ではなく、データエンジニアリングやデータ基盤を構築するデータエンジニアとしての視点を交えて書いてみました。

とりあえず AWS Glue Data Catalog の存在意義を知るなら AWS Glue というサービスの全体を理解する必要がありそうです。


## はじめに AWS Glue のサービスを理解しよう

<img width="200" alt="スクリーンショット 2022-10-29 14.58.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2319295/6512b6c6-ed07-0926-cc4c-5eeff9bb5400.png">

AWS の公式ドキュメントでは AWS Glue について以下のように説明がなされています。
>AWS Glueは、分析、機械学習、アプリケーション開発のためのデータの検出、準備、結合を簡単に行える、サーバーレスデータ統合サービスです。 AWS Glue はデータ統合に必要なすべての機能を備えているため、数か月ではなく、数分でデータを分析し、使用可能にします。

AWS Glue　はデータ基盤の基本構造でいうところの「プロセシングレイヤー」の役割を担うサービスです。プロセシングレイヤーではETL処理やデータストラクチャリング、データエンリッチリング、データクレンジングなどデータの品質を高める処理、すなわち、データラングリングを行うレイヤーです。


※以下、データ基盤の基本構造[^1]
![スクリーンショット 2022-10-29 14.41.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2319295/181c95b0-1aee-701a-2081-2a2d933f3d49.png)

## AWS Glue のサービスの様々なツール
AWS Glue のサービスには、以下のように様々な機能を持つツールが用意されています。
![AWS Glue のサービスの様々なツール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2319295/c651610b-2f28-2ec2-5595-11571b2a9c3d.png)

## **AWS Glue Data Catalog:**
メタデータを格納するデータストア(=メタデータストア)であり、データベースやテーブルといった構造で保管されます。Amazon S3 などのデータソースに保存されている構造化データまたは半構造化データの集まりをメタデータとして管理します。データカタログには、データベース、テーブル、スキーマといった構成を持ち、コネクション、クローラー、分類子といったメタデータを抽出するための機能を持っています。

:::note info
**メタデータを管理することでどのような恩恵を受けるのか**
対象のデータを様々なアプリケーションで扱う上で、一貫したやり方でデータを処理したりすることができます
:::
### **Databases と Tables :**
Data Catalog　のデータベースには「メタデータテーブル」が格納され、AWS S3 などの様々なデータストアのデータ定義の情報を格納したテーブルを保管しています。そして、あたかも一般的なデータベースのように扱うことができます。

:::note warn
注意
※実データが格納されるわけではなく、メタデータが情報として格納されています
:::

![スクリーンショット 2022-10-29 23.51.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2319295/72d478b1-22b1-1325-251a-2fb862d7f30f.png)



#### **Stream schema registries:**
※ 随時記載

#### **Connections:**
※ 随時記載

#### **Crawlers:**
Crawler　は Data Catalog にテーブルを登録する機能（メタデータを格納する機能)で、一般的によく利用されている Data Catalog　にメタデータを登録する方法である。 Crawler は1回の実行で複数のデータストア(AWS S3 などの対象データを格納している場所、またはデータそのもの)をクロールでき、Crawler　の実行が完了すると　Data Catalog　にクロールしたテーブルのメタデータ情報のテーブルを作成または更新します。
AWS Glue Job は、この Data Catalog のテーブルに保存されたメタデータを使用して対象となるデータに対して読み取りや書き込みを行い、ETL処理をします。
**★Crawler がもつ主な３つの機能**
１. フォーマットやスキーマ、データの性質を定義するためにデータを分類する機能
２. データをテーブルまたはパーティションにグループ化する機能
３. メタデータをデータカタログに書き込む機能


- その他の参考情報: [クロール可能なデータストア](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/crawler-data-stores.html)

##### **Classifiers (分類子):**
分類子は、データを観察してデータの形式を確認します。データ形式が確認できるとスキーマが生成されます。分類子は返り値として、観察したデータがその形式である確度がどれくらいかを示す**確度度数**を返します。分類子は、対象のデータをクロールして　Data Catalog でメタデータテーブルを定義する時に使用します。

- その他の参考情報: [AWS Glue の組み込み分類子](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/add-classifier.html)



##  Data Integration and ETL:
先ほどの AWS Glue Data Catalog に比べて、ここで紹介する **Data Integration and ETL** の
ツール群はまさに「プロセシングレイヤー」としての役割を果たします。
そして、この　ETL　処理は先ほど紹介した Data Catalog　があってからこそ行える処理なのです。
![スクリーンショット 2022-10-29 23.07.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2319295/f7049d4b-b161-af17-7760-ff01fa2a61a0.png)


#### **Jobs:**
AWS Glue Job には、AWS S3 などの **Data Source** に接続して対象のデータを処理し、処理したデータを **Data Target** に書き出すScript がカプセル化されています。Job　は作成した Script に抽出、変換、ロード (ETL)の処理のコードを記述してを実行します。Jobでは、汎用 Python スクリプト/シェルジョブを実行することができます。
また、素晴らしいことに AWS Glue で生成されたスクリプトを使用することもできます。Data Source の配置場所やそのスキーマを指定すると、AWS Glue コードジェネレーターで Apache Spark API (PySpark) スクリプトを自動的に作成することができます。
Job の Script を作成し始めるときは、この自動生成機能を使用して一度 Script を作成し、行いたい処理に合わせて Script を作成することもできます。

#### **Notebooks:**
※ 随時記載
#### **Data classification tools:**
※ 随時記載
#### **Triggers:**
Trigger　を設定することでトリガー作成時に指定された Job　や　Crawler を開始することができます。また、指定したジョブに必要なパラメータも引き渡して起動することがきます。
#### **Workflows:**
Workflow は、スケジュールやイベントなどのトリガーによって起動する、複数の Job　や　Crawler を連結したものです。Workflow を作成することで各　Job　や Crawler の実行状況のステータスや実行結果を記録することができます。
この Workflow はスケジュールやイベントなどのトリガー以外にも手動で実行をスタートすることもできます。
また、連結された各 Job　や　Crawler は、前のタスクの実行結果を確認ながらタスクを実行するか否かを判定します。



## 最後にAWS Glue 全体を見返そう
ここまで AWS Glue の様々なツールを「AWS Glue Data Catalog」と「Data Integration and ETL」 の2つに分けて紹介しました。この２つのツールの関係性をまとめると以下のような図になります。
![スクリーンショット 2022-10-29 23.49.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2319295/236bab4c-9de6-a4f4-b8c2-6bd1a901e380.png)
AWS Glue Data Catalog　は　Data Integration and ETL を行うための前準備であり、データ活用の背景の変化に合わせた Data Integration and ETL を行うための管理機関でもあります。

データ基盤は一度構築してしまえば終わりの道具ではなく、利用背景やビジネス変化に合わせたの意思決定のための道具であり続ける必要があります。そのためには、その変化にも対応できるような基盤を構築する必要があります。（[^2]）

今回のこの「プロセシングレイヤー」もその対象です。AWS Glue Data Catalog　を活用することができるということは、プロセシングレイヤーにおいて、ユーザーから要求される継続的な改善・変化に対応できる基盤を構築することができるということです。
***

### 参考資料
- [AWS Glue](https://aws.amazon.com/jp/glue/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)
- [AWS Glue でジョブを作成する](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/author-job-glue.html)
- [AWS Glue のワークフローの概要](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/workflows_overview.html)
- [AWS Glue トリガー](https://docs.aws.amazon.com/ja_jp/glue/latest/dg/about-triggers.html)



[^1]:[「エンジニアのためのデータ分析基盤入門」2022/2/24 斎藤 友樹 (著)](https://www.amazon.co.jp/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE-%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E5%9F%BA%E7%9B%A4%E5%85%A5%E9%96%80-%E3%83%87%E3%83%BC%E3%82%BF%E6%B4%BB%E7%94%A8%E3%82%92%E4%BF%83%E9%80%B2%E3%81%99%E3%82%8B-%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0-%E3%83%87%E3%83%BC%E3%82%BF%E5%93%81%E8%B3%AA%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9/dp/4297127245)　参考
[^2]:おすすめ本：[「実践的データ基盤への処方箋〜 ビジネス価値創出のためのデータ・システム・ヒトのノウハウ 単行本（ソフトカバー）」 2021/12/11
ゆずたそ  (著), 渡部 徹太郎 (著), 伊藤 徹郎 (著)](https://www.amazon.co.jp/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE-%E3%83%87%E3%83%BC%E3%82%BF%E5%88%86%E6%9E%90%E5%9F%BA%E7%9B%A4%E5%85%A5%E9%96%80-%E3%83%87%E3%83%BC%E3%82%BF%E6%B4%BB%E7%94%A8%E3%82%92%E4%BF%83%E9%80%B2%E3%81%99%E3%82%8B-%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0-%E3%83%87%E3%83%BC%E3%82%BF%E5%93%81%E8%B3%AA%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9/dp/4297127245)