DataSunrise sponsert AWS re:Invent 2024 in Las Vegas, bitte besuchen Sie uns am Stand #2158 von DataSunrise

Athena JDBC-Treiber

Athena JDBC-Treiber

Sind Sie ein Java-Entwickler, der eine Verbindung zu Amazon Athena aus Ihren Anwendungen herstellen möchte? Der Athena JDBC-Treiber macht es einfach, mithilfe von Standard-SQL Abfragen in Amazon S3 durchzuführen.

Dieser Artikel wird den Athena JDBC-Treiber erklären. Er wird zeigen, wie er mit Beispielcode verwendet wird. Außerdem wird er über die vorhandenen Sicherheitsfunktionen sprechen. Am Ende werden Sie eine solide Grundlage für die Nutzung von Athena mit Java haben.

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 konvertiert JDBC-Aufrufmethoden in HTTP-Anfragen, die Athena verstehen kann.

Die Verwendung des JDBC API zur Abfrage von Athena bietet mehrere Vorteile:

  • Es abstrahiert die Details der zugrundeliegenden HTTP-Kommunikation weg
  • Es ermöglicht die Verwendung von vertrautem JDBC-Code und SQL zur Arbeit mit Athena
  • Es erlaubt 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 die JAR einfach zum Klassenpfad Ihrer Anwendung hinzu.

Verbindung zu Athena herstellen

Um eine Verbindung zu Athena mit dem JDBC-Treiber herzustellen, müssen Sie einen JDBC-Verbindungs-String im folgenden Format erstellen:

jdbc:awsathena://AwsRegion=[Region];S3OutputLocation=[Output];[Property1]=[Value1];[Property2]=[Value2];...

Die Hauptkomponenten sind:

  • Die AWS-Region, die Ihre Athena-Instanz hostet.
  • S3OutputLocation – Der S3-Speicherort, an dem Athena Abfrageergebnisse speichern soll
  • Zusätzliche optionale Eigenschaften zur Konfiguration

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, das Sie dann verwenden können, um Abfragen auszuführen.

Athena-Authentifizierung

Um sich zu verbinden, benötigt der JDBC-Treiber AWS-Anmeldeinformationen, um sich bei Athena zu authentifizieren. Es gibt einige Möglichkeiten, Anmeldeinformationen bereitzustellen:

  1. Umgebungsvariablen – Setzen Sie die Umgebungsvariablen AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY.
  2. Java-Systemeigenschaften – Setzen Sie die Systemeigenschaften aws.accessKeyId und aws.secretKey.
  3. AWS-Anmeldeinformationsdatei – Legen Sie den Zugriffsschlüssel und das Secret in der Datei ~/.aws/credentials ab.
  4. 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 die harte Kodierung sensibler Schlüssel zu vermeiden.

Grundlegende Abfrage

Nachdem Sie eine Verbindung hergestellt haben, können Sie SQL-Abfragen darauf ausführen. Verwenden Sie die Methode createStatement, um ein Statement-Objekt zu erstellen, und dann executeQuery mit Ihrem SQL:

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 Spaltenwerte zugreifen:

while (rs.next()) {
String col1 = rs.getString(1);
int col2 = rs.getInt(2);
// ...
}

Denken Sie daran, dass Athena Daten abfragt, die in S3 gespeichert sind. Bevor Sie eine Abfrage durchführen, müssen Sie eine externe Tabelle erstellen, die auf die S3-Daten verweist:

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 unterstützt wird. 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 anstelle einer regulären Statement ein PreparedStatement. Konstruieren Sie das SQL mit ?-Platzhaltern und binden Sie dann Werte an diese:

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-Injektionen, indem Parameter separat von der Abfrage gesendet werden.
  • Athena kann den Abfrageplan cachen und wiederverwenden
  • Sie können die gleiche Abfrage mehrfach mit verschiedenen Parameterwerten ausführen

Sicherheitsfunktionen

Der Athena JDBC-Treiber unterstützt mehrere sicherheitsbezogene Funktionen und Konfigurationen:

Verschlüsselung

Standardmäßig verbindet sich der Treiber mit Athena unter Verwendung von HTTPS zur Verschlüsselung während der Übertragung. Alle zwischen Anwendung und Athena gesendeten Daten werden mit TLS verschlüsselt.

Zugriffskontrolle

Athena respektiert die IAM-Berechtigungen, die den von dem JDBC-Treiber verwendeten AWS-Anmeldeinformationen zugewiesen sind. Sie können einschränken, auf welche Daten ein Benutzer zugreifen kann, indem Sie SELECT-Berechtigungen auf bestimmte Datenbanken und Tabellen gewähren.

Zum Beispiel erlaubt diese Richtlinie nur das Abfragen von Tabellen 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 verwendete Rolle an, um die Zugriffskontrolle zu erzwingen.

S3-Verschlüsselung

Das System speichert Abfrageergebnisse an dem in der JDBC-URL angegebenen S3-Speicherort. Um diese Daten in Ruhe zu schützen, können Sie den S3-Bucket zur Verwendung von Verschlüsselung konfigurieren.

Der Athena JDBC-Treiber unterstützt das transparente Lesen von und Schreiben in verschlüsselte S3-Buckets.

Fazit

Der Athena JDBC-Treiber hilft Java-Anwendungen beim Ausführen von SQL-Abfragen auf Daten in Amazon S3. Er unterstützt eine Vielzahl von Authentifizierungsmethoden und Sicherheitsfunktionen, um Daten zu schützen.

Um mehr zu erfahren, konsultieren Sie die offizielle Athena JDBC-Treiber Dokumentation.

Über DataSunrise

Wenn Sie zusätzliche Sicherheits-, Überwachungs-, Audit- und Compliance-Funktionen für Athena benötigen, ziehen Sie DataSunrise Database Security in Betracht. DataSunrise bietet Werkzeuge zur Kontrolle der Datenmaskierung, zur Echtzeit-Auditierung von Abfragen, zur Überwachung und zur Sicherstellung der 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

Azure: DataSunrise-Konfiguration mit OpenTOFU

Azure: DataSunrise-Konfiguration mit OpenTOFU

Erfahren Sie mehr

Benötigen Sie die Hilfe unseres Support-Teams?

Unsere Experten beantworten gerne Ihre Fragen.

Allgemeine Informationen:
[email protected]
Kundenservice und technischer Support:
support.datasunrise.com
Partnerschafts- und Allianz-Anfragen:
[email protected]