Conectando al Presto servidor
Presto CLI proporciona un shell interactivo basado en terminal para ejecutar consultas.
En IBM® watsonx.data, puede conectarse al servidor Presto de múltiples formas en función de la plataforma y las utilidades que esté utilizando. Consulte las siguientes secciones para obtener más detalles:
- Conexión al motor Presto mediante Presto CLI(Remoto)
- Conexión al motor Presto mediante JDBC
- Conexión al motor Presto mediante scripts Python
Debe especificar la ubicación al crear el esquema utilizando la CLI. Por ejemplo:
location = s3a://<storage-name>/
Requisitos previos
Obtener el nombre de host y los detalles del puerto del motor Presto
-
Inicie sesión en la watsonx.data consola web.
-
Vaya a Gestor de infraestructura y pulse Vista de lista.
-
En el separador Motores, pulse el nombre del motor para el que necesita los detalles de nombre de host y puerto.
-
En la etiqueta Host, pulse el icono Copiar en portapapeles para copiar los detalles del host.
-
Copie los detalles de host en un área de notas.
Obtención de la clave de API de IBM o la señal de IBM IAM
Utilice la clave de API de IBM o la señal de IBM IAM de acuerdo con sus requisitos.
Se recomienda utilizar la señal de IAM para la carga de trabajo de estrés.
Obtener clave IBM API
Si ha habilitado External Identity Interactions Limited la función y utiliza claves API para comunicarse con watsonx.data, debe crear la clave API desde la cuenta en la que watsonx.data se ha aprovisionado.
-
Inicie sesión en la IBM Cloud consola.
-
En la barra de navegación, pulse Gestionar y seleccione Acceso (IAM).
-
Haga clic en Claves API en la barra de navegación izquierda.
-
Pulse Crear +.
-
En la ventana Crear clave de API de IBM Cloud, especifique un nombre para la clave de API y especifique la descripción adecuada para la clave. Por ejemplo,
ibmlhtoken testing -
Pulse Crear. Se muestra una ventana con el mensaje La clave de API se ha creado correctamente.
-
Haga clic en Descargar para guardar la clave API en su equipo local.
-
Abra el archivo descargado y copie la clave de API en un archivo de área de notas.
Obtención de la señal de IBM Access Management (IAM)
-
Llame al punto final REST en IAM para obtener la señal de IAM.
-
Reemplaza
<your-api-key>con tu clave IBM API.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'
Conexión al motor de Presto a través de Presto CLI (remoto)
-
Descargue el ejecutable Presto
jardesde https://prestodb.io/getting-started/ -
Cambie el nombre del archivo descargado por presto. Haga que sea ejecutable con
chmod +xy ejecútelo. -
Para comprobar si Presto CLI está instalado, ejecute
./presto --version. Presto aparece la versión cli. Por ejemplo,Presto CLI 0.281-cfbc6eb -
Ejecute los siguientes comandos en el sistema donde está instalado Presto CLI. Puede utilizar uno de los siguientes métodos para autenticarse en Presto:
-
Usando nombre de usuario y contraseña: Para hacerlo, ejecute el siguiente comando:
-
Si utiliza una clave API, ejecute el siguiente comando :
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password -
Si utiliza el token IAM IBM, ejecute el siguiente comando:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
<your-username>es opcional si tiene varias conexiones con distintos usuarios y desea diferenciarlas.Especifique la clave de API de IBM o la señal de IBM IAM en el indicador.
-
-
Token JWT: El método de autenticación JWT está disponible por defecto a partir de 2.1.2. Ejecute el siguiente comando para conectarse a presto utilizando el token JWT:
Para utilizar este método de autenticación en las versiones anteriores de watsonx.data (anteriores a 2.1.2 la versión ), póngase en contacto con IBM el servicio de asistencia técnica y active la función.
```bash {: codeblock} ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN> ```Para generar
<ACCESS_TOKEN>, utilice uno de los siguientes métodos:-
Obtener un token de Gestión de Acceso de Identidad ( IBM, IAM), ver token(IAM ).
-
Obtenga
<ACCESS_TOKEN>utilizando el siguiente 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.
-
-
En el indicador Presto, escriba
show catalogs;. Aparece la lista de catálogos. Ahora está conectado al motor de Presto en watsonx.data a través de Presto CLI.presto:default> show catalogs; Catalog -------------- iceberg_data jmx system tpcds tpch (5 rows)
Conexión al motor Presto mediante JDBC
-
Descargue e instale los controladores JDBC más recientes en la máquina cliente.
-
Añada el archivo
jardescargado a la vía de acceso de clases de la aplicación Java. -
Obtenga la clave de API.
Utilice
ibmlhapikeycomo nombre de usuario y la clave API como contraseña. Para obtener más información, consulte Obtención de IBM.A partir de watsonx.data la versión 2.2.0, la autenticación utilizando
ibmlhapikeyyibmlhtokencomo nombres de usuario queda obsoleta. Estos formatos se eliminan gradualmente en 2.3.0 la versión. Para garantizar la compatibilidad con las próximas versiones, utilice el nuevo formato:ibmlhapikey_<username>yibmlhtoken_<username>. -
Obtenga el nombre de host y el puerto. Para obtener más información, consulte Obtener el nombre de host y los detalles del puerto del motor Presto.
-
Cree una aplicación Java utilizando la interfaz JDBC. A continuación se muestra un ejemplo para el fragmento de código 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(); } } } }Sustituya los parámetros del mandato por los siguientes:
<PRESTO_URL>Identifica el jdbc URL al servidor Presto.<EMAIL_ID>con su ID de correo electrónico<API_KEY>con la clave APISi utiliza un token IBM IAM, sustituya
ibmapikeyporibmlhtokeny pase el token. -
Compile y ejecute el comando.
Conexión al motor Presto mediante scripts Python
-
Instale python 3.x (3.10 o posterior recomendado) y
pip3en la estación de trabajo cliente. -
Utilice la interfaz DBAPI para consultar Presto. A continuación se muestra un script python de ejemplo.
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)El comando consulta las
system.runtime.nodestablas del sistema que muestran los nodos del Presto clúster. La implementación de DBAPI enprestodb.dbapiproporciona métodos para recuperar pocas filas. Por ejemplo,Cursorfetchone()oCursor.fetchmany(). De forma predeterminada,Cursor.fetchmany()capta una fila. Establezcaprestodb.dbapi.Cursor.arraysizeen consecuencia. -
Compile y ejecute el comando.