

 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/)を参照してください。

# コマンドを実行して、データウェアハウス内のデータベースを定義して使用する
<a name="database-tasks"></a>

Redshift Serverless データウェアハウスと Amazon Redshift でプロビジョニングされたデータウェアハウスの両方にデータベースが含まれています。データウェアハウスを起動したら、SQL コマンドを使用してほとんどのデータベースアクションを管理できます。いくつかの例外を除いて、SQL の機能と構文は、すべての Amazon Redshift データベースに共通です。Amazon Redshift で使用できる SQL コマンドの詳細については、「Amazon Redshift データベース開発者ガイド」の「[SQL コマンド](https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html)」を参照してください。**

データウェアハウスを作成すると、ほとんどのシナリオにおいて、Amazon Redshift はデフォルトの `dev` データベースも作成します。`dev` データベースへの接続後に、別のデータベースを作成できます。

以下のセクションでは、Amazon Redshift データベースを使用する際の一般的なデータベースタスクについて説明します。タスクはデータベースの作成から始まり、最後のタスクまで続けた場合は、データベースを削除することで作成したすべてのリソースを削除できます。

このセクションの例では、以下を前提とします。
+ Amazon Redshift データウェアハウスを作成済みである。
+ Amazon Redshift クエリエディタ v2 などの SQL クライアントツールからデータウェアハウスへの接続を確立済みである。クエリエディタ v2 の詳細については、「Amazon Redshift 管理ガイド」の「[Amazon Redshift クエリエディタ v2 を使用したデータベースのクエリの実行](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2.html)」を参照してください。**

**Topics**
+ [Amazon Redshift データウェアハウスに接続する](#connection)
+ [データベースを作成する](t_creating_database.md)
+ [ユーザーの作成](t_adding_redshift_user_cmd.md)
+ [スキーマの作成](t_creating_schema.md)
+ [テーブルを作成する](t_creating_table.md)
+ [データをロードする](cm-dev-t-load-sample-data.md)
+ [システムテーブルとビューをクエリする](t_querying_redshift_system_tables.md)
+ [クエリをキャンセルする](cancel_query.md)

## Amazon Redshift データウェアハウスに接続する
<a name="connection"></a>

Amazon Redshift クラスターに接続するには、**[クラスター]** ページで **[Amazon Redshift クラスターに接続する]** を展開し、次のいずれかの操作を実行します。
+ **[データをクエリ]** を選択し、クエリエディタ v2 を使用して Amazon Redshift クラスターがホストするデータベースにクエリを実行します。クラスターの作成後は、クエリエディタ v2 を使用して、すぐにクエリを実行できます。

  詳細については、「Amazon Redshift 管理ガイド」の「[クエリエディタ v2 を使用したデータベースのクエリの実行](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2.html)」を参照してください。**
+ **[クライアントツールを使用]** で、クラスターを選択します。次に、JDBC や ODBC ドライバーの URL をコピーすることで JDBC や ODBC ドライバーを使用し、クライアントツールから Amazon Redshiftに接続します。この URL は、クライアントコンピュータまたはインスタンスから使用します。JDBC または ODBC のデータアクセス API オペレーションを使用する、もしくは JDBC または ODBC をサポートする SQL クライアントツールを使用するように、アプリケーションを記述します。

  クラスター接続文字列を検索する方法については、「[クラスター接続文字列を検索する](https://docs.aws.amazon.com/redshift/latest/mgmt/configuring-connections.html#connecting-drivers.html)」を参照してください。
+ SQL クライアントにドライバーが必要な場合は、**JDBC または ODBC ドライバーを選択**してオペレーティングシステム固有のドライバーをダウンロードし、クライアントツールから Amazon Redshift に接続できます。

  SQL クライアントに適したドライバーをインストールする方法の詳細については、「[JDBC ドライバーのバージョン 2.2 接続の構成](https://docs.aws.amazon.com/redshift/latest/mgmt/jdbc20-install.html)」を参照してください。

  ODBC 接続を設定する方法の詳細については、「[ODBC 接続の設定](https://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-connection.html)」を参照してください。

Redshift Serverless データウェアハウスに接続するには、Amazon Redshift コンソールの **[サーバーレスダッシュボード]** ページから、次のいずれかの操作を実行します。
+ Amazon Redshift クエリエディタ v2 を使用して、Redshift Serverless データウェアハウスがホストするデータベースにクエリを実行します。データウェアハウスの作成後は、クエリエディタ v2 を使用して、すぐにクエリを実行できます。

  詳細については、「[Amazon Redshift クエリエディタ v2 を使用したデータベースのクエリの実行](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2.html)」を参照してください。
+ JDBC または ODBC ドライバーの URL をコピーし、そのドライバーを使用することで、クライアントツールから Amazon Redshiftに接続します。

  データウェアハウス内のデータを使用するには、クライアントコンピュータやインスタンスから接続するための JDBC または ODBC ドライバーが必要です。JDBC または ODBC のデータアクセス API オペレーションを使用する、もしくは JDBC または ODBC をサポートする SQL クライアントツールを使用するように、アプリケーションを記述します。

  接続文字列を見つける詳しい方法については、「Amazon Redshift 管理ガイド」の「[Redshift Serverless への接続](https://docs.aws.amazon.com/redshift/latest/mgmt/serverless-connecting)」を参照してください。**

# データベースを作成する
<a name="t_creating_database"></a>

データウェアハウスが稼動していることを確認したら、データベースを作成できます。このデータベースを使用して実際にテーブルを作成し、データをロードし、クエリを実行します。データウェアハウスは、複数のデータベースをホストできます。例えば、`SALESDB` というセールスデータ用のデータベースと `ORDERSDB` という注文データ用のデータベースを、同じデータウェアハウスでホストできます。

**SALESDB** という名前のデータベースを作成するには、SQL クライアントツールで次のコマンドを実行します。

```
CREATE DATABASE salesdb;
```

**注記**  
コマンドを実行したら、データウェアハウスで SQL クライアントツールのオブジェクトリストを更新し、新しい `salesdb` を確認してください。

この演習では、デフォルトの設定をそのまま使用します。この他のコマンドオプションについては、*Amazon Redshift データベース開発者ガイド*の「[CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE)」を参照してください。データベースとその内容を削除するには、「Amazon Redshift データベース開発者ガイド」の「[DROP DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_DROP_DATABASE)」を参照してください。**

SALESDB データベースを作成した後は、SQL クライアントからこのデータベースに接続できます。現在の接続に使用したものと同じ接続パラメータを使用しますが、データベース名は `SALESDB` に変更してください。

# ユーザーの作成
<a name="t_adding_redshift_user_cmd"></a>

デフォルトでは、データウェアハウスの起動時に作成した管理者ユーザーのみが、データウェアハウス内のデフォルトデータベースにアクセスできます。他のユーザーにもアクセス権を与えるには、そのためのアカウントを作成する必要があります。データベースのユーザーアカウントは、データベース別に固有のものではなく、データウェアハウス内のすべてのデータベースに共通です。

新しいユーザーを作成するには、CREATE USER コマンドを使用します。新しいユーザーを作成する際は、ユーザー名とパスワードを指定します。ユーザーには、パスワードを指定することをお勧めします。パスワードは 8～64 文字で構成し、大文字、小文字、数字をそれぞれ少なくとも 1 つずつ含める必要があります。

例えば、**GUEST** という名前と **ABCd4321** というパスワードでユーザーを作成するには、以下のコマンドを実行します。

```
CREATE USER GUEST PASSWORD 'ABCd4321';
```

`GUEST` ユーザーとして `SALESDB` データベースに接続するには、ユーザーの作成時に同じパスワード (例えば `ABCd4321`) を使用します。

その他のコマンドオプションについては、*Amazon Redshift データベース開発者ガイド*の「[CREATE USER](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_USER.html)」を参照してください。

# スキーマの作成
<a name="t_creating_schema"></a>

新しいデータベースを作成した後は、そのデータベースに新しいスキーマを作成できます。*スキーマ*とは、テーブル、ビュー、およびユーザー定義関数 (UDF) など、名前が付けられたデータベースオブジェクトが含まれる名前空間です。データベースには 1 つまたは複数のスキーマを含めることができ、各スキーマは 1 つのデータベースにのみ属します。2 つのスキーマが、同じ名前を共有する異なるオブジェクトを持つことができます。

同じデータベース内に複数のスキーマを作成して、好みの方法でデータを整理したり、データを機能的にグループ化したりできます。例えば、すべてのステージングデータを格納するスキーマや、すべてのレポートテーブルを保存する別のスキーマを作成できます。また、同じデータベースにある異なるビジネスグループに関連するデータを保存するために、別々のスキーマを作成することもできます。スキーマごとに、テーブル、ビュー、ユーザー定義関数 (UDF) など、異なるデータベースオブジェクトを格納できます。さらに、AUTHORIZATION 句を使用してスキーマを作成することもできます。この句では、特定のユーザーに所有権を与えることや、指定したスキーマが使用できる最大ディスク領域を指定するクオータを設定することなどが可能です。

Amazon Redshift は、新しいデータベースごとに、`public` という名前のスキーマを自動的に作成します。データベースオブジェクトの作成中にスキーマ名を指定しない場合、そのオブジェクトは `public` スキーマに入ります。

スキーマ内のオブジェクトにアクセスするには、`schema_name.table_name` 表記を使用してオブジェクト修飾します。スキーマの修飾名は、ドットで区切られたスキーマ名とテーブル名で構成されます。例えば、`price` テーブルを持つ `sales` スキーマや、`price` テーブルを持つ `inventory` スキーマのようになります。`price` テーブルを参照する際には、その名前を `sales.price` または `inventory.price` のように修飾する必要があります。

次の例では、`GUEST` ユーザーのために、**SALES** という名前のスキーマを作成します。

```
CREATE SCHEMA SALES AUTHORIZATION GUEST;
```

その他のコマンドオプションについては、*Amazon Redshift データベース開発者ガイド*の「[CREATE SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_SCHEMA.html)」を参照してください。

データベース内のスキーマのリストを表示するには、次のコマンドを実行します。

```
select * from pg_namespace;
```

出力は以下の例のようになります。

```
  nspname             | nspowner |         nspacl
----------------------+----------+--------------------------
  sales               |  100     |
  pg_toast            |   1      |
  pg_internal         |   1      |
  catalog_history     |   1      |
  pg_temp_1           |   1      | 
  pg_catalog          |   1      | {rdsdb=UC/rdsdb,=U/rdsdb}
  public              |   1      | {rdsdb=UC/rdsdb,=U/rdsdb}
  information_schema  |   1      | {rdsdb=UC/rdsdb,=U/rdsdb}
```

カタログテーブルに対するクエリの方法については、*Amazon Redshift データベース開発者ガイド*の「[カタログテーブルへのクエリの実行](https://docs.aws.amazon.com/redshift/latest/dg/c_join_PG.html)」を参照してください。

スキーマへのアクセス許可をユーザーに付与するには、GRANT ステートメントを使用します。

次の例では、SELECT ステートメントを使用して `SALES` スキーマ内のすべてのテーブルやビューからデータを選択する権限を `GUEST` ユーザーに付与します。

```
GRANT SELECT ON ALL TABLES IN SCHEMA SALES TO GUEST;
```

次の例では、すべての使用可能な権限を一度に `GUEST` ユーザーに付与します。

```
GRANT ALL ON SCHEMA SALES TO GUEST;
```

# テーブルを作成する
<a name="t_creating_table"></a>

新しいデータベースの作成後には、データを格納するためのテーブルを作成します。テーブルの作成時に列情報を指定します。

例えば、**DEMO** という名前のテーブルを作成するには、次のコマンドを実行します。

```
CREATE TABLE Demo (
  PersonID int,
  City varchar (255)
);
```

デフォルトでは、テーブルなどの新しいデータベースオブジェクトは、データウェアハウスの作成時に作成される `public` という名前のデフォルトスキーマ内に作成されます。また別のスキーマを使用しても、データベースオブジェクトを作成できます。スキーマの詳細については、*Amazon Redshift データベース開発者ガイド*の「[データベースセキュリティの管理](https://docs.aws.amazon.com/redshift/latest/dg/r_Database_objects.html)」を参照してください。

また、`schema_name.object_name` 表記を使用して `SALES` スキーマ内にテーブルを作成することもできます。

```
CREATE TABLE SALES.DEMO (
  PersonID int,
  City varchar (255)
);
```

スキーマとそのテーブルを表示および検査するには、Amazon Redshift クエリエディタ v2 を使用できます。または、システムビューを使用して、スキーマ内のテーブルのリストを表示することもできます。詳細については、「[システムテーブルとビューをクエリする](t_querying_redshift_system_tables.md)」を参照してください。

`encoding` 列、`distkey` 列、および `sortkey` 列は、Amazon Redshift が並列処理のために使用します。これらの要素を含むテーブルの設計については、「[Amazon Redshift テーブル設計のベストプラクティス](https://docs.aws.amazon.com/redshift/latest/dg/c_designing-tables-best-practices.html)」を参照してください。

## テーブルにデータ行を挿入する
<a name="t_inserting_data_into_table"></a>

テーブルの作成後は、そのテーブル内にデータ行を挿入します。

**注記**  
[INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_30.html) コマンドは、テーブルに行を挿入します。標準的なバルク負荷の場合は、[COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html) コマンドを使用します。詳細については、「[COPY コマンドを使ってデータをロードする](https://docs.aws.amazon.com/redshift/latest/dg/c_best-practices-use-copy.html)」を参照してください。

例えば、`DEMO` テーブルに値を挿入するには、以下のコマンドを実行します。

```
INSERT INTO DEMO VALUES (781, 'San Jose'), (990, 'Palo Alto');
```

特定のスキーマ内にあるテーブルにデータを挿入するには、次のコマンドを実行します。

```
INSERT INTO SALES.DEMO VALUES (781, 'San Jose'), (990, 'Palo Alto');
```

## テーブルからデータを選択する
<a name="t_selecting_data"></a>

テーブルを作成してデータを挿入した後、テーブル内にあるデータを表示するには、SELECT ステートメントを使用します。SELECT \$1 ステートメントは、テーブル内のすべてのデータについて、すべての列名と行の値を返します。SELECT を使用すると、新しく追加したデータがテーブルに正しく入力されたかどうかを、便利に確認できます。

**DEMO** テーブルに入力したデータを表示するには、次のコマンドを実行します。

```
SELECT * from DEMO;
```

結果は次のようになります。

```
 personid |   city    
----------+-----------
      781 | San Jose
      990 | Palo Alto
(2 rows)
```

クエリテーブルでの SELECT ステートメントの使用方法については、「[SELECT](https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_synopsis.html)」を参照してください。

# データをロードする
<a name="cm-dev-t-load-sample-data"></a>

このガイドの例の多くでは、TICKIT サンプルデータセットを使用しています。個別のサンプルデータファイルを含むファイル [tickitdb.zip](samples/tickitdb.zip) をダウンロードします。サンプルデータは、各自の Amazon S3 バケットにアップロードできます。

データベースのサンプルデータをロードするには、まずテーブルを作成します。その後、COPY コマンドを使って、Amazon S3 バケットに保存されている、サンプルデータを格納したテーブルをロードします。テーブルを作成し、サンプルデータをロードする手順については、「[ステップ 4: Amazon S3 から Amazon Redshift にデータをロードする](new-user.md#rs-gsg-create-sample-db)」を参照してください。

# システムテーブルとビューをクエリする
<a name="t_querying_redshift_system_tables"></a>

データウェアハウスには、作成したテーブルに加え、いくつかのシステムテーブルとビューが含まれています。これらのテーブルとビューには、インストールに関する情報と、システムで実行されている各種クエリや処理に関する情報が格納されます。これらのシステムテーブルとビューに対してクエリを実行して、データベースに関する情報を収集することができます。詳細については、「Amazon Redshift データベース管理者ガイド」の「[システムテーブルとビューのリファレンス](https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_system-tables.html)」を参照してください。**各テーブルやビューについての説明では、テーブルをすべてのユーザーが表示できるか、スーパーユーザーのみが表示できるかを示しています。スーパーユーザーのみが表示可能なテーブルに対してクエリを実行するには、スーパーユーザーとしてログインします。

## テーブル名のリストを表示する
<a name="t_querying_redshift_system_tables-view-a-list-of-table-names"></a>

スキーマ内のすべてのテーブルのリストを表示するには、PG\$1TABLE\$1DEF システムカタログテーブルをクエリします。最初に `search_path` に対する設定を確認します。

```
SHOW search_path;
```

その結果は以下のようになります。

```
  search_path
---------------
 $user, public
```

次の例では、`SALES` スキーマを検索パスに追加し、`SALES` スキーマ内のすべてのテーブルを表示します。

```
set search_path to '$user', 'public', 'sales';
                
SHOW search_path;

      search_path       
------------------------
 "$user", public, sales


select * from pg_table_def where schemaname = 'sales';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

次の例では、現在のデータベース上のすべてのスキーマに含まれる、`DEMO` という名前のすべてのテーブルのリストを表示します。

```
set search_path to '$user', 'public', 'sales';
select * from pg_table_def where tablename = 'demo';

 schemaname | tablename |  column  |          type          | encoding | distkey | sortkey | notnull 
------------+-----------+----------+------------------------+----------+---------+---------+---------
 public     | demo      | personid | integer                | az64     | f       |       0 | f
 public     | demo      | city     | character varying(255) | lzo      | f       |       0 | f
 sales      | demo      | personid | integer                | az64     | f       |       0 | f
 sales      | demo      | city     | character varying(255) | lzo      | f       |       0 | f
```

詳細については、「[PG\$1TABLE\$1DEF](https://docs.aws.amazon.com/redshift/latest/dg/r_PG_TABLE_DEF.html)」を参照してください。

Amazon Redshift クエリエディタ v2 を使用して接続先のデータベースを最初に選択することで、指定したスキーマ内のすべてのテーブルを表示することもできます。

## ユーザーを表示する
<a name="t_querying_redshift_system_tables-view-database-users"></a>

ユーザー ID (USESYSID) およびユーザー権限とともに、すべてのユーザーのリストを表示するには、PG\$1USER カタログをクエリします。

```
SELECT * FROM pg_user;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 rdsdb      |        1 | true        | true     | true      | ******** | infinity |
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

定期的な管理およびメンテナンスタスクを実行するために、Amazon Redshift の内部でユーザー名 `rdsdb` が使用されます。SELECT ステートメントに `where usesysid > 1` を追加すると、クエリをフィルタリングしてユーザー定義のユーザー名のみを表示することができます。

```
SELECT * FROM pg_user WHERE usesysid > 1;

  usename   | usesysid | usecreatedb | usesuper | usecatupd |  passwd  | valuntil | useconfig
------------+----------+-------------+----------+-----------+----------+----------+-----------
 awsuser    |      100 | true        | true     | false     | ******** |          |
 guest      |      104 | true        | false    | false     | ******** |          |
```

## 最近のクエリを表示する
<a name="t_querying_redshift_system_tables-view-recent-queries"></a>

先の例では、`adminuser` のユーザー ID (user\$1id) は 100 です。`adminuser` が実行した最近の 4 つのクエリを一覧表示するには、SYS\$1QUERY\$1HISTORY ビューをクエリできます。

このビューを使用して、最近実行したクエリのクエリ ID (query\$1id) やプロセス ID (session\$1id) を確認できます。また、このビューを使用してクエリが完了するまでにかかった時間を確認できます。SYS\$1QUERY\$1HISTORY には、特定のクエリを見つけやすくするために、クエリ文字列 (query\$1text) の最初の 4,000 文字が含まれています。SELECT ステートメントで LIMIT 句を使用すると、結果を制限できます。

```
SELECT query_id, session_id, elapsed_time, query_text 
FROM sys_query_history
WHERE user_id = 100
ORDER BY start_time desc
LIMIT 4;
```

結果は以下のようになります。

```
 query_id |  session_id  |  elapsed_time |   query_text
----------+--------------+---------------+----------------------------------------------------------------
 892      |    21046     |       55868   | SELECT query, pid, elapsed, substring from ...
 620      |    17635     |     1296265   | SELECT query, pid, elapsed, substring from ...
 610      |    17607     |       82555   | SELECT * from DEMO; 
 596      |    16762     |      226372   | INSERT INTO DEMO VALUES (100);
```

## 実行中のクエリのセッション ID を確認する
<a name="determine_pid"></a>

クエリに関するシステムテーブル情報を取得するには、クエリに関連するセッション ID (プロセス ID) の指定が必要になる場合があります。または、実行中のクエリのセッション ID の確認が必要になる場合もあります。例えば、プロビジョニングされたクラスターで実行時間が長すぎるクエリをキャンセルする場合は、セッション ID が必要になります。STV\$1RECENTS システムテーブルにクエリを実行すると、実行中のクエリのプロセス ID および対応するクエリ文字列のリストを取得できます。クエリから複数のセッションが返された場合は、クエリテキストを参照して、どのセッション ID が必要かを判断できます。

実行中のクエリのセッション ID を確認するには、次の SELECT ステートメントを実行します。

```
SELECT session_id, user_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```

# クエリをキャンセルする
<a name="cancel_query"></a>

クエリの実行時間が長すぎる場合や、リソースの消費数が多すぎる場合は、クエリをキャンセルします。この例としては、チケット販売者の名前と販売済みのチケット数を記載したリストを、作成しようとしているような場合が挙げられます。以下のクエリでは、`SALES` テーブルと `USERS` テーブルからデータを選択し、WHERE 句内で SELLERID と USERID を一致させることで 2 つのテーブルを結合しています。

```
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
WHERE sales.sellerid = users.userid
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
```

結果は以下のようになります。

```
 sellerid | firstname | lastname | sum
----------+-----------+----------+------
  48950   |   Nayda   |   Hood   | 184
  19123   |   Scott   | Simmons  | 164
  20029   |    Drew   | Mcguire  | 164
  36791   |  Emerson  | Delacruz | 160
  13567   |   Imani   |   Adams  | 156
  9697    |  Dorian   |    Ray   | 156
  41579   | Harrison  | Durham   | 156
  15591   |  Phyllis  |  Clay    | 152
  3008    |  Lucas    | Stanley  | 148
  44956   |  Rachel   |Villarreal| 148
```

**注記**  
これは複雑なクエリです。このチュートリアルでは、このクエリの構造を理解する必要はありません。

前のクエリは数秒間で実行され、2,102 行を返しました。

ここで、WHERE 句を挿入し忘れたとします。

```
SELECT sellerid, firstname, lastname, sum(qtysold)
FROM sales, users
GROUP BY sellerid, firstname, lastname
ORDER BY 4 desc;
```

その場合、結果セットには、`SALES` テーブルのすべての行と、`USERS` テーブルのすべての行を掛け合わせた数 (49989×3766) が含まれることになります。これはデカルト結合と呼ばれ、推奨されません。この例の場合は結果が 1 億 8800 万行を超えてしまい、実行に時間がかかりすぎます。

実行中のクエリをキャンセルするには、クエリのセッション ID を指定して CANCEL コマンドを実行します。Amazon Redshift クエリエディタ v2 を使用すると、クエリの実行中に [キャンセル] ボタンを選択してクエリをキャンセルできます。

セッション ID を見つけるには、前のステップで示したように、新しいセッションを開始して STV\$1RECENTS テーブルをクエリします。次の例に、結果をより読みやすくする方法を示します。これを行うには、TRIM 関数を使用してクエリ文字列の末尾部分を削除し、最初の 20 文字だけを表示します。

実行中のクエリのセッション ID を確認するには、次の SELECT ステートメントを実行します。

```
SELECT user_id, session_id, start_time, query_text
FROM sys_query_history
WHERE status='running';
```

結果は以下のようになります。

```
 user_id |   session_id  |   start_time               |   query_text
---------+---------------+----------------------------+----------------------------------------------------------------
 100     |    1073791534 | 2024-03-19 22:26:21.205739 | SELECT user_id, session_id, start_time, query_text FROM  ...
```

セッション ID が `1073791534` であるクエリをキャンセルするには、次のコマンドを実行します。

```
CANCEL 1073791534;
```

**注記**  
CANCEL コマンドはトランザクションを停止しません。トランザクションを停止またはロールバックするには、ABORT や ROLLBACK コマンドを使用します。トランザクションに関連付けられたクエリをキャンセルするには、まずクエリをキャンセルした後にトランザクションを停止します。

キャンセルしたクエリがトランザクションに関連付けられている場合は、ABORT または ROLLBACK コマンドを使用してトランザクションをキャンセルし、データに加えられた変更をすべて破棄します。

```
ABORT;
```

スーパーユーザー以外でサインしている場合は、自分のクエリのみをキャンセルできます。スーパーユーザーはすべてのクエリをキャンセルできます。

お使いのクエリツールがクエリの同時実行をサポートしていない場合は、別のセッションを開始してクエリをキャンセルします。

クエリのキャンセルの詳細については、「Amazon Redshift データベース開発者ガイド」の「[CANCEL](https://docs.aws.amazon.com/redshift/latest/dg/r_CANCEL.html)」を参照してください。**

## Superuser キューを使ってクエリをキャンセルする
<a name="cancel_query-cancel-a-query-using-the-superuser-queue"></a>

現在のセッションで同時に実行されているキューの数が非常に多い場合、他のクエリが完了するまで、CANCEL コマンドを実行できないことがあります。そのような場合、別のワークロード管理クエリキューを使用して CANCEL コマンドを実行することができます。

ワークロード管理を使用すると、クエリを別のクエリキューで実行できるため、他のキューが完了するのを待つ必要がなくなります。ワークロード管理は、Superuser キューと呼ばれる個別のキューを作成します。このキューはトラブルシューティングに使用できます。Superuser キューを使用するには、スーパーユーザーとしてログインし、SET コマンドを使用してクエリグループを「superuser」に設定します。コマンドを実行したあと、RESET コマンドを使用してクエリグループをリセットします。

superuser キューを使用してクエリをキャンセルするには、以下のコマンドを実行します。

```
SET query_group TO 'superuser';
CANCEL 1073791534;
RESET query_group;
```