Presto: システム・コネクターの system.runtimeにアクセスしてみた。

## はじめに
watsonx.data のエンジンの一つである[Prestoエンジンのシステム・コネクター(System Connector)](https://prestodb.io/docs/current/connector/system.html)について調査しました。
Prestoのシステム・コネクターは、オープンソースのPrestoで実装され、Prestoクラスターで実行されている照会の情報とメトリックを提供します。 プロシージャーとしてkill_query (system.runtime.kill_query)が含まれています。

ここではPrestoエンジンのシステム・コネクターのruntimeスキーマに含まれる表の構造と含まれるデータの例をwatsonx.data 2.1.2を使用してご紹介します。

## 環境
- OCP Version : 4.16
- CP4D 5.1.2 
    - watsonx.data 2.1.2
- 構成済みのPresto エンジンについて
    - P01(Presto Java)
        - タイプ :  Presto (Java) v0.286
        - サイズ :  スターター
        - コーディネーター・ノード : 1
        - ワーカー・ノード : 0
    - PCpp (Presto(C++))
        - タイプ :   Presto (C++) v0.286
        - サイズ : スターター
        - コーディネーター・ノード : 1
        - ワーカー・ノード : 3 

次は今回使用したwatsonx.dataのWeb　Consoleのインフラストラクチャー・マネージャーのイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/f6ca3373-36a5-4b45-8b55-c47e52962668.png)

## Presto システム・コネクター
Prestoのシステム・コネクターは、オープンソースのPrestoで実装されていて、Prestoクラスターで実行されている情報とメトリックを提供します。 watsonx.dataでPrestoエンジンを追加すると、システム・コネクターは自動的に構成されています。
Presto システム・コネクターはカタログsystemを使用して通常の SQL クエリでアクセスすることができます。
その中のスキーマ runtime には次の4つの表が含まれています。
|表|説明|
|:----|:----|
|nodes|Prestoクラスターのノードのリストとそのステータス。|
|queries|Prestoクラスターで実行中、最近完了したクエリーの情報が含まれる。元のクエリー・テキスト(SQL)、クエリーを実行したユーザー情報、パフォーマンス情報（キュー待ち時間、アナライズ時間を含む)を取得することができる。|
|tasks|タスクが実行された場所や、各タスクが処理した行数とバイト数など、Presto クエリーに関連するタスク情報が含まれている。|
|transactions|実行中のトランザクションと関連メタデータのリストが含まれる。作成時刻、アイドル時間、初期化パラメータ、アクセスされたカタログなどの情報が含まれる。|

### watsonx.data でみる Presto システム・コネクター
watsonx.data データ・マネージャーでは　次のように System monitoring data の中のsystemとして表示されます。　
<div align="center">
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/e030f994-7de8-45ca-a0d6-811eb4ed075b.png width="50%">
</div>

今回はsystemの中の runtimeについて記述します。
<div align="center">
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/2e86dc4d-d74c-400b-80d4-d7ab5c652ee2.png width="50%">
</div>

presto-cliで取得した各表の構造と主にPresto(Java)での出力例をご紹介します。watsonx.dataの照会ワークスペースでも同様の出力がえられます。
 
補足情報 : Presto(Java),Presto(C++)でruntimeスキーマの表の構造を確認したところ同じでした。


### system.runtime.nodes　
system.runtime.nodesはPrestoクラスターのノードのリストとそのステータスを表示します。
- 表構造は次のようなものです。describe の結果の　Extra列 Comment列には値がなかったため省略しています。
例として今回観察された値を紹介しています。
```
presto> describe system.runtime.nodes;
    Column    |  Type   | Precision | Scale |   Length   | 観察された値
--------------+---------+-----------+-------+------------+-------------
 node_id      | varchar | NULL      | NULL  | 2147483647 | 
 http_uri     | varchar | NULL      | NULL  | 2147483647 | https://ibm-lh-lakehouse... 
 node_version | varchar | NULL      | NULL  | 2147483647 | 0.286
 coordinator  | boolean | NULL      | NULL  | NULL       | true / false
 state        | varchar | NULL      | NULL  | 2147483647 | active
 node_type    | varchar | NULL      | NULL  | 2147483647 | NORMAL
(6 rows)
```

- Presto(Java)での出力 
今回使用している環境では Presto(Java)はコーディネーターとワーカーが一つのPodに同居した環境で動いています。　system.runtime.nodes　をみると次のとおり1行出力されました。`coordinator`列が`ture`となっています。
```
presto> select * from system.runtime.nodes ;
               node_id                | http_uri                                                       | node_version | coordinator | state  | node_type
--------------------------------------+----------------------------------------------------------------+--------------+-------------+--------+-----------
 536b979f-5e94-4cd2-bfab-45be1a1aee3a | https://ibm-lh-lakehouse-presto512-single-blue-0.(domain):8443 | 0.286        | true        | active | NORMAL
(1 row)
```

- Presto(C++)での出力 
Presto(C++)は 1つのCoordinatorと３つのWorkerで構成されています。　system.runtime.nodes　をみると次のとおり　4行出力されました。`coordinator`列が`ture`の行が1行 `false`の行が3行です。
```
presto> select * from system.runtime.nodes;
               node_id                | http_uri                                                                   | node_version | coordinator | state  | node_type
--------------------------------------+----------------------------------------------------------------------------+--------------+-------------+--------+-----------
 4846690c-05e6-439b-9a10-0712d5e515d0 | https://ibm-lh-lakehouse-prestissimo578-prestissimo-worker-1.(domain):7443 | 0.286        | false       | active | NORMAL
 a4cc17ce-158c-4e39-beaa-0cc1603219d0 | https://ibm-lh-lakehouse-prestissimo578-coordinator-blue-0.(domain):8443   | 0.286        | true        | active | NORMAL
 aa63bd77-8a92-43ad-bd7f-9844354cf6c9 | https://ibm-lh-lakehouse-prestissimo578-prestissimo-worker-0.(domain):7443 | 0.286        | false       | active | NORMAL
 beac420a-0007-4259-99e9-ff7c439fabb3 | https://ibm-lh-lakehouse-prestissimo578-prestissimo-worker-2.(domain):7443 | 0.286        | false       | active | NORMAL
(4 rows)

```

### system.runtime.queries 
system.runtime.queriesにはPrestoクラスターで実行中あるいは最近完了したクエリーの情報が含まれます。元のクエリー・テキスト(SQL)、クエリーを実行したユーザー情報、パフォーマンス情報（キュー待ち時間、アナライズ時間を含む)を取得することができます。

- 表構造は次のようなものです。describe の結果の　Extra列 Comment列には値がなかったため省略しています。例として今回観察された値を紹介しています。
```
presto> describe system.runtime.queries ;
      Column       |      Type      | Precision | Scale |   Length   | 観察された値
-------------------+----------------+-----------+-------+------------+---------
 query_id          | varchar        | NULL      | NULL  | 2147483647 +
 state             | varchar        | NULL      | NULL  | 2147483647 + RUNNING / FINISHED / FAILED / PLANNING
 user              | varchar        | NULL      | NULL  | 2147483647 +
 source            | varchar        | NULL      | NULL  | 2147483647 + presto-cli / wxd-system / wxd-sql ...
 query             | varchar        | NULL      | NULL  | 2147483647 +
 resource_group_id | array(varchar) | NULL      | NULL  | NULL       + [global]
 queued_time_ms    | bigint         |        10 | NULL  | NULL       +
 analysis_time_ms  | bigint         |        10 | NULL  | NULL       +
 created           | timestamp      | NULL      | NULL  | NULL       +
 started           | timestamp      | NULL      | NULL  | NULL       +
 last_heartbeat    | timestamp      | NULL      | NULL  | NULL       +
 end               | timestamp      | NULL      | NULL  | NULL       +
(12 rows)

```
出力例　横に長いので　３つに分けてご紹介します。
- 最初の4列 query_id, state, user , source , resource_group_id 
```
presto>  select query_id, state, user , source , resource_group_id  from system.runtime.queries order by query_id desc limit 5;
          query_id           |  state   |   user    |   source   | resource_group_id
-----------------------------+----------+-----------+------------+-------------------
 20250422_061937_00187_drami | RUNNING  | cpadmin   | presto-cli | [global]
 20250422_061848_00186_drami | FINISHED | cpadmin   | presto-cli | [global]
 20250422_061740_00184_drami | FINISHED | cpadmin   | presto-cli | [global]
 20250422_061639_00183_drami | FAILED   | prestoadm | NULL       | [global]
 20250422_061638_00182_drami | FINISHED | prestoadm | NULL       | [global]
(5 rows)
```
- 列　query_id, user, source , query : `user02`で実行されたQuery 2行表示しています。
```
presto> select query_id, user, source , query from  system.runtime.queries where user='user02' order by query_id desc limit 2 ;

         query_id            |  user  |   source   |                                        query
-----------------------------+--------+------------+--------------------------------------------------------------------------------------
 20250422_055253_00163_drami | user02 | presto-cli | SELECT table_name FROM information_schema.tables WHERE table_schema = 'hsf1_no_part'
 20250422_055244_00162_drami | user02 | presto-cli | select                                                                              +
                             |        |            |  l_returnflag,                                                                      +
                             |        |            |  l_linestatus,                                                                      +
                             |        |            |  sum(l_quantity) as sum_qty,                                                        +
                             |        |            |  sum(l_extendedprice) as sum_base_price,                                            +
                             |        |            |  sum(l_extendedprice * (1 - l_discount)) as sum_disc_price,                         +
                             |        |            |  sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge,               +
                             |        |            |  avg(l_quantity) as avg_qty,                                                        +
                             |        |            |  avg(l_extendedprice) as avg_price,                                                 +
                             |        |            |  avg(l_discount) as avg_disc,                                                       +
                             |        |            |  count(*) as count_order                                                            +
                             |        |            | from                                                                                +
                             |        |            |  lineitem                                                                           +
                             |        |            | where                                                                               +
(省略)

```
- 列 query_id , queued_time_ms,analysis_time_ms ,created , started , last_heartbeat, end : `user02`で実行されたQuery の開始時刻や各フェーズの所要時間(ms)を表示しています。

```
presto> select query_id , queued_time_ms,analysis_time_ms ,created , started , last_heartbeat, "end" from system.runtime.queries where user='user02' order by query_id desc limit 2;
          query_id           | queued_time_ms | analysis_time_ms |         created         |         started         |     last_heartbeat      |           end
-----------------------------+----------------+------------------+-------------------------+-------------------------+-------------------------+-------------------------
 20250422_055253_00163_drami |              0 |              703 | 2025-04-22 05:52:54.019 | 2025-04-22 05:52:54.123 | 2025-04-22 05:52:55.517 | 2025-04-22 05:52:55.617
 20250422_055244_00162_drami |              0 |              686 | 2025-04-22 05:52:44.631 | 2025-04-22 05:52:44.947 | 2025-04-22 05:53:02.644 | 2025-04-22 05:53:02.716
(2 rows)
```
### system.runtime.tasks 
タスクが実行された場所や、各タスクが処理した行数とバイト数など、Presto クエリーに関連するタスク情報が含まれています。
- 表構造は次のようなものです。
```
presto> describe system.runtime.tasks ;
         Column          |   Type    | Extra | Comment | Precision | Scale |   Length
-------------------------+-----------+-------+---------+-----------+-------+------------
 node_id                 | varchar   |       |         | NULL      | NULL  | 2147483647
 task_id                 | varchar   |       |         | NULL      | NULL  | 2147483647
 stage_execution_id      | varchar   |       |         | NULL      | NULL  | 2147483647
 stage_id                | varchar   |       |         | NULL      | NULL  | 2147483647
 query_id                | varchar   |       |         | NULL      | NULL  | 2147483647
 state                   | varchar   |       |         | NULL      | NULL  | 2147483647
 splits                  | bigint    |       |         |        10 | NULL  | NULL
 queued_splits           | bigint    |       |         |        10 | NULL  | NULL
 running_splits          | bigint    |       |         |        10 | NULL  | NULL
 completed_splits        | bigint    |       |         |        10 | NULL  | NULL
 split_scheduled_time_ms | bigint    |       |         |        10 | NULL  | NULL
 split_cpu_time_ms       | bigint    |       |         |        10 | NULL  | NULL
 split_blocked_time_ms   | bigint    |       |         |        10 | NULL  | NULL
 raw_input_bytes         | bigint    |       |         |        10 | NULL  | NULL
 raw_input_rows          | bigint    |       |         |        10 | NULL  | NULL
 processed_input_bytes   | bigint    |       |         |        10 | NULL  | NULL
 processed_input_rows    | bigint    |       |         |        10 | NULL  | NULL
 output_bytes            | bigint    |       |         |        10 | NULL  | NULL
 output_rows             | bigint    |       |         |        10 | NULL  | NULL
 physical_written_bytes  | bigint    |       |         |        10 | NULL  | NULL
 created                 | timestamp |       |         | NULL      | NULL  | NULL
 start                   | timestamp |       |         | NULL      | NULL  | NULL
 last_heartbeat          | timestamp |       |         | NULL      | NULL  | NULL
 end                     | timestamp |       |         | NULL      | NULL  | NULL
(24 rows)
```



出力例　あるQuery(query_id='20250422_065234_00233_drami')に関する情報を取得した例です。
横に長いので　4つに分けてご紹介します。
- 最初の6列　node_id , task_id , stage_execution_id ,stage_id,query_id, state : このQueryが5つのタスクで実行されたことがわかります。
```
presto> select node_id , task_id , stage_execution_id ,stage_id,query_id, state from system.runtime.tasks where query_id='20250422_065234_00233_drami';
               node_id                |               task_id               |       stage_execution_id        |           stage_id            |          query_id           |  state
--------------------------------------+-------------------------------------+---------------------------------+-------------------------------+-----------------------------+----------
 536b979f-5e94-4cd2-bfab-45be1a1aee3a | 20250422_065234_00233_drami.2.0.0.0 | 20250422_065234_00233_drami.2.0 | 20250422_065234_00233_drami.2 | 20250422_065234_00233_drami | FINISHED
 536b979f-5e94-4cd2-bfab-45be1a1aee3a | 20250422_065234_00233_drami.3.0.0.0 | 20250422_065234_00233_drami.3.0 | 20250422_065234_00233_drami.3 | 20250422_065234_00233_drami | FINISHED
 536b979f-5e94-4cd2-bfab-45be1a1aee3a | 20250422_065234_00233_drami.4.0.0.0 | 20250422_065234_00233_drami.4.0 | 20250422_065234_00233_drami.4 | 20250422_065234_00233_drami | FINISHED
 536b979f-5e94-4cd2-bfab-45be1a1aee3a | 20250422_065234_00233_drami.1.0.0.0 | 20250422_065234_00233_drami.1.0 | 20250422_065234_00233_drami.1 | 20250422_065234_00233_drami | FINISHED
 536b979f-5e94-4cd2-bfab-45be1a1aee3a | 20250422_065234_00233_drami.0.0.0.0 | 20250422_065234_00233_drami.0.0 | 20250422_065234_00233_drami.0 | 20250422_065234_00233_drami | FINISHED
(5 rows)
```
- 列　task_id ,splits, queued_splits , running_splits , completed_splits , split_cpu_time_ms , split_blocked_time_ms : 各タスクのsplitsに関する情報

```
presto> select task_id ,splits, queued_splits , running_splits , completed_splits , split_cpu_time_ms , split_blocked_time_ms from system.runtime.tasks where query_id='20250422_065234_00233_drami';
               task_id               | splits | queued_splits | running_splits | completed_splits | split_cpu_time_ms | split_blocked_time_ms
-------------------------------------+--------+---------------+----------------+------------------+-------------------+-----------------------
 20250422_065234_00233_drami.2.0.0.0 |     37 |             0 |              0 |               37 |              2258 |                148500
 20250422_065234_00233_drami.3.0.0.0 |     34 |             0 |              0 |               34 |               824 |                 59482
 20250422_065234_00233_drami.4.0.0.0 |      1 |             0 |              0 |                1 |               166 |                     0
 20250422_065234_00233_drami.1.0.0.0 |     32 |             0 |              0 |               32 |                47 |                205241
 20250422_065234_00233_drami.0.0.0.0 |     17 |             0 |              0 |               17 |                10 |                109855
(5 rows)
```
- 列 task_id ,raw_input_bytes , raw_input_rows , processed_input_bytes, processed_input_rows , output_bytes , output_rows : 各タスクの処理量
```
presto> select task_id ,raw_input_bytes , raw_input_rows , processed_input_bytes, processed_input_rows , output_bytes , output_rows from system.runtime.tasks where query_id='20250422_065234_00233_drami’;
               task_id               | raw_input_bytes | raw_input_rows | processed_input_bytes | processed_input_rows | output_bytes | output_rows
-------------------------------------+-----------------+----------------+-----------------------+----------------------+--------------+-------------
 20250422_065234_00233_drami.2.0.0.0 |        52865068 |        6148341 |              53453026 |              6148341 |       372026 |       11620
 20250422_065234_00233_drami.3.0.0.0 |        11426397 |        1530142 |              11486639 |              1530142 |      4119528 |      147126
 20250422_065234_00233_drami.4.0.0.0 |          330572 |         150000 |                330572 |               150000 |       542556 |       30142
 20250422_065234_00233_drami.1.0.0.0 |          372034 |          11620 |                429940 |                11620 |         4480 |         160
 20250422_065234_00233_drami.0.0.0.0 |            5088 |            160 |                  4480 |                  160 |          280 |          10
(5 rows)

```
-　列 task_id , physical_written_bytes, created, start , last_heartbeat , "end" : 各タスクの物理書き出しと　開始終了などの時刻
```
presto> select task_id , physical_written_bytes, created, start , last_heartbeat , "end" from system.runtime.tasks where query_id='20250422_065234_00233_drami';
               task_id               | physical_written_bytes |         created         |          start          |     last_heartbeat      |           end
-------------------------------------+------------------------+-------------------------+-------------------------+-------------------------+-------------------------
 20250422_065234_00233_drami.2.0.0.0 |                      0 | 2025-04-22 06:52:35.521 | 2025-04-22 06:52:35.728 | 2025-04-22 06:52:41.719 | 2025-04-22 06:52:41.813
 20250422_065234_00233_drami.3.0.0.0 |                      0 | 2025-04-22 06:52:35.515 | 2025-04-22 06:52:35.630 | 2025-04-22 06:52:38.619 | 2025-04-22 06:52:38.741
 20250422_065234_00233_drami.4.0.0.0 |                      0 | 2025-04-22 06:52:35.435 | 2025-04-22 06:52:35.625 | 2025-04-22 06:52:36.313 | 2025-04-22 06:52:36.333
 20250422_065234_00233_drami.1.0.0.0 |                      0 | 2025-04-22 06:52:35.258 | 2025-04-22 06:52:35.325 | 2025-04-22 06:52:41.713 | 2025-04-22 06:52:41.923
 20250422_065234_00233_drami.0.0.0.0 |                      0 | 2025-04-22 06:52:35.314 | 2025-04-22 06:52:35.323 | 2025-04-22 06:52:42.018 | 2025-04-22 06:52:42.017
(5 rows)
```

### system.runtime.transactions
実行中のトランザクションと関連メタデータのリストが含まれます。作成時刻、アイドル時間、初期化パラメータ、アクセスされたカタログなどの情報が含まれます。
transactions表と他の表を関連付ける方法は見つけられていません。
- 表構造は次のようなものです。
```
presto> describe system.runtime.transactions;
       Column        |      Type      | Extra | Comment | Precision | Scale |   Length
---------------------+----------------+-------+---------+-----------+-------+------------
 transaction_id      | varchar        |       |         | NULL      | NULL  | 2147483647
 isolation_level     | varchar        |       |         | NULL      | NULL  | 2147483647
 read_only           | boolean        |       |         | NULL      | NULL  | NULL
 auto_commit_context | boolean        |       |         | NULL      | NULL  | NULL
 create_time         | timestamp      |       |         | NULL      | NULL  | NULL
 idle_time_secs      | bigint         |       |         |        10 | NULL  | NULL
 written_catalog     | varchar        |       |         | NULL      | NULL  | 2147483647
 catalogs            | array(varchar) |       |         | NULL      | NULL  | NULL
(8 rows)
```

出力例　 横に長いので２つに分けて紹介しています
- 列 transaction_id , isolation_level, read_only , auto_commit_context, create_time

```
presto> select transaction_id , isolation_level, read_only , auto_commit_context, create_time from system.runtime.transactions order by create_time desc;
            transaction_id            | isolation_level  | read_only | auto_commit_context |       create_time
--------------------------------------+------------------+-----------+---------------------+-------------------------
 f8e84c00-21a3-40f4-8c32-81f0291356d7 | READ UNCOMMITTED | false     | true                | 2025-04-28 06:49:59.837
 b3d277b5-b99b-4323-af2d-8a91dd10b2f5 | READ UNCOMMITTED | false     | true                | 2025-04-28 06:49:55.063
(2 rows)

```
- 列　transaction_id , create_time , idle_time_secs , written_catalog , catalogs
```
presto> select transaction_id , create_time , idle_time_secs , written_catalog , catalogs from system.runtime.transactions order by create_time desc;
            transaction_id            |       create_time       | idle_time_secs | written_catalog |                        catalogs
--------------------------------------+-------------------------+----------------+-----------------+--------------------------------------------------------
 229a66ea-4359-409f-bfcb-2460d4d41ab3 | 2025-04-28 06:50:05.169 |              0 | NULL            | [system, $info_schema@system, $system@system]
 b3d277b5-b99b-4323-af2d-8a91dd10b2f5 | 2025-04-28 06:49:55.063 |              0 | NULL            | [hive_data, $system@hive_data, $info_schema@hive_data]
(2 rows)
```

## まとめ
Prestoエンジンのシステム・コネクターのruntimeスキーマに含まれる表の構造と含まれるデータの例をwatsonx.data 2.1.2を使用してご紹介しました。