Konvertierung von ETL-Prozessen mithilfe der Python-API fürAWS GluemitAWS SCT - AWS Schema Conversion Tool

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Konvertierung von ETL-Prozessen mithilfe der Python-API fürAWS GluemitAWS SCT

In den folgenden Abschnitten finden Sie eine Beschreibung einer Konvertierung, bei der AWS Glue-API-Operationen in Python aufgerufen werden. Weitere Informationen finden Sie unterProgrammAWS GlueETL-Skripte in Pythonin der AWS GlueLeitfaden für Entwickler.

Schritt 1: Erstellen einer Datenbank

Der erste Schritt besteht darin, eine neue Datenbank in einerAWS GlueDatenkatalog mithilfe desAWSSDK-API. Wenn Sie eine Tabelle im Datenkatalog definieren, fügen Sie sie einer Datenbank hinzu. Eine Datenbank wird verwendet, um Tabellen in AWS Glue zu organisieren.

Das folgende Beispiel zeigt die create_database-Methode der Python-API für AWS Glue:

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

Wenn Sie Amazon Redshift verwenden, wird der Datenbankname wie folgt gebildet.

{redshift_cluster_name}_{redshift_database_name}_{redshift_schema_name}

Der vollständige Name des Amazon Redshift-Clusters für dieses Beispiel lautet wie folgt.

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

Die folgende Abbildung zeigt ein Beispiel für einen gültigen Datenbanknamen. In diesem Fall ist rsdbb03 der Name, bei dem es sich um den ersten Teil des vollständigen Namens des Cluster-Endpunkts handelt. Die Datenbank trägt den Namen dev und das Schema ist ora_glue.

rsdbb03_dev_ora_glue

Schritt 2: Verbindung erstellen

Erstellen Sie eine neue Verbindung in einem Datenkatalog mithilfe desAWSSDK-API.

Das folgende Beispiel zeigt die Anwendung der create_connection-Methode der Python-API für 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' ] } } )

In create_connection werden die folgenden Parameter verwendet:

  • Name(UTF-8-Zeichenfolge) — erforderlich. Für Amazon Redshift wird der Verbindungsname wie folgt gebildet:Redshift_<Endpoint-name>_<redshift-database-name>, zum Beispiel: Redshift_abcde03_dev

  • Description(UTF-8-Zeichenfolge) — Ihre Beschreibung der Verbindung.

  • ConnectionType(UTF-8-Zeichenfolge) — Erforderlich. Die Art der Verbindung. Derzeit wird nur JDBC unterstützt, SFTP wird nicht unterstützt.

  • ConnectionProperties(dict) — Erforderlich. Eine Liste von Schlüssel-Wert-Paaren, die als Parameter für diese Verbindung verwendet werden, einschließlich der JDBC-Verbindungs-URL, des Benutzernamens und des Passworts.

  • PhysicalConnectionRequirements(dict) — Physikalische Verbindungsanforderungen, die Folgendes beinhalten:

    • SubnetId(UTF-8-Zeichenfolge) — Die ID des von der Verbindung verwendeten Subnetzes.

    • SecurityGroupIdList(list) — Die von der Verbindung verwendete Sicherheitsgruppen-ID-Liste.

    • AvailabilityZone(UTF-8-Zeichenfolge) — Erforderlich. Die Availability Zone, die den Endpunkt enthält. Dieser Parameter ist veraltet.

Schritt 3: Erstellen Sie eineAWS GlueCrawler

Als Nächstes erstellen Sie einen AWS Glue-Crawler zum Auffüllen des AWS Glue-Katalogs. Weitere Informationen finden Sie unterTabellen mit einem Crawler katalogisierenin derAWS GlueLeitfaden für Entwickler.

Der erste Schritt beim Hinzufügen eines Crawlers besteht darin, eine neue Datenbank in einem Datenkatalog zu erstellen, indem Sie denAWSSDK-API. Bevor Sie beginnen, stellen Sie sicher, dass Sie zuerst alle früheren Versionen löschen, indem Sie dendelete_crawlerBetrieb.

Beim Erstellen des Crawlers gilt es einige Punkte zu berücksichtigen:

  • Verwenden Sie für Crawler-Namen das Format <redshift_node_name>_<redshift_database_name>_<redshift_shema_name>, z. B.: abcde03_dev_ora_glue

  • Verwenden Sie eine IAM-Rolle, die bereits vorhanden ist. Weitere Informationen zum Erstellen von IAM-Rollen finden Sie unterIAM-Rollen erstellenin derIAM-Benutzerhandbuch.

  • Verwenden Sie den Namen der Datenbank, die Sie im vorherigen Schritt erstellt haben.

  • Verwenden Sie den erforderlichen Parameter ConnectionName.

  • Verwenden Sie für den Parameter path den Pfad des JDBC-Ziels, z. B.: dev/ora_glue/%

Im folgenden Beispiel wird ein vorhandener Crawler gelöscht und dann wird ein neuer Crawler mit der Python-API für AWS Glue erstellt:

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' )

Nach der Crawler-Erstellung führen Sie einen Crawler aus, der eine Verbindung zu einem oder mehreren Datenspeichern herstellt, die Datenstrukturen bestimmt und Tabellen in den Datenkatalog schreibt. Sie können Ihren Crawler nach einem Zeitplan ausführen, wie im Folgenden gezeigt.

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

In diesem Beispiel wird Amazon Redshift als Ziel verwendet. Amazon Redshift-Datentypen sind zugeordnetAWS GlueDatentypen auf die folgende Weise, nachdem der Crawler ausgeführt wurde.

Amazon Redshift-Datentyp AWS Glue -Datentyp
smallint smallint
Ganzzahl int
bigint bigint
Dezimalwert decimal(18,0)
decimal(p,s) decimal(p,s)
real double
double precision double
Boolean Boolean
char string
varchar string
varchar(n) string
date date
timestamp timestamp
timestamptz timestamp