
Erste Schritte mit dem Athena JDBC-Treiber für nahtlose Datenabfragen

Sind Sie ein Java-Entwickler, der versucht, eine Verbindung zu Amazon Athena von Ihren Anwendungen herzustellen? Der Athena JDBC-Treiber macht es einfach, Daten in Amazon S3 mit Standard-SQL abzufragen.
Dieser Artikel wird den Athena JDBC-Treiber erklären. Es wird gezeigt, wie man ihn mit Beispielcode verwendet. Es wird auch über die Sicherheitsfunktionen sprechen, die er hat. Am Ende haben Sie eine solide Grundlage für die Verwendung von Athena mit Java.
Was ist der Athena JDBC-Treiber?
Der Athena JDBC-Treiber ist ein Typ 4 Treiber. Java-Anwendungen verwenden ihn, um eine Verbindung zur Athena-Datenquelle herzustellen. Das JDBC-API stellt diese Verbindung her. Es wandelt JDBC-Methodenaufrufe in HTTP-Anfragen um, die Athena verstehen kann.
Die Verwendung der JDBC-API zur Abfrage von Athena hat mehrere Vorteile:
- Es abstrahiert die Details der zugrunde liegenden HTTP-Kommunikation
- Es ermöglicht die Verwendung von vertrautem JDBC-Code und SQL zur Arbeit mit Athena
- Es ermöglicht die Integration von Athena in jede Java-Anwendung oder jedes Tool, das JDBC unterstützt
AWS stellt den Treiber als eigenständige JAR-Datei zur Verfügung. Um ihn zu verwenden, fügen Sie einfach die JAR-Datei zum Klassenpfad Ihrer Anwendung hinzu.
Verbindung zu Athena herstellen
Um eine Verbindung zu Athena mit dem JDBC-Treiber herzustellen, müssen Sie eine JDBC-Verbindungszeichenkette mit folgendem Format erstellen:
jdbc:awsathena://AwsRegion=[Region];S3OutputLocation=[Output];[Property1]=[Value1];[Property2]=[Value2];...
Die Schlüsselkomponenten sind:
- Die AWS-Region, die Ihre Athena-Instanz hostet.
- S3OutputLocation – Der S3-Standort, an dem Athena die Abfrageergebnisse speichern soll
- Weitere optionale Konfigurationsparameter
Hier ist ein Beispiel für eine JDBC-URL, die eine Verbindung zu Athena in der Region us-west-2 herstellt. Das System speichert die Ergebnisse in einem bestimmten S3-Bucket:
jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output;
Um die Verbindung im Java-Code tatsächlich herzustellen, verwenden Sie die DriverManager-Klasse:
String url = "jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output"; Connection conn = DriverManager.getConnection(url);
Dies erstellt ein Connection-Objekt, mit dem Sie dann Abfragen ausführen können.
Athena-Authentifizierung
Um eine Verbindung herzustellen, benötigt der JDBC-Treiber AWS-Anmeldeinformationen, um sich bei Athena zu authentifizieren. Es gibt mehrere Möglichkeiten, um Anmeldeinformationen bereitzustellen:
- Umgebungsvariablen – Legen Sie die Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY fest.
- Java-Systemeigenschaften – Legen Sie die Systemeigenschaften aws.accessKeyId und aws.secretKey fest.
- AWS-Anmeldeinformationsdatei – Platzieren Sie den Zugriffsschlüssel und das Geheimnis in der Datei ~/.aws/credentials.
- AWS-Instanzprofil – Wenn Sie auf EC2 ausgeführt werden, weisen Sie der Instanz eine IAM-Rolle zu. Der Treiber ruft automatisch temporäre Anmeldeinformationen ab.
Der JDBC-Treiber sucht in dieser Reihenfolge nach Anmeldeinformationen. Sie sollten ein Instanzprofil oder die Anmeldeinformationsdatei verwenden, um das Hardcodieren sensibler Schlüssel zu vermeiden.
Grundlegende Abfragen
Sobald Sie eine Verbindung haben, können Sie SQL-Abfragen darauf ausführen. Verwenden Sie die Methode createStatement, um ein Statement-Objekt zu erstellen, und rufen Sie dann executeQuery mit Ihrem SQL auf:
Statement stmt = conn.createStatement(); String sql = "SELECT * FROM my_table LIMIT 10"; ResultSet rs = stmt.executeQuery(sql);
Dies sendet die Abfrage an Athena, wartet auf deren Abschluss und gibt die Ergebnisse als ResultSet zurück. Sie können dann über die Zeilen iterieren und auf die Spaltenwerte zugreifen:
while (rs.next()) { String col1 = rs.getString(1); int col2 = rs.getInt(2); // ... }
Denken Sie daran, dass Athena Daten in S3 abfragt. Bevor Sie Abfragen durchführen, müssen Sie eine externe Tabelle erstellen, die den S3-Daten zugeordnet ist:
CREATE EXTERNAL TABLE my_table ( col1 STRING, col2 INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://my-data-bucket/input/';
Dies erstellt eine Tabelle my_table mit zwei Spalten, die durch eine CSV-Datei in S3 gesichert ist. Mit der Tabelle an Ort und Stelle können Sie sie wie oben gezeigt über JDBC abfragen.
Parametrisierte Abfragen
Für Abfragen, die Parameter akzeptieren, verwenden Sie ein PreparedStatement anstelle eines normalen Statements. Konstruieren Sie das SQL mit ? Platzhaltern und binden Sie dann Werte daran:
String sql = "SELECT * FROM my_table WHERE col1 = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "foo"); ResultSet rs = pstmt.executeQuery();
Dies bindet den Wert “foo” an den ersten ? Platzhalter. Die Verwendung eines PreparedStatement hat einige Vorteile:
- Es vermeidet SQL-Injection, indem Parameter separat von der Abfrage gesendet werden.
- Athena kann den Abfrageplan zwischenspeichern und wiederverwenden
- Sie können dieselbe Abfrage mehrfach mit unterschiedlichen Parameterwerten ausführen
Sicherheitsfunktionen
Der Athena JDBC-Treiber unterstützt mehrere sicherheitsrelevante Funktionen und Konfigurationen:
Verschlüsselung
Standardmäßig stellt der Treiber eine Verbindung zu Athena über HTTPS für die Verschlüsselung während der Übertragung her. Alle zwischen der Anwendung und Athena gesendeten Daten werden mithilfe von TLS verschlüsselt.
Zugriffskontrolle
Athena berücksichtigt die IAM-Berechtigungen, die den AWS-Anmeldeinformationen, die vom JDBC-Treiber verwendet werden, zugeordnet sind. Sie können steuern, auf welche Daten ein Benutzer zugreifen kann, indem Sie SELECT-Berechtigungen für bestimmte Datenbanken und Tabellen erteilen.
Zum Beispiel erlaubt diese Richtlinie das Abfragen von Tabellen nur in der Datenbank «my_database»:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:StartQueryExecution", "athena:GetQueryExecution", "athena:GetQueryResults", "athena:StopQueryExecution" ], "Resource": [ "arn:aws:athena:us-west-2:123456789012:workgroup/primary" ] }, { "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetPartitions", "glue:GetPartition" ], "Resource": [ "arn:aws:glue:us-west-2:123456789012:catalog", "arn:aws:glue:us-west-2:123456789012:database/my_database", "arn:aws:glue:us-west-2:123456789012:table/my_database/*" ] } ] }
Hängen Sie diese Richtlinie an den IAM-Benutzer oder die Rolle an, die von der JDBC-Verbindung verwendet wird, um die Zugriffskontrolle durchzusetzen.
S3-Verschlüsselung
Das System speichert Abfrageergebnisse im im JDBC-URL angegebenen S3-Standort. Um diese Daten im Ruhezustand zu schützen, können Sie den S3-Bucket zur Verwendung von Verschlüsselung konfigurieren.
- Verwenden Sie Standard-Bucket-Verschlüsselung, um automatisch alle Objekte zu verschlüsseln
- Verwenden Sie clientseitige Verschlüsselung in Ihrer Anwendung, um Daten vor der Speicherung in S3 zu verschlüsseln
Der Athena JDBC-Treiber unterstützt transparent das Lesen von und Schreiben in verschlüsselte S3-Buckets.
Fazit
Der Athena JDBC-Treiber hilft Java-Anwendungen, SQL-Abfragen für Daten in Amazon S3 auszuführen. Er unterstützt eine Vielzahl von Authentifizierungsmethoden und Sicherheitsfunktionen, um Daten zu schützen.
Weitere Informationen finden Sie in der offiziellen Athena JDBC-Treiber-Dokumentation.
Über DataSunrise
Wenn Sie zusätzliche Sicherheits-, Überwachungs-, Prüf- und Compliance-Funktionen für Athena benötigen, sollten Sie DataSunrise Database Security in Betracht ziehen. DataSunrise bietet Werkzeuge zur Steuerung der Datenmaskierung, zur Echtzeit-Abfrageprüfung, zur Überwachung und zur Einhaltung von Vorschriften.
Um DataSunrise live zu erleben und eine kostenlose Testlizenz zu erhalten, kontaktieren Sie unser Team, um eine Online-Demo zu vereinbaren. Wir zeigen Ihnen, wie DataSunrise die Sicherheit von Athena verbessern kann.
Nächste
