STL_QUERYTEXT - Amazon Redshift

STL_QUERYTEXT

SQL コマンドのクエリテキストを取得します。

STL_QUERYTEXT ビューをクエリして、次のステートメントに関して記録された SQL を取得します。

  • SELECT、SELECT INTO

  • INSERT、UPDATE、DELETE

  • COPY

  • UNLOAD

  • VACUUM と ANALYZE を実行することによって生成されたクエリ

  • CREATE TABLE AS (CTAS)

これらのステートメントに関する一定期間のアクティビティをクエリするには、STL_QUERYTEXT ビューと STL_QUERY ビューを結合します。

注記

STL_QUERY および STL_QUERYTEXT ビューには、クエリに関する情報だけが含まれており、他のユーティリティや DDL コマンドは含まれていません。Amazon Redshift によって実行されるすべてのステートメントのリストと情報については、STL_DDLTEXT および STL_UTILITYTEXT ビューもクエリできます。Amazon Redshift によって実行されるすべてのステートメントの完全なリストについては、SVL_STATEMENTTEXT ビューをクエリできます。

STL_DDLTEXTSTL_UTILITYTEXTSVL_STATEMENTTEXT も参照してください。

STL_QUERYTEXT はすべてのユーザーに表示されます。スーパーユーザーはすべての行を表示できますが、通常のユーザーは自分のデータのみを表示できます。詳細については、「システムテーブルとビューのデータの可視性」を参照してください。

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

テーブルの列

列名 データ型 説明
userid integer エントリを生成したユーザーの ID。
xid bigint トランザクション ID。
pid integer プロセス ID。通常、セッション内のすべてのクエリは同一プロセスで実行されるため、一連のクエリを同一セッションで実行した場合、通常、この値は一定です。Amazon Redshift は特定の内部イベントに続いてアクティブなセッションを再起動し、新しい PID を割り当てる場合があります。詳細については、「STL_RESTARTED_SESSIONS」を参照してください。この列を使用して、STL_ERROR ビューに結合できます。
query integer クエリ ID。クエリ列は、他の各種システムテーブルおよびビューを結合するために使用できます。
sequence integer 1 つのステートメントに含まれる文字数が 200 を超える場合、そのステートメントは追加の行に記録されます。シーケンス 0 が最初の行、1 が 2 番目の行、という順番です。
text character(200) 200 文字単位の SQL テキスト。このフィールドには、バックスラッシュ (\\) や改行 (\n) などの特殊文字が含まれる場合があります。

サンプルクエリ

PG_BACKEND_PID() 関数を使用して、現在のセッションに関する情報を取得できます。例えば、以下のクエリは、現在のセッションで完了されたクエリのクエリ ID とクエリテキストの一部を返します。

select query, substring(text,1,60) from stl_querytext where pid = pg_backend_pid() order by query desc; query | substring -------+-------------------------------------------------------------- 28262 | select query, substring(text,1,80) from stl_querytext where 28252 | select query, substring(path,0,80) as path from stl_unload_l 28248 | copy category from 's3://dw-tickit/manifest/category/1030_ma 28247 | Count rows in target table 28245 | unload ('select * from category') to 's3://dw-tickit/manifes 28240 | select query, substring(text,1,40) from stl_querytext where (6 rows)

ストアド SQL の再構築

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

SELECT query, LISTAGG(CASE WHEN LEN(RTRIM(text)) = 0 THEN text ELSE RTRIM(text) END) WITHIN GROUP (ORDER BY sequence) as query_statement, COUNT(*) as row_count FROM stl_querytext GROUP BY query ORDER BY query desc;

例えば、次のクエリでは 3 つの列を選択します。クエリ自体は 200 文字より長く、STL_QUERYTEXT の部分に保存されます。

select 1 AS a0123456789012345678901234567890123456789012345678901234567890, 2 AS b0123456789012345678901234567890123456789012345678901234567890, 3 AS b012345678901234567890123456789012345678901234 FROM stl_querytext;

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

select query, sequence, text from stl_querytext where query=pg_last_query_id() order by query desc, sequence limit 10;
query | sequence | text -------+----------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 45 | 0 | select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234 45 | 1 | \nFROM stl_querytext;

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

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

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

text ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ select\n1 AS a0123456789012345678901234567890123456789012345678901234567890,\n2 AS b0123456789012345678901234567890123456789012345678901234567890,\n3 AS b012345678901234567890123456789012345678901234\nFROM stl_querytext;