Amazon Athena Oracle Konnektor - Amazon Athena

Amazon Athena Oracle Konnektor

Der Amazon-Athena-Konnektor für Oracle ermöglicht es Amazon Athena, SQL-Abfragen für Daten auszuführen, die in Oracle gespeichert sind, die On-Premises oder auf Amazon EC2 oder Amazon RDS ausgeführt werden. Sie können den Konnektor auch verwenden, um Daten auf Oracle Exadata abzufragen.

Dieser Connector kann bei Glue-Datenkatalog als Verbundkatalog registriert werden. Er unterstützt in Lake Formation definierte Datenzugriffskontrollen auf Katalog-, Datenbank-, Tabellen-, Spalten-, Zeilen- und Tagebene. Dieser Konnektor verwendet Glue Connections, um die Konfigurationseigenschaften in Glue zu zentralisieren.

Voraussetzungen

Einschränkungen

  • Schreiboperationen wie DDL werden nicht unterstützt.

  • In einem Multiplexer-Setup werden der Überlauf-Bucket und das Präfix von allen Datenbank-Instances gemeinsam genutzt.

  • Alle relevanten Lambda-Grenzwerte. Weitere Informationen finden Sie unter Lambda quotas (Lambda-Kontingente) im AWS Lambda-Entwicklerhandbuch.

  • Es werden nur Oracle-Datenbanken der Version 12.1.0.2 unterstützt.

  • Wenn der Oracle-Konnektor keine Glue-Connection verwendet, werden die Datenbank-, Tabellen- und Spaltennamen vom Konnektor in Großbuchstaben umgewandelt.

    Wenn der Oracle-Konnektor eine Glue-Connection verwendet, werden die Datenbank-, Tabellen- und Spaltennamen vom Konnektor nicht standardmäßig in Großbuchstaben geschrieben. Um dieses Verhalten bei der Groß- und Kleinschreibung zu ändern, ändern Sie Lambda nach Umgebungsvariable casing_mode auf upper oder lower, nach Bedarf.

    Ein Oracle-Konnektor, der eine Glue-Connection verwendet, unterstützt die Verwendung eines Multiplexing-Handlers nicht.

  • Wenn Sie Oracle NUMBER ohne definierte Genauigkeit und Dezimalstellen verwenden, behandelt Athena dies als BIGINT. Um die erforderlichen Dezimalstellen in Athena zu erhalten, geben Sie default_scale=<number of decimal places> in Ihren Lambda-Umgebungsvariablen an.

Bedingungen

Die folgenden Begriffe beziehen sich auf den Oracle-Konnektor.

  • Datenbank-Instance – Jede Instance einer Datenbank, die On-Premises, in Amazon EC2 oder auf Amazon RDS bereitgestellt wird.

  • Handler – Ein Lambda-Handler, der auf Ihre Datenbank-Instance zugreift. Ein Handler kann für Metadaten oder für Datensätze verwendet werden.

  • Metadaten-Handler – Ein Lambda-Handler, der Metadaten von Ihrer Datenbank-Instance abruft.

  • Record Handler – Ein Lambda-Handler, der Datensätze aus Ihrer Datenbank-Instance abruft.

  • Composite Handler – Ein Lambda-Handler, der sowohl Metadaten als auch Datensätze aus Ihrer Datenbank-Instance abruft.

  • Eigenschaft oder Parameter – Eine Datenbankeigenschaft, die von Handlern zum Extrahieren von Datenbankinformationen verwendet wird. Sie konfigurieren diese Eigenschaften als Lambda-Umgebungsvariablen.

  • Verbindungszeichenfolge – Eine Textzeichenfolge, die verwendet wird, um eine Verbindung zu einer Datenbank-Instance herzustellen.

  • Katalog – Ein Nicht-AWS Glue-Katalog, der bei Athena registriert ist und ein erforderliches Präfix für die connection_string-Eigenschaft darstellt.

  • Multiplex-Handler – Ein Lambda-Handler, der mehrere Datenbankverbindungen akzeptieren und verwenden kann.

Parameter

Verwenden Sie die Parameter in diesem Abschnitt, um den Oracle-Konnektor zu konfigurieren.

Wir empfehlen, dass Sie einen Oracle-Connector mithilfe eines Glue-Connections-Objekts konfigurieren. Setzen Sie dazu die glue_connection-Umgebungsvariable des Oracle-Konnektors Lambda auf den Namen der zu verwendenden Glue-Connection.

Eigenschaften von Glue Connections

Verwenden Sie den folgenden Befehl, um das Schema für ein Glue-Connection-Objekt zu erhalten. Dieses Schema enthält alle Parameter, mit denen Sie Ihre Verbindung steuern können.

aws glue describe-connection-type --connection-type ORACLE

Lambda-Umgebungseigenschaften

  • glue_connection – Gibt den Namen der Glue-Connection an, die dem Verbund-Connector zugeordnet ist.

  • is_fips_enabled – (Optional) Auf true gesetzt, wenn der FIPS-Modus aktiviert ist. Der Standardwert lautet „false“.

  • casing_mode – (Optional) Gibt an, wie bei Schema- und Tabellennamen die Groß- und Kleinschreibung behandelt werden soll. Der casing_mode-Parameter verwendt die folgenden Werte, um das Verhalten der Groß-/Kleinschreibung festzulegen:

    • lower – Kleinschreibung aller angegebenen Schema- und Tabellennamen. Dies ist die Standardeinstellung für Konnektoren, denen eine Glue-Connection zugeordnet ist.

    • upper – Großschreibung aller angegebenen Schema- und Tabellennamen. Dies ist die Standardeinstellung für Konnektoren, denen keine Glue-Connection zugeordnet ist.

    • case_insensitive_search – Führt Suchen nach Schema- und Tabellennamen in Oracle, ohne Berücksichtigung der Groß- und Kleinschreibung durch. Verwenden Sie diesen Wert, wenn Ihre Abfrage Schema- oder Tabellennamen enthält, die nicht mit der Standard-Groß- und Kleinschreibung für Ihren Connector übereinstimmen.

Anmerkung
  • Alle Konnektoren, die Glue Connections verwenden, müssen AWS Secrets Manager zum Speichern von Anmeldeinformationen verwenden.

  • Der mit Glue-Connection erstellte Oracle-Connector unterstützt die Verwendung eines Multiplexing-Handlers nicht.

  • Der mit Glue-Connection erstellte Oracle-Connector unterstützt nur ConnectionSchemaVersion 2.

Anmerkung

Athena-Datenquellenkonnektoren, die am 3. Dezember 2024 und später erstellt wurden, verwenden AWS Glue-Verbindungen.

Die unten aufgeführten Parameternamen und Definitionen beziehen sich auf Athena-Datenquellenkonnektoren, die ohne eine zugehörige Glue-Connection erstellt wurden. Verwenden Sie die folgenden Parameter nur, wenn Sie eine frühere Version eines Athena-Datenquellenkonnektors manuell bereitstellen oder wenn die glue_connection-Umgebungseigenschaft nicht angegeben ist.

Lambda-Umgebungseigenschaften

  • default – Die JDBC-Verbindungszeichenfolge, die für die Verbindung mit der Oracle-Datenbankinstance verwendet werden soll. Beispiel: , oracle://${jdbc_connection_string}

  • catalog_connection_string – Wird vom Multiplexing-Handler verwendet (wird nicht unterstützt, wenn eine Glue-Connection verwendet wird). Eine Verbindungszeichenfolge einer Datenbank-Instance. Stellen Sie der Umgebungsvariablen den Namen des in Athena verwendeten Katalogs voran. Wenn zum Beispiel der bei Athena registrierte Katalog myoraclecatalog ist, dann lautet der Name der Umgebungsvariablen myoraclecatalog_connection_string.

  • spill_bucket – Gibt den Amazon S3-Bucket für Daten an, die die Lambda-Funktionsgrenzen überschreiten.

  • spill_prefix – (Optional) Ist standardmäßig ein Unterordner im angegebenen spill_bucket genannt athena-federation-spill. Wir empfehlen Ihnen, einen Amazon-S3-Speicher-Lebenszyklus an dieser Stelle zu konfigurieren, um die Überlaufe zu löschen, die älter als eine festgelegte Anzahl von Tagen oder Stunden sind.

  • spill_put_request_headers – (Optional) Eine JSON-codierte Zuordnung von Anforderungsheadern und Werten für die Amazon-S3-putObject-Anforderung, die für den Überlauf verwendet wird (z. B. {"x-amz-server-side-encryption" : "AES256"}). Andere mögliche Header finden Sie unter PutObject in der API-Referenz zu Amazon Simple Storage Service.

  • kms_key_id – (Optional) Standardmäßig werden alle Daten, die an Amazon S3 gesendet werden, mit dem AES-GCM-authentifizierten Verschlüsselungsmodus und einem zufällig generierten Schlüssel verschlüsselt. Damit Ihre Lambda-Funktion stärkere Verschlüsselungsschlüssel verwendet, die von KMS generiert werden, wiea7e63k4b-8loc-40db-a2a1-4d0en2cd8331, können Sie eine ID einer Verschlüsselung angeben.

  • disable_spill_encryption – (Optional) Bei Einstellung auf True, wird die Spill-Verschlüsselung deaktiviert. Die Standardeinstellung ist False, sodass Daten, die an S3 übertrragen werden, mit AES-GCM verschlüsselt werden - entweder mit einem zufällig generierten Schlüssel oder mit KMS zum Generieren von Schlüsseln. Das Deaktivieren der Überlauf-Verschlüsselung kann die Leistung verbessern, insbesondere wenn Ihr Überlauf-Standort eine serverseitige Verschlüsselung verwendet.

  • is_fips_enabled – (Optional) Auf true gesetzt, wenn der FIPS-Modus aktiviert ist. Der Standardwert lautet „false“.

  • casing_mode – (Optional) Gibt an, wie bei Schema- und Tabellennamen die Groß- und Kleinschreibung behandelt werden soll. Der casing_mode-Parameter verwendt die folgenden Werte, um das Verhalten der Groß-/Kleinschreibung festzulegen:

    • lower – Kleinschreibung aller angegebenen Schema- und Tabellennamen. Dies ist die Standardeinstellung für Konnektoren, denen eine Glue-Connection zugeordnet ist.

    • upper – Großschreibung aller angegebenen Schema- und Tabellennamen. Dies ist die Standardeinstellung für Konnektoren, denen keine Glue-Connection zugeordnet ist.

    • case_insensitive_search – Führt Suchen nach Schema- und Tabellennamen in Oracle, ohne Berücksichtigung der Groß- und Kleinschreibung durch. Verwenden Sie diesen Wert, wenn Ihre Abfrage Schema- oder Tabellennamen enthält, die nicht mit der Standard-Groß- und Kleinschreibung für Ihren Connector übereinstimmen.

Verbindungszeichenfolge

Verwenden Sie eine JDBC-Verbindungszeichenfolge im folgenden Format, um eine Verbindung zu einer Datenbank-Instance herzustellen.

oracle://${jdbc_connection_string}
Anmerkung

Wenn Ihr Passwort Sonderzeichen enthält (z. B. some.password), schließen Sie Ihr Passwort in doppelte Anführungszeichen ein, wenn Sie es an die Verbindungszeichenfolge übergeben (z. B. "some.password"). Wenn Sie dies nicht tun, kann dies zu einem Fehler Angabe einer ungültigen Oracle-URL führen.

Verwenden eines einzelnen Verbindungs-Handlers

Sie können die folgenden Einzelverbindungsmetadaten und Record Handler verwenden, um eine Verbindung zu einer einzelnen Oracle-Instance herzustellen.

Handler-Typ Klasse
Composite Handler OracleCompositeHandler
Metadaten-Handler OracleMetadataHandler
Record Handler OracleRecordHandler
Parameter für Einzelverbindungs-Handler
Parameter Beschreibung
default Erforderlich Die standardmäßige Verbindungszeichenfolge.
IsFIPSEnabled Optional. Wird auf true eingestellt, wenn der FIPS-Modus aktiviert ist. Der Standardwert ist false.

Die Einzelverbindungs-Handler unterstützen eine Datenbank-Instance und müssen einen default-Verbindungszeichenfolgenparameter bereitstellen. Alle anderen Verbindungszeichenfolgen werden ignoriert.

Der Konnektor unterstützt SSL-basierte Verbindungen zu Amazon RDS-Instances. Die Unterstützung ist auf das Transport Layer Security (TLS)-Protokoll und auf die Authentifizierung des Servers durch den Client beschränkt. Gegenseitige Authentifizierung wird in Amazon RDS nicht unterstützt. Die zweite Zeile in der folgenden Tabelle zeigt die Syntax für die Verwendung von SSL.

Die folgende Beispieleigenschaft gilt für eine einzelne Oracle-Instance, die von einer Lambda-Funktion unterstützt wird.

Eigenschaft Wert
default oracle://jdbc:oracle:thin:${Test/RDS/Oracle}@//hostname:port/servicename
oracle://jdbc:oracle:thin:${Test/RDS/Oracle}@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS) (HOST=<HOST_NAME>)(PORT=))(CONNECT_DATA=(SID=))(SECURITY=(SSL_SERVER_CERT_DN=)))

Bereitstellen von Anmeldeinformationen

Um einen Benutzernamen und ein Kennwort für Ihre Datenbank in Ihrer JDBC-Verbindungszeichenfolge anzugeben, können Sie Eigenschaften von Verbindungszeichenfolgen oder AWS Secrets Manager verwenden.

  • Verbindungszeichenfolge – Ein Benutzername und ein Kennwort können als Eigenschaften in der JDBC-Verbindungszeichenfolge angegeben werden.

    Wichtig

    Als bewährte Sicherheitsmethode sollten Sie keine fest kodierten Anmeldeinformationen in Ihren Umgebungsvariablen oder Verbindungszeichenfolgen verwenden. Informationen zum Verschieben von fest codierten Secrets nach AWS Secrets Manager finden Sie unter Verschieben von fest codierten Secrets nach AWS Secrets Manager im AWS Secrets Manager-Benutzerhandbuch.

  • AWS Secrets Manager – Um das Athena-Federated-Query-Feature mit AWS Secrets Manager zu verwenden, sollte die mit Ihrer Lambda-Funktion verbundene VPC über einen Internetzugang oder einen VPC-Endpunkt verfügen, um eine Verbindung zu Secrets Manager herzustellen.

    Sie können den Namen eines Secrets in AWS Secrets Manager in Ihrer JDBC-Verbindungszeichenfolge eingeben. Der Konnektor ersetzt den geheimen Namen durch username- und password-Werte von Secrets Manager.

    Für Amazon RDS-Datenbank-Instances ist diese Unterstützung eng integriert. Wenn Sie Amazon RDS verwenden, empfehlen wir dringend die Verwendung von AWS Secrets Manager und Wechsel der Anmeldeinformationen. Wenn Ihre Datenbank Amazon RDS nicht verwendet, speichern Sie die Anmeldeinformationen als JSON im folgenden Format:

    {"username": "${username}", "password": "${password}"}
Anmerkung

Wenn Ihr Passwort Sonderzeichen enthält (z. B. some.password), setzen Sie Ihr Passwort in doppelte Anführungszeichen, wenn Sie es in Secrets Manager speichern (z. B. "some.password"). Wenn Sie dies nicht tun, kann dies zu einem Fehler Angabe einer ungültigen Oracle-URL führen.

Beispiel einer Verbindungszeichenfolge mit einem geheimen Namen

Die folgende Zeichenfolge hat den geheimen Namen ${Test/RDS/Oracle}.

oracle://jdbc:oracle:thin:${Test/RDS/Oracle}@//hostname:port/servicename

Der Konnektor verwendet den geheimen Namen, um Secrets abzurufen und den Benutzernamen und das Kennwort bereitzustellen, wie im folgenden Beispiel gezeigt.

oracle://jdbc:oracle:thin:username/password@//hostname:port/servicename

Derzeit erkennt der Oracle-Konnektor die UID- und PWD-JDBC-Eigenschaften.

Verwenden eines Multiplexing-Handlers

Sie können einen Multiplexer verwenden, um mit einer einzigen Lambda-Funktion eine Verbindung zu mehreren Datenbank-Instances herzustellen. Anfragen werden anhand des Katalognamens weitergeleitet. Verwenden Sie die folgenden Klassen in Lambda.

Handler Klasse
Composite Handler OracleMuxCompositeHandler
Metadaten-Handler OracleMuxMetadataHandler
Record Handler OracleMuxRecordHandler
Multiplex-Handler-Parameter
Parameter Beschreibung
$catalog_connection_string Erforderlich Eine Verbindungszeichenfolge einer Datenbank-Instance. Stellen Sie der Umgebungsvariablen den Namen des in Athena verwendeten Katalogs voran. Wenn zum Beispiel der bei Athena registrierte Katalog myoraclecatalog ist, dann lautet der Name der Umgebungsvariablen myoraclecatalog_connection_string.
default Erforderlich Die standardmäßige Verbindungszeichenfolge. Diese Zeichenfolge wird verwendet, wenn der Katalog lambda:${AWS_LAMBDA_FUNCTION_NAME} ist.

Die folgenden Beispieleigenschaften gelten für eine Oracle MUX Lambda-Funktion, die zwei Datenbankinstanzen unterstützt: oracle1 (die Standardeinstellung) und oracle2.

Eigenschaft Wert
default oracle://jdbc:oracle:thin:${Test/RDS/Oracle1}@//oracle1.hostname:port/servicename
oracle_catalog1_connection_string oracle://jdbc:oracle:thin:${Test/RDS/Oracle1}@//oracle1.hostname:port/servicename
oracle_catalog2_connection_string oracle://jdbc:oracle:thin:${Test/RDS/Oracle2}@//oracle2.hostname:port/servicename

Datentypunterstützung

Die folgende Tabelle zeigt die entsprechenden Datentypen für JDBC, Oracle und Arrow.

JDBC Oracle Arrow
Boolesch boolesch Bit
Ganzzahl N/A Tiny
Short smallint Smallint
Ganzzahl Ganzzahl Int
Long bigint Bigint
float float4 Float4
Double float8 Float8
Datum date Dateday
Zeitstempel Zeitstempel DateMilli
String text Varchar
Bytes bytes Varbinary
BigDecimal numeric(p,s) Dezimalwert
ARRAY N.z. (siehe Hinweis) Auflisten

Partitionen und Splits

Partitionen werden verwendet, um zu bestimmen, wie Splits für den Konnektor generiert werden. Athena konstruiert eine synthetische Säule vom Typ varchar, die das Partitionierungsschema für die Tabelle darstellt, das dem Konnektor beim Generieren von Splits hilft. Der Konnektor ändert nicht die eigentliche Tabellendefinition.

Leistung

Oracle unterstützt native Partitionen. Der Athena-Oracle-Konnektor kann Daten von diesen Partitionen parallel abrufen. Wenn Sie sehr große Datenmengen mit einheitlicher Partitionsverteilung abfragen möchten, wird eine native Partitionierung dringend empfohlen. Die Auswahl einer Teilmenge von Spalten beschleunigt die Abfragelaufzeit erheblich und reduziert die gescannten Daten. Der Oracle-Konnektor ist aufgrund der Gleichzeitigkeit widerstandsfähig gegenüber Drosselung. Allerdings sind die Abfragelaufzeiten in der Regel lang.

Der Athena-Oracle-Konnektor führt einen Prädikat-Pushdown durch, um die von der Abfrage durchsuchten Daten zu reduzieren. Einfache Prädikate und komplexe Ausdrücke werden an den Konnektor übertragen, um die Menge der gescannten Daten zu reduzieren und die Laufzeit der Abfrageausführung zu verkürzen.

Prädikate

Ein Prädikat ist ein Ausdruck in der WHERE-Klausel einer SQL-Abfrage, der einen booleschen Wert ergibt und Zeilen auf der Grundlage mehrerer Bedingungen filtert. Der Athena-Oracle-Konnektor kann diese Ausdrücke kombinieren und sie direkt an Oracle weiterleiten, um die Funktionalität zu erweitern und die Menge der gescannten Daten zu reduzieren.

Die folgenden Athena-Oracle-Konnektor-Operatoren unterstützen Prädikat-Pushdown:

  • Boolean: UND, ODER, NICHT

  • Gleichheit: GLEICH, NICHT GLEICH, WENIGER_ALS, WENIGER_ODER_GLEICH, GRÖSSER_ALS, GRÖSSER_ODER_GLEICH, IST_NULL

  • Arithmetik: ADDIEREN, SUBTRAHIEREN, MULTIPLIZIEREN, DIVIDIEREN, NEGIEREN

  • Andere: WIE_MUSTER, IN

Beispiel für einen kombinierten Pushdown

Kombinieren Sie für erweiterte Abfragefunktionen die Pushdown-Typen wie im folgenden Beispiel:

SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%');

Pass-Through-Abfragen

Der Oracle-Connector unterstützt Pass-Through-Abfragen. Pass-Through-Abfragen verwenden eine Tabellenfunktion, um Ihre vollständige Abfrage zur Ausführung an die Datenquelle weiterzuleiten.

Um Pass-Through-Abfragen mit Oracle zu verwenden, können Sie die folgende Syntax verwenden:

SELECT * FROM TABLE( system.query( query => 'query string' ))

Die folgende Beispielabfrage gibt eine Abfrage an eine Datenquelle in Oracle weiter. Die Abfrage wählt alle Spalten in der customer-Tabelle aus.

SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer' ))

Lizenzinformationen

Durch die Verwendung dieses Konnektors erkennen Sie die Aufnahme von Komponenten von Drittanbietern an. Eine Liste dieser Komponenten finden Sie in der pom.xml-Datei für diesen Konnektor. Zudem stimmen Sie den Bedingungen der jeweiligen Drittanbieterlizenzen zu, die in der LICENSE.txt-Datei auf GitHub.com aufgeführt werden.

Weitere Ressourcen

Die neuesten Informationen zur JDBC-Treiberversion finden Sie in der pom.xml-Datei für den Oracle-Konnektor auf GitHub.com.

Weitere Informationen zu diesem Konnektor finden Sie unter der entsprechenden Seite auf GitHub.com.