Verbindung zum Presto Server herstellen
Presto CLI bietet eine terminalbasierte interaktive Shell zum Ausführen von Abfragen.
In IBM® watsonx.data können Sie je nach Plattform und Dienstprogrammen, die Sie verwenden, auf verschiedene Weise eine Verbindung zum Presto herstellen. Weitere Informationen finden Sie in den folgenden Abschnitten:
- Verbindung zur Presto über Presto CLI(Remote)
- Verbindung zur Presto mit JDBC
- Verbindung zur Presto mit Python
Sie müssen die Position angeben, wenn Sie ein Schema über die Befehlszeilenschnittstelle erstellen. Beispiel:
location = s3a://<storage-name>/
Voraussetzungen
Abrufen des Presto und der Port-Details
-
Melden Sie sich bei der watsonx.data Webkonsole an.
-
Rufen Sie Infrastructure Manager auf und klicken Sie auf Listenansicht.
-
Klicken Sie auf der Registerkarte Engines auf den Namen der Engine, für die Sie den Hostnamen und die Portdetails benötigen.
-
Klicken Sie unter der Bezeichnung Host auf das Symbol In Zwischenablage kopieren, um die Hostdetails zu kopieren.
-
Kopieren Sie die Hostdetails in einen Notizblock.
IBM-API-Schlüssel oder IBM IAM-Token abrufen
Verwenden Sie gemäß Ihren Anforderungen entweder IBM-API-Schlüssel oder IBM IAM-Token.
Es wird empfohlen, das IAM-Token für Belastungstests zu verwenden.
API-Schlüssel IBM erhalten
Wenn Sie die Funktion External Identity Interactions Limited aktiviert haben und API-Schlüssel für die Kommunikation mit verwenden, müssen Sie den watsonx.data API-Schlüssel aus dem Konto erstellen, in dem bereitgestellt watsonx.data
wird.
-
Melden Sie sich bei der IBM Cloud Konsole an.
-
Klicken Sie in der Navigationsleiste auf Verwalten und wählen Sie Zugriff (IAM) aus.
-
Klicken Sie in der linken Navigationsleiste auf „ API-Schlüssel “.
-
Klicken Sie auf Erstellen +.
-
Geben Sie im Fenster API-Schlüssel für IBM Cloud einen Namen für Ihren API-Schlüssel und die entsprechende Beschreibung für den Schlüssel ein. Beispiel:
ibmlhtoken testing -
Klicken Sie auf Erstellen. Ein Fenster mit der Nachricht API key successfully created wird angezeigt.
-
Klicken Sie auf „Herunterladen“, um den API-Schlüssel auf Ihrem lokalen Computer zu speichern.
-
Öffnen Sie die heruntergeladene Datei und kopieren Sie den API-Schlüssel in eine Notizblockdatei.
IBM Access Management-Token (IAM-Token) abrufen
-
Rufen Sie den REST-Endpunkt in IAM auf, um das IAM-Token abzurufen.
-
Ersetzen Sie
<your-api-key>durch Ihren IBM API-Schlüssel.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'
Verbindung zur Presto-Engine über Presto CLI (Remote)
-
Laden Sie die ausführbare Datei Presto von
jarherunter https://prestodb.io/getting-started/ -
Benennen Sie die heruntergeladene Datei in presto um. Machen Sie es mit
chmod +xausführbar und führen Sie es aus. -
Um zu prüfen, ob Presto CLI installiert ist, führen Sie
./presto --version. Presto cli Version wird angezeigt. Beispiel:Presto CLI 0.281-cfbc6eb -
Führen Sie die folgenden Befehle in dem System aus, in dem Presto CLI installiert ist. Sie können eine der folgenden Methoden zur Authentifizierung verwenden Presto:
-
Benutzername und Passwort verwenden: Führen Sie dazu den folgenden Befehl aus:
-
Wenn Sie einen API-Schlüssel verwenden, führen Sie den folgenden Befehl aus:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password -
Wenn Sie IBM IAM-Token verwenden, führen Sie den folgenden Befehl aus:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
<your-username>ist optional, wenn Sie mehrere Verbindungen mit verschiedenen Benutzern haben und diese unterscheiden möchten.Geben Sie Ihren IBM API-Schlüssel oder IBM IAM-Tokens an der Eingabeaufforderung ein.
-
-
JWT-Token: Die JWT-Authentifizierungsmethode ist ab 2.1.2 standardmäßig verfügbar. Führen Sie den folgenden Befehl aus, um eine Verbindung zu presto mit einem JWT-Token herzustellen:
Um diese Authentifizierungsmethode für frühere Versionen von watsonx.data (vor 2.1.2 der Version ) zu verwenden, wenden Sie sich an IBM den Support und aktivieren Sie die Funktion.
```bash {: codeblock} ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN> ```Um zu generieren
<ACCESS_TOKEN>, verwenden Sie eine der folgenden Methoden:-
Erhalten des IBM Access Management (IAM) Tokens, siehe (IAM)Token.
-
Rufen Sie
<ACCESS_TOKEN>mit dem folgenden Befehl auf: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.
-
-
Geben Sie an der Presto
show catalogs;ein. Die Katalogliste wird angezeigt. Jetzt sind Sie mit der Presto in watsonx.data über Presto CLI verbunden.presto:default> show catalogs; Catalog -------------- iceberg_data jmx system tpcds tpch (5 rows)
Verbindung zur Presto mit JDBC
-
Laden Sie die neuesten JDBC-Treiber auf die Clientmaschine herunter und installieren Sie sie.
-
Fügen Sie die heruntergeladene Datei
jarzum Klassenpfad Ihrer Java-Anwendung hinzu. -
Rufen Sie den API-Schlüssel ab.
Verwenden Sie
ibmlhapikeyals Benutzernamen und den API-Schlüssel als Passwort. Weitere Informationen finden Sie unter Erhalten des IBM API-Schlüssels.Ab watsonx.data Version ist die Authentifizierung mit
ibmlhapikey2.2.0 undibmlhtokenals Benutzernamen veraltet. Diese Formate werden in 2.3.0 der Version auslaufen. Um die Kompatibilität mit kommenden Versionen zu gewährleisten, verwenden Sie das neue Format:ibmlhapikey_<username>undibmlhtoken_<username>. -
Rufen Sie den Hostnamen und den Port ab. Weitere Informationen finden Sie unter Abrufen des Presto und der Portdetails.
-
Erstellen Sie eine Java-Anwendung mithilfe der JDBC-Schnittstelle. Das folgende Beispiel zeigt ein Java-Snippet:
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(); } } } }Ersetzen Sie die Parameter im Befehl durch Folgendes:
<PRESTO_URL>Identifiziert den jdbc URL mit dem Presto-Server.<EMAIL_ID>durch Ihre E-Mail-ID<API_KEY>mit dem API-SchlüsselWenn Sie ein IAM-Token IBM verwenden, ersetzen Sie
ibmapikeydurchibmlhtokenund übergeben Sie das Token. -
Kompilieren Sie den Befehl und führen Sie ihn aus.
Verbindung zur Presto mit Python
-
Installieren Sie Python 3.x (3.10 oder höher empfohlen) und
pip3auf Ihrer Client-Workstation. -
Verwenden Sie die DBAPI-Schnittstelle zur Abfrage von Presto. Im Folgenden sehen Sie ein Python-Beispielscript.
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)Der Befehl fragt die
system.runtime.nodesSystemtabellen ab, die die Knoten im Presto Cluster anzeigen. Die DBAPI-Implementierung inprestodb.dbapistellt Methoden zum Abrufen weniger Zeilen bereit. Beispiel:Cursorfetchone()oderCursor.fetchmany(). Standardmäßig ruftCursor.fetchmany()eine Zeile ab. Legen Sieprestodb.dbapi.Cursor.arraysizeentsprechend fest. -
Kompilieren Sie den Befehl und führen Sie ihn aus.