IBM Cloud Docs
Connexion au serveur Presto

Connexion au serveur Presto

Presto CLI fournit un shell interactif basé sur un terminal pour exécuter des requêtes.

Dans IBM® watsonx.data, vous pouvez vous connecter au serveur Presto de plusieurs manières en fonction de la plateforme et des utilitaires que vous utilisez. Voir les sections suivantes pour plus de détails :

Vous devez spécifier l'emplacement lorsque vous créez un schéma à l'aide de l'interface de ligne de commande. Par exemple : location = s3a://<storage-name>/

Prérequis

Obtenir le nom d'hôte et le port du moteur Presto

  1. Connectez-vous à la console web watsonx.data.

  2. Accédez à Infrastructure Manager et cliquez sur Vue de liste.

  3. Dans l'onglet Moteurs, cliquez sur le nom du moteur pour lequel vous avez besoin des détails de nom d'hôte et de port.

  4. Sous le libellé Hôte, cliquez sur l'icône Copier dans le presse-papiers pour copier les détails de l'hôte.

  5. Copiez les détails de l'hôte dans un bloc-notes.

Obtention de la clé d'API IBM ou du jeton IBM IAM

Utilisez la clé d'API IBM ou le jeton IBM IAM en fonction de vos besoins.

Il est recommandé d'utiliser le jeton IAM pour la charge de travail de suractivité.

Obtenir IBM Clé API

  1. Connectez-vous à la console IBM Cloud.

  2. Dans la barre de navigation, cliquez sur Gérer et sélectionnez Accès (IAM).

  3. Cliquez sur Clés API dans la barre de navigation de gauche.

  4. Cliquez sur Créer +.

  5. Dans la fenêtre Créer une clé d'API IBM Cloud, entrez un nom pour votre clé d'API et entrez la description appropriée pour la clé. Par exemple, ibmlhtoken testing

  6. Cliquez sur Créer. Une fenêtre contenant le message API key successfully created s'affiche.

  7. Cliquez sur Télécharger pour enregistrer la clé API sur votre machine locale.

  8. Ouvrez le fichier téléchargé et copiez la clé d'API dans un fichier de bloc-notes.

Obtention du jeton IBM Access Management (IAM)

  1. Appelez le noeud final REST dans IAM pour obtenir le jeton IAM.

  2. Remplacez <your-api-key> par votre clé d'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'
    

Connexion à un moteur d' Presto s via l'interface CLI (à distance) d' Presto

  1. Téléchargez l'exécutable Presto jar à partir de https://prestodb.io/getting-started/

  2. Renommez le fichier téléchargé en presto. Rendez le fichier exécutable avec chmod +x et exécutez-le.

  3. Pour vérifier si Presto CLI est installé, exécutez ./presto --version. Presto la version du cli s'affiche. Par exemple, Presto CLI 0.281-cfbc6eb

  4. Exécutez les commandes suivantes dans le système où Presto CLI est installé. Vous pouvez utiliser l'une des méthodes suivantes pour vous authentifier auprès de Presto:

    • Utilisation du nom d'utilisateur et du mot de passe: Pour ce faire, exécutez la commande suivante :

      • Si vous utilisez une clé API, exécutez la commande suivante :

        ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password
        
      • Si vous utilisez le jeton IAM IBM, exécutez la commande suivante :

        ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
        

      <your-username> est facultatif si vous disposez de plusieurs connexions avec des utilisateurs différents et que vous souhaitez les différencier.

      Entrez votre clé d'API IBM ou votre jeton IBM IAM à l'invite.

    • Jeton JWT: La méthode d'authentification JWT est disponible par défaut à partir de 2.1.2. Exécutez la commande suivante pour vous connecter à Presto en utilisant le jeton JWT :

    Pour utiliser cette méthode d'authentification pour les versions antérieures de watsonx.data (avant la version 2.1.2 ), contactez le service d'assistance IBM et activez la fonction.

    ```bash {: codeblock}
    ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN>
    ```
    

    Pour générer <ACCESS_TOKEN>, utilisez l'une des méthodes suivantes :

    • Obtenir un jeton de gestion des accès à l' IBM, voir jeton(IAM ).

    • Obtenez l' <ACCESS_TOKEN>, en utilisant la commande suivante :

      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.

  5. À l'invite de Presto, tapez show catalogs; La liste des catalogues s'affiche. Vous êtes maintenant connecté au moteur Presto dans watsonx.data via Presto CLI.

    presto:default> show catalogs;
    Catalog
    --------------
    iceberg_data
    jmx
    system
    tpcds
    tpch
    (5 rows)
    

Connexion au moteur Presto à l'aide de JDBC

  1. Téléchargez et installez les pilotes JDBC les plus récents sur la machine client.

  2. Ajoutez le fichier jar téléchargé au chemin d'accès aux classes de votre application Java.

  3. Procurez-vous la clé d'API.

    Utilisez ibmlhapikey comme nom d'utilisateur et la clé API comme mot de passe. Pour plus d'informations, voir Obtention de la IBM.

  4. Obtenez le nom d'hôte et le port. Pour plus d'informations, voir Obtenir le nom d'hôte et le port du moteur Presto.

  5. Créez une application Java à l'aide de l'interface JDBC. Voici un exemple de fragment 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();
                }
            }
        }
    }
    

    Remplacez les paramètres de la commande par ce qui suit: <PRESTO_URL> Identifie l' URL t jdbc au serveur Presto. <EMAIL_ID> avec votre ID de messagerie électronique <API_KEY> avec la clé API

    Si vous utilisez le jeton IAM IBM, remplacez ibmapikey par ibmlhtoken et transmettez le jeton.

  6. Compilez et exécutez la commande.

Connexion au moteur Presto à l'aide de scripts Python

  1. Installez python 3.x (3.10 ou version ultérieure recommandée) et pip3 sur votre poste de travail client.

  2. Utilisez l'interface DBAPI pour interroger Presto. Voici un exemple de script Python.

    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)
    
    

    La commande interroge les tables du système system.runtime.nodes qui indiquent les nœuds du cluster Presto. L'implémentation DBAPI dans prestodb.dbapi fournit des méthodes permettant d'extraire quelques lignes. Par exemple, Cursorfetchone() ou Cursor.fetchmany(). Par défaut, Cursor.fetchmany() extrait une ligne. Définissez prestodb.dbapi.Cursor.arraysize en conséquence.

  3. Compilez et exécutez la commande.