【Glue】【Glue Studio】なぜクローラーを使わずにデータカタログが作れるのか調べてみた

はじめに

普段の業務はバックエンドエンジニアなのだが、最近になって データ基盤 を作るようになりました。 データ基盤 と言うと大規模なものだと思われがちですが、新規サービスの基盤なので大きくはありません。

なので、まずは データを効率良く見える化 するためにデータ基盤作成初心者が Glue Studio を使ってノーコードで作成しました。
もともとのGlueの知識として

があることを認識していたのですが、クローラーを定義せずになぜ作れるのか?という疑問になったのでそのメモとなります。

環境

  • AWS Glue ※記載時点での最新バージョン

前提条件

Glue Studioで下記のようなフローが作成されていること

調査

調べてみると以下の構文を使えば自動的にカタログが作れることがわかりました。

sink = glueContext.getSink(connection_type="s3", path="s3://path/to/data",
    enableUpdateCatalog=True, updateBehavior="UPDATE_IN_DATABASE",
    partitionKeys=["partition_key0", "partition_key1"])
sink.setFormat("<format>")
sink.setCatalogInfo(catalogDatabase=<dst_db_name>, catalogTableName=<dst_tbl_name>)
sink.writeFrame(last_transform)

特に重要なのが setCatalogInfo でこれを設定すれば作れるようです。
また、制限事項もあるようなので確認が必要です。

なお、ちょっとした小ネタですが
上記では partitionKeys を個別に設定しているが日本語文字列でもいけるらしく partitionKeys=["注文日"] という定義も可能でした。 ただし、日本語はやはりオススメしないため partitionKeys=["order_date"] とした方が良いです。

まとめ

ノーコードでできるように便利なものがあるのいいです。
ただ中身を知っていないと挙動がわからないままとなってしまうため
こういう調査は大事だと思いました。

参考

AWS Glue ETLジョブからの Data Catalog でのテーブルの作成、スキーマの更新、および新規パーティションの追加 - AWS Glue