本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 AWS Glue 中將 ETL 程序轉換為 AWS Schema Conversion Tool
在下列各節中,您可以找到在 Python 中呼叫 AWS Glue API 操作的轉換說明。如需詳細資訊,請參閱《 開發人員指南》中的在 Python 中程式設計 AWS Glue ETL 指令碼。 AWS Glue
步驟 1:建立資料庫
第一步是使用 AWS SDK API 在 AWS Glue Data Catalog 中建立新的資料庫。當您在資料目錄中定義資料表時,就會將資料表加入資料庫。資料庫用於組織 中的資料表 AWS Glue。
下列範例示範 Python API 的 create_database方法 AWS Glue。
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 在 Data Catalog 中建立新的連線。
下列範例示範使用 Python API 的 create_connection方法 AWS Glue。
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(裁切) – 必要。做為此連線參數的鍵值對清單,包括 JDBC 連線 URL、使用者名稱和密碼。 -
PhysicalConnectionRequirements(dict) – 實體連線需求,包括下列項目:-
SubnetId(UTF-8 字串) – 連線所使用的子網路 ID。 -
SecurityGroupIdList(清單) – 連線使用的安全群組 ID 清單。 -
AvailabilityZone(UTF-8 字串) – 必要。包含端點的可用區域。此參數已棄用。
-
步驟 3:建立 AWS Glue 爬蟲程式
接下來,您可以建立 AWS Glue 爬蟲程式來填入 AWS Glue 目錄。如需詳細資訊,請參閱《 開發人員指南》中的使用爬蟲程式編製資料表目錄。 AWS Glue
新增爬蟲程式的第一個步驟是使用 AWS SDK API 在 Data Catalog 中建立新的資料庫。開始之前,請務必先使用 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' )
建立連接到一或多個資料存放區的爬蟲程式並加以執行,判斷資料結構,然後將資料表寫入資料目錄。您可以依排程執行您的爬蟲程式,如下所示。
response = client.start_crawler( Name='string' )
此範例使用 Amazon Redshift 做為目標。Amazon Redshift 資料類型會在爬蟲程式執行後,以下列方式對應至 AWS Glue 資料類型。
| Amazon Redshift 資料類型 | AWS Glue 資料類型 |
| smallint | smallint |
| integer | int |
| bigint | bigint |
| decimal | decimal(18,0) |
| decimal(p,s) | decimal(p,s) |
| real | double |
| double precision | double |
| 布林值 | 布林值 |
| char | string |
| varchar | string |
| varchar(n) | string |
| 日期 | 日期 |
| timestamp | timestamp |
| timestamptz | timestamp |