サーバー Presto に接続中

Presto CLIは、クエリを実行するためのターミナルベースの対話型シェルを提供します。

IBM® watsonx.dataでは、使用しているプラットフォームとユーティリティに応じて、複数の方法でPrestoサーバーに接続できます。 詳細は以下のセクションを参照してください:

CLI を使用してスキーマを作成する場合は、ロケーションを指定する必要があります。 以下に例を示します。 location = s3a://<storage-name>/

前提条件

Prestoエンジンのホスト名とポートの詳細の取得

  1. Web watsonx.data コンソールにログインしてください。

  2. 「インフラストラクチャー・マネージャー」 に移動し、「リスト・ビュー」 をクリックします。

  3. 「エンジン」 タブで、ホスト名とポートの詳細が必要なエンジン名をクリックします。

  4. ホストの詳細をコピーするには、「ホスト」 ラベルの下の 「クリップボードにコピー」 アイコンをクリックします。

  5. ホストの詳細をノートパッドにコピーします。

IBM API キーまたは IBM IAM トークンの取得

要件に応じて、IBM API キーまたは IBM IAM トークンのいずれかを使用します。

ストレス・ワークロードには IAM トークンを使用することをお勧めします。

APIキー IBM の取得

機能を External Identity Interactions Limited 有効化し、APIキーを使用してと通信する場合 watsonx.data、その watsonx.data 機能がアカウントビジョニングされているアカウントからAPIキーを作成する必要があります。

  1. コンソール IBM Cloud にログインしてください。

  2. ナビゲーション・バーで、「管理」 をクリックし、「アクセス (IAM)」 を選択します。

  3. 左側のナビゲーションバーで 「APIキー」 をクリックしてください。

  4. **作成 +**をクリックします。

  5. 「IBM Cloud API キーの作成」 ウィンドウで、API キーの名前を入力し、キーの適切な説明を入力します。 例: ibmlhtoken testing

  6. 「作成」 をクリックします。 「API キーが正常に作成されました」 というメッセージのウィンドウが表示されます。

  7. 「ダウンロード」 をクリックして、APIキーをローカルマシンに保存してください。

  8. ダウンロードしたファイルを開き、API キーをノートパッド・ファイルにコピーします。

IBM Access Management (IAM) トークンの取得

  1. IAM 内の REST エンドポイントを呼び出して、IAM トークンを取得します。

  2. 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 エンジンに接続する

  1. Presto 実行ファイル jar を以下からダウンロードする。 https://prestodb.io/getting-started/

  2. ダウンロードしたファイルの名前を presto に変更します。 chmod +x を使用して実行可能にし、実行します。

  3. PrestoCLI がインストールされているかどうかを確認するには、./presto --version. Prestocliのバージョンが表示される。 例: Presto CLI 0.281-cfbc6eb

  4. 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.

  5. Prestoのプロンプトで show catalogs; と入力する。 カタログ・リストが表示されます。 これで、PrestoCLIを通じてwatsonx.dataの Prestoエンジンに接続されました。

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

JavaJDBCを使用してPrestoエンジンに接続する

  1. クライアント・マシンに 最新の JDBC ドライバー をダウンロードしてインストールします。

  2. ダウンロードした jar ファイルを Java アプリケーションのクラスパスに追加します。

  3. API キーを取得します。

    ユーザー名には ibmlhapikey を、パスワードにはAPIキーを使います。 詳細については、IBMAPIキーの取得 を参照してください。

    バージョン watsonx.data 以降 2.2.0、ユーザー名として ibmlhtoken および ibmlhapikey を使用した認証は非推奨となります。 これらの形式はリリース 2.3.0 で段階的に廃止されます。 今後のバージョンとの互換性を確保するため、新しいフォーマット ibmlhapikey_<username> および ibmlhtoken_<username> を使用してください。

  4. ホスト名とポートを取得します。 詳細については、「Prestoエンジンのホスト名とポートの詳細を取得する」を参照してください。

  5. 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 、トークンを渡してください。

  6. コマンドをコンパイルして実行する。

Pythonスクリプトを使ったPrestoエンジンへの接続

  1. クライアント・ワークステーションに Python 3.x (3.10 以降を推奨) および pip3 をインストールします。

  2. 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 を設定します。

  3. コマンドをコンパイルして実行する。