AWS SCT で AWS Glue の Python API を使用して ETL プロセスを変換する - AWS Schema Conversion Tool

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS SCT で AWS Glue の Python API を使用して ETL プロセスを変換する

以下のセクションでは、Python で AWS Glue API オペレーションを呼び出す変換について説明します。詳細については、AWS Glue 開発者ガイド の「Python での AWS Glue ETL スクリプト」を参照してください。

ステップ 1: データベースを作成する

最初のステップでは、AWS SDK API を使用して、AWS Glue データカタログに新しいデータベースを作成します。データカタログに定義したテーブルは、データベースに追加されます。データベースは、AWS Glue でテーブルを整理するために使用されます。

次の例は、AWS Glue の Python API の create_database メソッドを示しています。

response = client.create_database( DatabaseInput={ 'Name': 'database_name’, 'Description': 'description', 'LocationUri': 'string', 'Parameters': { 'parameter-name': 'parameter value' } } )

Amazon Redshift を使用している場合のデータベース名は次のとおりです。

{redshift_cluster_name}_{redshift_database_name}_{redshift_schema_name}

この例では、Amazon Redshift クラスターのフルネームは次のようになります。

rsdbb03.apq1mpqso.us-west-2.redshift.amazonaws.com

正しい形式のデータベース名の例を以下に示します。この場合は、rsdbb03 のようになります。これは、クラスターエンドポイントのフルネームの最初の部分です。データベースの名前は dev で、スキーマは ora_glueです。

rsdbb03_dev_ora_glue

ステップ 2: 接続を作成する

AWS SDK API を使用して、データカタログに新しい接続を作成します。

次の例は、AWS Glue の Python API の create_connection メソッドを使用した例を示しています。

response = client.create_connection( ConnectionInput={ 'Name': 'Redshift_abcde03.aabbcc112233.us-west-2.redshift.amazonaws.com_dev', 'Description': 'Created from SCT', 'ConnectionType': 'JDBC', 'ConnectionProperties': { 'JDBC_CONNECTION_URL': 'jdbc:redshift://aabbcc03.aabbcc112233.us-west-2.redshift.amazonaws.com:5439/dev', 'USERNAME': 'user_name', 'PASSWORD': 'password' }, 'PhysicalConnectionRequirements': { 'AvailabilityZone': 'us-west-2c', 'SubnetId': 'subnet-a1b23c45', 'SecurityGroupIdList': [ 'sg-000a2b3c', 'sg-1a230b4c', 'sg-aba12c3d', 'sg-1abb2345' ] } } )

create_connection で使用されているパラメータは次のとおりです。

  • Name (UTF-8 文字列) - 必須。Amazon Redshift では、接続名は次のような形式になります: Redshift_<Endpoint-name>_<redshift-database-name> (例: Redshift_abcde03_dev)

  • Description (UTF-8 文字列) - 接続の説明。

  • ConnectionType (UTF-8 文字列) - 必須。接続のタイプ。現時点では JDBC のみがサポートされており、SFTP はサポート外です。

  • ConnectionProperties (dict) – 必須。この接続のパラメータとして使用されるキーと値のペアのリスト (例: JDBC 接続 URL、ユーザー名、およびパスワード)。

  • PhysicalConnectionRequirements (dict) - 物理接続の要件。以下の内容が含まれます。

    • SubnetId (UTF-8 文字列) - 接続で使用されるサブネットの ID。

    • SecurityGroupIdList (list) - 接続で使用されるセキュリティグループ ID リスト。

    • AvailabilityZone (UTF-8 文字列) - 必須。そのエンドポイントを含むアベイラビリティーゾーン。このパラメータは廃止されました。

ステップ 3: AWS Glue クローラーの作成

次に、AWS Glue クローラーを作成して、AWS Glue カタログを追加します。詳細については、『AWS Glue デベロッパーガイド』の「クローラーを使用したデータのカタログ化」を参照してください。

クローラーの作成における最初のステップでは、AWS SDK API を使用して、データカタログに新しいデータベースを作成します。開始する前にまず、delete_crawler オペレーションを使用して、以前のバージョンをすべて削除する必要があります。

クローラーを作成するときは、いくつかの考慮事項が適用されます。

  • クローラー名には、<redshift_node_name>_<redshift_database_name>_<redshift_shema_name> 形式を使用します (例: abcde03_dev_ora_glue)。

  • 既存の IAM ロールを使用します。IAM ロールの作成の詳細については、『IAM ユーザーガイド』「IAM ロールの作成」を参照してください。

  • 前のステップで作成したデータベースの名前を使用します。

  • ConnectionName パラメータ (必須) を使用します。

  • path パラメータでは、JDBC ターゲットへのパス (例: dev/ora_glue/%) を使用します。

次の例では、既存のクローラーを削除し、AWS Glue の Python API を使用して新しいクローラーを作成します。

response = client.delete_crawler( Name='crawler_name' ) response = client.create_crawler( Name='crawler_name', Role= ‘IAM_role’, DatabaseName='database_name’, Description='string', Targets={ 'S3Targets': [ { 'Path': 'string', 'Exclusions': [ 'string', ] }, ], 'JdbcTargets': [ { 'ConnectionName': ‘ConnectionName’, 'Path': ‘Include_path’, 'Exclusions': [ 'string', ] }, ] }, Schedule='string', Classifiers=[ 'string', ], TablePrefix='string', SchemaChangePolicy={ 'UpdateBehavior': 'LOG'|'UPDATE_IN_DATABASE', 'DeleteBehavior': 'LOG'|'DELETE_FROM_DATABASE'|'DEPRECATE_IN_DATABASE' }, Configuration='string' )

1 つ以上のデータストアに接続してデータ構造を決定し、データカタログにテーブルを書き込むクローラーを作成して、実行します。スケジュールに基づいてクローラーを実行することができます (以下参照)。

response = client.start_crawler( Name='string' )

この例では、Amazon Redshift をターゲットとして使用しています。Amazon Redshift AWS Glue データ型は、クローラーの実行後に次の方法でデータ型にマッピングされます。

Amazon Redshift のデータ型 AWS Glue データ型
smallint smallint
integer 整数
bigint bigint
decimal decimal(18,0)
decimal(p,s) decimal(p,s)
real double
double precision double
boolean boolean
char 文字列
varchar 文字列
varchar(n) 文字列
date date
timestamp timestamp
timestamptz timestamp