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.
JDBC-Verbindungen
Bestimmte, in der Regel relationale Datenbanktypen unterstützen die Verbindung über den JDBC-Standard. Weitere Informationen zu JDBC finden Sie in der Dokumentation zur Java JDBC API
Zu den JDBC-connectionType-Werten gehören:
-
"connectionType": "sqlserver"
: Bezeichnet eine Verbindung zu einer Microsoft SQL Server-Datenbank. -
"connectionType": "mysql"
: Bezeichnet eine Verbindung zu einer MySQL-Datenbank. -
"connectionType": "oracle"
: Bezeichnet eine Verbindung zu einer Oracle-Datenbank. -
"connectionType": "postgresql"
: Bezeichnet eine Verbindung zu einer PostgreSQL-Datenbank. -
"connectionType": "redshift"
: Bezeichnet eine Verbindung zu einer Amazon-Redshift-Datenbank. Weitere Informationen finden Sie unter Redshift-Verbindungen.
In der folgenden Tabelle sind die von AWS Glue unterstützten JDBC-Treiberversionen aufgeführt.
Produkt | JDBC-Treiberversionen für Glue 4.0 | JDBC-Treiberversionen für Glue 3.0 | JDBC-Treiberversionen für Glue 0.9, 1.0, 2.0 |
---|---|---|---|
Microsoft SQL Server | 9,4,0 | 7.x | 6.x |
MySQL | 8.0.23 | 8.0.23 | 5.1 |
Oracle Database | 21,7 | 21,1 | 11.2 |
PostgreSQL | 42,3,6 | 42,2,18 | 42.1.x |
MongoDB | 4.7.2 | 4.0.0 | 2.0.0 |
Amazon Redshift * | redshift-jdbc42-2.1.0.16 | redshift-jdbc41-1.2.12.1017 | redshift-jdbc41-1.2.12.1017 |
* Für den Amazon-Redshift-Verbindungstyp werden alle anderen Optionsname/Wert-Paare, die in Verbindungsoptionen für eine JDBC-Verbindung enthalten sind, einschließlich Formatierungsoptionen, direkt an die zugrunde liegende SparkSQL-Datenquelle übergeben. In AWS Glue mit Spark-Aufträgen in AWS Glue 4.0 und späteren Versionen verwendet der native AWS-Glue-Konnektor für Amazon Redshift die Amazon-Redshift-Integration für Apache Spark. Weitere Informationen finden Sie unter Amazon-Redshift-Integration für Apache Spark. In früheren Versionen finden Sie Informationen zur Amazon-Redshift-Datenquelle für Spark
Informationen zum Konfigurieren Ihrer Amazon VPC für die Verbindung mit Amazon-RDS-Datenspeichern über JDBC finden Sie unter Einrichtung von Amazon VPC für JDBC-Verbindungen zu Amazon RDS-Datenspeichern von AWS Glue.
Anmerkung
AWS-Glue-Aufträge werden während einer Ausführung nur einem Subnetz zugeordnet. Dies kann sich auf Ihre Fähigkeit auswirken, über denselben Auftrag eine Verbindung zu mehreren Datenquellen herzustellen. Dieses Verhalten ist nicht auf JDBC-Quellen beschränkt.
Themen
Referenz zur JDBC-Verbindungsoption
Wenn Sie bereits eine Verbindung für JDBC AWS Glue definiert haben, können Sie die darin definierten Konfigurationseigenschaften wie URL, Benutzer und Passwort wiederverwenden, sodass Sie sie nicht im Code als Verbindungsoptionen angeben müssen. Dieses Feature ist in AWS Glue 3.0 und späteren Versionen verfügbar. Verwenden Sie dazu die folgenden Verbindungseigenschaften:
-
"useConnectionProperties"
: Setzen Sie den Wert auf „true“, um anzugeben, dass Sie die Konfiguration von einer Verbindung aus verwenden möchten. -
"connectionName"
: Geben Sie den Verbindungsnamen ein, aus dem die Konfiguration abgerufen werden soll. Die Verbindung muss in derselben Region wie der Auftrag definiert sein.
Verwenden Sie diese Verbindungsoptionen mit JDBC-Verbindungen:
-
"url"
: (Erforderlich) Die JDBC-URL für die Datenbank. -
"dbtable"
: (Erforderlich) Die Datenbanktabelle, aus der gelesen werden soll. Bei JDBC-Datenspeichern, die von Schemata innerhalb einer Datenbank unterstützen, geben Sieschema.table-name
an. Wenn kein Schema angegeben ist, wird der Standardwert "öffentliches" Schema verwendet. -
"user"
: (Erforderlich) Der Benutzername, der beim herstellen der Verbindung verwendet werden soll. -
"password"
: (Erforderlich) Das Passwort für die Verbindung. -
(Optional) Mit den folgenden Optionen können Sie einen benutzerdefinierten JDBC-Treiber bereitstellen. Verwenden Sie diese Optionen, wenn Sie einen Treiber verwenden müssen, der AWS Glue nicht nativ unterstützt.
ETL-Aufträge können verschiedene JDBC-Treiberversionen für die Datenquelle und das Ziel verwenden, selbst wenn Quelle und Ziel dasselbe Datenbankprodukt sind. Auf diese Weise können Sie Daten zwischen Quell- und Zieldatenbanken mit unterschiedlichen Versionen migrieren. Um diese Optionen zu verwenden, müssen Sie zuerst die JAR-Datei des JDBC-Treibers in Amazon S3 hochladen.
-
"customJdbcDriverS3Path"
: Der Amazon-S3-Pfad des benutzerdefinierten JDBC-Treibers. -
"customJdbcDriverClassName"
: Der Klassenname des JDBC-Treibers.
-
-
"bulkSize"
: (Optional) Wird verwendet, um parallele Inserts zu konfigurieren, um Massenladungen in JDBC-Ziele zu beschleunigen. Geben Sie einen ganzzahligen Wert für den Parallelitätsgrad an, der beim Schreiben oder Einfügen von Daten verwendet werden soll. Diese Option ist hilfreich, um die Leistung beim Schreiben in Datenbanken wie das Arch User Repository (AUR) zu verbessern. -
"hashfield"
(Optional) Eine Zeichenfolge, die zur Angabe des Namens einer Spalte in der JDBC-Tabelle verwendet wird, die zum Aufteilen der Daten in Partitionen beim parallelen Lesen aus JDBC-Tabellen verwendet werden soll. Geben Sie „hashfield“ ODER „hashexpression“ an. Weitere Informationen finden Sie unter Parallel aus JDBC-Tabellen lesen. -
"hashexpression"
(Optional) Eine SQL-Auswahlklausel, die eine ganze Zahl zurückgibt. Wird verwendet, um die Daten in einer JDBC-Tabelle beim parallelen Lesen aus JDBC-Tabellen in Partitionen zu unterteilen. Geben Sie „hashfield“ ODER „hashexpression“ an. Weitere Informationen finden Sie unter Parallel aus JDBC-Tabellen lesen. -
"hashpartitions"
(Optional) Eine positive Ganzzahl. Wird verwendet, um die Anzahl der parallelen Lesevorgänge der JDBC-Tabelle anzugeben, wenn parallel aus JDBC-Tabellen gelesen wird. Standard: 7. Weitere Informationen finden Sie unter Parallel aus JDBC-Tabellen lesen. -
"sampleQuery"
: (Optional) Eine benutzerdefinierte SQL-Abfrageanweisung. Wird verwendet, um eine Teilmenge von Informationen in einer Tabelle anzugeben, um ein Beispiel des Tabelleninhalts abzurufen. Wenn sie ohne Rücksicht auf Ihre Daten konfiguriert wird, kann sie weniger effizient als DynamicFrame-Methoden sein und zu Zeitüberschreitungen oder Fehlern aufgrund von Speichermangel führen. Weitere Informationen finden Sie unter sampleQuery verwenden. -
"enablePartitioningForSampleQuery"
: (Optional) Ein boolescher Wert. Standard: falsch. Wird verwendet, um das parallele Lesen aus JDBC-Tabellen bei Angabe vonsampleQuery
zu ermöglichen. Wenn es auf wahr festgelegt ist, musssampleQuery
mit „where“ oder „and“ enden, damit AWS Glue Partitionierungsbedingungen anfügt. Weitere Informationen finden Sie unter sampleQuery verwenden. -
"sampleSize"
: (Optional) Eine positive Ganzzahl. Begrenzt die Anzahl der von der Beispielabfrage zurückgegebenen Zeilen. Funktioniert nur, wennenablePartitioningForSampleQuery
true ist. Wenn die Partitionierung nicht aktiviert ist, sollten Sie stattdessen"limit x"
direkt insampleQuery
einfügen, um die Größe zu begrenzen. Weitere Informationen finden Sie unter sampleQuery verwenden.
sampleQuery verwenden
Dieser Abschnitt erläutert die Verwendung von sampleQuery
, sampleSize
und enablePartitioningForSampleQuery
.
sampleQuery
kann ein effizienter Weg sein, um ein paar Zeilen Ihres Datensatzes abzufragen. In der Standardeinstellung wird die Abfrage von einem einzigen Ausführer ausgeführt. Wenn sie ohne Rücksicht auf Ihre Daten konfiguriert wird, kann sie weniger effizient als DynamicFrame-Methoden sein und zu Zeitüberschreitungen oder Fehlern aufgrund von Speichermangel führen. Das Ausführen von SQL in der zugrunde liegenden Datenbank als Teil Ihrer ETL-Pipeline ist im Allgemeinen nur aus Leistungsgründen erforderlich. Wenn Sie eine Vorschau einiger Zeilen Ihres Datensatzes anzeigen möchten, sollten Sie die Verwendung von show in Betracht ziehen. Wenn Sie versuchen, Ihr Dataset mithilfe von SQL zu transformieren, sollten Sie die Verwendung von toDF in Betracht ziehen, um eine SparkSQL-Transformation für Ihre Daten in einem DataFrame-Formular zu definieren.
Während Ihre Abfrage eine Vielzahl von Tabellen manipulieren kann, ist dbtable
weiterhin erforderlich.
Verwendung von sampleQuery zum Abrufen eines Beispiels Ihrer Tabelle
Wenn Sie das Standardverhalten von „sampleQuery“ zum Abrufen eines Beispiels Ihrer Daten verwenden, erwartet AWS Glue keinen nennenswerten Durchsatz und führt Ihre Abfrage daher auf einem einzigen Ausführer aus. Um die von Ihnen bereitgestellten Daten zu begrenzen und keine Leistungsprobleme zu verursachen, empfehlen wir Ihnen, SQL mit einer LIMIT
-Klausel bereitzustellen.
Beispiel Verwenden von sampleQuery ohne Partitionierung
Das folgende Codebeispiel zeigt, wie sampleQuery
ohne Partitionierung verwendet wird.
//A full sql query statement. val query = "select name from
$tableName
where age > 0 limit 1" val connectionOptions = JsonOptions(Map( "url" -> url, "dbtable" -> tableName, "user" -> user, "password" -> password, "sampleQuery" -> query )) val dyf = glueContext.getSource("mysql", connectionOptions) .getDynamicFrame()
Verwendung von sampleQuery für größere Datensätze
Wenn Sie einen großen Datensatz lesen, müssen Sie möglicherweise die JDBC-Partitionierung aktivieren, um eine Tabelle parallel abzufragen. Weitere Informationen finden Sie unter Parallel aus JDBC-Tabellen lesen. Um sampleQuery
mit JDBC-Partitionierung zu verwenden, legen Sie enablePartitioningForSampleQuery
auf wahr fest. Um dieses Feature zu aktivieren, müssen Sie einige Änderungen an Ihrer sampleQuery
vornehmen.
Wenn Sie die JDBC-Partitionierung mit sampleQuery
verwenden, muss Ihre Abfrage mit „where“ oder „and“ enden, damit AWS Glue Partitionierungsbedingungen anfügen kann.
Wenn Sie die Ergebnisse Ihrer sampleQuery beim parallelen Lesen aus JDBC-Tabellen einschränken möchten, legen Sie den "sampleSize"
-Parameter fest, anstatt eine LIMIT
-Klausel anzugeben.
Beispiel Verwenden sampleQuery mit JDBC-Partitionierung
Das folgende Codebeispiel zeigt, wie sampleQuery
mit JDBC-Partitionierung verwendet wird.
//note that the query should end with "where" or "and" if use with JDBC partitioning. val query = "select name from
$tableName
where age > 0 and" //Enable JDBC partitioning by setting hashfield. //to use sampleQuery with partitioning, set enablePartitioningForSampleQuery. //use sampleSize to limit the size of returned data. val connectionOptions = JsonOptions(Map( "url" -> url, "dbtable" -> tableName, "user" -> user, "password" -> password, "hashfield" -> primaryKey, "sampleQuery" -> query, "enablePartitioningForSampleQuery" -> true, "sampleSize" -> "1" )) val dyf = glueContext.getSource("mysql", connectionOptions) .getDynamicFrame()
Hinweise und Einschränkungen:
Beispielabfragen können nicht zusammen mit Auftragslesezeichen verwendet werden. Der Lesezeichenstatus wird ignoriert, wenn die Konfiguration für beide bereitgestellt wird.
Benutzerdefinierten JDBC-Treiber verwenden
In den folgenden Codebeispielen wird gezeigt, wie JDBC-Datenbanken mit benutzerdefinierten JDBC-Treibern gelesen und geschrieben werden. Diese demonstrieren das Lesen aus einer Version eines Datenbankprodukts und das Schreiben in eine spätere Version desselben Produkts.