Presto: Query を kill する

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

ここではPrestoエンジンのシステム・コネクターのプロシージャーkill_query実行例をwatsonx.data 2.1.2を使用してご紹介します。


## Presto システム・コネクター
Prestoのシステム・コネクターは、オープンソースのPrestoで実装されていて、Prestoクラスターで実行されている情報とメトリックを提供します。 watsonx.dataでPrestoエンジンを追加すると、システム・コネクターはカタログ'system'として自動的に構成されています。

## kill_query の実行例
Presto システム・コネクターには QueryをKill するkill_queryが含まれています。
使用方法と実行例を紹介します。

### Syntax 
第1引数のquery_idで特定される queryをkill します。 エラーメッセージには　第２引数で指定したmessageが含まれます。
```
runtime.kill_query(query_id, message)
```

### 実行例1 presto-cliを使用した例
(1) 端末1で時間がかかるQueryを実行します。
```
presto:hsf100_no_part> select xxxxxxxxxx;
Query 20250428_084814_00195_3pgtu [RUNNING] i[15M 32.9M 11.4M] o[15M 32.9M 11.4M] splits[444/26/25]
```

(2) 端末2 system.runtime.queriesなどを使用して　killしたいqueryのquery_idを特定します。
  - presto-cliを使用している場合は、query_idが表示されています。 ↑の`(1) 端末1`の場合 query_idは`Query 20250428_084814_00195_3pgtu`です。

(3) 端末2 kill_queryを実行します。
```
presto> CALL system.runtime.kill_query('20250428_084814_00195_3pgtu','kill by cpadmin');
CALL
presto>
```

(4) 端末1では時間がかかっていたQueryがFailしています。　
```
Query 20250428_084814_00195_3pgtu, FAILED, 3 nodes
Splits: 516 total, 326 done (63.18%)
[Latency: client-side: 0:10, server-side: 0:09] [165M rows, 1.13GB] [18.2M rows/s, 127MB/s]

Query 20250428_084814_00195_3pgtu failed: Query killed. Message: kill by cpadmin

presto:hsf100_no_part>
```
エラーメッセージに　`kill by cpadmin`が含まれています。

### 実行例2 Presto Consoleを使用した例
(1) Presto Consoleを開きます。 CLUSTER OVERVIEW画面が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/8623c058-a926-4e80-addd-78204d9c1ee6.png)

- (watsonx.dataでのヒント)　Presto Console へのURLは、インフラストラクチャー・マネージャー のエンジンの詳細画面で入手できます。Prestoエンジンをクリックして詳細の中のホスト名(外部ホストが表示される場合は外部ホスト)がPresto ConsoleへのURLです。
    
 
(2) CLUSTER OVERVIEW で Kill したいQueryを特定してクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/9688d909-430e-426e-a3c3-2367312e09fc.png)

(3) QUERY DETAILS画面が開きます。その中に"Kill" ボタンがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/35ade9fd-c47c-439f-98af-d7311ee77455.png)

(4) Kill ボタンを押すと USER ERRORでQuery は終了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/f27a1d90-1dda-48d5-aa04-6809eadb97a4.png)

下のほうにあるError Information には　次のような情報が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855502/4b3d7f46-25c8-4ff5-aa92-0606611144ad.png)
エラーメッセージには　Killed via web UI　が含まれています。　
```
Error Information
Error Type	USER_ERROR
Error Code	ADMINISTRATIVELY_KILLED (38)
Stack Trace

com.facebook.presto.spi.PrestoException: Query killed. Message: Killed via web UI
	at com.facebook.presto.connector.system.KillQueryProcedure.createKillQueryException(KillQueryProcedure.java:92)
```

(5) Presto CLIで実行していたQuery がkill された場合は　次のようにエラーが表示されました。
```
presto> select xxxx ;

Query 20250428_091258_00199_3pgtu, FAILED, 4 nodes
Splits: 8 total, 4 done (50.00%)
[Latency: client-side: 0:24, server-side: 0:22] [7 rows, 433KB] [0 rows/s, 19.5KB/s]

Query 20250428_091258_00199_3pgtu failed: Query killed. Message: Killed via web UI

presto>
```

## 環境
- 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エンジンのシステム・コネクターのプロシージャーkill_queryの実行例をwatsonx.data 2.1.2を使用してご紹介しました。