サーバー Presto に接続中
Presto CLIは、クエリを実行するためのターミナルベースの対話型シェルを提供します。
IBM® watsonx.dataでは、使用しているプラットフォームとユーティリティに応じて、複数の方法でPrestoサーバーに接続できます。 詳細は以下のセクションを参照してください:
CLI を使用してスキーマを作成する場合は、ロケーションを指定する必要があります。 以下に例を示します。
location = s3a://<storage-name>/
前提条件
Prestoエンジンのホスト名とポートの詳細の取得
-
Web watsonx.data コンソールにログインしてください。
-
「インフラストラクチャー・マネージャー」 に移動し、「リスト・ビュー」 をクリックします。
-
「エンジン」 タブで、ホスト名とポートの詳細が必要なエンジン名をクリックします。
-
ホストの詳細をコピーするには、「ホスト」 ラベルの下の 「クリップボードにコピー」 アイコンをクリックします。
-
ホストの詳細をノートパッドにコピーします。
IBM API キーまたは IBM IAM トークンの取得
要件に応じて、IBM API キーまたは IBM IAM トークンのいずれかを使用します。
ストレス・ワークロードには IAM トークンを使用することをお勧めします。
APIキー IBM の取得
機能を External Identity Interactions Limited 有効化し、APIキーを使用してと通信する場合 watsonx.data、その watsonx.data 機能がアカウントビジョニングされているアカウントからAPIキーを作成する必要があります。
-
コンソール IBM Cloud にログインしてください。
-
ナビゲーション・バーで、「管理」 をクリックし、「アクセス (IAM)」 を選択します。
-
左側のナビゲーションバーで 「APIキー」 をクリックしてください。
-
**作成 +**をクリックします。
-
「IBM Cloud API キーの作成」 ウィンドウで、API キーの名前を入力し、キーの適切な説明を入力します。 例:
ibmlhtoken testing -
「作成」 をクリックします。 「API キーが正常に作成されました」 というメッセージのウィンドウが表示されます。
-
「ダウンロード」 をクリックして、APIキーをローカルマシンに保存してください。
-
ダウンロードしたファイルを開き、API キーをノートパッド・ファイルにコピーします。
IBM Access Management (IAM) トークンの取得
-
IAM 内の REST エンドポイントを呼び出して、IAM トークンを取得します。
-
APIキーを IBM あなたの
<your-api-key>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'
Presto CLI(リモート)経由で Presto エンジンに接続する
-
Presto 実行ファイル
jarを以下からダウンロードする。 https://prestodb.io/getting-started/ -
ダウンロードしたファイルの名前を presto に変更します。
chmod +xを使用して実行可能にし、実行します。 -
PrestoCLI がインストールされているかどうかを確認するには、
./presto --version. Prestocliのバージョンが表示される。 例:Presto CLI 0.281-cfbc6eb -
PrestoCLI がインストールされているシステムで、以下のコマンドを実行してください。 以下のいずれかの方法で認証できます Presto :
-
ユーザー名とパスワードを使用する :これを行うには、次のコマンドを実行します
-
APIキーを使用している場合は、次のコマンドを実行してください:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhapikey_<your-username> --password -
IBM IAMトークンを使用している場合は、以下のコマンドを実行します:
./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --user ibmlhtoken_<your-username> --password
異なるユーザーとの複数の接続があり、それらを区別する必要がある場合、
<your-username>はオプションです。プロンプトで IBM API キーまたは IBM IAM トークンを入力します。
-
-
JWTトークン: JWT認証方式は、 2.1.2 以降、デフォルトで利用できます。 以下のコマンドを実行し、JWTトークンを使用してprestoに接続する:
以前のバージョン( watsonx.data リリース 2.1.2 以前)でこの認証方法を使用するには、サポート IBM に連絡し、機能を有効にしてください。
```bash {: codeblock} ./presto --server <https://Prestoengine host details> --catalog iceberg_data --schema default --access-token <ACCESS_TOKEN> ```生成するには
<ACCESS_TOKEN>、以下のいずれかの方法を使用してください:-
IBM アクセス管理(IAM)トークンを取得するには、 (IAM)トークン を参照してください。
-
次のコマンドを使用して、
<ACCESS_TOKEN>を取得します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.
-
-
Prestoのプロンプトで
show catalogs;と入力する。 カタログ・リストが表示されます。 これで、PrestoCLIを通じてwatsonx.dataの Prestoエンジンに接続されました。presto:default> show catalogs; Catalog -------------- iceberg_data jmx system tpcds tpch (5 rows)
JavaJDBCを使用してPrestoエンジンに接続する
-
クライアント・マシンに 最新の JDBC ドライバー をダウンロードしてインストールします。
-
ダウンロードした
jarファイルを Java アプリケーションのクラスパスに追加します。 -
API キーを取得します。
ユーザー名には
ibmlhapikeyを、パスワードにはAPIキーを使います。 詳細については、IBMAPIキーの取得 を参照してください。バージョン watsonx.data 以降 2.2.0、ユーザー名として
ibmlhtokenおよびibmlhapikeyを使用した認証は非推奨となります。 これらの形式はリリース 2.3.0 で段階的に廃止されます。 今後のバージョンとの互換性を確保するため、新しいフォーマットibmlhapikey_<username>およびibmlhtoken_<username>を使用してください。 -
ホスト名とポートを取得します。 詳細については、「Prestoエンジンのホスト名とポートの詳細を取得する」を参照してください。
-
JDBC インターフェースを使用して Java アプリケーションを作成します。 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(); } } } }コマンド内のパラメーターを以下のように置き換えます。
<PRESTO_URL>jdbc を サーバーに識別します。 URL Presto<EMAIL_ID>は、E メール ID に置き換えます。<API_KEY>にAPIキーを指定するIAMトーク IBM ンを使用している場合は、
を `ibmapikey`に置き換えibmlhtoken、トークンを渡してください。 -
コマンドをコンパイルして実行する。
Pythonスクリプトを使ったPrestoエンジンへの接続
-
クライアント・ワークステーションに Python 3.x (3.10 以降を推奨) および
pip3をインストールします。 -
DBAPI インターフェースを使ってPrestoに問い合わせる。 以下に 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)このコマンドは、クラスタ Presto 内のノードを表示するシステム
system.runtime.nodesテーブルを照会します。prestodb.dbapiの DBAPI 実装には、少数の行を取得するためのメソッドが用意されています。 例えば、Cursorfetchone()またはCursor.fetchmany()などです。 デフォルトでは、Cursor.fetchmany()は 1 行をフェッチします。 それに応じてprestodb.dbapi.Cursor.arraysizeを設定します。 -
コマンドをコンパイルして実行する。