データマネジメント・ガバナンスの観点から見るAWS Glue Data Catalog
本記事では、データマネジメント・ガバナンスの推進に使えそうなAWS Glueの機能を考察していきます。
「激熱!1日1製品!最強のデータ系SaaSはどれだ決定戦」アドベントカレンダーにて、これまで20の商用製品を取り扱ってきましたが、ついにネタ切れとなってしまいました…(涙)。候補として挙げていた製品は多いものの、トライアル環境を簡単に提供してくれるところがそこまで多くなかったのが現実でした。
というわけで、21本目と22本目ではクラウドベンダー製のデータカタログについて改めて見ていくことにします。本日はAWS Glue編です。
AWS Glueの機能をおさらい
AWS Glueはデータ分析基盤のETLワークロードを構築するためのサーバレスサービスです。主な用途として以下の4つが挙げられます。
- データウェアハウスまたはデータレイク用に、データの整理やクレンジング、検証、フォーマットを行う
- サーバーレスなクエリをAmazon S3のデータレイクに対して実行する
- イベント駆動型のETLパイプラインを作成する
- データアセットを把握する
AWS Glueは以下の5つの要素で構成されています。
- AWS Glue Data Catalog
- Apache Hiveのメタストアと同じような方法で、AWSクラウド内のメタデータを保存や注釈付け、共有などができる永続的なメタストア
- 異種のシステムがサイロ化されているデータを追跡しクエリやデータ変換を実施できるよう、メタデータ保管・探索する統合リポジトリとして機能する
- AWS Glue Crawlers and Classifiers
- あらゆる種類のデータをスキャンし、分類やスキーマ情報の抽出、メタデータの保管などを自動で行うクローラー
- AWS Glue ETL Operations
- ETL処理用のScalaかPySparkのスクリプトを自動生成
- Streaming ETL in AWS Glue
- Kinesis Data StreamやApache Kafkaのストリーミングデータに対して、直接ETL処理が可能
- The AWS Glue Jobs System
- ETLのワークフローのオーケストラレーション
基本的にはシステムが参照するためのメタデータを保管しているので、データマネジメントの文脈でいう「データカタログ」とは少し用途が違っているのですが、今回は Glue Data Catalog と Glue Crawlers に注目し、どの辺りの機能がデータマネジメントに活かせそうか見ていきます。またガバナンスにおいてはAWS Lake Formationも関わってきますが、今回は検証を割愛します。
AWS GlueやLake Formationについてもっと概要を知りたいという方は、以下の入門記事もご参照ください。
- AWS再入門ブログリレー AWS Glue編 | DevelopersIO
- AWS Glue (データレイクの核となるサービス) のイメージをつかむ | DevelopersIO
- Lake Formation の主要な機能を図と表でまとめる | DevelopersIO
Glue Data Catalog
カタログ作成前に、まずはデータベースを作成していきます。データベースはテーブル定義をまとめる論理的なグループとして機能します。Glueのコンソールの左メニューよりDatabases
をクリックし、Add database
をクリックします。
データベースに書けるメタデータは、Name
とDescription
ぐらいのようです。
作成したharuta-demo
データベースの詳細です。追加項目もないみたいです。
続いて、haruta-demo
にテーブルを追加していきます。左のメニューよりTables
をクリックし、Add tables
のAdd table manually
をクリックします。
データベースと同様、Name
とDescription
の設定は可能です。
テーブル定義の対象となるデータストアを選択していきます。S3、Kinesis、Kafkaの3種類に対応しているので、フラットファイルでもストリームデータでも定義ができるみたいです。今回は、 Step 2: Create a Table | Getting Started - Amazon Athena で使用されているs3://athena-examples-ap-northeast-1/cloudfront/plaintext/
配下のデータをデータストアに指定します。
ファイルフォーマットを指定します。データ分析でよく使われるフォーマットが対応されています。サンプルデータはTSV形式なので、Delimiterを\t
に指定します。
続いてカラムを追加していきます。Add column
をクリックします。
この段階ではカラム名とデータ型のみです。
カラム数が多い場合でも、1つ1つクリックして追加しなくてはならないのは少し面倒ですね。現時点ではCLIやSDKから機械的に行った方が良さそうです。
S3のパス設計でPartitionが適用されている場合は、ここでパーティション情報を入力することができます。今回はスキップします。
設定項目を確認しFinish
をクリックします。
こちらが作成されたテーブル定義です。先ほどの画面にはなかったメタデータも散見されます。Edit Table
をクリックしてみます。
テクニカルメタデータがほとんどですが、Description
とTable properties
にてメタデータの付与が可能です。特に後者はKey-Value形式になっているため、属性情報を付与するには適していそうです。
作成したPropertyはタグのような形で表示されます。Edit schema
もクリックしてみます。
こちらはカラム単位でコメントの付与が可能になっています。
GlueのTablesについては以上で、次にもう一つの定義方法であるConnectionsを作成してみます。左メニューよりConnections
をクリックし、Add connection
をクリックします。
コネクションのタイプには、以下の7種類が用意されています。今回は、JDBC経由でRedshiftクラスタに接続していきます。
- JDBC
- Amazon RDS
- Amazon Redshift
- Amazon DocumentDB
- MongoDB
- Kafka
- Network
接続情報やネットワーク情報を入力していきます。
設定項目が問題なければFinish
をクリックします。
結果、コネクション自体にはDescription
ぐらいしかメタデータは付与できない模様です。
以上からわかる通り、Glueのテーブル定義にはDescriptionやProperty、Commentといった自由記述のメタデータは付与できますが、どんなメタデータの項目を用意するのかや、どんなフォーマットで記入するかなどは、運用設計時にしっかり定義しておく必要があります。Glueでも何とか回せなくはないけど、それなりの運用コストはかかりそうな印象です。
Glue Crawler
続いて、Glueのクローラーを試していきます。先ほど手動で作成していたテーブル定義を、クローラーを使用すると自動で作成してくれます。左メニューのCrawlers
から、Add crawler
をクリックします。
CrawlerにはDescription
の他にタグも付与できるようになっています。
クロールの方式を指定します。
データストアとして先ほどのS3パスを指定します。
他にも追加できるみたいですが、今回は1つのみとします。
Crawlerが使用するIAM Roleを作成します。
スケジュールも設定可能ですが、Run on demand
を指定します。
出力の設定を行います。ここでテーブル定義のprefix
として情報を加えることも可能です。
設定内容を確認して、問題なければFinish
をクリックします。
Run crawler
をクリックして起動させます。
テーブル定義が作成されました。クロールによってTable Properties
にサイズやカウントといったメタデータも付与されています。この自動生成具合が一番データカタログっぽいですね。
TSVのフラットファイルなので、データ型の推定については限界があるようです。
Glue Crawlerは自動でテーブル定義やメタデータを生成してくれる反面、型の推定には甘いというデメリットもあります。
所感
AWS Glueをデータマネジメントに組み込めるかを考えてきましたが、メタデータの管理は工夫すればできなくはないけど、Crawlerで自動生成したテーブル定義の精度を上げるための仕組みや、GlueのTable Properties
に付与されているメタデータを良い感じに可視化するツールなど、それ用の開発やツールの導入はどうしても必要になってくると思います。現時点では、システム用のメタストアという側面が強いサービスですね。
本アドベントカレンダーでは、今話題のデータ関連SaaSを取り上げていきますので、引き続き乞うご期待ください!