

 Amazon Redshift は、パッチ 198 以降、新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。詳細については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。

# STL\_UTILITYTEXT
<a name="r_STL_UTILITYTEXT"></a>

データベースに対して実行された SELECT 以外の SQL コマンドを取得します。

STL\_UTILITYTEXT ビューをクエリすると、システムで実行された SQL ステートメントのうち、次のサブセットを取得できます。
+ ABORT、BEGIN、COMMIT、END、ROLLBACK
+ ANALYZE
+ CALL
+ CANCEL
+ COMMENT
+ CREATE、ALTER、DROP DATABASE
+ CREATE、ALTER、DROP USER
+ EXPLAIN
+ GRANT、REVOKE
+ LOCK
+ RESET
+ SET
+ SHOW
+ TRUNCATE

[STL\_DDLTEXT](r_STL_DDLTEXT.md)、[STL\_QUERYTEXT](r_STL_QUERYTEXT.md)、[SVL\_STATEMENTTEXT](r_SVL_STATEMENTTEXT.md) も参照してください。

STARTTIME および ENDTIME 列を使用すると、一定の時間内に記録されたステートメントがわかります。SQL テキストの長いブロックは、200 文字の長さに分割されます。SEQUENCE 列により、1 つのステートメントに属する複数のフラグメントのテキストを識別できます。

STL\_UTILITYTEXT システムテーブルは、マテリアライズドビューの MANUAL オペレーションと AUTO REFRESH オペレーションの両方をサポートしています。マテリアライズドビューで AUTO REFRESH を識別するには、`label` 列を見つけます。すべての AUTO REFRESH クエリには、値が `maintenance` のラベルがあります。

STL\_UTILITYTEXT はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「[システムテーブルとビューのデータの可視性](cm_chap_system-tables.md#c_visibility-of-data)」を参照してください。

このテーブルの一部またはすべてのデータは、SYS モニタリングビュー [SYS\_QUERY\_HISTORY](SYS_QUERY_HISTORY.md) でも確認できます。SYS モニタリングビューのデータは、使いやすく理解しやすいようにフォーマットされます。クエリには、SYS モニタリングビューを使用することをお勧めします。

## テーブルの列
<a name="r_STL_UTILITYTEXT-table-columns"></a>


| 列名  | データ型  | 説明  | 
| --- | --- | --- | 
| userid | integer | エントリを生成したユーザーの ID。 | 
| xid  | bigint  | トランザクション ID。 | 
| pid  | integer  | クエリステートメントに関連付けられるプロセス ID。 | 
| label  | character(320)  | クエリを実行するために使用される名前、または SET QUERY\_GROUP コマンドによって定義されるラベル。クエリがファイルベースでないか、QUERY\_GROUP パラメータが設定されていない場合、このフィールドは空になります。 | 
| starttime | timestamp | UTC で表されたクエリの開始時間。合計時間にはキューイングと実行が含まれます。秒の小数部は 6 桁の精度で表されます。例: 2009-06-12 11:29:19.131358。 | 
| endtime | timestamp | クエリの実行が完了した時刻 (UTC)。合計時間にはキューイングと実行が含まれます。秒の小数部は 6 桁の精度で表されます。例: 2009-06-12 11:29:19.131358。 | 
| sequence  | integer  | 1 つのステートメントに含まれる文字数が 200 を超える場合、そのステートメントは追加の行に記録されます。シーケンス 0 が最初の行、1 が 2 番目の行、という順番です。 | 
| text  | character(200)  | 200 文字単位の SQL テキスト。このフィールドには、バックスラッシュ (\\\\) や改行 (\\n) などの特殊文字が含まれる場合があります。 | 

## サンプルクエリ
<a name="r_STL_UTILITYTEXT-sample-queries"></a>

次のクエリは、2012 年 1 月 26 日に実行された「utility」コマンドのテキストを返します。ここでは、いくつかの SET コマンドと 1 つの SHOW ALL コマンドが実行されています。

```
select starttime, sequence, rtrim(text)
from stl_utilitytext
where starttime like '2012-01-26%'
order by starttime, sequence;

starttime          | sequence |              rtrim
---------------------------+-----+----------------------------------
2012-01-26 13:05:52.529235 |   0 | show all;
2012-01-26 13:20:31.660255 |   0 | SET query_group to ''
2012-01-26 13:20:54.956131 |   0 | SET query_group to 'soldunsold.sql'
...
```

### ストアド SQL の再構築
<a name="r_STL_UTILITYTEXT-reconstruct-sql"></a>

STL\_UTILITYTEXT の `text` 列に保存されている SQL を再構築するには、SELECT ステートメントを実行して、`text`列の 1 つ以上の部分から SQL を作成します。再構築された SQL を実行する前に、特殊文字 (`\n`) がある場合は、改行に置き換えます。次の SELECT ステートメントの結果は、`query_statement`フィールドに再構築された SQL の行です。

```
SELECT LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement 
FROM stl_utilitytext GROUP BY xid order by xid;
```

例えば、次のクエリでは、query\_group をゼロの文字列に設定します。クエリ自体は 200 文字より長く、STL\_UTILITYTEXT の部分に保存されます。

```
set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000000000000000000000                  000000';
```

この例では、クエリは STL\_UTILITYTEXT の `text` 列の 2 つの部分 (行) に保存されます。

```
select query, sequence, text
from stl_utilitytext where query=pg_last_query_id() order by query desc, sequence limit 10;
```

```
         starttime          | sequence |                                                                                                   text                                                                                                   
----------------------------+----------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 2019-07-23 22:55:34.926198 |        0 | set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000
 2019-07-23 22:55:34.926198 |        1 |                   000000';
```

STL\_UTILITYTEXT に保存された SQL を再構築するには、次の SQL を実行します。

```
select LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END, '') within group (order by sequence) AS query_statement 
from stl_utilitytext where query=pg_last_query_id();
```

再構築された SQL をクライアントで使用するには、特殊文字 (`\n`) を改行に置き換えます。

```
                                                                                                                                      query_statement                                                                                                                                       
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 set query_group to '00000000000000000000000000000000000000000000000000000000000000000000000000000000\n0000000000000000000000000000000000000000000000000000000000000000000000000000000000                  000000';
```