* 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
というファイルへのリンクがあり、それをクリックしてダウンロードしました。
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;
実行例
プロンプトに収まりきらない場合は、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
以上です。