DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Iniziare con Athena JDBC Driver per Query sui Dati Senza Soluzione di Continuità

Iniziare con Athena JDBC Driver per Query sui Dati Senza Soluzione di Continuità

Lei è uno sviluppatore Java che cerca di connettersi a Amazon Athena dalle sue applicazioni? Il driver JDBC di Athena rende facile interrogare dati in Amazon S3 usando SQL standard.

Questo articolo spiegherà il driver JDBC di Athena. Mostrerà come usarlo con codice esempio. Parlerà anche delle funzionalità di sicurezza che ha. Alla fine, Lei 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 dati Athena. L’API JDBC fa questa connessione. Converte le chiamate del metodo JDBC in richieste HTTP che Athena può comprendere.

Usare l’API JDBC per interrogare Athena ha diversi vantaggi:

  • Astrazione dei dettagli della comunicazione HTTP sottostante
  • Consente l’uso di codice JDBC e SQL familiari per lavorare con Athena
  • Permette di integrare Athena in qualsiasi applicazione Java o strumento che supporti JDBC

AWS fornisce il driver come file JAR standalone. Per usarlo, semplicemente includa il JAR nel classpath della sua applicazione.

Connessione a Athena

Per connettersi a Athena usando il driver JDBC, Lei ha bisogno di costruire una stringa di connessione JDBC con il seguente formato:

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

I componenti principali sono:

  • La regione AWS che ospita la Sua istanza Athena.
  • S3OutputLocation – La posizione S3 dove Athena dovrebbe memorizzare i risultati delle query
  • Proprietà opzionali aggiuntive per la configurazione

Ecco un esempio di 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 stabilire effettivamente 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 poi può essere usato per eseguire query.

Autenticazione in Athena

Per connettersi, il driver JDBC ha bisogno delle credenziali AWS per autenticarsi con Athena. Ci sono alcuni modi per fornire le credenziali:

  1. Variabili di ambiente – Impostare le variabili di ambiente AWS_ACCESS_KEY_ID e AWS_SECRET_ACCESS_KEY.
  2. Proprietà di sistema Java – Impostare le proprietà di sistema aws.accessKeyId e aws.secretKey.
  3. File delle credenziali AWS – Inserire la chiave di accesso e il segreto nel file ~/.aws/credentials.
  4. Profilo dell’istanza AWS – Se eseguito su EC2, assegnare un ruolo IAM all’istanza. Il driver recupererà automaticamente le credenziali temporanee.

Il driver JDBC cerca le credenziali in quell’ordine. Lei dovrebbe usare un profilo di istanza o il file delle credenziali per evitare di inserire chiavi sensibili nel codice.

Query di Base

Una volta che Lei ha una connessione, può eseguire le 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, aspetta che finisca e restituisce i risultati come ResultSet. Lei può poi iterare sulle righe e accedere ai valori delle colonne:

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

Ricordi che Athena interroga dati memorizzati in S3. Prima di interrogare, Lei deve creare una tabella esterna che mappa i 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 posto, Lei può interrogarla tramite JDBC come mostrato sopra.

Query Parametrizzate

Per le query che accettano parametri, usi un PreparedStatement invece di uno Statement regolare. Costruisca l’SQL con i segnaposto ?, poi leghi i valori a essi:

String sql = "SELECT * FROM my_table WHERE col1 = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "foo");
ResultSet rs = pstmt.executeQuery();

Questo lega il valore “foo” al primo segnaposto ?. Usare un PreparedStatement ha alcuni benefici:

  • Evita SQL injection inviando i parametri separatamente dalla query.
  • Athena può memorizzare nella cache e riutilizzare il piano di query
  • Lei può eseguire la stessa query più volte con valori di parametro diversi

Funzionalità di Sicurezza

Il driver JDBC di Athena supporta diverse funzionalità e configurazioni relative alla sicurezza:

Crittografia

Per impostazione predefinita, il driver si connette a Athena usando HTTPS per la crittografia in transito. Tutti i dati inviati tra l’applicazione e Athena sono crittografati usando TLS.

Controllo degli Accessi

Athena rispetta le autorizzazioni IAM assegnate alle credenziali AWS usate dal driver JDBC. Lei può limitare i dati a cui un utente può accedere concedendo autorizzazioni SELECT su database e tabelle specifici.

Per esempio, questa politica permette di interrogare tabelle solo 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 politica all’utente IAM o al ruolo utilizzato dalla connessione JDBC per applicare 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.

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 funzionalità 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 funzionalità aggiuntive di sicurezza, monitoraggio, auditing, e conformità per Athena, consideri DataSunrise Database Security. DataSunrise offre strumenti per controllare il mascheramento dei dati, audit delle query in tempo reale, monitoraggio e garantire la conformità con le normative.

Per sperimentare 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.

Successivo

Configurazione di DataSunrise su Azure Cloud con OpenTOFU: Una Guida Passo Passo

Configurazione di DataSunrise su Azure Cloud con OpenTOFU: Una Guida Passo Passo

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]