Amazon Athena Vertica Konnektor
Vertica ist eine spaltenbasierte Datenbankplattform, die in der Cloud oder On-Premises bereitgestellt werden kann, die Data Warehouses im Exabyte-Maßstab unterstützt. Sie können den Amazon-Athena-Vertica-Konnektor in Verbundabfragen verwenden, um Vertica-Datenquellen von Athena abzufragen. Sie können beispielsweise analytische Abfragen über ein Data Warehouse in Vertica und einen Data Lake in Amazon S3 ausführen.
Dieser Konnektor verwendet keine Glue Connections, um die Konfigurationseigenschaften in Glue zu zentralisieren. Die Verbindungskonfiguration erfolgt über Lambda.
Voraussetzungen
Stellen Sie den Konnektor für Ihr AWS-Konto mithilfe der Athena-Konsole oder AWS Serverless Application Repository bereit. Weitere Informationen finden Sie unter Eine Datenquellenverbindung erstellen oder Verwenden Sie AWS Serverless Application Repository, um einen Datenquellen-Konnektor bereitzustellen.
Richten Sie eine VPC und eine Sicherheitsgruppe ein, bevor Sie diesen Konnektor verwenden. Weitere Informationen finden Sie unter Erstellen einer VPC für einen Datenquellen-Connector oder eine AWS Glue-Verbindung.
Einschränkungen
-
Da der Athena Vertica-Konnektor exportierte Parquet-Dateien aus Amazon S3 liest, kann die Leistung des Konnektors langsam sein. Wenn Sie große Tabellen abfragen, empfehlen wir, dass Sie eine CREATE TABLE AS (SELECT ...)-Abfrage und SQL-Prädikate verwenden.
-
Aufgrund eines bekannten Problems in Athena Federated Query veranlasst der Konnektor derzeit, dass Vertica alle Spalten der abgefragten Tabelle nach Amazon S3 exportiert, aber nur die abgefragten Spalten sind in den Ergebnissen auf der Athena-Konsole sichtbar.
-
Schreiboperationen wie DDL werden nicht unterstützt.
-
Alle relevanten Lambda-Grenzwerte. Weitere Informationen finden Sie unter Lambda quotas (Lambda-Kontingente) im AWS Lambda-Entwicklerhandbuch.
Workflow
Das folgende Diagramm zeigt den Arbeitsablauf einer Abfrage, die den Vertica-Konnektor verwendet.
-
Eine SQL-Abfrage wird für eine oder mehrere Tabellen in Vertica ausgegeben.
-
Der Konnektor analysiert die SQL-Abfrage, um den entsprechenden Teil über die JDBC-Verbindung an Vertica zu senden.
-
Die Verbindungszeichenfolgen verwenden den Benutzernamen und das Passwort, die in AWS Secrets Manager gespeichert sind, um Zugang zu Vertica zu erhalten.
-
Der Konnektor umschließt die SQL-Abfrage mit einem Vertica-
EXPORT-Befehl, wie im folgenden Beispiel.EXPORT TO PARQUET (directory = 's3://amzn-s3-demo-bucket/folder_name, Compression='Snappy', fileSizeMB=64) OVER() as SELECT PATH_ID, ... SOURCE_ITEMIZED, SOURCE_OVERRIDE FROM DELETED_OBJECT_SCHEMA.FORM_USAGE_DATA WHERE PATH_ID <= 5; -
Vertica verarbeitet die SQL-Abfrage und sendet die Ergebnismenge an einen Amazon-S3-Bucket. Für einen besseren Durchsatz verwendet Vertica die
EXPORT-Option, um den Schreibvorgang mehrerer Parquet-Dateien zu parallelisieren. -
Athena durchsucht den Amazon-S3-Bucket, um die Anzahl der Dateien zu ermitteln, die für die Ergebnismenge gelesen werden sollen.
-
Athena ruft die Lambda-Funktion mehrfach auf und verwendet einen Apache
ArrowReaderum die Parquet-Dateien aus dem resultierenden Datensatz zu lesen. Durch mehrere Aufrufe kann Athena das Lesen der Amazon-S3-Dateien parallelisieren und einen Durchsatz von bis zu 100 GB pro Sekunde erreichen. -
Athena verarbeitet die von Vertica zurückgegebenen Daten mit aus dem Data Lake gescannten Daten und gibt das Ergebnis zurück.
Bedingungen
Die folgenden Begriffe beziehen sich auf den Vertica-Konnektor.
-
Datenbank-Instance – Jede Instance einer Vertica-Datenbank, die auf Amazon EC2 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.
Parameter
Verwenden Sie die Parameter in diesem Abschnitt, um den Vertica-Konnektor zu konfigurieren.
Wir empfehlen, dass Sie einen Vertica-Connector mithilfe eines Glue-Connections-Objekts konfigurieren. Setzen Sie dazu die glue_connection-Umgebungsvariable des Vertica-Server-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 VERTICA
Lambda-Umgebungseigenschaften
-
glue_connection – Gibt den Namen der Glue-Connection an, die dem Verbund-Connector zugeordnet ist.
-
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:-
none – Ändern Sie die Groß- und Kleinschreibung der angegebenen Schema- und Tabellennamen nicht. Dies ist die Standardeinstellung für Konnektoren, denen eine Glue-Connection zugeordnet ist.
-
upper – Großschreibung aller angegebenen Schema- und Tabellennamen.
-
lower – Kleinschreibung aller angegebenen Schema- und Tabellennamen.
-
Anmerkung
-
Alle Konnektoren, die Glue Connections verwenden, müssen AWS Secrets Manager zum Speichern von Anmeldeinformationen verwenden.
-
Der mit Glue-Connection erstellte Vertica-Connector unterstützt die Verwendung eines Multiplexing-Handlers nicht.
-
Der mit Glue-Connection erstellte Vertica-Connector unterstützt nur
ConnectionSchemaVersion2.
Der Amazon Athena Vertica Konnektor stellt Konfigurationsoptionen über Lambda-Umgebungsvariablen zur Verfügung. Sie können die folgenden Lambda-Umgebungsvariablen verwenden, um den Konnektor zu konfigurieren.
-
AthenaCatalogName – Name der Lambda-Funktion
-
ExportBucket – Amazon-S3-Bucket, in den die Vertica-Abfrageergebnisse exportiert werden.
-
SpillBucket – Der Name des Amazon-S3-Buckets, in den diese Funktion einen Überlauf von Daten ausführen kann.
-
SpillPrefix – Das Präfix für die
SpillBucket-Stelle, an die diese Funktion einen Überlauf von Daten ausführen kann. -
SecurityGroupIds – Eine oder mehrere IDs, die der Sicherheitsgruppe entsprechen, die auf die Lambda-Funktion angewendet werden soll (z. B.
sg1,sg2odersg3). -
SubnetIds – Eine oder mehrere Subnetz-IDs, die dem Subnetz entsprechen, das die Lambda-Funktion für den Zugriff auf Ihre Datenquelle verwenden kann (z. B.
subnet1odersubnet2). -
SecretNameOrPrefix – Der Name oder das Präfix einer Gruppe von Namen in Secrets Manager, auf die diese Funktion Zugriff hat (z. B.
vertica-*). -
VerticaConnectionString – Die standardmäßig zu verwendenden Vertica-Verbindungsdetails, wenn keine katalogspezifische Verbindung definiert ist. Die Zeichenkette kann optional AWS Secrets Manager-Syntax (z. B.
${secret_name}) verwenden. -
VPC ID – Die VPC-ID, die an die Lambda-Funktion angehängt werden soll.
Verbindungszeichenfolge
Verwenden Sie eine JDBC-Verbindungszeichenfolge im folgenden Format, um eine Verbindung zu einer Datenbank-Instance herzustellen.
vertica://jdbc:vertica://host_name:port/database?user=vertica-username&password=vertica-password
Verwenden eines einzelnen Verbindungs-Handlers
Sie können die folgenden Einzelverbindungsmetadaten und Record Handler verwenden, um eine Verbindung zu einer einzelnen Vertica-Instance herzustellen.
| Handler-Typ | Klasse |
|---|---|
| Composite Handler | VerticaCompositeHandler |
| Metadaten-Handler | VerticaMetadataHandler |
| Record Handler | VerticaRecordHandler |
Parameter für Einzelverbindungs-Handler
| Parameter | Beschreibung |
|---|---|
default |
Erforderlich Die standardmäßige Verbindungszeichenfolge. |
Die Einzelverbindungs-Handler unterstützen eine Datenbank-Instance und müssen einen default-Verbindungszeichenfolgenparameter bereitstellen. Alle anderen Verbindungszeichenfolgen werden ignoriert.
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- undpassword-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}"}
Beispiel für eine Verbindungszeichenfolge mit geheimen Namen
Die folgende Zeichenfolge hat die geheimen Namen ${vertica-username} und ${vertica-password}.
vertica://jdbc:vertica://host_name:port/database?user=${vertica-username}&password=${vertica-password}
Der Konnektor verwendet den geheimen Namen, um Secrets abzurufen und den Benutzernamen und das Kennwort bereitzustellen, wie im folgenden Beispiel gezeigt.
vertica://jdbc:vertica://host_name:port/database?user=sample-user&password=sample-password
Derzeit erkennt der Vertica-Konnektor die vertica-username- und vertica-password-JDBC-Eigenschaften.
Überlauf-Parameter
Das Lambda-SDK kann Daten an Amazon S3 übertragen. Alle Datenbank-Instances, auf die mit derselben Lambda-Funktion zugegriffen wird, werden an denselben Speicherort verschoben.
| Parameter | Beschreibung |
|---|---|
spill_bucket |
Erforderlich Überlauf-Bucket-Name. |
spill_prefix |
Erforderlich Schlüssel-Prefix für den Überlauf-Bucket. |
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. |
Datentypunterstützung
In der folgenden Tabelle sind die unterstützten Datentypen für den Vertica-Konnektor aufgeführt.
| Boolesch |
|---|
| BigInt |
| Short |
| Ganzzahl |
| Long |
| Gleitkommazahl |
| Double |
| Datum |
| Varchar |
| Bytes |
| BigDecimal |
| TimeStamp als Varchar |
Leistung
Die Lambda-Funktion führt Projektions-Pushdown durch, um die von der Abfrage gescannten Daten zu reduzieren. LIMIT-Klauseln reduzieren die Menge der gescannten Daten, aber wenn Sie kein Prädikat angeben, sollten Sie davon ausgehen, dass SELECT-Abfragen mit einer LIMIT-Klausel mindestens 16 MB Daten scannen. Der Vertica-Konnektor ist aufgrund der Gleichzeitigkeit widerstandsfähig gegenüber Drosselung.
Pass-Through-Abfragen
Der Vertica-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 Vertica 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 Vertica weiter. Die Abfrage wählt alle Spalten in der customer-Tabelle aus und begrenzt die Ergebnisse auf 10.
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
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
Weitere Ressourcen
Aktuelle Informationen zur JDBC-Treiberversion finden Sie in der pom.xml
Weitere Informationen zu diesem Konnektor finden Sie unter der entsprechenden Seite