Connessione al Presto server
Presto CLI fornisce una shell interattiva basata su terminale per eseguire query.
In IBM® watsonx.data, è possibile connettersi al server Presto in diversi modi, a seconda della piattaforma e delle utility utilizzate. Per ulteriori dettagli, consultare le seguenti sezioni:
- Connessione al motore Presto tramite Presto CLI(remoto)
- Connessione al motore Presto con JDBC
- Connessione al motore Presto tramite script Python
È necessario specificare l'ubicazione quando si crea uno schema utilizzando la CLI. Ad esempio,
location = s3a://<storage-name>/
Prerequisiti
Ottenere i dettagli dell'hostname e della porta del motore Presto
-
Accedi alla console watsonx.data web.
-
Vai a Infrastructure Manager e fai clic su List view.
-
Nella scheda Motori, fare clic sul nome del motore per cui sono necessari i dettagli del nome host e della porta.
-
Sotto l'etichetta Host, fare clic su Copia negli appunti per copiare i dettagli dell'host.
-
Copiare i dettagli host in un blocco note.
Ottenimento della chiave API IBM o del token IAM IBM
Utilizzare la chiave API IBM o il token IBM IAM in base alle proprie esigenze.
Si consiglia di utilizzare il token IAM per il carico di lavoro di stress.
Ottenere la chiave IBM API
Se hai abilitato External Identity Interactions Limited la funzione e utilizzi le chiavi API per comunicare con watsonx.data, devi creare la chiave API dall'account in cui watsonx.data è stato fornito.
-
Accedi alla IBM Cloud console.
-
Nella barra di navigazione, fai clic su Manage e seleziona Access (IAM).
-
Fai clic su API keys sulla barra di navigazione a sinistra.
-
Clicca su Crea +.
-
Nella finestra Crea la chiave API IBM Cloud, immetti un nome per la tua chiave API e immetti la descrizione appropriata per la chiave. Ad esempio,
ibmlhtoken testing -
Fai clic su Crea. Viene visualizzata una finestra con il messaggio Chiave API creata correttamente.
-
Fai clic su Scarica per salvare la chiave API sulla tua macchina locale.
-
Aprire il file scaricato e copiare la chiave API in un file notepad.
Ottenimento del token IBM Access Management (IAM)
-
Richiama l'endpoint REST in IAM per ottenere il token IAM.
-
Sostituisci
<your-api-key>con la chiave API IBM.curl -X POST 'https://iam.cloud.ibm.com/identity/token' -H 'Content-Type: application/x-www-form-urlencoded' -d 'grant_type=urn:ibm:params:oauth:grant-type:apikey&apikey=MY_APIKEY'
Collegamento a un motore Presto e tramite CLI (remoto) Presto
-
Scaricare l'eseguibile Presto
jarda https://prestodb.io/getting-started/ -
Rinominare il file scaricato come presto. Renderlo eseguibile con
chmod +xed eseguirlo. -
Per verificare se Presto CLI è installato, eseguire
./presto --version. Viene visualizzata la versione di Presto cli. Ad esempio,Presto CLI 0.281-cfbc6eb -
Eseguire i seguenti comandi nel sistema in cui è installato Presto CLI. È possibile utilizzare uno dei seguenti metodi per l'autenticazione a Presto:
-
Utilizzo di nome utente e password: per farlo, eseguire il seguente comando:
-
Se si utilizza la chiave API, eseguire il seguente comando:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password -
Se si utilizza il token IAM IBM, eseguire il seguente comando:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
<your-username>è facoltativo se si dispone di più connessioni con utenti differenti e si desidera differenziarle.Immetti la tua chiave API IBM o il tuo token IAM IBM al prompt.
-
-
Token JWT: il metodo di autenticazione JWT è disponibile per impostazione predefinita da 2.1.2 in poi. Eseguire il seguente comando per connettersi a presto utilizzando il token JWT:
Per utilizzare questo metodo di autenticazione per le versioni precedenti di watsonx.data (prima della 2.1.2 versione ), contattare IBM l'assistenza e abilitare la funzione.
```bash {: codeblock} ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN> ```Per generare
<ACCESS_TOKEN>, utilizzare uno dei seguenti metodi:-
Ottenere un token IAM ( IBM ) Vedi token IAM.
-
Ottenere l'
<ACCESS_TOKEN>e utilizzando il seguente comando:curl --location 'https://us-south.lakehouse.dev.cloud.ibm.com/lakehouse/api/v2/auth/authenticate/' \ --header 'Content-Type: application/json' \ --data-raw '{ "username": "ibmlhtoken_<user-name>", "password": "<IAM_TOKEN>", "instance_id": "<instance_id>", "instance_name": "" }'<IAM_TOKEN>: Specify the token generated from (IAM) token.<user-name>: Specify the email id.<instance_id>: Specify the instance CRN.
-
-
Al prompt di Presto, digitate
show catalogs;. Viene visualizzato l'elenco dei cataloghi. Ora si è connessi al motore Presto in watsonx.data attraverso Presto CLI.presto:default> show catalogs; Catalog -------------- iceberg_data jmx system tpcds tpch (5 rows)
Connessione al motore Presto con JDBC
-
Scaricare e installare i driver JDBC più recenti sulla macchina client.
-
Aggiungere il file
jarscaricato al percorso classe dell'applicazione Java. -
Ottieni la chiave API.
Utilizzare
ibmlhapikeycome nome utente e la chiave API come password. Per ulteriori informazioni, vedere Ottieni IBM API Key.A partire dalla watsonx.data versione 2.2.0, l'autenticazione utilizzando
ibmlhapikeyeibmlhtokencome nomi utente è deprecata. Questi formati vengono gradualmente eliminati nella 2.3.0 versione. Per garantire la compatibilità con le prossime versioni, utilizzare il nuovo formato:ibmlhapikey_<username>eibmlhtoken_<username>. -
Ottenere il nome host e la porta. Per ulteriori informazioni, vedere Ottenere i dettagli dell'hostname e della porta del motore Presto.
-
Creare una applicazione Java utilizzando l'interfaccia JDBC. Di seguito è riportato un esempio per il frammento Java:
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Properties; public class PrestoJdbcSample { public static void main(String[] args) throws Exception { /* * example of fetching the location and credentials needed to connect, from * environment variables */ String username = System.getenv("ENG_USERNAME"); String password = System.getenv("ENG_PASSWORD"); String hostname = System.getenv("ENG_HOST"); String portnumber = System.getenv("ENG_PORT"); String presto_url = "jdbc:presto://" + hostname + ":" + portnumber; Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { /* load the Presto JDBC Driver class */ String driverClass = "com.facebook.presto.jdbc.PrestoDriver"; Class.forName(driverClass); /* Set the connection properties */ Properties properties = new Properties(); properties.setProperty("user", username); properties.setProperty("password", password); properties.setProperty("SSL", "true"); /* Connect */ connection = DriverManager.getConnection(presto_url, properties); /* Issue a Query */ String query = "SELECT * FROM tpch.tiny.customer LIMIT 10"; statement = connection.createStatement(); resultSet = statement.executeQuery(query); /* iterate through the results */ while (resultSet.next()) { String phone = resultSet.getString("phone"); String name = resultSet.getString("name"); System.out.println("phone = " + phone + ", name = " + name); } } catch (Exception e) { e.printStackTrace(); } finally { /* clean up at the end always **/ if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } } }Sostituire i parametri nel comando con quanto segue:
<PRESTO_URL>Identifica l' URL e jdbc al server Presto.<EMAIL_ID>con il tuo ID email<API_KEY>con la chiave APISe si utilizza il token IBM IAM, sostituire
ibmapikeyconibmlhtokene passare il token. -
Compilare ed eseguire il comando.
Connessione al motore Presto tramite script Python
-
Installare python 3.x (3.10 o successivo consigliato) e
pip3sulla workstation client. -
Utilizzare l'interfaccia DBAPI per interrogare Presto. Di seguito è riportato uno script python di esempio.
import os import prestodb username=os.environ["ENG_USERNAME"] password=os.environ["ENG_PASSWORD"] hostname=os.environ["ENG_HOST"] portnumber=os.environ["ENG_PORT"] with prestodb.dbapi.connect( host=hostname, port=portnumber, user=username, catalog='tpch', schema='tiny', http_scheme='https', auth=prestodb.auth.BasicAuthentication(username,password) ) as conn: cur = conn.cursor() cur.execute('select * from tpch.tiny.customer limit 10') rows = cur.fetchall() print(rows)Il comando interroga le tabelle
system.runtime.nodesdi sistema che mostrano i nodi nel Presto cluster. L'implementazione DBAPI inprestodb.dbapifornisce i metodi per richiamare alcune righe. Ad esempio,Cursorfetchone()oCursor.fetchmany(). Per impostazione predefinita,Cursor.fetchmany()richiama una riga. Impostareprestodb.dbapi.Cursor.arraysizedi conseguenza. -
Compilare ed eseguire il comando.