データマネジメント・ガバナンスの観点から見る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 CatalogGlue Crawlers に注目し、どの辺りの機能がデータマネジメントに活かせそうか見ていきます。またガバナンスにおいてはAWS Lake Formationも関わってきますが、今回は検証を割愛します。

AWS GlueやLake Formationについてもっと概要を知りたいという方は、以下の入門記事もご参照ください。

Glue Data Catalog

カタログ作成前に、まずはデータベースを作成していきます。データベースはテーブル定義をまとめる論理的なグループとして機能します。Glueのコンソールの左メニューよりDatabasesをクリックし、Add databaseをクリックします。

データベースに書けるメタデータは、NameDescriptionぐらいのようです。

作成したharuta-demoデータベースの詳細です。追加項目もないみたいです。

続いて、haruta-demoにテーブルを追加していきます。左のメニューよりTablesをクリックし、Add tablesAdd table manuallyをクリックします。

データベースと同様、NameDescriptionの設定は可能です。

テーブル定義の対象となるデータストアを選択していきます。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をクリックしてみます。

テクニカルメタデータがほとんどですが、DescriptionTable 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を取り上げていきますので、引き続き乞うご期待ください!