2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ibm-lh-clientでSQLを実行してみた

Last updated at Posted at 2024-10-25

はじめに

ibm-lh-clientパッケージには、watsonx.dataへのアクセスや、watsonx.dataと連携するアプリケーションを開発するための便利なユーティリティとライブラリが含まれています。

ここでは、ibm-lh-clientパッケージ内のprestro-cli、presto-runを使用したSQLの実行例を紹介します。

環境

使用したサーバ環境は以下になります。
・Red Hat OpenShift Container Platform 4.14
・IBM Cloud Pak for Data (CP4D) 5.0.3
・IBM watsonx.data 2.0.3
・Presto (Java) v0.286
使用したクラアント環境は以下になります。
・Red Hat Enterprise Linux release 8.10 (Ootpa)
・Podman version 4.9.4-rhel

事前準備

ibm-lh-clientパッケージを使用するには、インストールと設定が必要です。次のQiita記事をご参照ください。

ibm-lh-clientのインストールで、ibm-lh-clientパッケージを${HOME}/watsonxdataディレクトリの下にインストールしました。ibm-lh-clientの設定で、エンジン名PRESTO01を登録しました。

ibm-lh-clientパッケージを利用してSQLを実行する

ibm-lh-clientパッケージを利用してSQLを実行するには、3つのパータンがあります。詳細はRunning SQL queries by using ibm-lh-clientを参照してください。

  • presto-cliでインタラクティブセッションを使用する方法
  • presto-runで非インタラクティブセッションを使用する方法
  • presto-runでSQLファイルを使用する方法

presto-cliでインタラクティブセッションの使用例

インタラクティブセッションを起動するコマンドの例は以下の通りです。ENGINE_NAMEは、ibm-lh-clientの設定で登録したエンジン名です。

bin/presto-cli --engine=ENGINE_NAME 

インタラクティブセッションを起動すると、SQLコマンドを対話的に入力できるようになります。今回は、presto-cliでSQLコマンドを使用してスキーマとテーブルを作成し、そのテーブルにデータを挿入してみました。ここではCREATE SCHEMA statement、CREATE TABLE statement、INSERT statementが必要になります。詳細については、CREATE SCHEMA statementCREATE TABLE statementINSERT statementを参照してください。

今回実行した例は以下の通りです。
1.CREATE SCHEMA statementを使用して、カタログiceberg_data下にスキーマmy_schemaを作成しました。
2.CREATE TABLE statementとを使用して、my_schemaの下に2つの列を持つテーブルtest01を作成しました。
3.INSERT statementを使用して、テーブルtest0112を挿入しました。

[user01@client ~]$ cd ${HOME}/watsonxdata
[user01@client watsonxdata]$ cd bin
[user01@client bin]$ ./presto-cli --engine=PRESTO01 --catalog=iceberg_data
presto> CREATE SCHEMA IF NOT EXISTS my_schema with (location='s3a://iceberg-bucket/my_schema');
CREATE SCHEMA
presto> CREATE TABLE iceberg_data.my_schema.test01 (col1 int , col2 int);
CREATE TABLE
presto> insert into iceberg_data.my_schema.test01 values (1,2);
INSERT: 1 row

Query 20241023_090122_00265_p2h32, FINISHED, 1 node
Splits: 19 total, 19 done (100.00%)
[Latency: client-side: 0:03, server-side: 0:02] [0 rows, 0B] [0 rows/s, 0B/s]

presto> 

presto-runで非インタラクティブセッションの使用例

非インタラクティブセッションの構文は以下の通りです。ENGINE_NAMEは、ibm-lh-clientの設定で登録したエンジン名です。

bin/presto-run --engine=ENGINE_NAME <<< "SQL statement"

今回は、上のpresto-cliでインタラクティブセッションの使用例で作成したテーブルtest01をpresto-runでクエリしてみました。ここではSELECT statementが必要になります。詳細については、SELECT statementを参照してください。

今回実行した例は以下の通りです。SELECT statementを使用して、test01の情報をクエリしました。

[user01@client bin]$ ./presto-run  --engine=PRESTO01  <<< "SELECT * FROM iceberg_data.my_schema.test01;"
presto> SELECT * FROM iceberg_data.my_schema.test01;
 col1 | col2 
------+------
    1 |    2 
(1 row)

Query 20241025_055313_00143_p2h32, FINISHED, 1 node
Splits: 17 total, 17 done (100.00%)
[Latency: client-side: 0:01, server-side: 324ms] [1 rows, 90B] [3 rows/s, 277B/s]

presto> 
[user01@client bin]$

presto-runでSQLファイルの使用例

コンテナー化されたibm-lh クライアントからSQLファイルを参照するために、sandboxディレクトリをLH_SANDBOX_DIR環境変数に登録します。ENGINE_NAMEは、ibm-lh-clientの設定で登録したエンジン名です。PATH_SANDBOX_DIR_SQL_FILEはsandboxディレクトリ内のSQLファイルを指定します。

bin/presto-run --engine=ENGINE_NAME -f PATH_SANDBOX_DIR_SQL_FILE

今回は、上のpresto-cliでインタラクティブセッションの使用例で作成したテーブルtest01をSQLファイルでクエリしてみました。ここではSELECT statementが必要になります。詳細については、SELECT statementを参照してください。

今回実行した例は以下の通りです。SQLファイルa.sqlの内に2回のSELECT statementがあります。presto-runでa.sqlを読み込み実行した結果、期待通り"1","2"が2回返されました。

[user01@client bin]$ export LH_SANDBOX_DIR=$HOME/test
[user01@client bin]$ mkdir ${LH_SANDBOX_DIR}
[user01@client bin]$ cat  ${LH_SANDBOX_DIR}/a.sql
SELECT * FROM trg24264.test.test06;
SELECT * FROM trg24264.test.test06;
[user01@client bin]$ ./presto-run  --engine=PRESTO01 -f ${LH_SANDBOX_DIR}/a.sql
"1","2"
"1","2"
[user01@client bin]$
2
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?