4
0

watsonx.data SaaS版のPresto エンジンに Presto CLI からアクセス

Last updated at Posted at 2023-08-29

* IBM Cloud上のSaaS版についての記載です

watsonx.dataは「単一の統合データ・プラットフォームですべての企業データを収集、保存、照会、分析するためのデータ管理ソリューションです。オープン・データ・フォーマットに最適化された、柔軟で信頼性の高いプラットフォームを提供します」とのことで、いわゆるデータレイクハウスです。SW版とSaaS版があります。

当記事はwatsonx.data SaaS版のPrestoエンジンにpythonからアクセスするための方法について説明します。

watsonx.dataは「単一の統合データ・プラットフォームですべての企業データを収集、保存、照会、分析するためのデータ管理ソリューションです。オープン・データ・フォーマットに最適化された、柔軟で信頼性の高いプラットフォームを提供します」とのことで、いわゆるデータレイクハウスです。SW版とSaaS版があります。

当記事はwatsonx.data SaaS版のPrestoエンジンにPresto CLIからアクセスするための方法について説明します。
尚、公式ドキュメントではConnecting to Presto serverの「Connecting to Presto engine using Presto CLI (Remote)」に記述されている内容です。

今回試した実行環境は以下です:

  • java version "1.8.0_311"
  • Apple M1 Pro

2024/08/08 最新の情報で改訂

1. 事前準備

watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報取得を参考に
watsonx.data SaaS版のPrestoエンジンにアクセスするための事前情報

  • ホスト名
  • ポート番号
  • IBM API key
  • IBM IAM token (オプション)

を取得しておいてください。

尚、ドキュメントによるとIBM IAM tokenの方がワークロード的におすすめとのことです。

ただIBM API key は一度取得したら削除するまで使えますが、IBM IAM tokenは作成後1時間有効となり、有効期限があります。どちらも使用可能なので、状況に合わせて選択してください。

2. CLIの導入

1-1. 前提環境

Presto CLIはjavaのjarファイルを実行する形式です。よってJavaが実行できる環境が(JRE)が導入済みである必要があります。
ターミナルまたはコマンドプロプトからjava -versionを実行してみて、結果としてJavaのVersionが返ってくるか確認してください。

実行例:

$ java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
$

1-2. jarファイルのダウンロード

https://prestodb.io/docs/current/installation/cli.html よりjarファイルをダウンロードします。2024年8月8日現在は presto-cli-0.288-executable.jarというファイルへのリンクがあり、それをクリックしてダウンロードしました。

image.png

1-3. ダウンロードしたjarファイルをprestoにリネームして、実行可能にする。

以下はMacでpresto-cli-0.283-executable.jarというjarファイルだった場合の実行例:

mv presto-cli-0.288-executable.jar presto
chmod a+x presto

1-4.導入確認

以下のコマンドでPrestoのcli versionが表示されればOKです。

./presto --version

出力例:

$ ./presto --version
Presto CLI 0.288-15f14bb
$

3. Presto CLI からアクセス

a. IBM API key使用の場合

./presto --server https:<ホスト名>:<ポート番号> \
--catalog iceberg_data --schema default \
--user ibmlhapikey --password

尚、--catalog--schemaは省略可能です。

./presto --server https:<ホスト名>:<ポート番号> \
--user ibmlhapikey --password

実行するとパスワードを聞かれるので、IBM API key の値を入力します。

実行例:

$ ./presto --server https://xxxx.lakehouse.appdomain.cloud:99999 --user ibmlhapikey --password

Password:
presto>

b. IBM IAM token使用の場合

userのibmlhtoken_<your-username><your-username>部分にはアクセスに使用するIBM CloudのIDを入れてください。
IBM CloudのIDがaaa@bbb.com であれば ibmlhtoken_aaa@bbb.com となります。
(↑2024/08/08現在ibmlhtokenではアクセスできなかったので修正)

./presto --server https:<ホスト名>:<ポート番号> \
--catalog iceberg_data --schema default \
--user ibmlhtoken_<your-username> --password

尚、--catalog--schemaは省略可能です。

./presto --server https:<ホスト名>:<ポート番号> \
--user ibmlhtoken_<your-username> --password

実行するとパスワードを聞かれるので、IBM IAM tokenの値を入力します。
IBM IAM tokenは長いので現実的に考えると環境変数PRESTO_PASSWORDに事前に入れて使うのがよいかもしれません。環境変数PRESTO_PASSWORDの値がセットされている場合はパスワードは聞かれません。

パスワードを聞かれる実行例(IBM CloudのIDはaaa@bbb.comとしています):

$ ./presto --server https://xxxx.lakehouse.appdomain.cloud:99999 --user ibmlhtoken_aaa@bbb.com --password

Password:
presto>

IBM IAM tokenを環境変数PRESTO_PASSWORDに入れる実行例:
(IBM CloudのIDはaaa@bbb.comとしています)
(jqコマンドが必要です。ない場合はbrew install jqで導入する)

APIKEY=xxxxxxxxxxxxxxxxxxxxxxxx
export PRESTO_PASSWORD=$(curl --silent -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=${APIKEY}" | jq -r '.access_token' )
./presto --server https://xxxxx.lakehouse.appdomain.cloud:99999 --user ibmlhtoken_aaa@bbb.com --password
presto>

4. 接続確認

presto>のプロンプトが出てくるので、以下のコマンドを打ちます:
show catalogs;
カタログのリストがでてきます。

実行例:

presto> show catalogs;
      Catalog
-------------------
 icos_nishito_hive
 jmx
 nishito_iceberg
 system
 tpcds
 tpch
(6 rows)

Query 20230828_073700_24257_ffx64, FINISHED, 2 nodes
Splits: 36 total, 36 done (100.00%)
[Latency: client-side: 0:02, server-side: 0:01] [0 rows, 0B] [0 rows/s, 0B/s]

presto>

SQLの実行も可能です:

select * from tpch.tiny.customer limit 10;

実行例
image.png
プロンプトに収まりきらない場合は、unix系のlessコマンドで実行されるので、lessコマンドの操作方法で中身を見てください。lessコマンドに入った場合は、qの入力で抜けます。

ヘルプはhelpと打ってください:

presto> help

Supported commands:
QUIT
EXPLAIN [ ( option [, ...] ) ] <query>
    options: FORMAT { TEXT | GRAPHVIZ }
             TYPE { LOGICAL | DISTRIBUTED }
DESCRIBE <table>
SHOW COLUMNS FROM <table>
SHOW FUNCTIONS
SHOW CATALOGS [LIKE <pattern>]
SHOW SCHEMAS [FROM <catalog>] [LIKE <pattern>]
SHOW TABLES [FROM <schema>] [LIKE <pattern>]
USE [<catalog>.]<schema>

presto>

prestoプロンプトを抜けるのはquitと打ってください

presto> quit
$

5. 参考Link

presto CLIの使い方はいまいちいいドキュメントが見当たりませんでしたが、コマンドはこちらに一覧があります:
SQL Statement Syntax

presto CLI のドキュメントはこちらですが、シンプルな説明のみです
Command Line Interface

以上です。

6. 関連リンク

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0