【AWS】AWS Glue ~ Boto3 / クローラ編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2019/10/14/000000
https://dk521123.hatenablog.com/entry/2021/04/17/001930

の続き。

boto3 を使ったクローラ作成時に結構エラーが出たので、
備忘録的にメモしておく。

目次

【1】各設定値について
 1)Targets
 2)Configuration
 3)SchemaChangePolicy
 4)DatabaseName
 5)TablePrefix
【2】サンプル
 例1:クローラ作成 / S3パスへのクローリング
 例2:クローラ作成 / テーブルへのクローリング

【1】各設定値について

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/glue.html#Glue.Client.create_crawler

での各設定値の簡単なメモ。

1)Targets

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-glue-crawler-targets.html
https://docs.aws.amazon.com/ja_jp/glue/latest/webapi/API_CrawlerTargets.html

クローラ対象の指定。

* CatalogTargets
 => データカタログを対象とする

* DynamoDBTargets
 => DynamoDBを対象とする

* JdbcTargets
 => JDBC(DB/RDS)を対象とする

* S3Targets
 => データカタログを対象とする

2)Configuration

https://docs.aws.amazon.com/ja_jp/glue/latest/dg/crawler-configuration.html

3)SchemaChangePolicy

テーブル定義に変更した場合、どう振る舞うかを設定する

https://docs.aws.amazon.com/glue/latest/webapi/API_SchemaChangePolicy.html
https://docs.aws.amazon.com/ja_jp/glue/latest/dg/crawler-configuration.html
DeleteBehavior (削除された場合の振る舞い)

* LOG
 => 変更を無視(削除しない)し、ログに書き込む

* DELETE_FROM_DATABASE
 => Data Catalog からテーブルとパーティションを削除

* DEPRECATE_IN_DATABASE (デフォルト)
 => Data Catalog​ でテーブルを廃止としてマークを付ける

UpdateBehavior (更新された場合の振る舞い)

* LOG
 => 変更を無視(更新しない)し、ログに書き込む

* UPDATE_IN_DATABASE
 => AWS Glue データカタログ のテーブルを更新

4)DatabaseName

* 出力先のデータベース名

5)TablePrefix

* 出力するテーブル名に対してプレフィックスを付加
* e.g. TablePrefix: 'ex_' => ex_person, ex_employee

【2】サンプル

例1:クローラ作成 / S3パスへのクローリング

import boto3
import yaml

s3_client = boto3.client('s3')
glue_client = boto3.client('glue')

# S3上にあるYAMLファイルを取り込む
response = s3_client.get_object(
  Bucket='bucket-name',
  Key="xxx/yyyy/zzzzz/crawler.yaml")
config = yaml.safe_load(response["Body"])

# ★ここでクローラ作成を実行★
response_of_create_crawler = \
  glue_client.create_crawler(**config)
print(response_of_create_crawler)

crawler.yaml

Name: 'sample-crawler'
Description: 'This is a sample crawler'
Role: 'Glue_IAMRole'
Database: 'sample_db'
TablePrefix: 'demo_glue_'
# https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html
# Configuration: "{\"Version\": 1.0,\"CrawlerOutput\": {\"Partitions\":{\"AddOrUpdateBehavior"\: \"InheritFromTable\"}}}"
# って書き方もできる
Configuration: |
  {
     "Version": 1.0,
     "CrawlerOutput": {
       "Partitions": {
         "AddOrUpdateBehavior": "InheritFromTable"
       }
     }
  }
SchemaChangePolicy:
  UpdateBehavior: 'LOG'
Targets:
  S3Targets:
    - Path: s3://your-bucket/aaaa/bbbb
    - Path: s3://your-bucket/cccc/dddd
Tags:
  Name: 'sample-crawler'

例2:クローラ作成 / テーブルへのクローリング

* Pythonコード自体は、そのままなので省略

注意点

* テーブルへのクローリングする際には、
 事前にクロールするテーブルがないとエラーが発生する

crawler.yaml

Name: 'sample2-crawler'
Description: 'This is a sample crawler'
Role: 'Glue_IAMRole'
# https://docs.aws.amazon.com/ja_jp/glue/latest/dg/crawler-configuration.html
Configuration: |
  {
     "Version": 1.0,
     "CrawlerOutput": {
       "Partitions": {
         "AddOrUpdateBehavior": "InheritFromTable"
       },
       "Tables": {
         "AddOrUpdateBehavior": "MergeNewColumns"
       }
     }
  }
# https://docs.aws.amazon.com/glue/latest/webapi/API_SchemaChangePolicy.html
SchemaChangePolicy:
  UpdateBehavior: 'UPDATE_IN_DATABASE'
  DeleteBehavior: 'DEPRECATE_IN_DATABASE'
Targets:
  CatalogTargets:
    - DatabaseName: 'sample_db1'
      Tables:
        - 'sample_table1'
    - DatabaseName: 'sample_db2'
      Tables:
        - 'sample_table2'
Tags:
  Name: 'sample2-crawler'

関連記事

AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
AWS Glue ~ Boto3 / 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/14/000000
AWS Glue ~ Boto3 / 基本編 ~
https://dk521123.hatenablog.com/entry/2021/04/17/001930
AWS Glue ~ Boto3 / セキュリティ設定編 ~
https://dk521123.hatenablog.com/entry/2020/04/08/171208
AWS Glue ~ Boto3 / Glue connection編 ~
https://dk521123.hatenablog.com/entry/2020/01/29/224525