Athena JDBC Driver
Lei è uno sviluppatore Java che desidera connettersi ad Amazon Athena dalle sue applicazioni? Il driver JDBC di Athena rende facile interrogare i dati in Amazon S3 utilizzando SQL standard.
Questo articolo spiegherà il driver JDBC di Athena. Mostrerà come usarlo con il codice di esempio. Parlerà anche delle caratteristiche di sicurezza che ha. Alla fine, avrà una solida base per usare Athena con Java.
Che cos’è il Driver JDBC di Athena?
Il driver JDBC di Athena è un driver di tipo 4. Le applicazioni Java lo usano per connettersi alla fonte di dati di Athena. L’API JDBC crea questa connessione. Converte le chiamate dei metodi JDBC in richieste HTTP che Athena può comprendere.
Usare l’API JDBC per interrogare Athena ha diversi vantaggi:
- Astrae i dettagli della comunicazione HTTP sottostante
- Permette di usare il codice JDBC familiare e SQL per lavorare con Athena
- Consente di integrare Athena in qualsiasi applicazione Java o strumento che supporta JDBC
AWS fornisce il driver come file JAR autonomo. Per usarlo, basta includere il JAR nel classpath della sua applicazione.
Connessione a Athena
Per connettersi a Athena utilizzando il driver JDBC, deve costruire una stringa di connessione JDBC nel seguente formato:
jdbc:awsathena://AwsRegion=[Region];S3OutputLocation=[Output];[Property1]=[Value1];[Property2]=[Value2];...
I componenti chiave sono:
- La regione AWS ospita la sua istanza di Athena.
- S3OutputLocation – La posizione S3 dove Athena dovrebbe memorizzare i risultati delle query
- Ulteriori proprietà opzionali per la configurazione
Ecco un esempio di un URL JDBC che si connette a Athena nella regione us-west-2. Il sistema salva i risultati in un bucket S3 designato:
jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output;
Per effettivamente stabilire la connessione nel codice Java, usi la classe DriverManager:
String url = "jdbc:awsathena://AwsRegion=us-west-2;S3OutputLocation=s3://my-athena-results/output"; Connection conn = DriverManager.getConnection(url);
Questo crea un oggetto Connection che può poi usare per eseguire query.
Autenticazione di Athena
Per connettersi, il driver JDBC ha bisogno delle credenziali AWS per autenticarsi con Athena. Ci sono diversi modi per fornire le credenziali:
- Variabili di ambiente – Imposti le variabili di ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
- Proprietà di sistema Java – Imposti le proprietà di sistema aws.accessKeyId e aws.secretKey.
- File delle credenziali AWS – Inserisca la chiave di accesso e il segreto nel file ~/.aws/credentials.
- Profilo dell’istanza AWS – Se eseguita su EC2, assegni un ruolo IAM all’istanza. Il driver recupererà automaticamente credenziali temporanee.
Il driver JDBC cerca le credenziali in quell’ordine. Dovrebbe usare un profilo di istanza o il file delle credenziali per evitare di codificare chiavi sensibili.
Interrogazioni di Base
Una volta che ha una connessione, può eseguire query SQL su di essa. Usi il metodo createStatement per creare un oggetto Statement, poi chiami executeQuery con il suo SQL:
Statement stmt = conn.createStatement(); String sql = "SELECT * FROM my_table LIMIT 10"; ResultSet rs = stmt.executeQuery(sql);
Questo invia la query a Athena, attende che finisca e restituisce i risultati come un ResultSet. Può quindi iterare sulle righe e accedere ai valori delle colonne:
while (rs.next()) { String col1 = rs.getString(1); int col2 = rs.getInt(2); // ... }
Ricordi che le query di Athena recuperano dati memorizzati in S3. Prima di interrogare, deve creare una tabella esterna che si mappa ai dati S3:
CREATE EXTERNAL TABLE my_table ( col1 STRING, col2 INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://my-data-bucket/input/';
Questo crea una tabella my_table con due colonne supportate da un file CSV in S3. Con la tabella in atto, può interrogarla tramite JDBC come mostrato sopra.
Query con Parametri
Per le query che accettano parametri, usi un PreparedStatement invece di un normale Statement. Costruisca l’SQL con segnaposti ?, poi associ valori ad essi:
String sql = "SELECT * FROM my_table WHERE col1 = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, "foo"); ResultSet rs = pstmt.executeQuery();
Questo associa il valore “foo” al primo segnaposto ?. Usare un PreparedStatement ha alcuni vantaggi:
- Evita l’SQL injection inviando i parametri separatamente dalla query.
- Athena può memorizzare nella cache e riutilizzare il piano della query
- Può eseguire la stessa query più volte con diversi valori di parametro
Caratteristiche di Sicurezza
Il driver JDBC di Athena supporta diverse caratteristiche e configurazioni relative alla sicurezza:
Crittazione
Per impostazione predefinita, il driver si connette a Athena utilizzando HTTPS per la crittografia in transito. Tutti i dati inviati tra l’applicazione e Athena sono crittografati utilizzando TLS.
Controllo degli Accessi
Athena rispetta le autorizzazioni IAM associate alle credenziali AWS utilizzate dal driver JDBC. Può limitare i dati a cui un utente può accedere concedendo permessi SELECT su specifici database e tabelle.
Ad esempio, questa policy permette di interrogare solo le tabelle nel database ‘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/*" ] } ] }
Allegare questa policy all’utente IAM o al ruolo utilizzato dalla connessione JDBC per far rispettare il controllo degli accessi.
Crittografia S3
Il sistema memorizza i risultati delle query nella posizione S3 specificata nell’URL JDBC. Per proteggere questi dati a riposo, può configurare il bucket S3 per utilizzare la crittografia.
- Usare la crittografia di default del bucket per crittografare automaticamente tutti gli oggetti
- Usare la crittografia lato client nella sua applicazione per crittografare i dati prima di memorizzarli in S3
Il driver JDBC di Athena supporta trasparentemente la lettura e la scrittura su bucket S3 crittografati.
Conclusione
Il driver JDBC di Athena aiuta le applicazioni Java a eseguire query SQL sui dati in Amazon S3. Supporta una varietà di metodi di autenticazione e caratteristiche di sicurezza per proteggere i dati.
Per saperne di più, consulti la documentazione ufficiale del driver JDBC di Athena.
Informazioni su DataSunrise
Se ha bisogno di ulteriori caratteristiche di sicurezza, monitoraggio, audit e conformità per Athena, consideri DataSunrise Database Security. DataSunrise offre strumenti per controllare il mascheramento dei dati, audit delle query in tempo reale, monitorare e garantire la conformità con le regolamentazioni.
Per provare DataSunrise dal vivo e ottenere una licenza di prova gratuita, contatti il nostro team per programmare una demo online. Le mostreremo come DataSunrise può migliorare la sicurezza di Athena.