

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

# SQL リファレンス
<a name="cm_chap_SQLCommandRef"></a>

Amazon Redshift を使用すると、SQL を活用して、データウェアハウスに保存されている大量のデータを効率的にクエリおよび分析できます。SQL リファレンスでは、SQL コマンド、データ型、関数、演算子などの構文と用途について説明しており、インサイトを抽出してデータドリブンな意思決定を行うことができます。このリファレンスを参照して、最適化されたクエリを記述し、データベースオブジェクトを作成および管理し、複雑なデータ変換を実行できます。以下のリファレンスでは、Amazon Redshift 環境内で SQL を使用してデータ分析要件を満たすための包括的な詳細を説明しています。

**Topics**
+ [Amazon Redshift SQL](c_redshift-sql.md)
+ [SQL の使用](c_SQL_reference.md)
+ [SQL コマンド](c_SQL_commands.md)
+ [SQL 関数リファレンス](c_SQL_functions.md)
+ [予約語](r_pg_keywords.md)

# Amazon Redshift SQL
<a name="c_redshift-sql"></a>

**Topics**
+ [リーダーノードでサポートされる SQL 関数](c_sql-functions-leader-node.md)
+ [Amazon Redshift および PostgreSQL](c_redshift-and-postgres-sql.md)

Amazon Redshift は、業界標準の SQL をベースに構築され、大規模データセットを管理する機能やハイパフォーマンス分析および分析結果のレポートをサポートする機能が追加されています。

**注記**  
単一 Amazon Redshift SQL ステートメントの最大サイズは 16 MB です。

# リーダーノードでサポートされる SQL 関数
<a name="c_sql-functions-leader-node"></a>

一部のAmazon Redshift クエリはコンピューティングノードに配布され実行されます。ほかのクエリはリーダーノードのみで実行されます。

ユーザーによって作成されたテーブルまたはシステムテーブル (STL または STV プレフィックスが付いたテーブル、SVL または SVV プレフィックスが付いたシステムビュー) をクエリが参照するたびに、リーダーノードは SQL をコンピューティングノードに配布します。リーダーノード上の PG プレフィックス付きカタログ テーブル (PG\$1TABLE\$1DEF など) のみを参照するクエリや、いずれのテーブルも参照しないクエリは、リーダーノード上で排他的に実行されます。

Amazon Redshift SQL 関数の中にはリーダーノードのみでサポートされ、コンピューティングノードではサポートされないものがあります。リーダーノード専用関数を使用するクエリは、コンピューティングノードではなくリーダーノードのみで実行される必要があり、そうでなければエラーが返されます。

リーダーノードで排他的に実行されるべき関数がユーザー定義テーブルまたは Amazon Redshift システムテーブルを参照した場合、ドキュメントにメモとして説明されているとおり、エラーが返されます。リーダーノードで排他的に実行される関数については、「[リーダーノード専用関数](c_SQL_functions_leader_node_only.md)」を参照してください。

## 例
<a name="c_sql-functions-leader-node-examples"></a>

次の例では、TICKIT のサンプルデータベースを使用します。サンプルデータベースの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

**CURRENT\$1SCHEMA**

CURRENT\$1SCHEMA 関数は、リーダーノード専用の関数です。この例では、クエリはテーブルを参照しないのでリーダーノードで排他的に実行されます。

```
select current_schema();
            
current_schema
---------------
public
```

次の例に示すクエリは、システムカタログテーブルを参照するので、リーダーノードで排他的に実行されます。

```
select * from pg_table_def
where schemaname = current_schema() limit 1;

 schemaname | tablename | column |   type   | encoding | distkey | sortkey | notnull
------------+-----------+--------+----------+----------+---------+---------+---------
 public     | category  | catid  | smallint | none     | t       |       1 | t
```

次の例に示すクエリは、コンピューティングノード上の Amazon Redshift システムテーブルを参照するため、エラーを返します。

```
select current_schema(), userid from users;

INFO:  Function "current_schema()" not supported.
ERROR:  Specified types or functions (one per INFO message) not supported on Amazon Redshift tables.
```

**SUBSTR**

SUBSTR もリーダーノード専用の関数です。次の例では、クエリはテーブルを参照しないのでリーダーノードで排他的に実行されます。

```
SELECT SUBSTR('amazon', 5);
            
+--------+
| substr |
+--------+
| on     |
+--------+
```

次の例に示すクエリは、コンピューティングノード上のテーブルを参照します。その結果、エラーが発生します。

```
SELECT SUBSTR(catdesc, 1) FROM category LIMIT 1;
            
ERROR: SUBSTR() function is not supported (Hint: use SUBSTRING instead)
```

前のクエリを正常に実行するには、[SUBSTRING](https://docs.aws.amazon.com/redshift/latest/dg/r_SUBSTRING.html) を使用してください。

```
SELECT SUBSTRING(catdesc, 1) FROM category LIMIT 1;
            
+---------------------------------+
|            substring            |
+---------------------------------+
| National Basketball Association |
+---------------------------------+
```

**FACTORIAL()**

FACTORIAL() はリーダーノード専用の関数です。次の例では、クエリはテーブルを参照しないのでリーダーノードで排他的に実行されます。

```
SELECT FACTORIAL(5);           

 factorial 
-------------
 120
```

次の例に示すクエリは、コンピューティングノード上のテーブルを参照します。これにより、クエリエディタ v2 を使用して実行すると、エラーが発生します。

```
create table t(a int);
insert into t values (5);
select factorial(a) from t;           

ERROR: Specified types or functions (one per INFO message) not supported on Redshift tables.
Info: Function "factorial(bigint)" not supported.
```

# Amazon Redshift および PostgreSQL
<a name="c_redshift-and-postgres-sql"></a>

**Topics**
+ [Amazon Redshift、PostgreSQL JDBC および ODBC](c_redshift-postgres-jdbc.md)
+ [実装方法が異なる機能](c_redshift-sql-implementated-differently.md)
+ [サポートされていない PostgreSQL 機能](c_unsupported-postgresql-features.md)
+ [サポートされていない PostgreSQL データ型](c_unsupported-postgresql-datatypes.md)
+ [サポートされていない PostgreSQL 関数](c_unsupported-postgresql-functions.md)

Amazon Redshift は PostgreSQL に基づいています。Amazon Redshift と PostgreSQL の間には非常に重要な相違点がいくつかあり、データウェアハウスアプリケーションを設計して開発するときはそれを考慮する必要があります。

Amazon Redshift は、具体的には、大規模データセットに対して複雑なクエリを行う必要があるオンライン分析処理 (OLAP) アプリケーションおよびビジネスインテリジェンス (BI) アプリケーション向けに設計されています。Amazon Redshift は多種多様な要件に対処するため、Amazon Redshift で使用する専用のデータストレージスキーマおよびクエリ実行エンジンは PostgreSQL の実装とは完全に異なります。例えば、オンライントランザクション処理 (OLTP) アプリケーションが一般的にデータを行に保存する場合、Amazon Redshift は、最適なメモリ使用量とディスク I/O のために特殊なデータ圧縮エンコードを使用してデータを列に保存します。セカンダリインデックスおよび効率的な単一行データオペレーションなど、小規模な OLTP 処理に適した一部の PostgreSQL 機能はパフォーマンスを向上させるために省略されています。

Amazon Redshift データウェアハウスシステムのアーキテクチャの詳細については、[Amazon Redshift アーキテクチャ](c_redshift_system_overview.md) を参照してください。

PostgreSQL 9.x には、Amazon Redshift によってサポートされていない機能が一部含まれています。さらに、Amazon Redshift SQL と PostgreSQL との間には、認識しておく必要がある重要な違いがあります。このセクションでは、Amazon Redshift と PostgreSQL との違いに焦点を当てるとともに、SQL 実装を十分に活用したデータウェアハウスを開発するためのガイダンスを提供します。

# Amazon Redshift、PostgreSQL JDBC および ODBC
<a name="c_redshift-postgres-jdbc"></a>

 Amazon Redshift は PostgreSQL に基づいているため、以前は JDBC4 Postgresql のドライバーバージョン 8.4.703 および psqlODBC バージョン 9.x ドライバーを使用することをお勧めしました。これらのドライバーを現在使用している場合は、新しい Amazon Redshift 特定のドライバーに移行することをお勧めします。ドライバーと接続の設定の詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift 用の JDBC および ODBC ドライバー](https://docs.aws.amazon.com/redshift/latest/mgmt/configuring-connections.html#connecting-drivers)」を参照してください。

JDBC を使用して大きなデータセットを取得する際にユーザー側でメモリ不足エラーが発生することを避けるため、JDBC フェッチサイズパラメータを指定して、クライアントがデータをバッチ単位でフェッチするように設定できます。詳細については、「[JDBC フェッチサイズパラメータの設定](set-the-JDBC-fetch-size-parameter.md)」を参照してください。

Amazon Redshift は JDBC maxRows パラメータを認識しません。その代わり、結果セットを制限するには [LIMIT](r_ORDER_BY_clause.md#order-by-clause-limit) 句を指定します。また、[OFFSET](r_ORDER_BY_clause.md#order-by-clause-offset) 句を使用して結果セット内の特定の開始点にスキップすることもできます。

# 実装方法が異なる機能
<a name="c_redshift-sql-implementated-differently"></a>

Amazon Redshift SQL の多くの言語要素は、対応する PostgreSQL 実装とはパフォーマンス特性が異なり、使用する構文およびセマンティクスもまったく異なるものとなっています。

**重要**  
Amazon Redshift と PostgreSQL に含まれる共通要素のセマンティクスは同じであるとみなさないでください。判断しかねる差異については、*Amazon Redshift デベロッパーガイド*の [SQL コマンド](c_SQL_commands.md) を参照して確認してください。

具体的な例として [VACUUM](r_VACUUM_command.md) コマンドが挙げられます。これはテーブルのクリーンアップおよび再編成に使用されます。VACUUM は PostgreSQL バージョンの場合とは機能が異なり、異なるパラメータセットを使用します。Amazon Redshift での VACUUM の使用についての詳細は、[テーブルのバキューム処理](t_Reclaiming_storage_space202.md) を参照してください。

しばしば、データベース管理機能およびツールも異なることがあります。例えば、Amazon Redshift では、システムの稼働状況に関する情報を、一連のシステムテーブルおよびビューで確認できる仕組みになっています。詳細については、「[SYS モニタリングビュー](serverless_views-monitoring.md)」を参照してください。

Amazon Redshift 独自の実装を有する SQL 機能の例を以下に示します。
+  [CREATE TABLE](r_CREATE_TABLE_NEW.md) 

  Amazon Redshift では、テーブルスペース、テーブル分割、継承、および特定の制約をサポートしていません。Amazon Redshift の CREATE TABLE では、テーブルに対してソートおよびディストリビューションのアルゴリズムを定義することで、並列処理を最適化することができます。

  Amazon Redshift Spectrum では、[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) コマンドを使用したテーブルのパーティショニングをサポートしています。
+  [ALTER TABLE](r_ALTER_TABLE.md) 

  ALTER COLUMN アクションのサブセットのみがサポートされています。

  ADD COLUMN の場合、各 ALTER TABLE ステートメントで 1 つの列しか追加できません。
+  [COPY](r_COPY.md) 

  Amazon Redshift の COPY コマンドは、Amazon S3 バケットおよび Amazon DynamoDB テーブルからのデータのロードを可能にし、自動圧縮を容易にすることに特化されています。詳細については、「[Amazon Redshift でのデータのロード](t_Loading_data.md)」セクションおよび COPY コマンドリファレンスを参照してください。
+  [VACUUM](r_VACUUM_command.md) 

  VACUUM のパラメータは完全に異なります。例えば、PostgreSQL のデフォルトの VACUUM オペレーションは、単純に領域を再利用し、再び使用できるようにするだけです。一方で、Amazon Redshift のデフォルトの VACUUM オペレーションは VACUUM FULL です。これは、ディスク領域を再利用し、すべての行を再ソートします。
+ VARCHAR 値の末尾のスペースは、文字列値の比較時に無視されます。詳細については、「[末尾の空白の重要性](r_Character_types.md#r_Character_types-significance-of-trailing-blanks)」を参照してください。

# サポートされていない PostgreSQL 機能
<a name="c_unsupported-postgresql-features"></a>

Amazon Redshift でサポートされていないこれらの PostgreSQL 機能を示します。

**重要**  
Amazon Redshift と PostgreSQL に含まれる共通要素のセマンティクスは同じであるとみなさないでください。判断しかねる差異については、*Amazon Redshift デベロッパーガイド*の [SQL コマンド](c_SQL_commands.md) を参照して確認してください。
+ クエリツール *psql* はサポートされていません。[Amazon Redshift RSQL](https://docs.aws.amazon.com/redshift/latest/mgmt/rsql-query-tool.html) クライアントはサポートされています。
+ テーブル分割 (範囲およびリストの分割)
+ テーブルスペース
+ 制約
  + Unique
  + 外部キー
  + 主キー
  + 検査制約
  + 排他制約

  一意制約、主キー制約、および外部キー制約は許可されますが、情報提供専用です。これらの制約はシステムでは実施されませんが、クエリプランナーによって使用されます。
+ 継承
+ PostgreSQL システム列

  Amazon Redshift SQL ではシステム列を暗黙的に定義しません。ただし、PostgreSQL システム列の名前 `oid`、`tableoid`、`xmin`、`cmin`、`xmax`、`cmax`、および `ctid` を、ユーザー定義の列の名前として使用することはできません。詳細については、[https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html) を参照してください。
+ インデックス
+ ウィンドウ関数の NULLS 句
+ 照合

  Amazon Redshift では、ロケール固有の照合順序またはユーザー定義の照合順序をサポートしていません。「[照合順序](c_collation_sequences.md)」を参照してください。
+ 値式
  + 添字付き式
  + 配列コンストラクタ
  + 行コンストラクタ
+ トリガー
+ 外部データの管理 (SQL/MED)
+ テーブル関数
+ 定数テーブルとして使用される VALUES リスト
+ シーケンス
+ フルテキスト検索
+ RULE および TRIGGER アクセス許可。

  Amazon Redshift は、GRANT ALL または REVOKE ALL を実行するときにこれらのアクセス許可を付与または取り消しますが、RULE と TRIGGER アクセス許可の有無は、いかなる場合も被付与者のアクセス許可に影響しません。

# サポートされていない PostgreSQL データ型
<a name="c_unsupported-postgresql-datatypes"></a>

一般にクエリは、サポートされていないデータ型 (明示的または暗黙的なキャストなど) の使用を試みると、エラーを返します。ただし、サポートされていないデータ型を使用する一部のクエリはリーダーノードで実行されますが、コンピューティングノードでは実行されません。「[リーダーノードでサポートされる SQL 関数](c_sql-functions-leader-node.md)」を参照してください。

 サポートされているデータ型のリストについては、「[データ型](c_Supported_data_types.md)」を参照してください。

Amazon Redshift でサポートされていないこれらの PostgreSQL データタイプを示します。
+ 配列
+ BIT、BIT VARYING
+ BYTEA
+ コンポジット型
+ 列挙型
+ ジオメトリ型 (ジオメトリ型の Amazon Redshift 実装は PostgreSQL とは異なります)
+ HSTORE
+ JSON
+ ネットワークアドレス型
+ 数値型
  + SERIAL、BIGSERIAL、SMALLSERIAL
  + MONEY
+ オブジェクト識別子型
+ 疑似型
+ 範囲型
+ 特殊な文字型
  + "char" – シングルバイトの内部型 (char というデータ型は引用符で囲まれている)。
  + name – オブジェクト名の内部型。

  このような型の詳細については、PostgreSQL ドキュメントの「[特殊な文字型](https://www.postgresql.org/docs/8.0/datatype-character.html)」を参照してください。
+ テキスト検索型
+ TXID\$1SNAPSHOT
+ UUID
+ XML

# サポートされていない PostgreSQL 関数
<a name="c_unsupported-postgresql-functions"></a>

サポートされている関数もその多くは、PostgreSQL とセマンティクスや用途が異なります。例えば、サポートされている関数の中にはリーダーノードでしか実行されないものがあります。また、サポートされていない関数の中には、リーダーノードで実行された場合、エラーを返さないものがあります。いくつかのケースでこれらの関数がエラーを返さないからといって、関数が Amazon Redshift によってサポートされていると受け取るべきではありません。

**重要**  
Amazon Redshift と PostgreSQL に含まれる共通要素のセマンティクスは同じであるとみなさないでください。判断しかねる差異については、*Amazon Redshift データベースデベロッパーガイド*の [SQL コマンド](c_SQL_commands.md) を参照して確認してください。

 詳細については、「[リーダーノードでサポートされる SQL 関数](c_sql-functions-leader-node.md)」を参照してください。

Amazon Redshift でサポートされていないこれらの PostgreSQL 機能を示します。
+ アクセス特権照会関数
+ アドバイザリロック関数
+ 集計関数
  + STRING\$1AGG()
  + ARRAY\$1AGG()
  + EVERY()
  + XML\$1AGG()
  + CORR()
  + COVAR\$1POP()
  + COVAR\$1SAMP()
  + REGR\$1AVGX()、REGR\$1AVGY()
  + REGR\$1COUNT()
  + REGR\$1INTERCEPT()
  + REGR\$1R2()
  + REGR\$1SLOPE()
  + REGR\$1SXX()、REGR\$1SXY()、REGR\$1SYY()
+ 配列関数と演算子
+ バックアップ管理関数
+ コメント情報関数
+ データベースオブジェクト位置関数
+ データベースオブジェクトサイズ関数
+ 日付/時刻関数と演算子
  + CLOCK\$1TIMESTAMP()
  + JUSTIFY\$1DAYS()、JUSTIFY\$1HOURS()、JUSTIFY\$1INTERVAL()
  + PG\$1SLEEP()
  + TRANSACTION\$1TIMESTAMP()
+ ENUM サポート関数
+ 幾何関数と演算子
+ 汎用ファイルアクセス関数
+ IS DISTINCT FROM
+ ネットワークアドレス関数と演算子
+ 数学関数
  + DIV()
  + SETSEED()
  + WIDTH\$1BUCKET()
+ セットを返す関数
  + GENERATE\$1SERIES()
  + GENERATE\$1SUBSCRIPTS()
+ 範囲関数と演算子
+ リカバリ制御関数
+ リカバリ情報関数
+ ROLLBACK\$1TO\$1SAVEPOINT 関数
+ スキーマ可視性照会関数
+ サーバーシグナリング関数
+ スナップショット同期関数
+ シーケンス操作関数
+ 文字列関数
  + BIT\$1LENGTH()
  + OVERLAY()
  + CONVERT()、CONVERT\$1FROM()、CONVERT\$1TO()
  + ENCODE()
  + FORMAT()
  + QUOTE\$1NULLABLE()
  + REGEXP\$1MATCHES()
  + REGEXP\$1SPLIT\$1TO\$1ARRAY()
  + REGEXP\$1SPLIT\$1TO\$1TABLE()
+ システムカタログ情報関数
+ システム情報関数
  + CURRENT\$1CATALOG CURRENT\$1QUERY()
  + INET\$1CLIENT\$1ADDR()
  + INET\$1CLIENT\$1PORT()
  + INET\$1SERVER\$1ADDR() INET\$1SERVER\$1PORT()
  + PG\$1CONF\$1LOAD\$1TIME()
  + PG\$1IS\$1OTHER\$1TEMP\$1SCHEMA()
  + PG\$1LISTENING\$1CHANNELS()
  + PG\$1MY\$1TEMP\$1SCHEMA()
  + PG\$1POSTMASTER\$1START\$1TIME()
  + PG\$1TRIGGER\$1DEPTH()
  + SHOW VERSION()
+ テキスト検索関数と演算子
+ トランザクション ID およびスナップショット関数
+ トリガー関数
+ XML 関数

# SQL の使用
<a name="c_SQL_reference"></a>

**Topics**
+ [SQL リファレンスの規則](c_SQL_reference_conventions.md)
+ [基本的要素](c_Basic_elements.md)
+ [式](r_expressions.md)
+ [条件](r_conditions.md)

SQL 言語は、データベースおよびデータベースオブジェクトを操作するために使用するコマンドおよび関数から構成されています。SQL 言語はまた、データ型、式、およびリテラルに関するルールを適用します。

# SQL リファレンスの規則
<a name="c_SQL_reference_conventions"></a>

このセクションでは、SQL リファレンスのセクションに記載されている SQL の式、コマンド、および関数の構文を記述する際に使用される規則について説明します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_SQL_reference_conventions.html)

# 基本的要素
<a name="c_Basic_elements"></a>

**Topics**
+ [名前と識別子](r_names.md)
+ [リテラル](r_Literals.md)
+ [Null](r_Nulls.md)
+ [データ型](c_Supported_data_types.md)
+ [照合順序](c_collation_sequences.md)

このセクションでは、データベースオブジェクトの名前、リテラル、Null、およびデータ型を操作するためのルールについて説明します。

# 名前と識別子
<a name="r_names"></a>

名前は、データベースオブジェクト (テーブルや列など) と、ユーザーおよびパスワードを識別します。*名前*という用語と*識別子*という用語は、ほとんど同じ意味で使用できます。2 種類の識別子があります。標準的な識別子と、引用符で囲まれた (すなわち、区切り記号付き) 識別子です。識別子は UTF-8 印字可能文字のみで構成する必要があります。標準的な識別子と区切り記号付き識別子の ASCII 文字は、大文字と小文字の区別がありませんが、データベースでは小文字で表記されます。クエリの結果では、列名は、デフォルトで小文字で返されます。列名を大文字で返すには、[describe\$1field\$1name\$1in\$1uppercase](r_describe_field_name_in_uppercase.md) 設定パラメータを **true** に設定します。

## 標準的な識別子
<a name="r_names-standard-identifiers"></a>

標準的な SQL 識別子はルールセットに準拠するものであり、以下の条件を満たしている必要があります。
+ ASCII のシングルバイトのアルファベット文字または下線文字、または UTF-8 のマルチバイト文字 (2 バイトから 4 バイト) で開始します。
+ 後続の文字には、ASCII のシングルバイトの英数字、下線、またはドル記号、またはマルチバイトの UTF-8 文字 (2 バイトから 4 バイト) を使用できます。
+ 長さが 1～127 バイトで、区切り記号として引用符を含まない。
+ 引用符とスペースは含めない。
+ 予約された SQL キーワードではない。

## 区切り記号付き識別子
<a name="r_names-delimited-identifiers"></a>

区切り記号付き識別子 (引用符で囲まれた識別子とも言う) は、二重引用符 (") で囲まれます。区切り記号付き識別子を使用する場合は、そのオブジェクトへのすべての参照で二重引用符を使用する必要があります。この識別子には、二重引用符以外の標準の UTF-8 印字可能文字を含めることができます。したがって、任意の文字列 (スペースやパーセント記号など本来なら無効な文字も含む) で列またはテーブルの名前を作成できます。

区切り記号付き識別子の ASCII 文字は、大文字と小文字の区別がありませんが、小文字で表記されます。文字列内で二重引用符を使用するには、その二重引用符の前に別の二重引用符文字を付ける必要があります。

## 大文字と小文字を区別する識別子
<a name="r_names-case-sensitive-identifiers"></a>

大文字と小文字を区別する識別子 (大文字と小文字が混在する識別子とも呼ぶ) には、大文字と小文字の両方を使用することができます。大文字と小文字を区別する識別子を使用するには、構成 `enable_case_sensitive_identifier` を `true` に設定します。この構成は、クラスターまたはセッションに対して設定できます。詳細については、「*Amazon Redshift 管理ガイド*」の「[デフォルトパラメータ値](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-parameter-groups.html#default-param-group-values)」および「[enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md)」を参照してください。

## システム列名
<a name="r_names-system-column-names"></a>

ただし、次の PostgreSQL システム列の名前を、ユーザー定義の列の名前として使用することはできません。詳細については、[https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html](https://www.postgresql.org/docs/8.0/static/ddl-system-columns.html) を参照してください。
+ `oid`
+ `tableoid`
+ `xmin`
+ `cmin`
+ `xmax`
+ `cmax`
+ `ctid`

## 例
<a name="r_names-examples"></a>

次の表に、区切り記号付き識別子の例、結果として生じる出力、および説明を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_names.html)

this "is it" という名前の列を持つ group という名前のテーブルを作成するには、以下のように記述します。

```
create table "group" (
"This ""IS IT""" char(10));
```

次のクエリは同じ結果を返します。

```
select "This ""IS IT"""
from "group";

this "is it"
--------------
(0 rows)
```

```
select "this ""is it"""
from "group";

this "is it"
--------------
(0 rows)
```

次に示す完全に修飾された `table.column` 構文も同じ結果を返します。

```
select "group"."this ""is it"""
from "group";

this "is it"
--------------
(0 rows)
```

次の CREATE TABLE コマンドは、列名にスラッシュを含むテーブルを作成します。

```
create table if not exists city_slash_id(
                  "city/id" integer not null,
                  state char(2) not null);
```

# リテラル
<a name="r_Literals"></a>

リテラルまたは定数は固定データ値であり、一連の文字または数値定数から構成されます。Amazon Redshift は、次のようないくつかのタイプのリテラルをサポートしています。
+ 数値リテラル。整数、10 進数、および浮動小数点数に使用されます。詳細については、「[整数リテラルと浮動小数点リテラル](r_numeric_literals201.md)」を参照してください。
+ 文字リテラル。文字列、キャラクタ文字列、または文字定数とも呼ばれます。
+ 日時データ型で使用される、日時および間隔のリテラル。詳細については、「[日付、時刻、およびタイムスタンプのリテラル](r_Date_and_time_literals.md)」および「[間隔のデータ型とリテラル](r_interval_data_types.md)」を参照してください。

# Null
<a name="r_Nulls"></a>

行内で列が見つからない場合、列が不明である場合、または列が適用できない場合、その列は Null 値であり、または Null を含んでいるといわれます。Null は、主キー制約または NOT NULL 制約によって制限されないデータ型のフィールドに表示される場合があります。Null は値ゼロまたは空の文字列と等価ではありません。

Null を含む演算式の結果はいずれも常に Null になります。null の引数またはオペランドを指定した場合、すべての演算子は null を返します。

Null かどうかをテストするには、比較条件 IS NULL および IS NOT NULL を使用します。Null はデータが不足していることを表現するものなので、Null はいずれかの値または別の Null に等しいわけでも等しくないわけでもありません。

# データ型
<a name="c_Supported_data_types"></a>

**Topics**
+ [マルチバイト文字](#c_Supported_data_types-multi-byte-characters)
+ [数値型](r_Numeric_types201.md)
+ [文字型](r_Character_types.md)
+ [日時型](r_Datetime_types.md)
+ [ブール型](r_Boolean_type.md)
+ [HLLSKETCH タイプ](r_HLLSKTECH_type.md)
+ [SUPER タイプ](r_SUPER_type.md)
+ [VARBYTE 型](r_VARBYTE_type.md)
+ [型の互換性と変換](#r_Type_conversion)

Amazon Redshift によって保存または取得される各値は、データ型と一定の関連するプロパティセットを持ちます。データ型はテーブルの作成時に宣言されます。データ型は、列または引数に含めることができる値セットを制限します。

次の表に、Amazon Redshift テーブルで使用できるデータ型を一覧表示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_Supported_data_types.html)

**注記**  
サポートされていないデータ型 (「char」は引用符で囲まれています) については、[サポートされていない PostgreSQL データ型](c_unsupported-postgresql-datatypes.md) を参照してください。

## マルチバイト文字
<a name="c_Supported_data_types-multi-byte-characters"></a>

VARCHAR データ型では、最大 4 バイトの UTF-8 マルチバイト文字をサポートします。5 バイト以上の文字はサポートされていません。マルチバイト文字を含む VARCHAR 列のサイズを計算するには、文字数と 1 文字当たりのバイト数を掛けます。例えば、文字列に漢字が 4 文字含まれ、各文字のサイズが 3 バイトである場合は、文字列を格納するのに VARCHAR(12) 列が必要です。

VARCHAR データ型は、次に示す無効な UTF-8 コードポイントをサポートしていません: 

`0xD800 – 0xDFFF`(バイトシーケンス:`ED A0 80` –`ED BF BF` )

CHAR データ型は、マルチバイト文字をサポートしていません。

# 数値型
<a name="r_Numeric_types201"></a>

**Topics**
+ [整数型](#r_Numeric_types201-integer-types)
+ [DECIMAL 型または NUMERIC 型](#r_Numeric_types201-decimal-or-numeric-type)
+ [128 ビットの DECIMAL または NUMERIC の列の使用に関する注意事項](#r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns)
+ [浮動小数点型](#r_Numeric_types201-floating-point-types)
+ [数値に関する計算](r_numeric_computations201.md)
+ [整数リテラルと浮動小数点リテラル](r_numeric_literals201.md)
+ [数値型を使用する例](r_Examples_with_numeric_types201.md)

数値データ型には、整数型、10 進数型、および浮動小数点数型などがあります。

## 整数型
<a name="r_Numeric_types201-integer-types"></a>

SMALLINT、INTEGER、および BIGINT の各データ型を使用して、各種範囲の数値全体を格納します。各データ型の許容範囲の外にある値を格納することはできません。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric_types201.html)

## DECIMAL 型または NUMERIC 型
<a name="r_Numeric_types201-decimal-or-numeric-type"></a>

DECIMAL データ型または NUMERIC データ型を使用し、*ユーザー定義の精度*で値を格納します。DECIMAL キーワードと NUMERIC キーワードは同じように使用できます。このドキュメントでは、このデータ型を表す用語として *decimal* を優先的に使用します。*numeric* という用語は一般的に整数、10 進数、および浮動小数点のデータ型を称する場合に使用します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric_types201.html)

テーブル内に DECIMAL 列を定義するには、*precision* と *scale* を次のように指定します。

```
decimal(precision, scale)
```

 *precision*   
値全体での有効な桁の合計。小数点の両側の桁数。例えば、数値 `48.2891` の場合は精度が 6、スケールが 4 となります。指定がない場合、デフォルトの精度は 18 です。最大精度は 38 です。  
 入力値で小数点の左側の桁数が、列の精度から列のスケールを引いて得られた桁数を超えている場合、入力値を列にコピー (または挿入も更新も) することはできません。このルールは、列の定義を外れるすべての値に適用されます。例えば、`numeric(5,2)` 列の値の許容範囲は、`-999.99`～`999.99` です。

 *scale*   
小数点の右側に位置する、値の小数部における小数の桁数です。整数のスケールはゼロです。列の仕様では、スケール値は精度値以下である必要があります。指定がなければ、デフォルトのスケールは 0 です。最大スケールは 37 です。  
テーブルにロードされた入力値のスケールが列のスケールより大きい場合、値は指定されたスケールに丸められます。SALES テーブルの PRICEPAID 列が DECIMAL(8,2) 列である場合を例にとります。DECIMAL(8,4) の値を PRICEPAID 列に挿入すると、値のスケールは 2 に丸められます。  

```
insert into sales
values (0, 8, 1, 1, 2000, 14, 5, 4323.8951, 11.00, null);

select pricepaid, salesid from sales where salesid=0;

pricepaid | salesid
-----------+---------
4323.90 |       0
(1 row)
```
 ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。

**注記**  
DECIMAL(19,0) 列に挿入できる最大の正の値は、`9223372036854775807` (263 -1) です。最大の負の値は `-9223372036854775808` です。例えば、値 `9999999999999999999` (19 桁の 9 の並び) の挿入を試みると、オーバーフローエラーが発生します。小数点の位置に関係なく、Amazon Redshift が DECIMAL 数として表現できる最大の文字列は `9223372036854775807` です。例えば、DECIMAL(19,18) 列にロードできる最大値は `9.223372036854775807` です。  
これらの規則は、有効桁数が 19 桁以下の DECIMAL 値は内部で 8 バイトの整数として格納され、有効桁数が 20～38 桁の DECIMAL 値は 16 バイトの整数として格納されるためです。

## 128 ビットの DECIMAL または NUMERIC の列の使用に関する注意事項
<a name="r_Numeric_types201-notes-about-using-128-bit-decimal-or-numeric-columns"></a>

アプリケーションがそのような精度を必要とすることが明確でない限り、最大精度を DECIMAL 列に任意に割り当てないでください。128 ビット値は、64 ビット値の 2 倍のディスク容量を使用するので、クエリの実行時間が長くなる可能性があります。

## 浮動小数点型
<a name="r_Numeric_types201-floating-point-types"></a>

*可変精度*の数値を格納するには、REAL および DOUBLE PRECISION のデータ型を使用します。これらのデータ型は*非正確*型です。すなわち、一部の値が近似値として格納されるため、特定の値を格納して返すと若干の相違が生じる場合があります。正確な格納および計算が必要な場合は (金額の場合など)、DECIMAL データ型を使用します。

REAL は、IEEE 標準 754 の 2 進浮動小数点演算に従って単精度浮動小数点形式を表します。精度は約 6 桁で、範囲は約 1E-37 から 1E\$137 です。このデータ型を FLOAT4 として指定することもできます。

DOUBLE PRECISION は、IEEE 標準 754 の 2 進浮動小数点演算に従って倍精度浮動小数点形式を表します。精度は約 15 桁で、範囲は約 1E-307 から 1E\$1308 です。このデータ型を FLOAT または FLOAT8 として指定することもできます。

通常の数値に加えて、浮動小数点型にはいくつかの特別な値があります。SQL でこれらの値を使用するときは、一重引用符で囲んでください。
+ `NaN` - Not a Number (非数)
+ `Infinity` — Infinity (無限大)
+ `-Infinity` — Negative Infinity (負の無限大)

例えば、`customer_activity` テーブルの `day_charge` 列に非数を挿入するには、次の SQL を実行します。

```
insert into customer_activity(day_charge) values('NaN');
```

# 数値に関する計算
<a name="r_numeric_computations201"></a>

ここで、*計算*とは加算、減算、乗算、および除算といった 2 進算術演算を示しています。このセクションでは、このような演算の予期される戻り型について、さらに DECIMAL データ型が必要な場合に精度とスケールを決定するのに適用される特定の計算式について説明します。

クエリ処理中に数値の計算が行われる場合には、計算が不可能であるためにクエリが数値オーバーフローエラーを返すといった状況が発生することがあります。さらに、算出される値のスケールが、変化したり予期せぬものであったりする状況が発生することもあります。一部の演算については、明示的なキャスト (型の上位変換) または Amazon Redshift 設定パラメータを使用してこれらの問題を解決できます。

SQL 関数を使用した同様の計算の結果の詳細については、「[集計関数](c_Aggregate_Functions.md)」を参照してください。

## 計算の戻り型
<a name="r_numeric_computations201-return-types-for-computations"></a>

Amazon Redshift で一連の数値データ型がサポートされていると仮定して、次の表に加算、減算、乗算、および除算の予期される戻り型を示します。表の左側の最初の列は計算の 1 番目のオペランドを示し、一番上の行は 2 番目のオペランドを示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_numeric_computations201.html)

## DECIMAL の計算結果の精度とスケール
<a name="r_numeric_computations201-precision-and-scale-of-computed-decimal-results"></a>

次の表に、算術演算で DECIMAL 型の結果が返されるときに算出結果の精度とスケールに適用されるルールの概要を示します。この表で、`p1` と `s1` は計算における 1 番目のオペランドの精度とスケールを示し、`p2` と `s2` は 2 番目のオペランドの精度とスケールを示します (これらの計算に関係なく、結果の最大精度は 38、結果の最大スケールは 38 です)。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_numeric_computations201.html)

例えば、SALES テーブルの PRICEPAID 列と COMMISSION 列は両方とも DECIMAL(8,2) 列です。PRICEPAID を COMMISSION で除算する場合 (または COMMISSION を PRICEPAID で除算する場合)、計算式は次のように適用されます。

```
Precision = 8-2 + 2 + max(4,2+8-2+1)
= 6 + 2 + 9 = 17

Scale = max(4,2+8-2+1) = 9

Result = DECIMAL(17,9)
```

次の計算は、UNION、INTERSECT、EXCEPT などの集合演算子および COALESCE や DECODE などの関数を使用して DECIMAL 値に対して演算を実行した場合に、結果として生じる精度とスケールを計算するための汎用的なルールです。

```
Scale = max(s1,s2)
Precision = min(max(p1-s1,p2-s2)+scale,19)
```

例えば、DECIMAL(7,2) 列が 1 つ含まれる DEC1 テーブルと、DECIMAL(15,3) 列が 1 つ含まれる DEC2 テーブルを結合して DEC3 テーブルを作成します。DEC3 のスキーマを確認すれば、列が NUMERIC(15,3) 列になることが分かります。

```
create table dec3 as select * from dec1 union select * from dec2;
```

結果 

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'dec3';

column |     type      | encoding | distkey | sortkey 
-------+---------------+----------+---------+---------
c1     | numeric(15,3) | none     | f       | 0
```

上記の例では、計算式は次のように適用されます。

```
Precision = min(max(7-2,15-3) + max(2,3), 19)
= 12 + 3 = 15

Scale = max(2,3) = 3

Result = DECIMAL(15,3)
```

## 除算演算に関する注意事項
<a name="r_numeric_computations201-notes-on-division-operations"></a>

除算演算の場合、ゼロ除算を行うとエラーが返されます。

精度とスケールが計算されると、スケール制限 100 が適用されます。算出された結果スケールが 100 より大きい場合、除算結果は次のようにスケーリングされます。
+ 精度 = ` precision - (scale - max_scale)` 
+ スケール = ` max_scale ` 

算出された精度が最大精度 (38) より高い場合、精度は 38 に引き下げられ、スケールは `max((38 + scale - precision), min(4, 100))` で計算された結果となります。

## オーバーフロー条件
<a name="r_numeric_computations201-overflow-conditions"></a>

すべての数値計算についてオーバーフローが調べられます。精度が 19 以下の DECIMAL データは 64 ビットの整数として格納されます。精度が 19 を上回る DECIMAL データは 128 ビットの整数として格納されます。すべての DECIMAL 値の最大精度は 38 であり、最大スケールは 37 です。値がこれらの制限を超えるとオーバーフローエラーが発生します。このルールは中間結果セットと最終結果セットの両方に適用されます。
+ 特定のデータ値がキャスト関数で指定された所定の精度またはスケールに適合していない場合、明示的なキャストでは実行時オーバーフローエラーが生じます。例えば、SALES テーブルの PRICEPAID 列 (DECIMAL(8,2) 列) からの値をすべてキャストできるとは限らないので、結果として DECIMAL(7,3) を返すことはできません。

  ```
  select pricepaid::decimal(7,3) from sales;
  ERROR:  Numeric data overflow (result precision)
  ```

  このエラーは、PRICEPAID 列に含まれる大きな値の*いくつか*をキャストできないために発生します。
+ 乗算演算によって得られる結果では、結果スケールが各オペランドのスケールを足し算した値となります。例えば、両方のオペランドとも 4 桁のスケールを持っている場合、結果としてスケールは 8 桁となり、小数点の左側には 10 桁のみが残ります。したがって、有効スケールを持つ 2 つの大きな数値を乗算する場合は、比較的簡単にオーバーフロー状態に陥ります。

  次の例はオーバーフローエラーになります。

  ```
  SELECT CAST(1 AS DECIMAL(38, 20)) * CAST(10 AS DECIMAL(38, 20));
  ERROR: 128 bit numeric data overflow (multiplication)
  ```

  乗算の代わりに除算を使用することでオーバーフローエラーを回避できます。次の例を使用して、1 を元の除数で割って除算します。

  ```
  SELECT CAST(1 AS DECIMAL(38, 20)) / (1 / CAST(10 AS DECIMAL(38, 20)));
  +----------+
  | ?column? |
  +----------+
  | 10       |
  +----------+
  ```

## INTEGER 型および DECIMAL 型での数値計算
<a name="r_numeric_computations201-numeric-calculations-with-integer-and-decimal-types"></a>

計算式のオペランドの一方が INTEGER データ型を持っており、他方のオペランドが DECIMAL データ型を持っている場合、INTEGER オペランドは DECIMAL として暗黙的にキャストされます。
+ INT2 (SMALLINT) は、DECIMAL(5,0) としてキャストされます。
+ INT4 (INTEGER) は、DECIMAL(10,0) としてキャストされます。
+ INT8 (BIGINT) は、DECIMAL(19,0) としてキャストされます。

例えば、DECIMAL(8,2) 列の SALES.COMMISSION と、SMALLINT 列の SALES.QTYSOLD を乗算する場合、この計算は次のようにキャストされます。

```
DECIMAL(8,2) * DECIMAL(5,0)
```

# 整数リテラルと浮動小数点リテラル
<a name="r_numeric_literals201"></a>

数値を表現するリテラルまたは定数は、整数または浮動小数点数になり得ます。

## 整数リテラル
<a name="r_numeric_literals201-integer-literals"></a>

整数定数は一連の 0～9 の数字であり、この一連の数字の先頭にはオプションで正 (\$1) 符号または負 (-) 符号が付けられます。

## 構文
<a name="r_numeric_literals201-synopsis"></a>

```
[ + | - ] digit ...
```

## 例
<a name="r_numeric_literals201-examples"></a>

以下は有効な整数です。

```
23
-555
+17
```

## 浮動小数点リテラル
<a name="r_numeric_literals201-floating-point-literals"></a>

浮動小数点リテラル (10 進リテラル、数値リテラル、分数リテラルとも呼ばれる) は、小数点を含むことができるほか、必要に応じて指数マーカー (e) も含むことができる一連の数字です。

## 構文
<a name="r_numeric_literals201-synopsis2"></a>

```
[ + | - ] digit ... [ . ] [ digit ...]
[ e | E [ + | - ] digit ... ]
```

## 引数
<a name="r_numeric_literals201-arguments"></a>

e \$1 E  
e または E は、数値が科学的表記で指定されていることを示します。

## 例
<a name="r_numeric_literals201-examples2"></a>

以下は有効な浮動小数点リテラルです。

```
3.14159
-37.
2.0e19
-2E-19
```

# 数値型を使用する例
<a name="r_Examples_with_numeric_types201"></a>



## CREATE TABLE ステートメント
<a name="r_Examples_with_numeric_types201-create-table-statement"></a>

次の CREATE TABLE ステートメントでは、さまざまな数値データ型を実際に宣言しています。

```
create table film (
film_id integer,
language_id smallint,
original_language_id smallint,
rental_duration smallint default 3,
rental_rate numeric(4,2) default 4.99,
length smallint,
replacement_cost real default 25.00);
```

## 範囲外の整数を挿入する試み
<a name="r_Examples_with_numeric_types201-attempt-to-insert-an-integer-that-is-out-of-range"></a>

次の例では、値 33000 を SMALLINT 列に挿入しようとしています。

```
insert into film(language_id) values(33000);
```

SMALLINT の範囲は、-32768～\$132767 であるため、Amazon Redshift はエラーを返します。

```
An error occurred when executing the SQL command:
insert into film(language_id) values(33000)

ERROR: smallint out of range [SQL State=22003]
```

## 整数列への 10 進値の挿入
<a name="r_Examples_with_numeric_types201-insert-a-decimal-value-into-an-integer-column"></a>

次の例では、10 進値を INT 列に挿入します。

```
insert into film(language_id) values(1.5);
```

この値は挿入されますが、整数値 2 に切り上げられます。

## 10 進値のスケールが丸められるため挿入に成功する場合
<a name="r_Examples_with_numeric_types201-insert-a-decimal-that-succeeds-because-its-scale-is-rounded"></a>

次の例では、列よりも上位の精度を持つ 10 進値を挿入します。

```
insert into film(rental_rate) values(35.512);
```

この例では、値 `35.51` が列に挿入されます。

## 範囲外の 10 進値を挿入する試み
<a name="r_Examples_with_numeric_types201-attempt-to-insert-a-decimal-value-that-is-out-of-range"></a>

この場合、値 `350.10` は範囲外です。DECIMAL 列内の値の桁数は、列の精度からそのスケールを引いた結果となります (RENTAL\$1RATE 列の場合は 4 から 2 を引いた結果)。すなわち、`DECIMAL(4,2)` 列の許容範囲は、`-99.99`～`99.99` です。

```
insert into film(rental_rate) values (350.10);
ERROR:  numeric field overflow
DETAIL:  The absolute value is greater than or equal to 10^2 for field with precision 4, scale 2.
```

## REAL 列への可変精度値の挿入
<a name="r_Examples_with_numeric_types201-insert-variable-precision-values-into-a-real-column"></a>

次の例では可変精度値を REAL 列に挿入します。

```
insert into film(replacement_cost) values(1999999.99);

insert into film(replacement_cost) values(1999.99);

select replacement_cost from film;

+------------------+
| replacement_cost |
+------------------+
| 2000000          |
| 1999.99          |
+------------------+
```

値 `1999999.99` は、`REAL` 列の精度要件を満たすために `2000000` に変換されます。値 `1999.99` はそのままロードされます。

# 文字型
<a name="r_Character_types"></a>

**Topics**
+ [ストレージと範囲](#r_Character_types-storage-and-ranges)
+ [CHAR または CHARACTER](#r_Character_types-char-or-character)
+ [VARCHAR または CHARACTER VARYING](#r_Character_types-varchar-or-character-varying)
+ [NCHAR 型および NVARCHAR 型](#r_Character_types-nchar-and-nvarchar-types)
+ [TEXT 型および BPCHAR 型](#r_Character_types-text-and-bpchar-types)
+ [末尾の空白の重要性](#r_Character_types-significance-of-trailing-blanks)
+ [文字型を使用する例](r_Examples_with_character_types.md)

文字データ型には、CHAR (文字) や VARCHAR (可変文字) などがあります。

## ストレージと範囲
<a name="r_Character_types-storage-and-ranges"></a>

CHAR および VARCHAR のデータ型は、文字単位でなくバイト単位で定義されます。CHAR 列にはシングルバイト文字のみを含めることができます。したがって、CHAR(10) 列には、最大 10 バイト長の文字列を含めることができます。VARCHAR にはマルチバイト文字 (1 文字あたり最大で 4 バイトまで) を含めることができます。例えば、VARCHAR(12) 列には、シングルバイト文字なら 12 個、2 バイト文字なら 6 個、3 バイト文字なら 4 個、4 バイト文字なら 3 個含めることができます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Character_types.html)

**注記**  
CREATE TABLE 構文では、文字データ型の MAX キーワードをサポートします。例えば、次のようになります。  

```
create table test(col1 varchar(max));
```
CHAR の場合、MAX は列幅を 4096 バイトとして定義します。  
VARCHAR の場合、MAX は CREATE TABLE ステートメントの列幅を 65,535 バイトとして定義します。メモリ内のオペレーションの場合、VARCHAR (MAX) は最大 16,000,000 バイトをサポートします。

## CHAR または CHARACTER
<a name="r_Character_types-char-or-character"></a>

固定長の文字列を格納するには、CHAR または CHARACTER を使用します。これらの文字列は空白で埋められるので、CHAR(10) 列は常に 10 バイトのストレージを占有します。

```
char(10)
```

 長さの指定がない場合 CHAR 列は、CHAR(1) 列になります。

## VARCHAR または CHARACTER VARYING
<a name="r_Character_types-varchar-or-character-varying"></a>

一定の制限を持つ可変長の文字列を格納するには、VARCHAR 列または CHARACTER VARYING 列を使用します。これらの文字列は空白で埋められないので、VARCHAR(120) 列は、最大で 120 個のシングルバイト文字、60 個の 2 バイト文字、40 個の 3 バイト文字、または 30 個の 4 バイト文字で構成されます。

```
varchar(120)
```

CREATE TABLE ステートメントで長さの指定子なしで VARCHAR データ型を使用すると、デフォルト長は 256 になります。

[文字列関数](String_functions_header.md) は最大 16,000,000 バイトをサポートするようになりました。例えば、CONCAT 関数の出力は以前は 65,535 バイトに制限されていましたが、最大 16,000,000 バイトをサポートするようになりました。

```
SELECT LEN(CONCAT(REPEAT('A', 5000000), REPEAT('B', 5000000))) AS total_length;

 total_length
--------------
     10000000
```

## NCHAR 型および NVARCHAR 型
<a name="r_Character_types-nchar-and-nvarchar-types"></a>

NCHAR 型および NVARCHAR 型 (NATIONAL CHARACTER 型および NATIONAL CHARACTER VARYING 型と呼ぶこともある) で、列を作成できます。これらの型はそれぞれ CHAR 型と VARCHAR 型に変換され、指定されたバイト数で格納されます。

長さを指定しない場合、NCHAR 列は CHAR(1) 列に変換されます。

長さを指定しない場合、NVARCHAR 列は VARCHAR(256) 列に変換されます。

## TEXT 型および BPCHAR 型
<a name="r_Character_types-text-and-bpchar-types"></a>

TEXT 列を使用して Amazon Redshift テーブルを作成できますが、この列は最大 256 文字の可変長値を受け入れる VARCHAR(256) 列に変換されます。

BPCHAR (空白で埋められる文字) 型を使用して Amazon Redshift 列を作成できますが、この列によって固定長の CHAR(256) 列に変換されます。

## 末尾の空白の重要性
<a name="r_Character_types-significance-of-trailing-blanks"></a>

CHAR と VARCHAR のデータ型は両方とも、最大 *n* バイト長の文字列を格納できます。それよりも長い文字列をこれらの型の列に格納しようとすると、エラーが発生します。ただし、余分な文字がすべてスペース (空白) ならば例外で、文字列は最大長に切り捨てられます。文字列の長さが最大長よりも短い場合、CHAR 値は空白で埋められますが、VARCHAR 値では空白なしで文字列を格納します。

CHAR 値の末尾の空白はいつも意味的に重要であるとは限りません。末尾の空白は、LENGTH 計算を含めないで 2 つの CHAR 値を比較するときは無視され、CHAR 値を別の文字列型に変換するときは削除されます。

VARCHAR および CHAR の値の末尾の空白は、値が比較されるとき、意味的に重要でないものとして扱われます。

長さの計算によって返される VARCHAR キャラクタ文字列の長さには末尾の空白が含められます。固定長のキャラクタ文字列の長さを計算する場合、末尾の空白はカウントされません。

# 文字型を使用する例
<a name="r_Examples_with_character_types"></a>

## CREATE TABLE ステートメント
<a name="r_Examples_with_character_types-create-table-statement"></a>

次の CREATE TABLE ステートメントでは、VARCHAR および CHAR データタイプの使用を示しています。

```
create table address(
address_id integer,
address1 varchar(100),
address2 varchar(50),
district varchar(20),
city_name char(20),
state char(2),
postal_code char(5)
);
```

次の例ではこの表を使用しています。

## 可変キャラクタ文字列における末尾の空白
<a name="r_Examples_with_character_types-trailing-blanks-in-variable-length-character-strings"></a>

ADDRESS1 は VARCHAR 列であるため、2 番目の挿入アドレスの末尾の空白は意味的に重要ではありません。すなわち、これらの 2 つの挿入アドレスは*一致します*。

```
insert into address(address1) values('9516 Magnolia Boulevard');

insert into address(address1) values('9516 Magnolia Boulevard  ');
```

```
select count(*) from address
where address1='9516 Magnolia Boulevard';

count
-------
2
(1 row)
```

もし ADDRESS1 列が CHAR 列であり、同じ値が挿入されたと仮定すると、COUNT(\$1) クエリはキャラクタ文字列を同じものとして認識し、`2` を返します。

## LENGTH 関数の結果
<a name="r_Examples_with_character_types-results-of-the-length-function"></a>

LENGTH 関数は、VARCHAR 列内の末尾の空白を認識します。

```
select length(address1) from address;

length
--------
23
25
(2 rows)
```

CHAR 列である CITY\$1NAME 列の `Augusta` の値は、入力文字列内の末尾の空白に関係なく常に 7 文字になります。

## 列の長さを超える値
<a name="r_Examples_with_character_types-values-that-exceed-the-length-of-the-column"></a>

文字列は、宣言した列幅に適合するように切り捨てられることはありません。

```
insert into address(city_name) values('City of South San Francisco');
ERROR: value too long for type character(20)
```

この問題の解決策は、値を列のサイズにキャストすることです。

```
insert into address(city_name)
values('City of South San Francisco'::char(20));
```

この場合は、文字列の最初の 20 文字 (`City of South San Fr`) が列にロードされます。

# 日時型
<a name="r_Datetime_types"></a>

**Topics**
+ [ストレージと範囲](#r_Datetime_types-storage-and-ranges)
+ [DATE](#r_Datetime_types-date)
+ [TIME](#r_Datetime_types-time)
+ [TIMETZ](#r_Datetime_types-timetz)
+ [TIMESTAMP](#r_Datetime_types-timestamp)
+ [TIMESTAMPTZ](#r_Datetime_types-timestamptz)
+ [日時型を使用する例](r_Examples_with_datetime_types.md)
+ [日付、時刻、およびタイムスタンプのリテラル](r_Date_and_time_literals.md)
+ [間隔のデータ型とリテラル](r_interval_data_types.md)

日時データ型には DATE、TIME、TIMETZ、TIMESTAMP、TIMESTAMPTZ があります。

## ストレージと範囲
<a name="r_Datetime_types-storage-and-ranges"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Datetime_types.html)

## DATE
<a name="r_Datetime_types-date"></a>

タイムスタンプなしで単純にカレンダー日付だけを保存するには DATE データ型を使用します。

## TIME
<a name="r_Datetime_types-time"></a>

TIME は、TIME WITHOUT TIME ZONE のエイリアスです。

時刻を保存するには、TIME データ型を使用します。

TIME 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

デフォルトでは、ユーザーテーブルと Amazon Redshift システムテーブルでは、TIME 値は協定世界時 (UTC) になります。

## TIMETZ
<a name="r_Datetime_types-timetz"></a>

TIMETZ は、TIME WITH TIME ZONE のエイリアスです。

TIMETZ データ型を使用して、時刻とタイムゾーンを保存します。

TIMETZ 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

デフォルトでは、ユーザーテーブルと Amazon Redshift システムテーブルの両方で、TIMETZ 値は UTC です。

## TIMESTAMP
<a name="r_Datetime_types-timestamp"></a>

TIMESTAMP は、TIMESTAMP WITHOUT TIME ZONE のエイリアスです。

日付と時刻を含む完全なタイムスタンプ値を保存するには TIMESTAMP データ型を使用します。

TIMESTAMP 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

TIMESTAMP 列に日付または部分的なタイムスタンプ値を持つ日付を挿入すると、値は暗黙的に完全なタイムスタンプ値に変換されます。この完全なタイムスタンプ値には、時間、分、および秒が抜けている場合のデフォルト値 (00) があります。入力文字列のタイムゾーン値は無視されます。

デフォルトでは、ユーザーテーブルと Amazon Redshift システムテーブルの両方で、TIMESTAMP 値は UTC です。

## TIMESTAMPTZ
<a name="r_Datetime_types-timestamptz"></a>

TIMESTAMPTZ は、TIMESTAMP WITH TIME ZONE のエイリアスです。

日付、時刻、タイムゾーンを含む完全なタイムスタンプ値を入力するには TIMESTAMPTZ データ型を使用します。入力値にタイムゾーンが含まれる場合、Amazon Redshift はタイムゾーンを使用して値を UTC に変換し、UTC 値を保存します。

サポートされるタイムゾーン名のリストを表示するには、次のコマンドを実行します。

```
select pg_timezone_names();
```

 サポートされるタイムゾーン省略形のリストを表示するには、次のコマンドを実行します。

```
select pg_timezone_abbrevs();
```

タイムゾーンの最新情報については、「[IANA Time Zone Database](https://www.iana.org/time-zones)」も参照してください。

次の表に、タイムゾーン形式の例を示します。


| 形式 | 例 | 
| --- | --- | 
|  dd mon hh:mi:ss yyyy tz  |  17 Dec 07:37:16 1997 PST   | 
|  mm/dd/yyyy hh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 PST  | 
|  mm/dd/yyyy hh:mi:ss.ss tz  |  12/17/1997 07:37:16.00 US/Pacific  | 
|  yyyy-mm-dd hh:mi:ss\$1/-tz  |  1997-12-17 07:37:16-08   | 
| dd.mm.yyyy hh:mi:ss tz |  17.12.1997 07:37:16.00 PST  | 

TIMESTAMPTZ 列に値を保存する場合、小数秒の精度については最大で 6 桁まで保存されます。

TIMESTAMPTZ 列に日付または部分的なタイムスタンプを持つ日付を挿入すると、値は暗黙的に完全なタイムスタンプ値に変換されます。この完全なタイムスタンプ値には、時間、分、および秒が抜けている場合のデフォルト値 (00) があります。

TIMESTAMPTZ 値は、ユーザーテーブルでは UTC です。

# 日時型を使用する例
<a name="r_Examples_with_datetime_types"></a>

以下に、Amazon Redshift でサポートされている日時タイプを操作する例を示します。

## 日付の例
<a name="r_Examples_with_datetime_types-date-examples"></a>

次の例では、形式が異なる複数の日付を挿入して、出力を表示します。

```
create table datetable (start_date date, end_date date);
```

```
insert into datetable values ('2008-06-01','2008-12-31');

insert into datetable values ('Jun 1,2008','20081231');
```

```
select * from datetable order by 1;

start_date |  end_date
-----------------------
2008-06-01 | 2008-12-31
2008-06-01 | 2008-12-31
```

DATE 列にタイムスタンプ値を挿入した場合、時刻部分が無視され、日付のみロードされます。

## 時間の例
<a name="r_Examples_with_datetime_types-time-examples"></a>

次の例では、形式の異なる複数の TIME および TIMETZ 値を挿入して、出力を表示します。

```
create table timetable (start_time time, end_time timetz);
```

```
insert into timetable values ('19:11:19','20:41:19 UTC');
insert into timetable values ('191119', '204119 UTC');
```

```
select * from timetable order by 1;
start_time |  end_time
------------------------
 19:11:19  | 20:41:19+00
 19:11:19  | 20:41:19+00
```

## タイムスタンプの例
<a name="r_Examples_with_datetime_types-timestamp-examples"></a>

日付を TIMESTAMP 列または TIMESTAMPTZ 列に挿入すると、時刻はデフォルトでは午前 0 時になります。例えば、リテラル `20081231` を挿入すると、格納される値は `2008-12-31 00:00:00` です。

現在のセッションのタイムゾーンを変更するには、[SET](r_SET.md) コマンドを使用して [timezone](r_timezone_config.md) 設定パラメータを設定します。

次の例では、形式の異なる複数のタイムスタンプを挿入して、結果のテーブルを表示します。

```
create table tstamp(timeofday timestamp, timeofdaytz timestamptz);

insert into tstamp values('Jun 1,2008  09:59:59', 'Jun 1,2008 09:59:59 EST' );
insert into tstamp values('Dec 31,2008 18:20','Dec 31,2008 18:20');
insert into tstamp values('Jun 1,2008  09:59:59 EST', 'Jun 1,2008 09:59:59');

SELECT * FROM tstamp;

+---------------------+------------------------+
|      timeofday      |      timeofdaytz       |
+---------------------+------------------------+
| 2008-06-01 09:59:59 | 2008-06-01 14:59:59+00 |
| 2008-12-31 18:20:00 | 2008-12-31 18:20:00+00 |
| 2008-06-01 09:59:59 | 2008-06-01 09:59:59+00 |
+---------------------+------------------------+
```

# 日付、時刻、およびタイムスタンプのリテラル
<a name="r_Date_and_time_literals"></a>

Amazon Redshift によってサポートされている日付、時刻、およびタイムスタンプリテラルを使用する際に従うべきルールは次のとおりです。

## 日付
<a name="r_Date_and_time_literals-dates"></a>

次に示す入力日付はすべて、Amazon Redshift テーブルにロードできる DATE データ型の有効な日付リテラル値の例です。デフォルトの `MDY DateStyle` モードが有効であると想定されます。このモードでは、`1999-01-08` や `01/02/00` などの文字列で月の値が日の値より前にあることを意味します。

**注記**  
日付またはタイムスタンプのリテラルをテーブルにロードするには、それらのリテラルを引用符で囲む必要があります。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

## Times
<a name="r_Date_and_time_literals-times"></a>

次に示す入力時間はすべて、Amazon Redshift テーブルにロードできる TIME データ型および TIMETZ データ型の有効な時刻リテラル値の例です。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

## タイムスタンプ
<a name="r_Date_and_time_literals-timestamps"></a>

次に示す入力タイムスタンプはすべて、Amazon Redshift テーブルにロードできる TIMESTAMP データ型および TIMESTAMPTZ データ型の有効な時刻リテラル値の例です。有効な日付リテラルはすべて、以下の時刻リテラルと結合することができます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

## 特殊な日時値
<a name="r_Date_and_time_literals-special-datetime-values"></a>

次に示す特殊な値は、日時リテラルとして、および日付関数に渡す引数として使用できます。このような特殊な値は、一重引用符を必要とし、クエリの処理時に正規のタイムスタンプ値に変換されます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Date_and_time_literals.html)

次の例では、`now` および `today` が DATEADD 関数でどのように動作するかを示しています。

```
select dateadd(day,1,'today');

date_add
---------------------
2009-11-17 00:00:00
(1 row)

select dateadd(day,1,'now');

date_add
----------------------------
2009-11-17 10:45:32.021394
(1 row)
```

# 間隔のデータ型とリテラル
<a name="r_interval_data_types"></a>

間隔のデータ型を使用して、`seconds`、`minutes`、`hours`、`days`、`months`、`years` などの単位で期間を保存できます。間隔のデータ型とリテラルは、日付とタイムスタンプへの間隔の追加、間隔の合計、日付またはタイムスタンプからの間隔の減算など、日時の計算に使用できます。間隔リテラルは、テーブル内の間隔データ型列への入力値として使用できます。

## 間隔データ型の構文
<a name="r_interval_data_types-syntax"></a>

期間を年数と月数で保存する間隔データ型を指定するには:

```
INTERVAL year_to_month_qualifier
```

期間を日数、時間数、分数、および秒数で保存する間隔データ型を指定するには:

```
INTERVAL day_to_second_qualifier [ (fractional_precision) ]
```

## 間隔リテラルの構文
<a name="r_interval_data_types-syntax-literal"></a>

間隔リテラルを指定して、期間を年数と月数で定義するには:

```
INTERVAL quoted-string year_to_month_qualifier
```

間隔リテラルを指定して、期間を日数、時間数、分数、および秒数で定義するには:

```
INTERVAL quoted-string day_to_second_qualifier [ (fractional_precision) ]
```

## 引数
<a name="r_interval_data_types-arguments"></a>

 *quoted-string*   
数量と日時単位を入力文字列として指定する正または負の数値を指定します。quoted-string に数値のみが含まれている場合、Amazon Redshift は year\$1to\$1month\$1qualifier または day\$1to\$1second\$1qualifier から単位を決定します。******例えば、`'23' MONTH` は `1 year 11 months`、`'-2' DAY` は `-2 days 0 hours 0 minutes 0.0 seconds`、`'1-2' MONTH` は `1 year 2 months`、`'13 day 1 hour 1 minute 1.123 seconds' SECOND` は `13 days 1 hour 1 minute 1.123 seconds` を表します。間隔の出力形式の詳細については、「[間隔スタイル](#r_interval_data_types-interval-styles)」を参照してください。

 *year\$1to\$1month\$1qualifier*   
間隔の範囲を指定します。修飾子を使用して、修飾子よりも小さい時間単位で間隔を作成すると、Amazon Redshift ではそれより小さい間隔の単位を切り捨てて破棄します。year\$1to\$1month\$1qualifier の有効な値は次のとおりです。**  
+ `YEAR`
+ `MONTH`
+ `YEAR TO MONTH`

 *day\$1to\$1second\$1qualifier*   
間隔の範囲を指定します。修飾子を使用して、修飾子よりも小さい時間単位で間隔を作成すると、Amazon Redshift ではそれより小さい間隔の単位を切り捨てて破棄します。day\$1to\$1second\$1qualifier の有効な値は次のとおりです。**  
+ `DAY`
+ `HOUR`
+ `MINUTE`
+ `SECOND`
+ `DAY TO HOUR`
+ `DAY TO MINUTE`
+ `DAY TO SECOND`
+ `HOUR TO MINUTE`
+ `HOUR TO SECOND`
+ `MINUTE TO SECOND`
INTERVAL リテラルの出力は、指定された最小の INTERVAL コンポーネントで切り捨てられます。例えば、MINUTE 修飾子を使用すると、Amazon Redshift は MINUTE より小さい時間単位を破棄します。  

```
select INTERVAL '1 day 1 hour 1 minute 1.123 seconds' MINUTE
```
結果の値は `'1 day 01:01:00'` で切り捨てられます。

 *Fractional\$1precision*   
間隔で使用できる小数点以下の桁数を指定するオプションのパラメータ。fractional\$1precision 引数は、間隔に SECOND が含まれている場合にのみ指定する必要があります。**例えば、`SECOND(3)` は、1.234 秒など、小数点以下 3 桁のみを許可する間隔を作成します。小数点以下の最大桁数は 6 です。

セッション設定 `interval_forbid_composite_literals` は、YEAR TO MONTH と DAY TO SECOND の両方のパートを使用して間隔を指定している場合に、エラーを返すかどうかを決定します。詳細については、「[interval\$1forbid\$1composite\$1literals](r_interval_forbid_composite_literals.md)」を参照してください。

## 区間演算
<a name="r_interval_data_types-arithmetic"></a>

間隔の値を他の日時値と一緒に使用して算術演算を実行できます。次の表は、使用可能な演算と、各演算の結果であるデータ型を示しています。

**注記**  
 `date` と `timestamp` の両方の結果を生成できる演算は、式に関連する最小時間単位に基づいて行われます。例えば、`interval` を `date` に追加すると、YEAR TO MONTH 間隔の場合、結果は `date` になり、DAY TO SECOND 間隔の場合、結果はタイムスタンプになります。

最初のオペランドが `interval` の演算は、指定された 2 番目のオペランドに対して次の結果を生成します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_interval_data_types.html)

最初のオペランドが `date` の演算は、指定された 2 番目のオペランドに対して次の結果を生成します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_interval_data_types.html)

最初のオペランドが `timestamp` の演算は、指定された 2 番目のオペランドに対して次の結果を生成します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_interval_data_types.html)

## 間隔スタイル
<a name="r_interval_data_types-interval-styles"></a>

SQL [SET](r_SET.md) コマンドを使用すると、間隔値の出力表示形式を変更できます。SQL で間隔データ型を使用する場合は、テキストにキャストして、予想される間隔スタイル (`YEAR TO MONTH::text` など) を確認します。`IntervalStyle` 値を設定するために使用できる値は、次のとおりです。
+ `postgres` — PostgreSQL スタイルに従います。これがデフォルトです。
+ `postgres_verbose` — PostgreSQL の詳細スタイルに従います。
+ `sql_standard` — SQL 標準間隔リテラルスタイルに従います。

次のコマンドは、間隔スタイルを `sql_standard` に設定します。

```
SET IntervalStyle to 'sql_standard';
```

**postgres 出力形式**

`postgres` 間隔スタイルの出力形式は、次のとおりです。各数値は負の値にすることができます。

```
'<numeric> <unit> [, <numeric> <unit> ...]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
---------------
1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
------------------
1 day 02:03:04.5678
```

**postgres\$1verbose 出力形式**

postgres\$1verbose 構文は postgres と似ていますが、postgres\$1verbose 出力には時間の単位も含まれています。

```
'[@] <numeric> <unit> [, <numeric> <unit> ...] [direction]'
```

```
select INTERVAL '1-2' YEAR TO MONTH::text 

varchar
-----------------
@ 1 year 2 mons
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text

varchar
---------------------------
@ 1 day 2 hours 3 mins 4.56 secs
```

**sql\$1standard 出力形式**

間隔値 year to month は次のようにフォーマットされます。間隔の前にマイナス記号を指定すると、間隔が負の値になり、間隔全体に適用されます。

```
'[-]yy-mm'
```

間隔値 day to second は次のようにフォーマットされます。

```
'[-]dd hh:mm:ss.ffffff'
```

```
SELECT INTERVAL '1-2' YEAR TO MONTH::text 
  
varchar   
-------
1-2
```

```
select INTERVAL '1 2:3:4.5678' DAY TO SECOND::text 

varchar
---------------
1 2:03:04.5678
```

## 間隔データ型の例
<a name="r_interval_data_types-examples"></a>

以下の例は、テーブルでの INTERVAL データ型の使用方法を示しています。

```
create table sample_intervals (y2m interval month, h2m interval hour to minute);
insert into sample_intervals values (interval '20' month, interval '2 days 1:1:1.123456' day to second);
select y2m::text, h2m::text from sample_intervals;


      y2m      |       h2m      
---------------+-----------------
 1 year 8 mons | 2 days 01:01:00
```

```
update sample_intervals set y2m = interval '2' year where y2m = interval '1-8' year to month;
select * from sample_intervals;

   y2m   |       h2m       
---------+-----------------
 2 years | 2 days 01:01:00
```

```
delete from sample_intervals where h2m = interval '2 1:1:0' day to second;
select * from sample_intervals;

 y2m | h2m 
-----+-----
```

## 間隔リテラルの例
<a name="r_interval_data_types_literals-examples"></a>

以下の例は、間隔スタイルを `postgres` に設定して実行します。

次の例は、1 年の INTERVAL リテラルを作成する方法を示しています。

```
select INTERVAL '1' YEAR 

intervaly2m
---------------
1 years 0 mons
```

修飾子を超える quoted-string を指定すると、残りの時間単位が間隔から切り捨てられます。**次の例では、13 か月の間隔は 1 年と 1 か月になりますが、YEAR 修飾子により残りの 1 か月が除外されます。

```
select INTERVAL '13 months' YEAR

intervaly2m
---------------
1 years 0 mons
```

間隔文字列を下回る修飾子を使用すると、残った単位が含まれます。

```
select INTERVAL '13 months' MONTH

intervaly2m
---------------
1 years 1 mons
```

間隔で精度を指定すると、小数桁数が指定された精度まで切り捨てられます。

```
select INTERVAL '1.234567' SECOND (3)

intervald2s
--------------------------------
0 days 0 hours 0 mins 1.235 secs
```

精度を指定しない場合は、Amazon Redshift では最大精度 6 が使用されます。

```
select INTERVAL '1.23456789' SECOND

intervald2s
-----------------------------------
0 days 0 hours 0 mins 1.234567 secs
```

次の例では、範囲指定した間隔を作成する方法を示します。

```
select INTERVAL '2:2' MINUTE TO SECOND

intervald2s
------------------------------
0 days 0 hours 2 mins 2.0 secs
```

修飾子は、指定する単位を指定します。例えば、次の例では前の例と同じ quoted-string (2:2) を使用していますが、Amazon Redshift では、修飾子に基づいて異なる時間単位を使用していると認識します。**

```
select INTERVAL '2:2' HOUR TO MINUTE

intervald2s
------------------------------
0 days 2 hours 2 mins 0.0 secs
```

各単位の略語と複数形もサポートされています。例えば、`5s`、`5 second`、`5 seconds` は同じ間隔です。サポートされている単位は、年、月、日、時間、分、秒です。

```
select INTERVAL '5s' SECOND

intervald2s
------------------------------
0 days 0 hours 0 mins 5.0 secs
```

```
select INTERVAL '5 HOURS' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

```
select INTERVAL '5 h' HOUR

intervald2s
------------------------------
0 days 5 hours 0 mins 0.0 secs
```

# 修飾子構文を使用しない間隔リテラルの例
<a name="r_interval_literals"></a>

**注記**  
以下の例は、`YEAR TO MONTH` または `DAY TO SECOND` 修飾子を使用しない間隔リテラルを示しています。修飾子を使用した間隔リテラルの推奨例については、「[間隔のデータ型とリテラル](r_interval_data_types.md)」を参照してください。

`12 hours` または `6 months` など、特定の期間を識別するには、間隔リテラルを使用します。これらの間隔リテラルは、日時式を必要とする条件および計算の中で使用できます。

 間隔リテラルは、INTERVAL キーワードに数量およびサポートされている日付パートを組み合わせて表現します。例えば、`INTERVAL '7 days'` または `INTERVAL '59 minutes'` のようになります。複数の数量および単位をつなぎ合わせることで、より正確な間隔を作成できます (例えば、`INTERVAL '7 days, 3 hours, 59 minutes'`)。各単位の省略形および複数形もサポートされています。例えば、`5 s`、`5 second`、および `5 seconds` は等価な間隔です。

日付部分を指定しない場合、間隔値は秒数を示します。数量値は小数として指定できます (例えば、`0.5 days`)。

次の例に、さまざまな間隔値を使用した一連の計算を示します。

以下は、指定された日付に 1 秒を追加します。

```
select caldate + interval '1 second' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:00:01
(1 row)
```

以下は、指定された日付に 1 分を追加します。

```
select caldate + interval '1 minute' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 00:01:00
(1 row)
```

以下では、指定された日付に 3 時間と 35 分を追加します。

```
select caldate + interval '3 hours, 35 minutes' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 03:35:00
(1 row)
```

以下は、指定された日付に 52 週を追加します。

```
select caldate + interval '52 weeks' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-12-30 00:00:00
(1 row)
```

以下では、指定された日付に 1 週、1 時間、1 分、および 1 秒を追加します。

```
select caldate + interval '1w, 1h, 1m, 1s' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2009-01-07 01:01:01
(1 row)
```

以下は、指定された日付に 12 時間 (半日) を追加します。

```
select caldate + interval '0.5 days' as dateplus from date
where caldate='12-31-2008';
dateplus
---------------------
2008-12-31 12:00:00
(1 row)
```

以下では、2023 年 2 月 15 日から 4 か月を引いて、結果が 2022 年 10 月 15 日になります。

```
select date '2023-02-15' - interval '4 months';

?column?
---------------------
2022-10-15 00:00:00
```

以下では、2023 年 3 月 31 日から 4 か月を引いて、結果が 2022 年 11 月 30 日になります。計算では、1 か月の日数を考慮します。

```
select date '2023-03-31' - interval '4 months';

?column?
---------------------
2022-11-30 00:00:00
```

# ブール型
<a name="r_Boolean_type"></a>

シングルバイト列に true 値および false 値を格納するには、BOOLEAN データ型を使用します。次の表に、ブール値の取り得る 3 つの状態と、各状態をもたらすリテラル値について説明します。入力文字列に関係なく、ブール列では、true の場合は「t」を、false の場合は「f」を格納および出力します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Boolean_type.html)

IS 比較を使用すると、ブール値を WHERE 句の述語としてのみチェックできます。SELECT リストのブール値に対して IS 比較を使用することはできません。

## 例
<a name="r_Boolean_type-examples"></a>

BOOLEAN 列を使用すれば、CUSTOMER テーブル内の顧客ごとに「アクティブ/非アクティブ」状態を格納できます。

```
create table customer(
custid int,
active_flag boolean default true);
```

```
insert into customer values(100, default);
```

```
select * from customer;
custid | active_flag
-------+--------------
   100 | t
```

CREATE TABLE ステートメントにデフォルト値 (`true` または `false`) が指定されていない場合は、デフォルト値を挿入しても Null が挿入されます。

この例では、クエリによって、スポーツは好きだが映画館は好きでないユーザーが USERS テーブルから選択されます。

```
select firstname, lastname, likesports, liketheatre
from users
where likesports is true and liketheatre is false
order by userid limit 10;

firstname |  lastname  | likesports | liketheatre
----------+------------+------------+-------------
Lars      | Ratliff    | t          | f
Mufutau   | Watkins    | t          | f
Scarlett  | Mayer      | t          | f
Shafira   | Glenn      | t          | f
Winifred  | Cherry     | t          | f
Chase     | Lamb       | t          | f
Liberty   | Ellison    | t          | f
Aladdin   | Haney      | t          | f
Tashya    | Michael    | t          | f
Lucian    | Montgomery | t          | f
(10 rows)
```

次の例では、ロックミュージックを好むかどうか不明なユーザーが USERS テーブルから選択されます。

```
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;

firstname | lastname | likerock
----------+----------+----------
Rafael    | Taylor   |
Vladimir  | Humphrey |
Barry     | Roy      |
Tamekah   | Juarez   |
Mufutau   | Watkins  |
Naida     | Calderon |
Anika     | Huff     |
Bruce     | Beck     |
Mallory   | Farrell  |
Scarlett  | Mayer    |
(10 rows)
```

次の例では、SELECT リストで IS 比較を使用しているため、エラーが返されます。

```
select firstname, lastname, likerock is true as "check"
from users
order by userid limit 10;

[Amazon](500310) Invalid operation: Not implemented
```

次の例は、IS 比較ではなく SELECT リストで等号比較 ( = ) を使用しているため成功します。

```
select firstname, lastname, likerock = true as "check"
from users
order by userid limit 10;

firstname | lastname  | check
----------+-----------+------
Rafael    | Taylor    |      
Vladimir  | Humphrey  |      
Lars      | Ratliff   | true 
Barry     | Roy       |      
Reagan    | Hodge     | true 
Victor    | Hernandez | true 
Tamekah   | Juarez    |      
Colton    | Roy       | false
Mufutau   | Watkins   |      
Naida     | Calderon  |
```

# HLLSKETCH タイプ
<a name="r_HLLSKTECH_type"></a>

HyperLogLog スケッチには HLLSKETCH データ型を使用します。Amazon Redshift は、スパースまたはデンスの HyperLogLog スケッチ表現をサポートしています。スケッチはスパースとして開始され、使用するメモリフットプリントを最小化するために、デンス形式がより効率的になるとデンスに切り替わります。

 Amazon Redshift は、次の JSON 形式でスケッチをインポート、エクスポート、または印刷するときに、スパースの HyperLogLog スケッチを自動的に移行します。

```
{"logm":15,"sparse":{"indices":[4878,9559,14523],"values":[1,2,1]}}
```

Amazon Redshift は、Base64 形式の文字列表現を使用して、デンスの HyperLogLog スケッチを表します。

Amazon Redshift は、デンスの HyperLogLog スケッチを表現するために、Base64 形式の次の文字列表現を使用します。

```
"ABAABA..."
```

raw 圧縮で使用する場合、HLLSKETCH オブジェクトの最大サイズは 24,580 バイトです。

# SUPER タイプ
<a name="r_SUPER_type"></a>

SUPER データ型を使用して、半構造化データまたはドキュメントを値として保存します。Amazon Redshift は VARCHAR を使用してこのような値を保存できますが、代わりに SUPER データ型を使用することをお勧めします。

半構造化データは、SQL データベースで使用されるリレーショナルデータモデルの厳密な表形式の構造に準拠していません。これには、データ内の個別のエンティティを参照するタグが含まれます。配列やネストされた構造体、JSON などのシリアル化形式に関連付けられているその他の複雑な構造体などの複雑な値を含めることができます。SUPER データ型は、Amazon Redshift の他のスカラー型をすべて含む一連のスキーマレス配列と構造体の値です。

SUPER データ型は、SUPER オブジェクトごとに最大 16 MB のデータをサポートします。SUPER データ型の詳細 (テーブルへの実装例を含む) については、「[Amazon Redshift の半構造化データ](super-overview.md)」を参照してください。

Amazon Redshift は、COPY コマンドを使用して次の半構造化データ形式を取り込むための組み込みサポートを提供します。
+  JSON 
+  配列 
+  TEXT 
+  CSV 

1 MB を超える SUPER オブジェクトは、以下のファイル形式からのみ取り込むことができます。
+  Parquet 
+  JSON 
+  TEXT 
+  CSV 

SUPER データ型には、以下のプロパティがあります。
+ Amazon Redshift のスカラー値:
  + null
  + ブール型
  + smallint、integer、bigint、decimal、または浮動小数点 (float4 や float8) などの数値
  + varchar や char などの文字列値
+ 複雑な値:
  + スカラーまたは複素数を含む値の配列
  + タプルまたはオブジェクトとも呼ばれる構造体。属性名と値 (スカラーまたは複合体) のマップです。

2 種類の複素数値のいずれにも、規則性の制限なしに、独自のスカラーまたは複素数値が含まれています。

SUPER データ型のデフォルトの圧縮エンコードは ZSTD です。圧縮エンコードに関する詳細は、「[圧縮エンコード](c_Compression_encodings.md)」を参照してください。

SUPER データ型は、スキーマレス形式の半構造化データの永続性をサポートします。階層データモデルは変更できますが、データの古いバージョンは同じ SUPER 列に共存することができます。

Amazon Redshift は PartiQL を使用して配列と構造体へのナビゲーションを有効にします。また、Amazon Redshift は PartiQL 構文を使用しながら SUPER 配列を反復処理します。詳細については、「[PartiQL – Amazon Redshift用の SQL 互換クエリ言語](super-partiql.md)」を参照してください。

Amazon Redshift では、動的型付けを使用して、クエリで使用する前にデータ型を宣言することなく、スキーマレスの SUPER データを処理します。詳細については、「[動的型付け](query-super.md#dynamic-typing-lax-processing)」を参照してください。

SUPER 型の列のパス上のスカラー値に動的データマスキングポリシーを適用できます。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。動的データマスキングを SUPER データ型と使用する方法の詳細については、「[SUPER データタイプパスでの動的データマスキングの使用](t_ddm-super.md)」を参照してください。

SUPER データを使用する場合は、`r_enable_case_sensitive_super_attribute` 設定オプションを true に設定することをお勧めします。詳細については、「[enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md)」を参照してください。

# VARBYTE 型
<a name="r_VARBYTE_type"></a>

一定の制限を持つ可変長のバイナリ値を格納するには、VARBYTE 列、VARBINARY 列または BINARY VARYING 列を使用します。

```
varbyte [ (n) ]
```

最大バイト数 (*n*) の範囲は 1～16,777,216 です。デフォルト値は 64,000 です。

以下に、VARBYTE データ型を使用する場合の例をいくつか示します。
+ VARBYTE 列でのテーブルの結合。
+ VARBYTE 列を含むマテリアライズドビューの作成。VARBYTE 列を含むマテリアライズド・ビューでは、増分更新がサポートされます。ただし、VARBYTE 列の COUNT、MIN、MAX および GROUP BY 以外の集計関数は、増分更新をサポートしません。

すべてのバイトが表示可能な文字であることを保証するために、Amazon Redshift は 16 進数形式を使用して VARBYTE 値を出力します。例えば、次の SQL では 16 進数の文字列 `6162` をバイナリ値に変換しています。戻り値がバイナリ値であっても、結果は 16 進数の `6162` で出力されます。

```
select from_hex('6162');
                      
 from_hex
----------
 6162
```

Amazon Redshift では、VARBYTE と以下に示すデータ型間でのキャストがサポートされています。
+ CHAR
+ VARCHAR
+ SMALLINT
+ INTEGER
+ BIGINT

CHAR と VARCHAR をキャストする場合は、UTF-8 形式が使用されます。UTF-8 形式の詳細については、「[TO\$1VARBYTE](r_TO_VARBYTE.md)」を参照してください。SMALLINT、INTEGER、BIGINT からキャストする場合、元のデータ型のバイト数は維持されます。つまり、SMALLINT の場合は 2 バイト、INTEGER の場合は 4 バイト、BIGINT の場合は 8 バイトとなります。

次の SQL ステートメントは、VARCHAR 文字列を VARBYTE にキャストします。戻り値がバイナリ値であっても、結果は 16 進数の `616263` で出力されます。

```
select 'abc'::varbyte;
                      
 varbyte
---------
 616263
```

次の SQL ステートメントは、列内の CHAR 値を VARBYTE にキャストします。次の使用例では、CHAR (10) 列 (c) を持つテーブルを作成し、長さが 10 より短い文字値を挿入します。出力されるキャストでは、スペース文字 (hex'20') を使用して、定義された列サイズに結果がパディングされます。戻り値がバイナリ値の場合でも、結果は 16 進数で表示されます。

```
create table t (c char(10));
insert into t values ('aa'), ('abc');                 
select c::varbyte from t;
          c
----------------------
 61612020202020202020
 61626320202020202020
```

次の SQL ステートメントは、SMALLINT 文字列を VARBYTE にキャストします。戻り値がバイナリ値の場合でも、この結果は 16 進数 `0005` (2 バイトつまり 4 桁の 16 進数文字列) として表示されます。

```
select 5::smallint::varbyte;
                  
 varbyte
---------
 0005
```

次の SQL ステートメントは、INTEGER を VARBYTE にキャストします。戻り値がバイナリ値の場合でも、この結果は 16 進数 `00000005` (4 バイトつまり 8 桁の16進数文字列) として出力されます。

```
select 5::int::varbyte;
                  
 varbyte
----------
 00000005
```

次の SQL ステートメントは、BIGINT を VARBYTE にキャストします。戻り値がバイナリ値の場合でも、この結果は 16 進数 `0000000000000005` (8 バイトつまり 16 桁の 16 進数文字列) として出力されます。

```
select 5::bigint::varbyte;
                  
     varbyte
------------------
 0000000000000005
```

VARBYTE データ型をサポートする Amazon Redshift の各機能は以下のとおりです。
+ [VARBYTE 演算子](r_VARBYTE_OPERATORS.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [LENGTH 関数](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [SUBSTRING 関数](r_SUBSTRING.md)
+ [FROM\$1HEX](r_FROM_HEX.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [FROM\$1VARBYTE](r_FROM_VARBYTE.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [VARBYTE データ型の列のロード](copy-usage-varbyte.md)
+ [VARBYTE データ型の列のアップロード](r_UNLOAD.md#unload-usage-notes)

## Amazon Redshift で VARBYTE データ型を使用する際の制約事項
<a name="varbyte-limitations"></a>

Amazon Redshift で VARBYTE データを使用する際の制約事項を以下に示します。
+ Amazon Redshift Spectrum は、Parquet ファイルと ORC ファイルに対してのみ VARBYTE データ型をサポートします。
+ Amazon Redshift のクエリエディタと Amazon Redshift クエリエディタ v2 は、現段階で VARBYTE データ型を完全にはサポートしていません。したがって、VARBYTE 表現を処理する際には、他の SQL クライアントを使用してください。

  クエリエディタを使用する際の回避策として、データの長さが 16,000,000 バイト 以下で、かつコンテンツが有効な UTF-8 で構成されている場合は、VARBYTE 値を VARCHAR にキャストできます。次にこの例を示します。

  ```
  select to_varbyte('6162', 'hex')::varchar;
  ```
+ Python または Lambda ユーザー定義関数 (UDF) では VARBYTE データ型を使用することはできません。
+ VARBYTE 列から HLLSKETCH 列を作成したり、VARBYTE 列で APPROXIMATE COUNT DISTINCT を使用したりすることはできません。
+ 1 MB を超える VARBYTE 値は、以下のファイル形式からのみ取り込むことができます。
  + Parquet
  + テキスト
  + カンマ区切り値 (CSV)

## 型の互換性と変換
<a name="r_Type_conversion"></a>

Amazon Redshift における型変換ルールおよびデータ型の互換性についての説明を以下に示します。

### 互換性
<a name="r_Type_conversion-compatibility"></a>

 データ型のマッチング、リテラル値および定数のデータ型とのマッチングは、以下のようなさまざまなデータベース操作で発生します。
+ テーブルにおけるデータ操作言語 (DML) オペレーション 
+ UNION、INTERSECT、および EXCEPT のクエリ 
+ CASE 式 
+ LIKE や IN など、述語の評価 
+ データの比較または抽出を行う SQL 関数の評価 
+ 算術演算子との比較 

これらの操作の結果は、型変換ルールおよびデータ型の互換性に左右されます。*互換性*は、特定の値と特定のデータ型との 1 対 1 のマッチングが必ずしも必要でないことを暗示しています。一部のデータ型は*互換性*があるため、暗黙変換、または*強制*が可能です (詳細については、「[暗黙的な変換型](#implicit-conversion-types)」を参照)。データ型に互換性がない場合は、明示変換関数を使用することにより、値をあるデータ型から別のデータ型に変換することが可能な場合があります。

### 互換性と変換に関する全般的なルール
<a name="r_Type_conversion-general-compatibility-and-conversion-rules"></a>

次に示す互換性と変換に関するルールに注意してください。
+ 一般に、同じデータ型のカテゴリに属するデータ型 (各種の数値データ型) は互換性があり、暗黙的に変換することができます。

  例えば、暗黙的な変換では、10 進値を整数列に変換できます。10 進値は整数に四捨五入されます。または、`2008` のような数値を日付から抽出し、その値を整数列に挿入することができます。
+ 数値データ型では、範囲外の値を挿入しようとしたときに発生するオーバーフロー条件を適用します。例えば、精度が 5 桁の 10 進値は、4 桁の精度で定義された 10 進列に適合しません。整数または 10 進値の整数部は決して切り捨てられません。しかし、10 進値の小数部は、適宜、切り上げまたは切り捨てることができます。ただし、テーブルから選択された値の明示的なキャストの結果は丸められません。
+ 各種のキャラクタ文字列型には互換性があります。シングルバイトデータを含む VARCHAR 列の文字列と CHAR 列の文字列は互換性があり、暗黙的に変換することができます。マルチバイトデータを含む VARCHAR 文字列には互換性がありません。また、キャラクタ文字列については、文字列が適切なリテラル値であれば、日付、時間、タイムスタンプ、または数値に変換することができます。先頭のスペースまたは末尾のスペースはいずれも無視されます。逆に、日付、時間、タイムスタンプ、または数値は、固定長または可変長の文字列に変換することができます。
**注記**  
数値型にキャストするキャラクタ文字列には、数字の文字表現が含まれている必要があります。例えば、文字列 `'1.0'` または `'5.9'` を 10 進値にキャストすることはできますが、文字列 `'ABC'` はいずれの数値型にもキャストできません。
+ DECIMAL 値を文字列と比較すると、Amazon Redshift は文字列を DECIMAL 値に変換しようとします。他のすべての数値と文字列を比較する場合、数値は文字列に変換されます。反対方向の変換 (文字列を整数に変換する、DECIMAL 値を文字列に変換するなど) を実行するには、[CAST](r_CAST_function.md) などの明示的な関数を使用します。
+ 64 ビットの DECIMAL または NUMERIC の値を上位の精度に変換するには、CAST や CONVERT などの明示的な変換関数を使用する必要があります。
+ DATE または TIMESTAMP を TIMESTAMPTZ に変換する場合、または TIME を TIMETZ に変換する場合、タイムゾーンは現在のセッションのタイムゾーンに設定されます。セッションのタイムゾーンは、デフォルト値の UTC です。セッションのタイムゾーンを設定する方法の詳細については、「[timezone](r_timezone_config.md)」を参照してください。
+ 同様に、TIMESTAMPTZ は、現在のセッションのタイムゾーンに基づいて DATE、TIME または TIMESTAMP に変換されます。セッションのタイムゾーンは、デフォルト値の UTC です。変換後、タイムゾーン情報は削除されます。
+ 指定されたタイムゾーンを含むタイムスタンプを表す文字列は、現在のセッションタイムゾーン (デフォルトでは UTC) を使用して TIMESTAMPTZ に変換されます。同様に、タイムゾーンが指定されている時刻を表す文字列は、現在のセッションのタイムゾーン (デフォルトでは UTC) を使用して TIMETZ に変換されます。

### 暗黙的な変換型
<a name="implicit-conversion-types"></a>

暗黙的な変換には、2 つのタイプがあります。
+ 割り当てにおける暗黙的な変換 (INSERT コマンドまたは UPDATE コマンドで値を設定するなど)
+ 式における暗黙的な変換 (WHERE 句で比較を実行するなど)

次の表に、割り当てまたは式において暗黙的に変換できるデータ型を一覧表示します。これらの変換は、明示的な変換関数を使用して実行することもできます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_Supported_data_types.html)

**注記**  
TIMESTAMPTZ、TIMESTAMP、DATE、TIME、TIMETZ、またはキャラクタ文字列間の暗黙的な変換では、現在のセッションのタイムゾーンが使用されます。現在のタイムゾーンの設定については、「[timezone](r_timezone_config.md)」を参照してください。  
GEOMETRY および GEOGRAPHY データ型は、互いに変換する場合を除き、暗黙的に他のデータ型に変換することはできません。詳細については、「[CAST 関数](r_CAST_function.md)」を参照してください。  
VARBYTE データ型は、暗黙的に他のデータ型に変換できません。詳細については、「[CAST 関数](r_CAST_function.md)」を参照してください。

### SUPER データ型での動的型付けの使用
<a name="r_dynamic_typing_SUPER"></a>

Amazon Redshift では、動的型付けを使用して、クエリで使用する前にデータ型を宣言することなく、スキーマレスの SUPER データを処理します。動的型付けでは、明示的に Amazon Redshift 型にキャストすることなく、SUPER データ列に移動した結果が使用されます。SUPER データ型に対する動的型付けを使用する方法の詳細については、[動的型付け](query-super.md#dynamic-typing-lax-processing) を参照してください。

一部の例外を除いて、他のデータ型との間で SUPER 値をキャストすることができます。詳細については、「[制限事項](limitations-super.md)」を参照してください。

# 照合順序
<a name="c_collation_sequences"></a>

Amazon Redshift では、ロケール固有の照合順序またはユーザー定義の照合順序をサポートしていません。一般に、コンテキストでの述語の結果は、データ値のソートおよび比較に関するロケール固有のルールがないことに影響を受ける可能性があります。例えば、ORDER BY 式と、MIN、MAX、および RANK などの関数は、ロケール固有の文字を考慮に入れないデータのバイナリ UTF8 順序付けに基づいて結果を返します。

# 式
<a name="r_expressions"></a>

**Topics**
+ [単純式](#r_expressions-simple-expressions)
+ [複合式](r_compound_expressions.md)
+ [式リスト](r_expression_lists.md)
+ [スカラーサブクエリ](r_scalar_subqueries.md)
+ [関数式](r_function_expressions.md)

式は、1 つまたは複数の値、演算子、または関数 (評価して値を返す) の組み合わせです。式のデータ型は、一般にそのコンポーネントのデータ型と同じです。

## 単純式
<a name="r_expressions-simple-expressions"></a>

単純式は以下のいずれかとなります。
+ 定数またはリテラル値 
+ 列名または列参照 
+ スカラー関数 
+ 集計 (set) 関数 
+ ウィンドウ関数 
+ スカラーサブクエリ 

単純式には次のようなものがあります。

```
5+12
dateid
sales.qtysold * 100
sqrt (4)
max (qtysold)
(select max (qtysold) from sales)
```

# 複合式
<a name="r_compound_expressions"></a>

複合式は、一連の単純式が算術演算子によって結合されたものです。複合式内で使用される単純式は、数値を返す必要があります。

## 構文
<a name="r_compound_expressions-synopsis"></a>

```
expression 
operator 
expression | (compound_expression)
```

## 引数
<a name="r_compound_expressions-arguments"></a>

 *expression*   
評価して値を返す単純式。

 *operator*   
 複合演算式は、以下の演算子 (優先順位は列記順) を使用して作成することができます。  
+ ( ) : 評価の順番を制御する括弧
+ \$1 , - : 正および負の符号/演算子
+  ^ , \$1/ , \$1\$1/ : 指数、平方根、立方根
+ \$1 , / , % : 乗算演算子、除算演算子、モジュロ演算子
+  @ : 絶対値
+ \$1 , - : 加算および減算
+ & , \$1, \$1, \$1, <<, >> : AND、OR、NOT、左シフト、右シフトのビット演算子
+ \$1\$1: 連結

 *(compound\$1expression)*   
複合式は括弧を使用して入れ子にすることができます。

## 例
<a name="r_compound_expressions-examples"></a>

複合式の例を以下に示します。

```
('SMITH' || 'JONES')
sum(x) / y
sqrt(256) * avg(column)
rank() over (order by qtysold) / 100
(select (pricepaid - commission) from sales where dateid = 1882) * (qtysold)
```

また、一部の関数は、他の関数内に入れ子にすることができます。例えば、任意のスカラー関数を別のスカラー関数内に入れ子にすることができます。次の例では、一連の数の絶対値の合計を返します。

```
sum(abs(qtysold))
```

ウィンドウ関数は、集計関数または他のウィンドウ関数の引数として使用できません。次の式は、エラーを返すことになります。

```
avg(rank() over (order by qtysold))
```

ウィンドウ関数には入れ子にした集計関数を含めることができます。次の式は、値セットの合計を出し、ランク付けします。

```
rank() over (order by sum(qtysold))
```

# 式リスト
<a name="r_expression_lists"></a>

式リストは、式の組み合わせであり、メンバーシップおよび比較条件 (WHERE 句) 内、および GROUP BY 句内に指定できます。

## 構文
<a name="r_expression_lists-synopsis"></a>

```
expression , expression , ... | (expression, expression, ...)
```

## 引数
<a name="r_expression_lists-arguments"></a>

 *expression*   
評価して値を返す単純式。式リストには、1 つまたは複数のカンマ区切り式、または 1 つまたは複数のカンマ区切り式セットを含めることができます。複数の式セットがある場合、各セットはそれぞれ同じ個数の式を含み、括弧で区切る必要があります。各セット内の式の個数は、条件内の演算子の前にある式の個数と一致する必要があります。

## 例
<a name="r_expression_lists-examples"></a>

条件内の式リストの例を次に示します。

```
(1, 5, 10)
('THESE', 'ARE', 'STRINGS')
(('one', 'two', 'three'), ('blue', 'yellow', 'green'))
```

各セット内の式の個数は、ステートメントの最初の部分にある式の個数と一致する必要があります。

```
select * from venue
where (venuecity, venuestate) in (('Miami', 'FL'), ('Tampa', 'FL'))
order by venueid;

venueid |        venuename        | venuecity | venuestate | venueseats
---------+-------------------------+-----------+------------+------------
28 | American Airlines Arena | Miami     | FL         |          0
54 | St. Pete Times Forum    | Tampa     | FL         |          0
91 | Raymond James Stadium   | Tampa     | FL         |      65647
(3 rows)
```

# スカラーサブクエリ
<a name="r_scalar_subqueries"></a>

スカラーサブクエリとは、ちょうど 1 つの値 (1 つの列を含む 1 つの行) を返す、括弧で囲まれた通常の SELECT クエリです。実行されたこのクエリが返す値は、外部のクエリで使用されます。サブクエリが 0 行ゼロを返した場合、サブクエリ式の値は Null になります。サブクエリが複数の行を返した場合、Amazon Redshift はエラーを返します。サブクエリは親クエリからの変数を参照することができます。この変数はサブクエリの起動時中には定数として働きます。

式を呼び出すほとんどのステートメントでスカラーサブクエリを使用できます。次のような場合、スカラーサブクエリは有効な式でなくなります。
+ 式のデフォルト値として使用
+ GROUP BY 句および HAVING 句内に使用

## 例
<a name="r_scalar_subqueries-example"></a>

次のサブクエリは 2008 年の 1 年を通して販売 1 回あたりに支払われた平均料金を計算します。次に、外側のクエリが出力にその値を使用して、四半期ごとの販売 1 回あたりの平均料金と比較します。

```
select qtr, avg(pricepaid) as avg_saleprice_per_qtr,
(select avg(pricepaid)
from sales join date on sales.dateid=date.dateid
where year = 2008) as avg_saleprice_yearly
from sales join date on sales.dateid=date.dateid
where year = 2008
group by qtr
order by qtr;
qtr  | avg_saleprice_per_qtr | avg_saleprice_yearly
-------+-----------------------+----------------------
1     |                647.64 |               642.28
2     |                646.86 |               642.28
3     |                636.79 |               642.28
4     |                638.26 |               642.28
(4 rows)
```

# 関数式
<a name="r_function_expressions"></a>

## 構文
<a name="r_function_expressions-syntax"></a>

組み込み関数は式として使用できます。関数呼び出しの構文は、関数名の後に、その引数リストを括弧に囲んで配置する形式をとります。

```
function ( [expression [, expression...]] )
```

## 引数
<a name="r_function_expressions-arguments"></a>

 * 関数*   
組み込み関数。サンプルの関数については、「[SQL 関数リファレンス](c_SQL_functions.md)」を参照してください。

 *expression*   
関数によって予期されるデータ型およびパラメータの個数と一致する式。

## 例
<a name="r_function_expressions-examples"></a>

```
abs (variable)
select avg (qtysold + 3) from sales;
select dateadd (day,30,caldate) as plus30days from date;
```

# 条件
<a name="r_conditions"></a>

**Topics**
+ [構文](#r_conditions-synopsis)
+ [比較条件](r_comparison_condition.md)
+ [論理条件](r_logical_condition.md)
+ [パターンマッチング条件](pattern-matching-conditions.md)
+ [BETWEEN 範囲条件](r_range_condition.md)
+ [Null 条件](r_null_condition.md)
+ [EXISTS 条件](r_exists_condition.md)
+ [IN 条件](r_in_condition.md)

 条件は、評価結果として true、false、または unknown を返す、1 つまたは複数の式および論理演算子から成るステートメントです。条件は述語と呼ばれることもあります。

**注記**  
すべての文字列比較および LIKE パターンマッチングでは、大文字と小文字が区別されます。例えば、「A」と「a」は一致しません。ただし、ILIKE 述語を使用すれば、大文字小文字を区別しないパターンマッチングを行うことができます。

## 構文
<a name="r_conditions-synopsis"></a>

```
comparison_condition
| logical_condition
| range_condition
| pattern_matching_condition
| null_condition
| EXISTS_condition
| IN_condition
```

# 比較条件
<a name="r_comparison_condition"></a>

比較条件では、2 つの値の間の論理的な関係を指定します。比較条件はすべて、ブール型の戻り値を返す 2 項演算子です。Amazon Redshift では、次のテーブルで説明する比較演算子をサポートしています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_comparison_condition.html)

## 使用に関する注意事項
<a name="r_comparison_condition_usage_notes"></a>

= ANY \$1 SOME   
ANY と SOME のキーワードは *IN* 条件と同義であり、1 つまたは複数の値を返すサブクエリによって返された少なくとも 1 つの値に対して比較が true である場合に true を返します。Amazon Redshift は、ANY および SOME に対して = (等しい) 条件のみをサポートします。不等条件はサポートされていません。  
ALL 述語はサポートされていません。

<> ALL  
ALL キーワードは NOT IN ([IN 条件](r_in_condition.md) 条件を参照) と同義であり、サブクエリの結果に式が含まれていない場合に true を返します。Amazon Redshift は、ALL に対して <> または \$1= (等しくない) 条件のみをサポートします。他の比較条件はサポートされていません。

IS TRUE/FALSE/UNKNOWN  
ゼロ以外の値は TRUE と等しく、0 は FALSE に等しく、Null は UNKNOWN に等しくなります。「[ブール型HLLSKETCH タイプ](r_Boolean_type.md)」データ型を参照してください。

## 例
<a name="r_comparison_condition-examples"></a>

ここで、比較条件の簡単な例をいくつか示します。

```
a = 5
a < b
min(x) >= 5
qtysold = any (select qtysold from sales where dateid = 1882
```

次のクエリは、VENUE テーブルから席数が 10000 席を超える会場を返します。

```
select venueid, venuename, venueseats from venue
where venueseats > 10000
order by venueseats desc;

venueid |           venuename            | venueseats
---------+--------------------------------+------------
83 | FedExField                     |      91704
 6 | New York Giants Stadium        |      80242
79 | Arrowhead Stadium              |      79451
78 | INVESCO Field                  |      76125
69 | Dolphin Stadium                |      74916
67 | Ralph Wilson Stadium           |      73967
76 | Jacksonville Municipal Stadium |      73800
89 | Bank of America Stadium        |      73298
72 | Cleveland Browns Stadium       |      73200
86 | Lambeau Field                  |      72922
...
(57 rows)
```

この例では、USERS テーブルからロックミュージックが好きなユーザー (USERID) を選択します。

```
select userid from users where likerock = 't' order by 1 limit 5;

userid
--------
3
5
6
13
16
(5 rows)
```

この例では、USERS テーブルから、ロックミュージックを好きかどうか不明であるユーザー (USERID) を選択します。

```
select firstname, lastname, likerock
from users
where likerock is unknown
order by userid limit 10;

firstname | lastname | likerock
----------+----------+----------
Rafael    | Taylor   |
Vladimir  | Humphrey |
Barry     | Roy      |
Tamekah   | Juarez   |
Mufutau   | Watkins  |
Naida     | Calderon |
Anika     | Huff     |
Bruce     | Beck     |
Mallory   | Farrell  |
Scarlett  | Mayer    |
(10 rows
```

## TIME 列の例
<a name="r_comparison_condition-examples-time"></a>

次のテーブルの TIME\$1TEST の例には、3 つの値が挿入された列 TIME\$1VAL (タイプ TIME) があります。

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

次の例では、各 timetz\$1val から時間を抽出します。

```
select time_val from time_test where time_val < '3:00';
   time_val
---------------
 00:00:00.5550
 00:58:00
```

次の例では、2 つの時刻リテラルを比較します。

```
select time '18:25:33.123456' = time '18:25:33.123456';
 ?column?
----------
 t
```

## TIMETZ 列の例
<a name="r_comparison_condition-examples-timetz"></a>

次のテーブルの TIMETZ\$1TEST の例には、3 つの値が挿入された列 TIMETZ\$1VAL (タイプ TIMETZ) があります。

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

次の例では、`3:00:00 UTC` 未満の TIMETZ 値のみを選択します。値を UTC に変換した後に比較が行われます。

```
select timetz_val from timetz_test where timetz_val < '3:00:00 UTC';
                  
   timetz_val
---------------
 00:00:00.5550+00
```

次の例では、2 つの TIMETZ リテラルを比較します。タイムゾーンは、比較のために無視されます。

```
select time '18:25:33.123456 PST' < time '19:25:33.123456 EST';
                  
 ?column?
----------
 t
```

# 論理条件
<a name="r_logical_condition"></a>

論理条件は、2 つの条件の結果を結合して 1 つの結果を作成します。論理条件はすべて、ブール型の戻り値を返す 2 項演算子です。

## 構文
<a name="r_logical_condition-synopsis"></a>

```
expression
{ AND | OR }
expression
NOT expression
```

論理条件では 3 値ブール論理を使用します。この場合、Null 値は unknown 関係を表現します。次の表で論理条件の結果について説明します。ここで、`E1` と `E2` は式を表します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_logical_condition.html)

NOT 演算子は AND 演算子より先に評価され、AND 演算子は OR 演算子より先に評価されます。括弧が使用されている場合、評価のデフォルトの順序より優先されます。

### 例
<a name="r_logical_condition-examples"></a>

次の例では、USERS テーブルから、ラスベガスもスポーツも好きであるユーザーの USERID および USERNAME を返します。

```
select userid, username from users
where likevegas = 1 and likesports = 1
order by userid;

userid | username
--------+----------
1 | JSG99FHE
67 | TWU10MZT
87 | DUF19VXU
92 | HYP36WEQ
109 | FPL38HZK
120 | DMJ24GUZ
123 | QZR22XGQ
130 | ZQC82ALK
133 | LBN45WCH
144 | UCX04JKN
165 | TEY68OEB
169 | AYQ83HGO
184 | TVX65AZX
...
(2128 rows)
```

次の例では、USERS テーブルから、ラスベガスが好き、スポーツが好き、または両方が好きのいずれかに該当するユーザーの USERID と USERNAME を返します。このクエリでは、前の例の出力と、ラスベガスのみ好き、またはスポーツのみ好きなユーザーとをすべて返します。

```
select userid, username from users
where likevegas = 1 or likesports = 1
order by userid;

userid | username
--------+----------
1 | JSG99FHE
2 | PGL08LJI
3 | IFT66TXU
5 | AEB55QTM
6 | NDQ15VBM
9 | MSD36KVR
10 | WKW41AIW
13 | QTF33MCG
15 | OWU78MTR
16 | ZMG93CDD
22 | RHT62AGI
27 | KOY02CVE
29 | HUH27PKK
...
(18968 rows)
```

次のクエリでは、`OR` 条件を囲む括弧を使用して、マクベスが上演されたニューヨークあるいはカリフォルニアの劇場を探します。

```
select distinct venuename, venuecity
from venue join event on venue.venueid=event.venueid
where (venuestate = 'NY' or venuestate = 'CA') and eventname='Macbeth'
order by 2,1;

venuename                |   venuecity
----------------------------------------+---------------
Geffen Playhouse                       | Los Angeles
Greek Theatre                          | Los Angeles
Royce Hall                             | Los Angeles
American Airlines Theatre              | New York City
August Wilson Theatre                  | New York City
Belasco Theatre                        | New York City
Bernard B. Jacobs Theatre              | New York City
...
```

この例の括弧を削除すると、クエリの論理および結果が変更されます。

次の例では、`NOT` 演算子を使用します。

```
select * from category
where not catid=1
order by 1;

catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
...
```

次の例では、`NOT` 条件の後に `AND` 条件を使用しています。

```
select * from category
where (not catid=1) and catgroup='Sports'
order by catid;

catid | catgroup | catname |             catdesc
-------+----------+---------+---------------------------------
2 | Sports   | NHL     | National Hockey League
3 | Sports   | NFL     | National Football League
4 | Sports   | NBA     | National Basketball Association
5 | Sports   | MLS     | Major League Soccer
(4 rows)
```

# パターンマッチング条件
<a name="pattern-matching-conditions"></a>

**Topics**
+ [LIKE](r_patternmatching_condition_like.md)
+ [SIMILAR TO](pattern-matching-conditions-similar-to.md)
+ [POSIX 演算子](pattern-matching-conditions-posix.md)

パターンマッチング演算子は、条件式で指定されたパターンが存在するかどうか文字列を調べ、該当するパターンが見つかったかどうかに応じて true または false を返します。Amazon Redshift は、パターン一致に 3 つの方法を使用します。
+ LIKE 式

  LIKE 演算子は、列名などの文字列式を、ワイルドカード文字 `%` (パーセント) および `_` (アンダースコア) を使用したパターンと比較します。LIKE パターンマッチングは常に文字列全体を網羅します。LIKE は大文字小文字を区別するマッチングを実行し、ILIKE は大文字小文字を区別しないマッチングを実行します。
+ SIMILAR TO 正規表現

  SIMILAR TO 演算子は、文字列式を、SQL の標準的な正規表現パターンと突き合わせます。このパターンには、LIKE 演算子でサポートされている 2 つを含む一連のパターンマッチングメタ文字を含めることができます。SIMILAR TO は、文字列全体をマッチングし、大文字小文字を区別するマッチングを実行します。
+ POSIX スタイルの正規表現 

  POSIX 正規表現は、LIKE および SIMILAR TO の演算子の場合よりも強力なパターンマッチング手段を提供します。POSIX 正規表現パターンでは、文字列の任意の部分をマッチングすることができ、大文字小文字を区別するマッチングを実行します。

SIMILAR TO または POSIX の演算子を使用する正規表現マッチングは、計算コストが高くなります。非常に多くの行を処理する場合は特に、可能な限り、LIKE を使用することをお勧めします。例えば、以下に示す各クエリは機能的には同じですが、LIKE を使用したクエリは、正規表現を使用したクエリよりも数倍速く実行できます。

```
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

# LIKE
<a name="r_patternmatching_condition_like"></a>

LIKE 演算子は、列名などの文字列式を、ワイルドカード文字 % (パーセント) および \$1 (アンダースコア) を使用したパターンと比較します。LIKE パターンマッチングは常に文字列全体を網羅します。文字列内の任意の場所にあるシーケンスをマッチングするには、パターンがパーセント符号で始まりパーセント符号で終了する必要があります。

LIKE は大文字小文字を区別し、ILIKE は大文字小文字を区別しません。

## 構文
<a name="r_patternmatching_condition_like-synopsis"></a>

```
expression [ NOT ] LIKE | ILIKE pattern [ ESCAPE 'escape_char' ]
```

## 引数
<a name="r_patternmatching_condition_like-arguments"></a>

 *expression*   
列名など、有効な UTF-8 文字式。

LIKE \$1 ILIKE   
LIKE は大文字小文字を区別するパターンマッチングを実行します。ILIKE は、シングルバイト UTF-8 (ASCII) 文字に対して大文字小文字を区別しないパターンマッチングを実行します。マルチバイト文字に対して大文字と小文字を区別しないパターンの一致を実行するには、LIKE 条件の *pattern* と *pattern* で [LOWER](r_LOWER.md) 関数を使用します。  
= や <> などの比較述語とは対照的に、述語 LIKE と ILIKE は、末尾の空白を暗黙的に無視しません。末尾のスペースを無視するには、RTRIM を使用するか、または CHAR 列を VARCHAR に明示的にキャストします。  
`~~` 演算子は LIKE に相当し、`~~*` は ILIKE に相当します。また、`!~~` および `!~~*` 演算子は、NOT LIKE および NOT ILIKE に相当します。

 *pattern*   
マッチングするパターンが含まれる有効な UTF-8 文字式。

 *escape\$1char*   
パターン内でメタ文字をエスケープする文字式。デフォルトは 2 個のバックスラッシュ (「\$1\$1」) です。

*pattern* にメタ文字が含まれていない場合、pattern は文字列そのものを表現するにすぎません。その場合、LIKE は等号演算子と同じ働きをします。

どちらの文字式も CHAR または VARCHAR のデータ型になることができます。文字式の型が異なる場合、Amazon Redshift は *pattern* のデータ型を *expression* のデータ型に変換します。

LIKE では、次のパターンマッチングメタ文字をサポートしています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_patternmatching_condition_like.html)

## 例
<a name="r_patternmatching_condition_like-examples"></a>

次の例では、LIKE を使用したパターンマッチングの例を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_patternmatching_condition_like.html)

次の例では、名前が「E」で始まるすべての市を見つけます。

```
select distinct city from users
where city like 'E%' order by city;
city
---------------
East Hartford
East Lansing
East Rutherford
East St. Louis
Easthampton
Easton
Eatontown
Eau Claire
...
```

次の例では、姓に「ten」が含まれるユーザーを見つけます。

```
select distinct lastname from users
where lastname like '%ten%' order by lastname;
lastname
-------------
Christensen
Wooten
...
```

次の例は、複数のパターンを一致させる方法を示しています。

```
select distinct lastname from tickit.users
where lastname like 'Chris%' or lastname like '%Wooten' order by lastname;
lastname
-------------
Christensen
Christian
Wooten
...
```

次の例では、3 番目と 4 番目の文字が「ea」になっている市を見つけます。コマンドでは ILIKE を使用して、大文字小文字の区別なしを実演します。

```
select distinct city from users where city ilike '__EA%' order by city;
city
-------------
Brea
Clearwater
Great Falls
Ocean City
Olean
Wheaton
(6 rows)
```

次の例では、デフォルトのエスケープ文字列 (\$1\$1) を使用して「start\$1」を含む文字列を検索します (テキスト `start`、それに続いてアンダースコア `_`)。

```
select tablename, "column" from pg_table_def 
where "column" like '%start\\_%'
limit 5;

     tablename     |    column
-------------------+---------------
 stl_s3client      | start_time
 stl_tr_conflict   | xact_start_ts
 stl_undone        | undo_start_ts
 stl_unload_log    | start_time
 stl_vacuum_detail | start_row
(5 rows)
```

次の例では、エスケープ文字として '^' を指定し、そのエスケープ文字を使用して「start\$1」を含む文字列を検索します (テキスト `start`、それに続いてアンダースコア `_`)。

```
select tablename, "column" from pg_table_def 
where "column" like '%start^_%' escape '^' 
limit 5;

     tablename     |    column
-------------------+---------------
 stl_s3client      | start_time
 stl_tr_conflict   | xact_start_ts
 stl_undone        | undo_start_ts
 stl_unload_log    | start_time
 stl_vacuum_detail | start_row
(5 rows)
```

次の例では、`~~*` 演算子を使用して「Ag」で始まる都市の大文字と小文字を区別しない (ILIKE) 検索を行います。

```
select distinct city from users where city ~~* 'Ag%' order by city;
                   
city
------------
Agat	
Agawam	
Agoura Hills	
Aguadilla
```

# SIMILAR TO
<a name="pattern-matching-conditions-similar-to"></a>

SIMILAR TO 演算子は、列名などの文字列式を、SQL の標準的な正規表現パターンと突き合わせます。SQL の正規表現パターンには、[LIKE](r_patternmatching_condition_like.md) 演算子によってサポートされる 2 つを含む、一連のパターンマッチングメタ文字を含めることができます。

SIMILAR TO 演算子の場合は、POSIX の正規表現の動作 (パターンは文字列の任意の部分と一致できる) とは異なり、パターンが文字全体と一致した場合にのみ true を返します。

SIMILAR TO は大文字小文字を区別するマッチングを実行します。

**注記**  
SIMILAR TO を使用する正規表現マッチングは、計算コストが高くなります。非常に多くの行を処理する場合は特に、可能な限り、LIKE を使用することをお勧めします。例えば、以下に示す各クエリは機能的には同じですが、LIKE を使用したクエリは、正規表現を使用したクエリよりも数倍速く実行できます。  

```
select count(*) from event where eventname SIMILAR TO '%(Ring|Die)%'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

## 構文
<a name="pattern-matching-conditions-similar-to-synopsis"></a>

```
expression [ NOT ] SIMILAR TO pattern [ ESCAPE 'escape_char' ]
```

## 引数
<a name="pattern-matching-conditions-similar-to-arguments"></a>

 *expression*   
列名など、有効な UTF-8 文字式。

SIMILAR TO  
SIMILAR TO は、*expression* 内の文字列全体について、大文字小文字を区別するパターンマッチングを実行します。

 * パターン*   
SQL の標準的な正規表現パターンを表現する有効な UTF-8 文字式。

 *escape\$1char*   
パターン内でメタ文字をエスケープする文字式。デフォルトは 2 個のバックスラッシュ (「\$1\$1」) です。

*pattern* にメタ文字が含まれていない場合、pattern は文字列そのものを表現するにすぎません。

どちらの文字式も CHAR または VARCHAR のデータ型になることができます。文字式の型が異なる場合、Amazon Redshift は *pattern* のデータ型を *expression* のデータ型に変換します。

SIMILAR TO では、次のパターンマッチングメタ文字をサポートしています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/pattern-matching-conditions-similar-to.html)

## 例
<a name="pattern-matching-conditions-similar-to-examples"></a>

次の表に、SIMILAR TO を使用したパターンマッチングの例を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/pattern-matching-conditions-similar-to.html)

次の例では、名前に「E」または「H」が含まれる市を見つけます。

```
SELECT DISTINCT city FROM users
WHERE city SIMILAR TO '%E%|%H%' ORDER BY city LIMIT 5;

      city
-----------------
 Agoura Hills
 Auburn Hills
 Benton Harbor
 Beverly Hills
 Chicago Heights
```

次の例では、デフォルトのエスケープ文字列 ('`\\`') を使用して「`_`」を含む文字列を検索します。

```
SELECT tablename, "column" FROM pg_table_def
WHERE "column" SIMILAR TO '%start\\_%'
ORDER BY tablename, "column" LIMIT 5;

        tablename         |       column
--------------------------+---------------------
 stcs_abort_idle          | idle_start_time
 stcs_abort_idle          | txn_start_time
 stcs_analyze_compression | start_time
 stcs_auto_worker_levels  | start_level
 stcs_auto_worker_levels  | start_wlm_occupancy
```

次の例では、エスケープ文字列として '`^`' を指定し、エスケープ文字列を使用して「`_`」を含む文字列を検索します。

```
SELECT tablename, "column" FROM pg_table_def
WHERE "column" SIMILAR TO '%start^_%' ESCAPE '^'
ORDER BY tablename, "column" LIMIT 5;

        tablename         |       column
--------------------------+---------------------
 stcs_abort_idle          | idle_start_time
 stcs_abort_idle          | txn_start_time
 stcs_analyze_compression | start_time
 stcs_auto_worker_levels  | start_level
 stcs_auto_worker_levels  | start_wlm_occupancy
```

# POSIX 演算子
<a name="pattern-matching-conditions-posix"></a>

POSIX 正規表現は、マッチパターンを指定する一連の文字です。文字列が正規表現で記述された正規セットのメンバーであれば、その文字列は正規表現と一致します。

POSIX 正規表現は、[LIKE](r_patternmatching_condition_like.md) および [SIMILAR TO](pattern-matching-conditions-similar-to.md) の演算子の場合よりも強力なパターンマッチング手段を提供します。POSIX 正規表現のパターンは、パターンが文字列全体と一致した場合にのみ true を返す SIMILAR TO 演算子の場合とは異なり、文字列の任意の部分と一致することができます。

**注記**  
POSIX 演算子を使用する正規表現マッチングは、計算コストが高くなります。非常に多くの行を処理する場合は特に、可能な限り、LIKE を使用することをお勧めします。例えば、以下に示す各クエリは機能的には同じですが、LIKE を使用したクエリは、正規表現を使用したクエリよりも数倍速く実行できます。  

```
select count(*) from event where eventname ~ '.*(Ring|Die).*'; 
select count(*) from event where eventname LIKE '%Ring%' OR eventname LIKE '%Die%';
```

## 構文
<a name="pattern-matching-conditions-posix-synopsis"></a>

```
expression [ ! ] ~ pattern
```

## 引数
<a name="pattern-matching-conditions-posix-arguments"></a>

 *expression*   
列名など、有効な UTF-8 文字式。

\$1  
拒否演算子。正規表現パターンに一致しません。

\$1  
*式*の部分文字列に対して大文字/小文字を区別するマッチングを実行します。  
`~~` は [LIKE](r_patternmatching_condition_like.md) の同義語です。

 * パターン*   
正規表現パターンを表す文字列リテラル。

*pattern* にワイルドカード文字が含まれていない場合、pattern は文字列そのものを表現するにすぎません。

'`. * | ? `' などのメタ文字を含む文字列を検索するには、2 つのバックスラッシュ ('` \\`') を使用して文字をエスケープします。`SIMILAR TO` や `LIKE` と異なり、POSIX 正規表現の構文はユーザー定義のエスケープ文字をサポートしていません。

どちらの文字式も CHAR または VARCHAR のデータ型になることができます。文字式の型が異なる場合、Amazon Redshift は *pattern* のデータ型を *expression* のデータ型に変換します。

文字式はすべて CHAR または VARCHAR のデータ型にすることができます。文字式のデータ型が異なる場合、Amazon Redshift はそれらのデータ型を *expression* のデータ型に変換します。

POSIX パターンマッチングでは、以下のメタ文字がサポートされています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/pattern-matching-conditions-posix.html)

Amazon Redshift では、以下の POSIX 文字クラスがサポートされています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/pattern-matching-conditions-posix.html)

 Amazon Redshift では、Perl の影響を受けた以下の演算子が正規表現でサポートされています。2 つのバックスラッシュ (「`\\`」) を使用して演算子をエスケープします。  

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/pattern-matching-conditions-posix.html)

## 例
<a name="pattern-matching-conditions-posix-synopsis-examples"></a>

次の表に、POSIX 演算子を使用したパターンマッチングの例を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/pattern-matching-conditions-posix.html)

以下の例では、名前に `E` または `H` が含まれる市を見つけます。

```
SELECT DISTINCT city FROM users
WHERE city ~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;

      city
-----------------
 Agoura Hills
 Auburn Hills
 Benton Harbor
 Beverly Hills
 Chicago Heights
```

以下の例では、名前に `E` または `H` が含まれない市を見つけます。

```
SELECT DISTINCT city FROM users WHERE city !~ '.*E.*|.*H.*' ORDER BY city LIMIT 5;

      city
-----------------
 Aberdeen	
 Abilene	
 Ada	
 Agat	
 Agawam
```

以下の例では、エスケープ文字列 ('`\\`') を使用してピリオドを含む文字列を検索します。

```
SELECT venuename FROM venue
WHERE venuename ~ '.*\\..*'
ORDER BY venueid;

          venuename
------------------------------
 St. Pete Times Forum
 Jobing.com Arena
 Hubert H. Humphrey Metrodome
 U.S. Cellular Field
 Superpages.com Center
 E.J. Nutter Center
 Bernard B. Jacobs Theatre
 St. James Theatre
```

# BETWEEN 範囲条件
<a name="r_range_condition"></a>

`BETWEEN` 条件では、キーワード `BETWEEN` および `AND` を使用して、値が範囲内に入っているかどうか式をテストします。

## 構文
<a name="r_range_condition-synopsis"></a>

```
expression [ NOT ] BETWEEN expression AND expression
```

式は、数値データ型、文字データ型、または日時データ型とすることができますが、互換性を持つ必要があります。範囲は両端を含みます。

## 例
<a name="r_range_condition-examples"></a>

最初の例では、2、3、または 4 のいずれかのチケットの販売を登録したトランザクション数をカウントします。

```
select count(*) from sales
where qtysold between 2 and 4;

count
--------
104021
(1 row)
```

範囲条件は開始値と終了値を含みます。

```
select min(dateid), max(dateid) from sales
where dateid between 1900 and 1910;

min  | max 
-----+-----
1900 | 1910
```

範囲条件内の最初の式は最小値、2 番目の式は最大値である必要があります。次の例は、式の値のせいで、常にゼロ行を返します。

```
select count(*) from sales
where qtysold between 4 and 2;

count
-------
0
(1 row)
```

しかし、NOT 修飾子を加えると、論理が反転し、すべての行がカウントされます。

```
select count(*) from sales
where qtysold not between 4 and 2;

count
--------
172456
(1 row)
```

次のクエリは、20000～50000 席を備えた会場のリストを返します。

```
select venueid, venuename, venueseats from venue
where venueseats between 20000 and 50000
order by venueseats desc;

venueid |       venuename               | venueseats
---------+-------------------------------+------------
116 | Busch Stadium                 |      49660
106 | Rangers BallPark in Arlington |      49115
96 | Oriole Park at Camden Yards   |      48876
...
(22 rows)
```

次の例は、日付値に BETWEEN を使用する方法を示しています。

```
select salesid, qtysold, pricepaid, commission, saletime 
from sales 
where eventid between 1000 and 2000 
   and saletime between '2008-01-01' and '2008-01-03'
order by saletime asc;

salesid | qtysold | pricepaid | commission |   saletime
--------+---------+-----------+------------+---------------
  65082 |       4 |       472 |       70.8 | 1/1/2008 06:06
 110917 |       1 |       337 |      50.55 | 1/1/2008 07:05
 112103 |       1 |       241 |      36.15 | 1/2/2008 03:15
 137882 |       3 |      1473 |     220.95 | 1/2/2008 05:18
  40331 |       2 |        58 |        8.7 | 1/2/2008 05:57
 110918 |       3 |      1011 |     151.65 | 1/2/2008 07:17
  96274 |       1 |       104 |       15.6 | 1/2/2008 07:18
 150499 |       3 |       135 |      20.25 | 1/2/2008 07:20
  68413 |       2 |       158 |       23.7 | 1/2/2008 08:12
```

BETWEEN の範囲は包括的ですが、日付はデフォルトで 00:00:00 の時刻値であることに注意してください。サンプルクエリで有効な 1 月 3 日の行は、販売時間が `1/3/2008 00:00:00` の行だけです。

# Null 条件
<a name="r_null_condition"></a>

Null 条件は、値が見つからないか、値が不明であるときに、Null かどうかテストします。

## 構文
<a name="r_null_condition-synopsis"></a>

```
expression IS [ NOT ] NULL
```

## 引数
<a name="r_null_condition-arguments"></a>

 *expression*   
列のような任意の式。

IS NULL   
式の値が Null の場合は true で、式が値を持つ場合は false です。

 IS NOT NULL   
式の値が Null の場合は false で、式が値を持つ場合は true です。

## 例
<a name="r_null_condition-example"></a>

この例では、SALES テーブルの QTYSOLD フィールドで Null が何回検出されるかを示します。

```
select count(*) from sales
where qtysold is null;
count
-------
0
(1 row)
```

# EXISTS 条件
<a name="r_exists_condition"></a>

EXISTS 条件は、サブクエリ内に行が存在するかどうかをテストし、サブクエリが少なくとも 1 つの行を返した場合に true を返します。NOT が指定されると、条件はサブクエリが行を返さなかった場合に true を返します。

## 構文
<a name="r_exists_condition-synopsis"></a>

```
[ NOT ] EXISTS (table_subquery)
```

## 引数
<a name="r_exists_condition-arguments"></a>

 EXISTS   
*table\$1subquery* が少なくとも 1 つの行を返した場合に true となります。

NOT EXISTS   
*table\$1subquery* が行を返さない場合に true になります。

 *table\$1subquery*   
評価結果として 1 つまたは複数の列と 1 つまたは複数の行を持つテーブルを返します。

## 例
<a name="r_exists_condition-example"></a>

この例では、任意の種類の販売があった日付ごとに、1 回ずつ、すべての日付識別子を返します。

```
select dateid from date
where exists (
select 1 from sales
where date.dateid = sales.dateid
)
order by dateid;

dateid
--------
1827
1828
1829
...
```

# IN 条件
<a name="r_in_condition"></a>

IN 条件は、一連の値の中に、またはサブクエリ内にあるメンバーシップの値をテストします。

## 構文
<a name="r_in_condition-synopsis"></a>

```
expression [ NOT ] IN (expr_list | table_subquery)
```

## 引数
<a name="r_in_condition-arguments"></a>

 *expression*   
*expr\$1list* または *table\$1subquery* に対して評価される数値、文字、または日時であり、当該リストまたはサブクエリのデータ型との互換性が必要です。

 *expr\$1list*   
1 つまたは複数のカンマ区切り式、あるいは括弧で囲まれたカンマ区切り式の 1 つまたは複数のセット。

 *table\$1subquery*   
評価結果として 1 つまたは複数の行を持つテーブルを返すサブクエリですが、その選択リスト内の列数は 1 個に制限されています。

IN \$1 NOT IN   
IN は、式が式リストまたはクエリのメンバーである場合に true を返します。NOT IN は、式がメンバーでない場合に true を返します。*expression* の結果が Null である場合、または、一致する *expr\$1list* 値または *table\$1subquery* 値がなく、これらの比較行の 1 つ以上の結果が Null である場合、IN と NOT IN は NULL を返し、行は返されません。

## 例
<a name="r_in_condition-examples"></a>

次の条件は、リストされた値の場合にのみ true を返します。

```
qtysold in (2, 4, 5)
date.day in ('Mon', 'Tues')
date.month not in ('Oct', 'Nov', 'Dec')
```

## 大規模 IN リストの最適化
<a name="r_in_condition-optimization-for-large-in-lists"></a>

クエリのパフォーマンスを最適化するために、10 個を超える値が含まれる IN リストは内部的にスカラー配列として評価されます。10 個未満の値が含まれる IN リストは一連の OR 述語として評価されます。SMALLINT、INTEGER、BIGINT、REAL、DOUBLE PRECISION、BOOLEAN、CHAR、VARCHAR、DATE、TIMESTAMP、および TIMESTAMPTZ データ型では最適化がサポートされています。

この最適化の効果を確認するには、クエリの EXPLAIN 出力を調べてください。次に例を示します。

```
explain select * from sales
QUERY PLAN
--------------------------------------------------------------------
XN Seq Scan on sales  (cost=0.00..6035.96 rows=86228 width=53)
Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[]))
(2 rows)
```

# SQL コマンド
<a name="c_SQL_commands"></a>

SQL 言語は、データベースオブジェクトの作成と操作、クエリの実行、テーブルのロード、およびテーブルデータの変更に使用するコマンドから構成されます。

Amazon Redshift は PostgreSQL に基づいています。Amazon Redshift と PostgreSQL の間には非常に重要な相違点がいくつかあり、データウェアハウスアプリケーションの開発や設計に際しては、それらを念頭に置く必要があります。Amazon Redshift SQL と PostgreSQL の違いについては、[Amazon Redshift および PostgreSQL](c_redshift-and-postgres-sql.md)を参照してください。

**注記**  
単一 SQL ステートメントの最大サイズは 16 MB です。

**Topics**
+ [ABORT](r_ABORT.md)
+ [ALTER DATABASE](r_ALTER_DATABASE.md)
+ [ALTER DATASHARE](r_ALTER_DATASHARE.md)
+ [ALTER DEFAULT PRIVILEGES](r_ALTER_DEFAULT_PRIVILEGES.md)
+ [ALTER EXTERNAL SCHEMA](r_ALTER_EXTERNAL_SCHEMA.md)
+ [ALTER EXTERNAL VIEW](r_ALTER_EXTERNAL_VIEW.md)
+ [ALTER FUNCTION](r_ALTER_FUNCTION.md)
+ [ALTER GROUP](r_ALTER_GROUP.md)
+ [他の ID プロバイダー](r_ALTER_IDENTITY_PROVIDER.md)
+ [ALTER MASKING POLICY](r_ALTER_MASKING_POLICY.md)
+ [ALTER MATERIALIZED VIEW](r_ALTER_MATERIALIZED_VIEW.md)
+ [RLS ポリシーの変更](r_ALTER_RLS_POLICY.md)
+ [ALTER ROLE](r_ALTER_ROLE.md)
+ [ALTER PROCEDURE](r_ALTER_PROCEDURE.md)
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [ALTER SYSTEM](r_ALTER_SYSTEM.md)
+ [ALTER TABLE](r_ALTER_TABLE.md)
+ [ALTER TABLE APPEND](r_ALTER_TABLE_APPEND.md)
+ [ALTER TEMPLATE](r_ALTER_TEMPLATE.md)
+ [ALTER USER](r_ALTER_USER.md)
+ [ANALYZE](r_ANALYZE.md)
+ [ANALYZE COMPRESSION](r_ANALYZE_COMPRESSION.md)
+ [ATTACH MASKING POLICY](r_ATTACH_MASKING_POLICY.md)
+ [ATTACH RLS POLICY](r_ATTACH_RLS_POLICY.md)
+ [BEGIN](r_BEGIN.md)
+ [CALL](r_CALL_procedure.md)
+ [CANCEL](r_CANCEL.md)
+ [CLOSE](close.md)
+ [COMMENT](r_COMMENT.md)
+ [COMMIT](r_COMMIT.md)
+ [COPY](r_COPY.md)
+ [CREATE DATABASE](r_CREATE_DATABASE.md)
+ [CREATE DATASHARE](r_CREATE_DATASHARE.md)
+ [CREATE EXTERNAL FUNCTION](r_CREATE_EXTERNAL_FUNCTION.md)
+ [CREATE EXTERNAL MODEL](r_create_external_model.md)
+ [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)
+ [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)
+ [CREATE EXTERNAL VIEW](r_CREATE_EXTERNAL_VIEW.md)
+ [CREATE FUNCTION](r_CREATE_FUNCTION.md)
+ [CREATE GROUP](r_CREATE_GROUP.md)
+ [ID プロバイダーを作成する](r_CREATE_IDENTITY_PROVIDER.md)
+ [ライブラリを作成する](r_CREATE_LIBRARY.md)
+ [CREATE MASKING POLICY](r_CREATE_MASKING_POLICY.md)
+ [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)
+ [モデルを作成する](r_CREATE_MODEL.md)
+ [CREATE PROCEDURE](r_CREATE_PROCEDURE.md)
+ [CREATE RLS POLICY](r_CREATE_RLS_POLICY.md)
+ [CREATE ROLE](r_CREATE_ROLE.md)
+ [CREATE SCHEMA](r_CREATE_SCHEMA.md)
+ [CREATE TABLE](r_CREATE_TABLE_NEW.md)
+ [CREATE TABLE AS](r_CREATE_TABLE_AS.md)
+ [CREATE TEMPLATE](r_CREATE_TEMPLATE.md)
+ [CREATE USER](r_CREATE_USER.md)
+ [CREATE VIEW](r_CREATE_VIEW.md)
+ [DEALLOCATE](r_DEALLOCATE.md)
+ [DECLARE](declare.md)
+ [DELETE](r_DELETE.md)
+ [DESC DATASHARE](r_DESC_DATASHARE.md)
+ [DESC ID プロバイダー](r_DESC_IDENTITY_PROVIDER.md)
+ [DETACH MASKING POLICY](r_DETACH_MASKING_POLICY.md)
+ [DETACH RLS POLICY](r_DETACH_RLS_POLICY.md)
+ [DROP DATABASE](r_DROP_DATABASE.md)
+ [DROP DATASHARE](r_DROP_DATASHARE.md)
+ [DROP EXTERNAL VIEW](r_DROP_EXTERNAL_VIEW.md)
+ [DROP FUNCTION](r_DROP_FUNCTION.md)
+ [DROP GROUP](r_DROP_GROUP.md)
+ [DROP ID プロバイダー](r_DROP_IDENTITY_PROVIDER.md)
+ [DROP LIBRARY](r_DROP_LIBRARY.md)
+ [DROP MASKING POLICY](r_DROP_MASKING_POLICY.md)
+ [DROP MODEL](r_DROP_MODEL.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)
+ [DROP PROCEDURE](r_DROP_PROCEDURE.md)
+ [DROP RLS POLICY](r_DROP_RLS_POLICY.md)
+ [DROP ROLE](r_DROP_ROLE.md)
+ [DROP SCHEMA](r_DROP_SCHEMA.md)
+ [DROP TABLE](r_DROP_TABLE.md)
+ [DROP TEMPLATE](r_DROP_TEMPLATE.md)
+ [DROP USER](r_DROP_USER.md)
+ [DROP VIEW](r_DROP_VIEW.md)
+ [END](r_END.md)
+ [EXECUTE](r_EXECUTE.md)
+ [EXPLAIN](r_EXPLAIN.md)
+ [FETCH](fetch.md)
+ [GRANT](r_GRANT.md)
+ [INSERT](r_INSERT_30.md)
+ [INSERT (外部テーブル)](r_INSERT_external_table.md)
+ [LOCK](r_LOCK.md)
+ [MERGE](r_MERGE.md)
+ [PREPARE](r_PREPARE.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [RESET](r_RESET.md)
+ [REVOKE](r_REVOKE.md)
+ [ROLLBACK](r_ROLLBACK.md)
+ [SELECT](r_SELECT_synopsis.md)
+ [SELECT INTO](r_SELECT_INTO.md)
+ [SET](r_SET.md)
+ [SET SESSION AUTHORIZATION](r_SET_SESSION_AUTHORIZATION.md)
+ [SET SESSION CHARACTERISTICS](r_SET_SESSION_CHARACTERISTICS.md)
+ [SHOW](r_SHOW.md)
+ [SHOW COLUMN GRANTS](r_SHOW_COLUMN_GRANTS.md)
+ [SHOW COLUMNS](r_SHOW_COLUMNS.md)
+ [SHOW CONSTRAINTS](r_SHOW_CONSTRAINTS.md)
+ [SHOW EXTERNAL TABLE](r_SHOW_EXTERNAL_TABLE.md)
+ [SHOW DATABASES](r_SHOW_DATABASES.md)
+ [SHOW FUNCTIONS](r_SHOW_FUNCTIONS.md)
+ [SHOW GRANTS](r_SHOW_GRANTS.md)
+ [SHOW MODEL](r_SHOW_MODEL.md)
+ [SHOW DATASHARES](r_SHOW_DATASHARES.md)
+ [SHOW PARAMETERS](r_SHOW_PARAMETERS.md)
+ [SHOW POLICIES](r_SHOW_POLICIES.md)
+ [SHOW PROCEDURE](r_SHOW_PROCEDURE.md)
+ [SHOW PROCEDURE](r_SHOW_PROCEDURES.md)
+ [SHOW SCHEMAS](r_SHOW_SCHEMAS.md)
+ [テーブルを表示する](r_SHOW_TABLE.md)
+ [SHOW TABLES](r_SHOW_TABLES.md)
+ [SHOW TEMPLATE](r_SHOW_TEMPLATE.md)
+ [SHOW TEMPLATES](r_SHOW_TEMPLATES.md)
+ [ビューを表示する](r_SHOW_VIEW.md)
+ [START TRANSACTION](r_START_TRANSACTION.md)
+ [TRUNCATE](r_TRUNCATE.md)
+ [UNLOAD](r_UNLOAD.md)
+ [UPDATE](r_UPDATE.md)
+ [使用](r_USE_command.md)
+ [VACUUM](r_VACUUM_command.md)

# ABORT
<a name="r_ABORT"></a>

現在実行中のトランザクションを停止し、そのトランザクションで行われたすべての更新を破棄します。ABORT はすでに完了したトランザクションに対しては影響を与えません。

このコマンドは ROLLBACK コマンドと同じ機能を実行します。詳細については、[ROLLBACK](r_ROLLBACK.md)を参照してください。

## 構文
<a name="r_ABORT-synopsis"></a>

```
ABORT [ WORK | TRANSACTION ]
```

## パラメータ
<a name="r_ABORT-parameters"></a>

WORK  
オプションキーワード

TRANSACTION  
オプションキーワード。WORK と TRANSACTION は同義語です。

## 例
<a name="r_ABORT-example"></a>

次の例では、テーブルを作成し、データがそのテーブルに挿入されるトランザクションを開始します。次に、ABORT コマンドはデータの挿入をロールバックし、テーブルを空にします。

次のコマンドを実行すると、MOVIE\$1GROSS という名前のテーブルが作成されます。

```
create table movie_gross( name varchar(30), gross bigint );
```

次のコマンドセットを実行すると、2 つのデータ行をテーブルに挿入するトランザクションが開始されます。

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

その後、次のコマンドを実行すると、テーブルからデータが選択され、挿入が正常に実行されたことが示されます。

```
select * from movie_gross;
```

コマンド出力は、両方の行が正しく挿入されたことを示します。

```
         name           |  gross
------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

このコマンドはデータ変更を、トランザクションの開始時点までロールバックします。

```
abort;
```

テーブルからデータを選択すると、空のテーブルが表示されます。

```
select * from movie_gross;

 name | gross
------+-------
(0 rows)
```

# ALTER DATABASE
<a name="r_ALTER_DATABASE"></a>

データベースの属性を変更します。

## 必要な権限
<a name="r_ALTER_DATABASE-privileges"></a>

ALTER DATABASE を使用するには、次の権限のいずれかが必要です。
+ スーパーユーザー
+ ALTER DATASHARE 権限を持つユーザー
+ データベースの所有者

## 構文
<a name="r_ALTER_DATABASE-synopsis"></a>

```
ALTER DATABASE database_name
{ 
  RENAME TO new_name
  | OWNER TO new_owner
  | [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
| INTEGRATION
 { 
  REFRESH { { ALL | INERROR } TABLES [ IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] }
   | SET 
     [ QUERY_ALL_STATES [=] { TRUE | FALSE } ] 
     [ ACCEPTINVCHARS [=] { TRUE | FALSE } ] 
     [ REFRESH_INTERVAL <interval> ]
     [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
     [ HISTORY_MODE [=] {TRUE | FALSE} [ FOR { {ALL} TABLES [IN SCHEMA schema [, ...] ] | TABLE schema.table [, ...] } ] ]
 }
}
```

## パラメータ
<a name="r_ALTER_DATABASE-parameters"></a>

 *database\$1name*   
変更するデータベースの名前。通常、現在接続されていないデータベースを変更します。いずれの場合も、変更は後のセッションにのみ反映されます。現在のデータベースの所有者を変更できますが、名前を変更することはできません。  

```
alter database tickit rename to newtickit;
ERROR:  current database may not be renamed
```

RENAME TO   
指定したデータベースの名前を変更します。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。dev、padb\$1harvest、template0、template1、または sys:internal の各データベースの名前を変更することはできません。また、現在のデータベースの名前も変更できません。データベース所有者または[superuser](r_superusers.md#def_superusers)のみがデータベース名を変更できます。スーパーユーザー以外の所有者には CREATEDB 権限も必要です。

 *new\$1name*   
新しいデータベース名。

OWNER TO   
指定したデータベースの所有者を変更します。現在のデータベースまたは他のデータベースの所有者を変更できます。スーパーユーザーのみが所有者を変更できます。

 *new\$1owner*   
新しいデータベース所有者。新しい所有者は、書き込み権限を持つ既存のデータベースユーザーであることが必要です。ユーザー権限の詳細については、[GRANT](r_GRANT.md)を参照してください。

CONNECTION LIMIT \$1 *limit* \$1 UNLIMITED \$1   
ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。ユーザーごとの接続数の制限が適用される場合もあります。詳細については、「[CREATE USER](r_CREATE_USER.md)」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、[STV\$1SESSIONS](r_STV_SESSIONS.md)システムビューに対してクエリを実行します。  
ユーザーとデータベースの両方の接続制限が適用される場合は、ユーザーが接続しようとしたときに、両方の制限内に未使用の接続スロットがなければなりません。

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
文字列の検索または比較において、大文字と小文字を区別するか、あるいは区別しないかを指定する句。  
現在のデータベース (空の場合でも) の大文字と小文字の区別を変更できます。  
現在のデータベースで大文字と小文字の区別を変更するには、ALTER アクセス許可が必要です。CREATE DATABASE アクセス許可を持つスーパーユーザーまたはデータベース所有者も、データベースの大文字と小文字の区別を変更できます。  
CASE\$1SENSITIVE と CS は互換性があり、同じ結果が得られます。同様に、CASE\$1INSENSITIVE と CI は互換性があり、同じ結果が得られます。

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
データベースに対してクエリを実行するときに使用される分離レベルを指定する句。分離レベルの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。  
+ スナップショットの分離 – 更新および削除の競合に対する保護機能を備えた分離レベルを提供します。
+ 直列化可能な分離 – 同時トランザクションの完全な直列化機能を提供します。
データベースの分離レベルを変更するときは、以下の点を考慮します。  
+ データベースの分離レベルを変更するには、スーパーユーザー権限または CREATE DATABASE 権限が必要です。
+ `dev` データベースの分離レベルは変更できません。
+ トランザクションブロック内の分離レベルは変更できません。
+ 他のユーザーがデータベースに接続している場合、分離レベルの変更コマンドは失敗します。
+ 分離レベルの変更コマンドでは、現在のセッションの分離レベルの設定を変更できます。

INTEGRATION  
ゼロ ETL 統合データベースを変更します。

REFRESH \$1\$1 ALL \$1 INERROR \$1 TABLES [IN SCHEMA *schema* [, ...]] \$1 TABLE *schema.table* [, ...]\$1  
Amazon Redshift がすべてのテーブルを更新するか、あるいは指定されたスキーマやテーブル内でエラーのあるテーブルを更新するかどうかを指定する句。更新によって、指定されたスキーマやテーブル内のテーブルはソースデータベースから完全に複製されます。  
詳細については、「*Amazon Redshift 管理ガイド*」の「[ゼロ ETL 統合](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.html)」を参照してください。統合の状態の詳細については、「[SVV\$1INTEGRATION\$1TABLE\$1STATE](r_SVV_INTEGRATION_TABLE_STATE.md)」と「[SVV\$1INTEGRATION](r_SVV_INTEGRATION.md)」を参照してください。

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
QUERY\$1ALL\$1STATES 句を使用すると、ゼロ ETL 統合テーブルをすべての状態 (`Synced`、`Failed`、`ResyncRequired`、`ResyncInitiated`) でクエリできるかどうかを設定できます。ゼロ ETL 統合テーブルはデフォルトでは、`Synced` 状態でのみクエリできます。

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
ACCEPTINVCHARS 句を使用すると、VARCHAR データ型で無効な文字が検出された場合、ゼロ ETL 統合テーブルが取り込みを継続するかどうかを設定できます。無効な文字が検出されると、無効な文字はデフォルトの `?` 文字に置き換えられます。

REFRESH\$1INTERVAL <interval>  
REFRESH\$1INTERVAL 句を使用すると、ゼロ ETL ソースからターゲットデータベースにデータを更新するためのおよその時間間隔を秒単位で設定できます。この `interval` は、ソースタイプが Aurora MySQL、Aurora PostgreSQL、または RDS for MySQL のゼロ ETL 統合では、0～432,000 秒 (5 日) に設定できます。Amazon DynamoDB ゼロ ETL 統合の場合、`interval` は 900～432,000 秒 (15 分～5 日) に設定できます。  
ゼロ ETL 統合を使用したデータベースの作成の詳細については、「Amazon Redshift 管理ガイド」の「[Amazon Redshift でのデスティネーションデータベースの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html)」を参照してください。**

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
TRUNCATECOLUMNS 句を使用すると、VARCHAR 列の値または SUPER 列の属性が制限を超えた場合に、ゼロ ETL 統合テーブルが取り込みを続行するかどうかを設定できます。`TRUE` の場合、値は列に収まるように切り捨てられ、オーバーフローする JSON 属性の値は SUPER 列に収まるように切り捨てられます。

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1 [ FOR \$1 \$1ALL\$1 TABLES [IN SCHEMA schema [, ...]] \$1 TABLE schema.table [, ...]\$1 ]  
Amazon Redshift が、ゼロ ETL 統合の対象となるすべてのテーブルまたは指定されたスキーマ内のテーブルに履歴モードを設定するかどうかを指定する句。このオプションは、ゼロ ETL 統合用に作成されたデータベースにのみ適用されます。  
HISTORY\$1MODE 句は `TRUE` または `FALSE` に設定できます。デフォルトは `FALSE` です。履歴モードのオンとオフの切り替えが適用されるのは、`Synced` 状態のテーブルのみです。HISTORY\$1MODE の詳細については、「*Amazon Redshift 管理ガイド*」の「[History mode](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html)」(履歴モード) を参照してください。

## 使用に関する注意事項
<a name="r_ALTER_DATABASE-usage-notes"></a>

ALTER DATABASE コマンドは現在のセッションではなく、後のセッションに適用されます。変更の反映を確認するには、変更されたデータベースに再接続する必要があります。

## 例
<a name="r_ALTER_DATABASE-examples"></a>

次の例では、TICKIT\$1SANDBOX という名前のデータベースを TICKIT\$1TEST に変更します。

```
alter database tickit_sandbox rename to tickit_test;
```

次の例では、TICKIT データベース (現在のデータベース) の所有者を DWUSER に変更します。

```
alter database tickit owner to dwuser;
```

次の例では、sampledb データベースで大文字小文字を区別するかどうかの設定を変更しています。

```
ALTER DATABASE sampledb COLLATE CASE_INSENSITIVE;
```

次の例では、スナップショット分離レベルを使用して **sampledb** という名前のデータベースを変更します。

```
ALTER DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

次の例では、ゼロ ETL 統合で、データベース **sample\$1integration\$1db** 内のテーブル **schema1.sample\$1table1** と **schema2.sample\$1table2** を更新します。

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH TABLE schema1.sample_table1, schema2.sample_table2;
```

次の例では、ゼロ ETL 統合で同期されたテーブルと失敗したテーブルをすべて更新します。

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH ALL tables;
```

次の例では、ゼロ ETL 統合の更新間隔を 600 秒に設定します。

```
ALTER DATABASE sample_integration_db INTEGRATION SET REFRESH_INTERVAL 600;
```

次の例では、スキーマ **sample\$1schema** 内で `ErrorState` となっているテーブルをすべて更新します。

```
ALTER DATABASE sample_integration_db INTEGRATION REFRESH INERROR TABLES in SCHEMA sample_schema;
```

次の例では、`myschema.table1` テーブル の履歴モードをオンに切り替えています。

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true FOR TABLE myschema.table1
```

次の例では、`myschema` のすべてのテーブルの履歴モードをオンに切り替えています。

```
ALTER DATABASE sample_integration_db INTEGRATION SET HISTORY_MODE = true for ALL TABLES IN SCHEMA myschema
```

# ALTER DATASHARE
<a name="r_ALTER_DATASHARE"></a>

データ共有の定義を変更します。ALTER DATASHARE を使用して、オブジェクトを追加または削除できます。現在のデータベース内のデータ共有のみを変更できます。関連付けられたデータベースからデータ共有にオブジェクトを追加または削除します。追加または削除するデータ共有オブジェクトに対して必要な許可を持つデータ共有の所有者は、データ共有を変更できます。

## 必要な権限
<a name="r_ALTER_DATASHARE-privileges"></a>

以下に、ALTER DATASHARE に必要な権限を示します。
+ スーパーユーザー。
+ ALTER DATASHARE の権限を持つユーザー。
+ データ共有に対する ALTER または ALL の権限を持つユーザー
+ 特定のオブジェクトをデータ共有に追加しようとするユーザーには、対象のオブジェクトに対する権限が必要です。この場合、ユーザーはオブジェクトの所有者であるか、オブジェクトに対する SELECT、USAGE、あるいは ALL の権限を持っている必要があります。

## 構文
<a name="r_ALTER_DATASHARE-synopsis"></a>

次の構文は、データ共有に対して、オブジェクトを追加または削除する方法を示しています。

```
ALTER DATASHARE datashare_name { ADD | REMOVE } {
TABLE schema.table [, ...]
| SCHEMA schema [, ...]
| FUNCTION schema.sql_udf (argtype,...) [, ...]
| ALL TABLES IN SCHEMA schema [, ...]
| ALL FUNCTIONS IN SCHEMA schema [, ...] }
```

次の構文は、データ共有のプロパティを設定する方法を示しています。

```
ALTER DATASHARE datashare_name {
[ SET PUBLICACCESSIBLE [=] TRUE | FALSE ]
[ SET INCLUDENEW [=] TRUE | FALSE FOR SCHEMA schema ] }
```

## パラメータ
<a name="r_ALTER_DATASHARE-parameters"></a>

*datashare\$1name*  
変更するデータ共有の名前。

ADD \$1 REMOVE  
データ共有にオブジェクトを追加するか、データ共有からオブジェクトを削除するかを指定する句。

TABLE *schema*.*table* [, ...]  
データ共有に追加する、指定されたスキーマ内のテーブルまたはビューの名前。

SCHEMA *schema* [, ...]   
データ共有に追加するスキーマの名前。

FUNCTION *schema*.*sql\$1udf* (argtype,...) [, ...]  
データ共有に追加する引数タイプを伴うユーザー定義の SQL 関数の名前。

ALL TABLES IN SCHEMA *schema* [, ...]   
指定されたスキーマ内のすべてのテーブルをデータ共有に追加するかどうかを指定する句。

ALL FUNCTIONS IN SCHEMA *schema* [, ...] \$1  
指定されたスキーマ内のすべての関数をデータ共有に追加することを指定する句。

[ SET PUBLICACCESSIBLE [=] TRUE \$1 FALSE ]  
公開でアクセス可能なクラスターとデータ共有を共有できるかどうかを指定する句。

[ SET INCLUDENEW [=] TRUE \$1 FALSE FOR SCHEMA *schema* ]  
指定したスキーマで作成される将来のテーブル、ビュー、または SQL ユーザー定義関数 (UDF) をデータ共有に追加するかどうかを指定する句。指定したスキーマにある現在のテーブル、ビュー、または SQL UDF は、データ共有に追加されません。データ共有とスキーマの各ペアについて、このプロパティを変更できるのはスーパーユーザーのみです。INCLUDENEW 句はデフォルトで false を返します。

## ALTER DATASHARE の使用に関する注意事項
<a name="r_ALTER_DATASHARE_usage"></a>
+ 次のユーザーは、データ共有を変更できます。
  + スーパーユーザー
  + データ共有の所有者
  + データ共有に対する ALTER または ALL 権限を持つユーザー
+ 特定のオブジェクトをデータ共有に追加しようとするユーザーには、そのオブジェクトに対する適切な権限が必要です。ユーザーはオブジェクトの所有者であるか、オブジェクトに対する SELECT、USAGE、ALL 権限を持っている必要があります。
+ スキーマ、テーブル、通常のビュー、遅延バインディングビュー、マテリアライズドビュー、および SQL ユーザー定義関数 (UDF) を共有できます。スキーマにオブジェクトを追加する前に、まず対象のスキーマをデータ共有に追加します。

  スキーマを追加する場合、Amazon Redshift はその下にすべてのオブジェクトを追加するわけではありません。それらを明示的に追加する必要があります。
+ AWS Data Exchange データ共有は、パブリックアクセス可能設定を有効にした状態で作成することをお勧めします。
+ 一般的に、パブリックアクセスを無効にするために ALTER DATASHARE ステートメントを使用して AWS Data Exchange データ共有を変更することはお勧めしません。そうすると、AWS アカウントのクラスターがパブリックアクセス可能である場合に、データ共有にアクセスできるアカウントがアクセスできなくなります。このタイプの変更を実行すると、AWS Data Exchangeのデータ製品での使用条件に違反する可能性があります。この推奨事項の例外については、以下を参照してください。

  次に、パブリックにアクセス可能な設定を無効にして AWS Data Exchange データ共有を作成した場合に発生する、エラーの例を示します。

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ERROR:  Alter of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value 'c670ba4db22f4b'
  ```

  パブリックにアクセス可能な設定を無効にできるよう AWS Data Exchange データ共有を変更するには、次の変数を設定した上で、ALTER DATASHARE ステートメントを再度実行します。

  ```
  SET datashare_break_glass_session_var to 'c670ba4db22f4b';
  ```

  ```
  ALTER DATASHARE salesshare SET PUBLICACCESSIBLE FALSE;
  ```

  この場合、Amazon Redshift は 1 回限り有効なランダム値を生成し、その値により、AWS Data Exchangeデータ共有の ALTER DATASHARE SET PUBLICACCESSIBLE FALSE を許可するようにセッション変数を設定します。

## 例
<a name="r_ALTER_DATASHARE_examples"></a>

次の例では、スキーマ `public` をデータ共有 `salesshare` に追加します。

```
ALTER DATASHARE salesshare ADD SCHEMA public;
```

次の例では、テーブル `public.tickit_sales_redshift` をデータ共有 `salesshare` に追加します。

```
ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;
```

次の例では、すべてのテーブルをデータ共有 `salesshare` に追加します。

```
ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;
```

次の例では、データ共有 `salesshare` からテーブル `public.tickit_sales_redshift` を削除します。

```
ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;
```

# ALTER DEFAULT PRIVILEGES
<a name="r_ALTER_DEFAULT_PRIVILEGES"></a>

指定したユーザーによって今後作成されるオブジェクトに対して、デフォルトで適用するアクセス許可のセットを定義します。デフォルトでは、ユーザーは自分のデフォルトのアクセス許可のみ変更できます。他のユーザーに対しては、スーパーユーザーのみがデフォルトのアクセス許可を指定できます。

デフォルト権限は、ロール、ユーザー、またはユーザーグループに適用できます。デフォルトのアクセス許可は、現在のデータベースに作成されているすべてのオブジェクトにグローバルに設定することも、指定したスキーマに作成されているオブジェクトにのみ設定することもできます。

デフォルトのアクセス許可は、新しいオブジェクトにのみ適用されます。ALTER DEFAULT PRIVILEGES を実行しても、既存のオブジェクトのアクセス許可は変更されません。データベースまたはスキーマ内の任意のユーザーが作成した現在および将来のすべてのオブジェクトに対するアクセス許可を付与するには、「[スコープ設定アクセス許可](https://docs.aws.amazon.com/redshift/latest/dg/t_scoped-permissions.html)」を参照してください。

データベースユーザーのデフォルト権限に関する情報を表示するには、[PG\$1DEFAULT\$1ACL](r_PG_DEFAULT_ACL.md)システムカタログテーブルをクエリします。

権限の詳細については、「[GRANT](r_GRANT.md)」を参照してください。

## 必要な権限
<a name="r_ALTER_DEFAULT_PRIVILEGES-privileges"></a>

ALTER DEFAULT PRIVILEGES 必要な権限は以下のとおりです。
+ スーパーユーザー
+ ALTER DEFAULT PRIVILEGES の権限を持つユーザー
+ 自身のデフォルトのアクセス権限を変更しているユーザー
+ 自身がアクセス権限を持つスキーマの権限を設定しているユーザー

## 構文
<a name="r_ALTER_DEFAULT_PRIVILEGES-synopsis"></a>

```
ALTER DEFAULT PRIVILEGES
    [ FOR USER target_user [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    grant_or_revoke_clause

where grant_or_revoke_clause is one of:

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE  { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
```

## パラメータ
<a name="r_ALTER_DEFAULT_PRIVILEGES-parameters"></a>

FOR USER *target\$1user*  <a name="default-for-user"></a>
省略可能。デフォルト権限が定義されているユーザーの名前。他のユーザーに対しては、スーパーユーザーのみがデフォルト権限を指定できます。デフォルト値は現在のユーザーです。

IN SCHEMA *schema\$1name*   <a name="default-in-schema"></a>
省略可能。IN SCHEMA 句が表示されている場合、指定したデフォルト権限は、指定の *schema\$1name* で作成された新しいオブジェクトに適用されます。この場合、ALTER DEFAULT PRIVILEGES のターゲットであるユーザーまたはユーザーグループは、指定されたスキーマに対する CREATE権限が必要です。スキーマ固有のデフォルト権限は、既存のグローバルなデフォルト権限に追加されます。デフォルトでは、デフォルト権限はデータベース全体にグローバルに適用されます。

GRANT   <a name="default-grant"></a>
指定したユーザーが作成するすべての新しいテーブルとビュー、関数、またはストアドプロシージャについて、指定したユーザーやグループに付与する権限のセット。GRANT 句では、[GRANT](r_GRANT.md)コマンドと同じ権限とオプションを設定できます。

WITH GRANT OPTION   <a name="default-grant-option"></a>
権限を付与されるユーザーが、他のユーザーにも同じ権限を付与できることを示します。WITH GRANT OPTION をグループまたは PUBLIC に付与することはできません。

TO *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*   <a name="default-to"></a>
指定したデフォルト権限が適用されるユーザー、ロール、またはユーザーグループの名前。

REVOKE   <a name="default-revoke"></a>
指定したユーザーが作成するすべての新しいテーブル、関数、またはストアドプロシージャについて、指定したユーザーやグループから取り消す権限のセット。REVOKE 句では、[REVOKE](r_REVOKE.md)コマンドと同じ権限とオプションを設定できます。

GRANT OPTION FOR  <a name="default-revoke-option"></a>
 他のユーザーに特定の権限を付与するオプションのみを取り消し、権限自体は取り消しません。グループや PUBLIC の GRANT OPTION を取り消すことはできません。

FROM *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*  <a name="default-from"></a>
指定した権限をデフォルトで取り消すユーザー、ロール、またはユーザーグループの名前。

RESTRICT   <a name="default-restrict"></a>
RESTRICT オプションは、ユーザーが直接付与した権限のみを取り消します。これがデフォルトです。

## 例
<a name="r_ALTER_DEFAULT_PRIVILEGES-examples"></a>

ユーザーグループ `report_readers` に属する任意のユーザーに対して、ユーザー `report_admin` が作成したすべてのテーブルとビューを表示することを許可するとします。この場合は、スーパーユーザーとして次のコマンドを実行します。

```
alter default privileges for user report_admin grant select on tables to group report_readers; 
```

次の例では、最初のコマンドは、作成するすべての新しいテーブルに対する SELECT 権限を付与します。新しいビューを作成するたびに、ビューに対する権限を明示的に付与するか、`alter default privileges` コマンドを再度実行する必要があります。

```
alter default privileges grant select on tables to public; 
```

次の例では、`sales_admin`スキーマで作成するすべての新しいテーブルとビューに対して、`sales`ユーザーグループに INSERT 権限が付与されます。

```
alter default privileges in schema sales grant insert on tables to group sales_admin; 
```

次の例では、前の例とは逆に ALTER DEFAULT PRIVILEGES コマンドで権限を取り消します。

```
alter default privileges in schema sales revoke insert on tables from group sales_admin;
```

デフォルトでは、PUBLIC ユーザーグループはすべての新しいユーザー定義関数に対する実行許可を付与されます。新しい関数に対する `public` の実行許可を取り消して、`dev_test`ユーザーグループにのみ実行許可を付与するには、次のコマンドを実行します。

```
alter default privileges revoke execute on functions from public;
alter default privileges grant execute on functions to group dev_test;
```

# ALTER EXTERNAL SCHEMA
<a name="r_ALTER_EXTERNAL_SCHEMA"></a>

現在のデータベース内にある既存の外部スキーマを変更します。スキーマを変更できるのは、スキーマ所有者、スーパーユーザー、またはスキーマに対する ALTER 権限を持つユーザーのみです。DATA CATALOG、KAFKA、または MSK から作成された外部スキーマのみを変更できます。

このスキーマの所有者は CREATE EXTERNAL SCHEMA コマンドの発行者です。外部スキーマの所有者を移行するには、「ALTER SCHEMA」を使用して所有者を変更します。他のユーザーやユーザーグループに対してスキーマへのアクセス権を付与するには、GRANT コマンドを使用します。

外部テーブルのアクセス権限に対して、GRANT または REVOKE コマンドを使用することはできません。代わりに、外部スキーマに対するアクセス権限の付与または取り消しを実行します。

詳細については次を参照してください:
+ [ALTER SCHEMA](r_ALTER_SCHEMA.md)
+ [GRANT](r_GRANT.md)
+ [REVOKE](r_REVOKE.md)
+ [CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)
+ [既存の外部スキーマの mTLS 認証を有効にする](materialized-view-streaming-ingestion-mtls.md#materialized-view-streaming-ingestion-mtls-alter)

外部スキーマの詳細を表示するには、SVV\$1EXTERNAL\$1SCHEMAS システムビューにクエリを実行します。詳細については、「[SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md)」を参照してください。

## 構文
<a name="r_ALTER_EXTERNAL_SCHEMA-synopsis"></a>

```
ALTER EXTERNAL SCHEMA schema_name
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'asm-secret-arn' ]
[ URI 'Kafka bootstrap URL' ]
```

ストリーミングの取り込みに使用する既存の外部スキーマがあり、認証に相互 TLS を実装する場合は、次のようなコマンドを実行できます。このコマンドは、mTLS 認証と ACM の ACM 証明書 ARN を指定します。

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
AUTHENTICATION_ARN 'arn:aws:acm:us-east-1:444455556666:certificate/certificate_ID';
```

または、Secrets Manager でシークレット ARN を参照して、mTLS 認証を変更できます。

```
ALTER EXTERNAL SCHEMA schema_name 
AUTHENTICATION mtls
SECRET_ARN 'arn:aws:secretsmanager:us-east-1:012345678910:secret:myMTLSSecret';
```

次の例は、ALTER EXTERNAL SCHEMA の URI を変更する方法を示しています。

```
ALTER EXTERNAL SCHEMA schema_name  
URI 'lkc-ghidef-67890.centralus.azure.glb.confluent.cloud:9092';
```

次の例は、ALTER EXTERNAL SCHEMA の IAM ロールを変更する方法を示しています。

```
ALTER EXTERNAL SCHEMA schema_name  
IAM_ROLE 'arn:aws:iam::012345678901:role/testrole';
```

## パラメータ
<a name="r_ALTER_EXTERNAL_SCHEMA-parameters"></a>

 IAM\$1ROLE[ default \$1 'SESSION' \$1 'arn:aws:iam::<AWS account-id>:role/<role-name>' ]   
`default` キーワードを使用して、デフォルトとして設定された IAM ロールを Amazon Redshift で使用します。  
フェデレーション ID を使用して Amazon Redshift クラスターに接続し、このコマンドを使用して作成された外部スキーマからテーブルにアクセスする場合は、`'SESSION'` を使用します。  
詳細については、「[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。

AUTHENTICATION  
ストリーミング取り込み用に定義された認証タイプ。認証タイプによるストリーミング取り込みは、Apache Kafka、Confluent Cloud、Amazon Managed Streaming for Apache Kafka で機能します。詳細については、「[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。

AUTHENTICATION\$1ARN  
Amazon Redshift が Apache Kafka、Confluent Cloud、または Amazon Managed Streaming for Apache Kafka (Amazon MSK) との mtls 認証に使用する AWS Certificate Manager 証明書の ARN。ARN は、発行された証明書を選択する際に ACM コンソールで利用できます。

SECRET\$1ARN  
AWS Secrets Manager を使用して作成した、サポートされているシークレットの Amazon リソースネーム (ARN)。シークレットの ARN を作成および取得する方法については、「*AWS Secrets Manager User Guide*」の「[Manage secrets with AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)」および「[Amazon Redshift でのシークレットの Amazon リソースネーム (ARN) の取得](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html)」を参照してください。

[URI]  
Apache Kafka、Confluent Cloud、または Amazon Managed Streaming for Apache Kafka (Amazon MSK) クラスターのブートストラップ URL。エンドポイントは、Amazon Redshift クラスターから到達可能 (ルーティング可能) である必要があります。詳細については、「[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。

# ALTER EXTERNAL VIEW
<a name="r_ALTER_EXTERNAL_VIEW"></a>

ALTER EXTERNAL VIEW コマンドを使用して外部ビューを更新します。使用するパラメータによっては、このビューを参照できる Amazon Athena や Amazon EMR Spark などの他の SQL エンジンが影響を受ける可能性があります。Data Catalog ビューの詳細については、「[AWS Glue Data Catalog のビュー](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)」を参照してください。

## 構文
<a name="r_ALTER_EXTERNAL_VIEW-synopsis"></a>

```
ALTER EXTERNAL VIEW schema_name.view_name
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
[FORCE] { AS (query_definition) | REMOVE DEFINITION }
```

## パラメータ
<a name="r_ALTER_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
AWS Glue データベースにアタッチされているスキーマ。その後にビューの名前が続きます。

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
ビューを変更するときに使用するスキーマの表記法。AWS Glue Data Catalog、作成した Glue データベース、または作成した外部スキーマを使用するように指定できます。詳細については、「[CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)」と「[CREATE EXTERNAL SCHEMA](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。

FORCE  
テーブルで参照されているオブジェクトが他の SQL エンジンと矛盾している場合でも、AWS Lake Formation がビューの定義を更新する必要があるかどうか。Lake Formation がビューを更新すると、他の SQL エンジンも更新されるまで、そのビューはそれらの SQL エンジンに対して古いものと見なされます。

 *AS query\$1definition*   
Amazon Redshift がビューを変更するために実行する SQL クエリの定義。

REMOVE DEFINITION  
ビューを削除して再作成するかどうか。`PROTECTED` としてマークするには、ビューを削除して再作成する必要があります。

## 例
<a name="r_ALTER_EXTERNAL_VIEW-examples"></a>

次の例では、sample\$1schema.glue\$1data\$1catalog\$1view という名前のデータカタログビューを変更します。

```
ALTER EXTERNAL VIEW sample_schema.glue_data_catalog_view
FORCE
REMOVE DEFINITION
```

# ALTER FUNCTION
<a name="r_ALTER_FUNCTION"></a>

関数の名前変更または所有者の変更を行います。関数名とデータタイプの両方が必要です。所有者またはスーパーユーザーのみが関数名を変更できます。スーパーユーザーのみが関数の所有者を変更できます。

## 構文
<a name="r_ALTER_FUNCTION-synopsis"></a>

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     RENAME TO new_name
```

```
ALTER FUNCTION function_name ( { [ py_arg_name py_arg_data_type | sql_arg_data_type } [ , ... ] ] )
     OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## パラメータ
<a name="r_ALTER_FUNCTION-parameters"></a>

 *function\$1name*   
変更する関数の名前。関数名を現在の検索パスに指定するか、`schema_name.function_name` 形式で特定のスキーマを使用します。

*py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
オプション。Python ユーザー定義関数の入力引数名とデータ型のリスト、または SQL ユーザー定義関数の入力引数データ型のリスト。

 *new\$1name*   
ユーザー定義関数の新しい名前。

*new\$1owner* \$1 CURRENT\$1USER \$1 SESSION\$1USER  
ユーザー定義関数の新しい所有者。

## 例
<a name="r_ALTER_FUNCTION-examples"></a>

次の例では、関数の名前を `first_quarter_revenue` から `quarterly_revenue` に変更します。

```
ALTER FUNCTION first_quarter_revenue(bigint, numeric, int) 
         RENAME TO quarterly_revenue;
```

次の例は、`quarterly_revenue` 関数の所有者を `etl_user` に変更します。

```
ALTER FUNCTION quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER GROUP
<a name="r_ALTER_GROUP"></a>

ユーザーグループを変更します。ユーザーをグループに追加するか、グループからユーザーを削除するか、グループ名を変更するには、このコマンドを使用します。

## 構文
<a name="r_ALTER_GROUP-synopsis"></a>

```
ALTER GROUP group_name
{
ADD USER username [, ... ] |
DROP USER username [, ... ] |
RENAME TO new_name
}
```

## パラメータ
<a name="r_ALTER_GROUP-parameters"></a>

 *group\$1name*   
変更するユーザーグループの名前。

ADD   
ユーザーをユーザーグループに追加します。

DROP   
ユーザーグループからユーザーを削除します。

 * ユーザー名*   
グループに追加するかグループから削除するユーザーの名前。

RENAME TO   
ユーザーグループの名前を変更します。2 個のアンダースコアで始まるグループ名は Amazon Redshift 内部で使用するために予約されています。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

 *new\$1name*   
ユーザーグループの新しい名前。

## 例
<a name="r_ALTER_GROUP-examples"></a>

次の例では、DWUSER という名前のユーザーを ADMIN\$1GROUP グループに追加します。

```
ALTER GROUP admin_group
ADD USER dwuser;
```

次の例では、グループ名を ADMIN\$1GROUP から ADMINISTRATORS に変更します。

```
ALTER GROUP admin_group
RENAME TO administrators;
```

次の例では、ADMIN\$1GROUP グループに 2 人のユーザーを追加します。

```
ALTER GROUP admin_group
ADD USER u1, u2;
```

次の例では、ADMIN\$1GROUP グループから 2 人のユーザーを削除します。

```
ALTER GROUP admin_group
DROP USER u1, u2;
```

# 他の ID プロバイダー
<a name="r_ALTER_IDENTITY_PROVIDER"></a>

ID プロバイダーを変更して、新しいパラメータと値を割り当てます。このコマンドを実行すると、新しい値が割り当てられる前に、以前に設定したパラメータ値がすべて削除されます。スーパーユーザーのみが ID プロバイダーを変更できます。

## 構文
<a name="r_ALTER_IDENTITY_PROVIDER-synopsis"></a>

```
ALTER IDENTITY PROVIDER identity_provider_name
[PARAMETERS parameter_string]
[NAMESPACE namespace]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
[DISABLE | ENABLE]
```

## パラメータ
<a name="r_ALTER_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
ID プロバイダーの名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

 *parameter\$1string*   
特定の ID プロバイダーに必要なパラメータと値を含む、適切にフォーマットされた JSON オブジェクトを含む文字列。

 * 名前空間*   
組織の名前空間。

 *iam\$1role*   
IAM アイデンティティセンターへの接続に対するアクセス許可を提供する IAM ロール。このパラメータは、ID プロバイダーのタイプが AWSIDC である場合にのみ適用されます。

 *auto\$1create\$1roles*   
ロールの自動作成機能を有効または無効にします。値が TRUE の場合、Amazon Redshift はロールの自動作成機能を有効にします。値が FALSE の場合、Amazon Redshift はロールの自動作成機能を無効にします。このパラメータの値が指定されていない場合、Amazon Redshift は次のロジックを使用して値を決定します。  
+  `AUTO_CREATE_ROLES` が指定されていても値が指定されていない場合、値は TRUE に設定されます。
+  `AUTO_CREATE_ROLES` が指定されておらず、ID プロバイダーが AWSIDC の場合、値は FALSE に設定されます。
+  `AUTO_CREATE_ROLES` が指定されておらず、ID プロバイダーが Azure の場合、値は TRUE に設定されます。
グループを含めるには、`INCLUDE` を指定します。デフォルトは空です。つまり、`AUTO_CREATE_ROLES` がオンの場合、すべてのグループが含まれます。  
グループを除外するには、`EXCLUDE` を指定します。デフォルトは空です。つまり、`AUTO_CREATE_ROLES` がオンの場合、グループは除外されません。

 *filter\$1pattern*   
グループ名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_ALTER_IDENTITY_PROVIDER.html)
*filter\$1pattern* にメタ文字が含まれていない場合、パターンは文字列そのものを表すだけです。この場合、LIKE は等号演算子と同じ働きをします。  
*filter\$1pattern* は、次の文字をサポートしています。  
+  大文字と小文字のアルファベット文字 (A-Z および a-z) 
+  数値 (0-9) 
+  以下の特殊文字。

  ```
  _ % ^ * + ? { } , $
  ```

 *DISABLE または ENABLE*   
ID プロバイダーをオンまたはオフにします。デフォルトは ENABLE です。

## 例
<a name="r_ALTER_IDENTITY_PROVIDER-examples"></a>

次の例では、*oauth\$1standard* という名前の ID プロバイダーを変更します。Microsoft Azure AD が ID プロバイダーである場合に特に適用されます。

```
ALTER IDENTITY PROVIDER oauth_standard
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

次のサンプルは、ID プロバイダー名前空間を設定する方法を示しています。これは、Microsoft Azure AD (前のサンプルのようなステートメントに従う場合)、または別の ID プロバイダーに適用できます。マネージドアプリケーションを介して接続を設定している場合、既存の Amazon Redshift でプロビジョニングされたクラスターまたは Amazon Redshift Serverless ワークグループを IAM アイデンティティセンターに接続する場合にも適用できます。

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
NAMESPACE 'MYCO';
```

次の IAM ロールを設定する例は、Redshift と IAM アイデンティティセンターの統合を設定するユースケースで使用できます。

```
ALTER IDENTITY PROVIDER "my-redshift-idc-application"
IAM_ROLE 'arn:aws:iam::123456789012:role/myadministratorrole';
```

Redshift から IAM アイデンティティセンターへの接続の設定の詳細については、[「Redshift を IAM アイデンティティセンターに接続してユーザーにシングルサインオンエクスペリエンスを提供する](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html)」を参照してください。

**ID プロバイダーの無効化**

次のサンプルステートメントは、ID プロバイダーを無効にする方法を示しています。無効にした場合、再度有効にするまで、ID プロバイダーのフェデレーションユーザーはクラスターにログインできません。

```
ALTER IDENTITY PROVIDER "redshift-idc-app" DISABLE;
```

# ALTER MASKING POLICY
<a name="r_ALTER_MASKING_POLICY"></a>

既存の動的データマスキングポリシーを変更します。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールは、マスキングポリシーを変更できます。

## 構文
<a name="r_ALTER_MASKING_POLICY-synopsis"></a>

```
ALTER MASKING POLICY
{ policy_name | database_name.policy_name }
USING (masking_expression);
```

## パラメータ
<a name="r_ALTER_MASKING_POLICY-parameters"></a>

*policy\$1name*   
 マスキングポリシーの名前。これは、データベースに既に存在するマスキングポリシーの名前でなければなりません。

database\$1name  
ポリシーの作成元のデータベースの名前。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

*masking\$1expression*  
ターゲット列の変換に使用される SQL 式。文字列操作関数などのデータ操作関数を使用して記述することも、SQL、Python、または AWS Lambda で記述されたユーザー定義関数と組み合わせて記述することもできます。  
 式は、元の式の入力列およびデータ型に一致する必要があります。例えば、元のマスキングポリシーの入力列が `sample_1 FLOAT` と `sample_2 VARCHAR(10)` である場合、3 番目の列を使用するようにマスキングポリシーを変更したり、ポリシーが FLOAT と BOOLEAN を取るようにしたりすることはできません。マスク式として定数を使用する場合は、入力型と一致する型に明示的にキャストする必要があります。  
 マスキング式で使用するユーザー定義関数には USAGE アクセス許可が必要です。

Amazon Redshift フェデレーティッドアクセス許可カタログでの ALTER MASKING POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

# ALTER MATERIALIZED VIEW
<a name="r_ALTER_MATERIALIZED_VIEW"></a>

マテリアライズドビューの属性を変更します。

## 構文
<a name="r_ALTER_MATERIALIZED_VIEW-synopsis"></a>

```
ALTER MATERIALIZED VIEW mv_name
{
AUTO REFRESH { YES | NO } 
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [FOR DATASHARES]
};
```

## パラメータ
<a name="r_ALTER_MATERIALIZED_VIEW-parameters"></a>

*mv\$1name*  
変更するマテリアライズドビューの名前。

AUTO REFRESH \$1 YES \$1 NO \$1  
マテリアライズドビューの自動更新をオンまたはオフにする句。マテリアライズドビューの自動更新の詳細については、「[マテリアライズドビューの更新](materialized-view-refresh.md)」を参照してください。

ALTER DISTSTYLE ALL  
リレーションの既存の分散スタイルを `ALL` に変更する句。以下の点を考慮してください。  
+ ALTER DISTSTYLE、ALTER SORTKEY、および VACUUM を同じリレーションに対して同時に実行することはできません。
  + VACUUM を実行中に、ALTER DISTSTYLE ALL を実行すると、エラーが返されます。
  + ALTER DISTSTYLE ALL が実行されている場合は、リレーションに対するバックグラウンドの VACUUM は開始しません。
+ ALTER DISTSTYLE ALL コマンドは、インターリーブソートキーを持つリレーションおよび一時テーブルではサポートされていません。
+ 分散スタイルが以前に AUTO として定義されていた場合、そのリレーションは自動テーブル最適化の候補ではなくなります。
DISTSTYLE ALL の詳細については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。

ALTER DISTSTYLE EVEN  
リレーションの既存の分散スタイルを `EVEN` に変更する句。以下の点を考慮してください。  
+ ALTER DISTSYTLE、ALTER SORTKEY、および VACUUM を同じリレーションに対して同時に実行することはできません。
  + VACUUM を実行中である場合、ALTER DISTSTYLE EVEN を実行すると、エラーが返されます。
  + ALTER DISTSTYLE EVEN が実行されている場合は、リレーションに対するバックグラウンドの VACUUM は開始しません。
+ ALTER DISTSTYLE EVEN コマンドは、インターリーブソートキーを持つリレーションおよび一時テーブルではサポートされていません。
+ 分散スタイルが以前に AUTO として定義されていた場合、そのリレーションは自動テーブル最適化の候補ではなくなります。
DISTSTYLE EVEN の詳細については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。

ALTER DISTKEY *column\$1name* または ALTER DISTSTYLE KEY DISTKEY *column\$1name*  
リレーションの分散キーとして使用される列を変更する句。以下の点を考慮してください。  
+ 同じリレーションに対して、VACUUM と ALTER DISTKEY を同時に実行することはできません。
  + VACUUM がすでに実行されている場合は、ALTER DISTKEY よりエラーが返ります。
  + ALTER DISTKEY が実行されている場合は、リレーションに対するバックグラウンドの VACUUM は開始しません。
  + ALTER DISTKEY が実行されている場合は、フォアグラウンドバキュームよりエラーが返ります。
+ ALTER DISTKEY コマンドは、1 つのリレーションに対して一度に 1 回のみ実行できます。
+ ALTER DISTKEY コマンドは、インターリーブソートキーを持つリレーションではサポートされていません。
+ 分散スタイルが以前に AUTO として定義されていた場合、そのリレーションは自動テーブル最適化の候補ではなくなります。
DISTSTYLE KEY を指定する場合、データは、DISTKEY 列の値で分散されます。DISTSTYLE の詳細については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。

ALTER DISTSTYLE AUTO  
リレーションの既存の分散スタイルを AUTO に変更する句。  
分散スタイルを AUTO に変更すると、リレーションの分散スタイルは次のように設定されます。  
+ DISTSTYLE ALL の小さなリレーションは、AUTO(ALL) に変換されます。
+ DISTSTYLE EVEN の小さなリレーションは、AUTO(ALL) に変換されます。
+ DISTSTYLE KEY の小さなリレーションは、AUTO(ALL) に変換されます。
+ DISTSTYLE ALL の大きなリレーションは、AUTO(EVEN) に変換されます。
+ DISTSTYLE EVEN の大きなリレーションは、AUTO(EVEN) に変換されます。
+ DISTSTYLE KEY の大きなリレーションは AUTO(KEY) に変換され、DISTKEY は保持されます。この場合、Amazon Redshift はリレーションに変更を加えません。
Amazon Redshift は、新しい分散スタイルまたはキーでクエリのパフォーマンスが向上すると判断した場合、リレーションの分散スタイルまたはキーを将来的に変更する可能性があります。例えば、DISTSTYLE が AUTO (KEY) のリレーションを AUTO(EVEN) に、またはその逆に変更する場合があります。分散キーが変更されたときの動作 (データの再分散やロックなど) の詳細については、「[Amazon Redshift Advisor のレコメンデーション](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation)」を参照してください。  
DISTSTYLE AUTO の詳細については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。  
リレーションの分散スタイルを表示するには、SVV\$1TABLE\$1INFO システムカタログビューをクエリします。詳細については、「[SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)」を参照してください。リレーションに対する Amazon Redshift Advisor のレコメンデーションを表示するには、SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「[SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md)」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL\$1AUTO\$1WORKER\$1ACTION システムカタログビューにクエリを実行します。詳細については、「[SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md)」を参照してください。

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
リレーションで使用されるソートキーを変更または追加する句。ALTER SORTKEY は一時テーブルではサポートされていません。  
ソートキーを変更すると、新しいソートキーまたは元のソートキーの列の圧縮エンコードが変更される場合があります。リレーションに対してエンコードが明示的に定義されていない場合、Amazon Redshift は、次のように圧縮エンコードを自動的に割り当てます。  
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、または DOUBLE PRECISION データ型として定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR または VARCHAR として定義された列には、LZO 圧縮が割り当てられます。
以下の点を考慮してください。  
+ ソートキーには、リレーションあたり最大 400 列を定義できます。
+ インターリーブソートキーは、複合ソートキーに変更することが可能です。あるいは、ソートキーなしに変更することもできます。ただし、複合ソートキーをインターリーブソートキーに変更することはできません。
+ ソートキーが以前に AUTO として定義されていた場合、そのリレーションは自動テーブル最適化の候補ではなくなります。
+ Amazon Redshift では、ソートキーとして定義された列に RAW エンコード (圧縮なし) を使用することをお勧めします。列を変更してソートキーとして選択すると、列の圧縮が RAW 圧縮 (圧縮なし) に変更されます。これを受けて、リレーションに必要なストレージ量が増加する可能性があります。リレーションのサイズがどれだけ大きくなるかは、特定のリレーション定義とリレーションのコンテンツによって異なります。圧縮の詳細については、「[圧縮エンコード](c_Compression_encodings.md)」を参照してください。
データがリレーションにロードされる際、ソートキーの順序でロードされます。ソートキーが変更されると、Amazon Redshift によってデータの順序が変更されます。SORTKEY の詳細については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。

ALTER SORTKEY AUTO  
ターゲットリレーションのソートキーを AUTO に変更または追加する句。ALTER SORTKEY AUTO は一時テーブルではサポートされていません。  
ソートキーを AUTO に変更した場合は、そのリレーションの既存のソートキーが維持されます。  
Amazon Redshift は、新しいソートキーでクエリのパフォーマンスが向上すると判断した場合、リレーションのソートキーを将来的に変更する可能性があります。  
SORTKEY AUTO の詳細については、「[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)」を参照してください。  
リレーションのソートキーを表示するには、SVV\$1TABLE\$1INFO システムカタログビューをクエリします。詳細については、「[SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)」を参照してください。リレーションに対する Amazon Redshift Advisor のレコメンデーションを表示するには、SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「[SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md)」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL\$1AUTO\$1WORKER\$1ACTION システムカタログビューにクエリを実行します。詳細については、「[SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md)」を参照してください。

ALTER SORTKEY NONE  
ターゲットリレーションのソートキーを削除する句。  
ソートキーが以前に AUTO として定義されていた場合、そのリレーションは自動テーブル最適化の候補ではなくなります。

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
リレーションの行レベルのセキュリティをオンまたはオフにする句。  
リレーションで行レベルのセキュリティがオンになっている場合、行レベルのセキュリティポリシーでアクセスが許可されている行のみを読み取ることができます。リレーションへのアクセス権を付与するポリシーがない場合は、リレーションから行を表示できません。ROW LEVEL SECURITY 句を設定できるのは、スーパーユーザーと、`sys:secadmin` ロールを持つユーザーまたはロールのみです。詳細については、「[行レベルのセキュリティ](t_rls.md)」を参照してください。  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  リレーションの行レベルのセキュリティポリシーの結合タイプを選択できる句。1 つのリレーションに複数の行レベルのセキュリティポリシーがアタッチされている場合、それらのポリシーを AND 句や OR 句で組み合わせることができます。デフォルトでは、Amazon Redshift は RLS ポリシーを AND 句で組み合わせます。スーパーユーザーと、`sys:secadmin` ロールを持つユーザーまたはロールは、この句を使用して、リレーションの行レベルのセキュリティポリシーの結合タイプを定義できます。詳細については、「[ユーザーごとに複数ポリシーの組み合わせ](t_rls_combine_policies.md)」を参照してください。
+ FOR DATASHARES

   RLS で保護されたリレーションにデータ共有上でアクセスできるかどうかを決定する句。デフォルトでは、RLS で保護されたリレーションにデータ共有経由でアクセスすることはできません。この句を指定して実行される ALTER MATERIALIZED VIEW ROW LEVEL SECURITY コマンドは、リレーションのデータ共有アクセシビリティプロパティにのみ影響します。ROW LEVEL SECURITY のプロパティは変更されません。

   RLS で保護されたリレーションにデータ共有上でアクセスできるようにした場合、コンシューマー側のデータ共有データベースにおいて、そのリレーションには行レベルのセキュリティが適用されません。リレーションはプロデューサー側の RLS プロパティを保持します。

## 例
<a name="r_ALTER_MATERIALIZED_VIEW-examples"></a>

次の例では、`tickets_mv` マテリアライズドビューを自動的に更新できます。

```
ALTER MATERIALIZED VIEW tickets_mv AUTO REFRESH YES
```

# ALTER MATERIALIZED VIEW の DISTSTYLE と SORTKEY の例
<a name="r_ALTER_MATERIALIZED_VIEW-DISTSTYLE-SORTKEY-examples"></a>

このトピックの例では、ALTER MATERIALIZED VIEW を使用して DISTSTYLE および SORTKEY の変更を実行する方法を示します。

次のクエリ例は、サンプルベーステーブルを使用して DISTSTYLE KEY DISTKEY 列を変更する方法を示しています。

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER diststyle KEY distkey inv_warehouse_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER distkey inv_item_sk;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

マテリアライズドビューを DISTSTYLE ALL に変更します。

```
CREATE TABLE base_inventory(
  inv_date_sk int4 NOT NULL,
  inv_item_sk int4 NOT NULL,
  inv_warehouse_sk int4 NOT NULL,
  inv_quantity_on_hand int4
);

INSERT INTO base_inventory VALUES(1,1,1,1);

CREATE materialized VIEW inventory diststyle even AS SELECT * FROM base_inventory;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

ALTER MATERIALIZED VIEW inventory ALTER diststyle ALL;
SELECT "table", diststyle FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

次のコマンドは、サンプルベーステーブルを使用した ALTER MATERIALIZED VIEW SORTKEY の例を示しています。

```
CREATE TABLE base_inventory (c0 int, c1 int);

INSERT INTO base_inventory VALUES(1,1);

CREATE materialized VIEW inventory interleaved sortkey(c0, c1) AS SELECT * FROM base_inventory;
SELECT "table", sortkey1 FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0, c1);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey NONE;
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

ALTER materialized VIEW inventory ALTER sortkey(c0);
SELECT "table", diststyle, sortkey_num FROM svv_table_info WHERE "table" = 'inventory';

DROP TABLE base_inventory CASCADE;
```

# RLS ポリシーの変更
<a name="r_ALTER_RLS_POLICY"></a>

テーブル上の既存の行レベルのセキュリティポリシーを変更します。

スーパーユーザーとユーザー、または `sys:secadmin` ロールを持つロールは、ポリシーを変更できます。

## 構文
<a name="r_ALTER_RLS_POLICY-synopsis"></a>

```
ALTER RLS POLICY
{ policy_name | database_name.policy_name }
USING ( using_predicate_exp );
```

## パラメータ
<a name="r_ALTER_RLS_POLICY-parameters"></a>

 *policy\$1name*   
ポリシーの名前。

database\$1name  
ポリシーの作成元のデータベースの名前。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

USING (*using\$1predicate\$1exp*)  
クエリの WHERE 句に適用されるフィルターを指定します。Amazon Redshift は、クエリレベルのユーザー述語より先にポリシー述語を適用します。例えば、**current\$1user = ‘joe’ and price > 10** は Joe に対して価格が 10 USD を超えるレコードのみを表示するように制限します。  
この式は、policy\$1name という名前のポリシーの作成に使用された CREATE RLS POLICY ステートメントの WITH 句で宣言された変数にアクセスできます。

Amazon Redshift フェデレーティッドアクセス許可カタログでの ALTER RLS ポリシーの使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

## 例
<a name="r_ALTER_RLS_POLICY-examples"></a>

次の例では、RLS ポリシーを変更します。

```
-- First create an RLS policy that limits access to rows where catgroup is 'concerts'.
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'concerts');

-- Then, alter the RLS policy to only show rows where catgroup is 'piano concerts'.
ALTER RLS POLICY policy_concerts
USING (catgroup = 'piano concerts');
```

# ALTER ROLE
<a name="r_ALTER_ROLE"></a>

ロールの名前変更または所有者の変更を行います。Amazon Redshift でのシステム定義のロールのリストについては、「[Amazon Redshift でのシステム定義のロール](r_roles-default.md)」を参照してください。

## 必要なアクセス許可
<a name="r_ALTER_ROLE-privileges"></a>

ALTER ROLE に必要なアクセス許可を以下に示します。
+ スーパーユーザー
+ ALTER ROLE アクセス許可を持つユーザー

## 構文
<a name="r_ALTER_ROLE-synopsis"></a>

```
ALTER ROLE role [ WITH ]
  { { RENAME TO role } | { OWNER TO user_name } }[, ...]
  [ EXTERNALID TO external_id ]
```

## パラメータ
<a name="r_ALTER_ROLE-parameters"></a>

 *ロール*   
変更するロールの名前。

RENAME TO  
ロールの新しい名前。

OWNER TO *user\$1name*  
ロールの新しい所有者。

EXTERNALID TO *external\$1id*  
ID プロバイダーに関連付けられた、ロールの新しい外部 ID。詳細については、「[Amazon Redshift のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。

## 例
<a name="r_ALTER_ROLE-examples"></a>

次の例では、ロールの名前を `sample_role1` から `sample_role2` に変更します。

```
ALTER ROLE sample_role1 RENAME TO sample_role2;
```

次の例では、ロールの所有者を変更します。

```
ALTER ROLE sample_role1 WITH OWNER TO user1
```

ALTER ROLE の構文は、次の ALTER PROCEDURE の構文に類似しています。

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

次の例では、プロシージャの所有者を `etl_user` に変更します。

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

次の例では、ID プロバイダーに関連付けられている新しい外部 ID を使用してロール `sample_role1` を更新します。

```
ALTER ROLE sample_role1 EXTERNALID TO "XYZ456";
```

# ALTER PROCEDURE
<a name="r_ALTER_PROCEDURE"></a>

プロシージャ名または所有者を変更します。プロシージャとデータタイプ (署名) の両方が必要です。所有者またはスーパーユーザーのみがプロシージャ名を変更できます。スーパーユーザーのみがプロシージャの所有者を変更できます。

## 構文
<a name="r_ALTER_PROCEDURE-synopsis"></a>

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    RENAME TO new_name
```

```
ALTER PROCEDURE sp_name [ ( [ [ argname ] [ argmode ] argtype [, ...] ] ) ]
    OWNER TO { new_owner | CURRENT_USER | SESSION_USER }
```

## パラメータ
<a name="r_ALTER_PROCEDURE-parameters"></a>

 *sp\$1name*   
変更するプロシージャ名。プロシージャ名のみを現在の検索パスに指定するか、`schema_name.sp_procedure_name`形式で特定のスキーマを使用します。

*[argname] [argmode] argtype*   
引数の名前、モード、およびデータタイプのリスト。入力データタイプのみが必須です。これは、ストアドプロシージャの識別に使用されます。または、入力パラメータと出力パラメータをモードと共に含めて、プロシージャを作成するために使用する完全な署名を指定することもできます。

 *new\$1name*   
ストアドプロシージャの新しい名前。

*new\$1owner* \$1 CURRENT\$1USER \$1 SESSION\$1USER  
ストアドプロシージャの新しい所有者。

## 例
<a name="r_ALTER_PROCEDURE-examples"></a>

次の例では、プロシージャ名を `first_quarter_revenue` から `quarterly_revenue` に変更します。

```
ALTER PROCEDURE first_quarter_revenue(volume INOUT bigint, at_price IN numeric,
 result OUT int) RENAME TO quarterly_revenue;
```

この例は以下と同等です。

```
ALTER PROCEDURE first_quarter_revenue(bigint, numeric) RENAME TO quarterly_revenue;
```

次の例では、プロシージャの所有者を `etl_user` に変更します。

```
ALTER PROCEDURE quarterly_revenue(bigint, numeric) OWNER TO etl_user;
```

# ALTER SCHEMA
<a name="r_ALTER_SCHEMA"></a>

既存のスキーマの定義を変更します。スキーマ名を変更するかスキーマの所有者を変更するには、このコマンドを使用します。例えば、既存のスキーマの新しいバージョンを作成する予定がある場合、そのスキーマの名前を変更して、そのスキーマのバックアップコピーを保存します。スキーマの詳細については、「[CREATE SCHEMA](r_CREATE_SCHEMA.md)」を参照してください。

構成済みのスキーマクォータを表示するには、「[SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md)」を参照してください。

スキーマクォータを超過したレコードを表示するには、「[STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md)」を参照してください。

## 必要な権限
<a name="r_ALTER_SCHEMA-privileges"></a>

ALTER SCHEMA に必要な権限を以下に示します。
+ スーパーユーザー
+ ALTER SCHEMA 権限を持つユーザー
+ スキーマの所有者

スキーマ名を変更する場合、ストアドプロシージャやマテリアライズドビューなど、古い名前を使用しているオブジェクトは、新しい名前を使用するように更新する必要があることに注意してください。

## 構文
<a name="r_ALTER_SCHEMA-synopsis"></a>

```
ALTER SCHEMA schema_name
{
RENAME TO new_name |
OWNER TO new_owner |
QUOTA { quota [MB | GB | TB] | UNLIMITED }
}
```

## パラメータ
<a name="r_ALTER_SCHEMA-parameters"></a>

 *schema\$1name*   
変更するデータベーススキーマの名前。

RENAME TO   
スキーマの名前を変更する句。

 *new\$1name*   
スキーマの新しい名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

OWNER TO   
スキーマの所有者を変更する句。

 *new\$1owner*   
スキーマの新しい所有者。

QUOTA   
指定したスキーマが使用できる最大ディスク容量。この容量は指定したスキーマのすべてのテーブルを合わせたサイズです。Amazon Redshift は選択した値をメガバイトに変換します。値を指定しない場合、デフォルトの測定単位はギガバイトです。  
スキーマクォータ設定の詳細については、「[CREATE SCHEMA](r_CREATE_SCHEMA.md)」を参照してください。

## 例
<a name="r_ALTER_SCHEMA-examples"></a>

次の例では、スキーマの名前を SALES から US\$1SALES に変更します。

```
alter schema sales
rename to us_sales;
```

次の例では、US\$1SALES スキーマの所有権をユーザー DWUSER に与えます。

```
alter schema us_sales
owner to dwuser;
```

以下の例では、クォータを 300 GB に変更し、クォータを削除します。

```
alter schema us_sales QUOTA 300 GB;
alter schema us_sales QUOTA UNLIMITED;
```

# ALTER SYSTEM
<a name="r_ALTER_SYSTEM"></a>

Amazon Redshift クラスターまたは Redshift Serverless ワークグループのシステムレベルの設定オプションを変更します。

## 必要な権限
<a name="r_ALTER_SYSTEM-privileges"></a>

次のいずれかのユーザータイプで ALTER SYSTEM コマンドを実行できます。
+ スーパーユーザー
+ 管理者ユーザー

## 構文
<a name="r_ALTER_SYSTEM-synopsis"></a>

```
ALTER SYSTEM SET system-level-configuration = {true| t | on | false | f | off}
```

## パラメータ
<a name="r_ALTER_SYSTEM-parameters"></a>

 *system-level-configuration*   
システムレベルの設定。有効な値: `data_catalog_auto_mount` および `metadata_security`。

\$1true\$1 t \$1 on \$1 false \$1 f \$1 off\$1   
システムレベルの設定を有効または無効にする値。`true`、`t`、または `on` は、設定を有効にすることを示します。`false`、`f`、または `off` は、設定を無効にすることを示します。

## 使用に関する注意事項
<a name="r_ALTER_SYSTEM-usage-notes"></a>

プロビジョニングされたクラスターの場合、`data_catalog_auto_mount` への変更はクラスターの次回の再起動時に有効になります。詳細については、「Amazon Redshift 管理ガイド」の「[クラスターの再起動](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-clusters-console.html#reboot-cluster)」を参照してください。**

サーバーレスワークグループでは、`data_catalog_auto_mount` への変更はすぐには有効になりません。

## 例
<a name="r_ALTER_SYSTEM-examples"></a>

次の例では、AWS Glue Data Catalog の自動マウントを有効にします。

```
ALTER SYSTEM SET data_catalog_auto_mount = true;
```

次の例では、メタデータのセキュリティを有効にします。

```
ALTER SYSTEM SET metadata_security = true;
```

### デフォルトの ID 名前空間の設定
<a name="r_ALTER_SYSTEM-identity"></a>

この例は ID プロバイダー専用です。Redshift を IAM アイデンティティセンターおよび ID プロバイダーと統合して、Redshift および AWS の他のサービスの ID 管理を一元化できます。

次のサンプルは、システムのデフォルトの ID 名前空間を設定する方法を示しています。これにより、各 ID のプレフィックスとして名前空間を含める必要がなくなるため、GRANT ステートメントと CREATE ステートメントの実行がより簡単になります。

```
ALTER SYSTEM SET default_identity_namespace = 'MYCO';
```

コマンドを実行したら、次のようなステートメントを実行できます。

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
               
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

デフォルトの ID 名前空間を設定すると、ID ごとに名前空間をプレフィックスとして指定する必要がなくなります。この例では、`alice` が `MYCO:alice` に置き換えられます。これは、含まれているすべての ID で発生します。Redshift での ID プロバイダーの使用の詳細については、「[Redshift を IAM アイデンティティセンターに接続してユーザーにシングルサインオンエクスペリエンスを提供する](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html)」を参照してください。

IAM アイデンティティセンターでの Redshift 構成に関連する設定の詳細については、「[SET](r_SET.md)」および「[他の ID プロバイダー](r_ALTER_IDENTITY_PROVIDER.md)」を参照してください。

# ALTER TABLE
<a name="r_ALTER_TABLE"></a>

このコマンドは、Amazon Redshift テーブルまたは Amazon Redshift Spectrum 外部テーブルの定義を変更します。このコマンドは、[CREATE TABLE](r_CREATE_TABLE_NEW.md) または [CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) によって設定された値とプロパティを更新します。ALTER TABLE は、行レベルセキュリティ (RLS) のビューで使用できます。

トランザクションブロック (BEGIN ... END) 内の外部テーブルに対して ALTER TABLE を実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

ALTER TABLE は、ALTER TABLE オペレーションを囲むトランザクションが完了するまで、テーブルの読み取りと書き込みのオペレーションをロックします。ただし、データに対するクエリの実行や、変更中のテーブルに対して他の処理の実行が可能であるとドキュメントに明記されている場合を除きます。

## 必要な権限
<a name="r_ALTER_TABLE-privileges"></a>

テーブルを変更するユーザーがコマンドを正常に実行するには、適切な権限が必要です。ALTER TABLE コマンドによっては、次のいずれかの権限が必要です。
+ スーパーユーザー
+ ALTER TABLE の権限を持つユーザー
+ スキーマに対する USAGE 権限を持つテーブル所有者

## 構文
<a name="r_ALTER_TABLE-synopsis"></a>

```
ALTER TABLE table_name
{
ADD table_constraint
| DROP CONSTRAINT constraint_name [ RESTRICT | CASCADE ]
| OWNER TO new_owner
| RENAME TO new_name
| RENAME COLUMN column_name TO new_name
| ALTER COLUMN column_name TYPE updated_varchar_data_type_size
| ALTER COLUMN column_name ENCODE new_encode_type
| ALTER COLUMN column_name ENCODE encode_type,
| ALTER COLUMN column_name ENCODE encode_type, .....;
| ALTER DISTKEY column_name
| ALTER DISTSTYLE ALL
| ALTER DISTSTYLE EVEN
| ALTER DISTSTYLE KEY DISTKEY column_name
| ALTER DISTSTYLE AUTO
| ALTER [COMPOUND] SORTKEY ( column_name [,...] )
| ALTER SORTKEY AUTO
| ALTER SORTKEY NONE
| ALTER ENCODE AUTO
| ADD [ COLUMN ] column_name column_type
  [ DEFAULT default_expr ]
  [ ENCODE encoding ]
  [ NOT NULL | NULL ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ] |
| DROP [ COLUMN ] column_name [ RESTRICT | CASCADE ] 
| ROW LEVEL SECURITY { ON | OFF } [ CONJUNCTION TYPE { AND | OR } ] [ FOR DATASHARES ]
| MASKING { ON | OFF } FOR DATASHARES }

where table_constraint is:

[ CONSTRAINT constraint_name ]
{ UNIQUE ( column_name [, ... ] )
| PRIMARY KEY ( column_name [, ... ] )
| FOREIGN KEY (column_name [, ... ] )
   REFERENCES  reftable [ ( refcolumn ) ]}

The following options apply only to external tables:

SET LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
| SET FILE FORMAT format |
| SET TABLE PROPERTIES ('property_name'='property_value')
| PARTITION ( partition_column=partition_value [, ...] )
  SET LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
| ADD [IF NOT EXISTS]
    PARTITION ( partition_column=partition_value [, ...] ) LOCATION { 's3://bucket/folder' |'s3://bucket/manifest_file' }
    [, ... ]
| DROP PARTITION ( partition_column=partition_value [, ...] )
```

ALTER TABLE コマンドの実行時間を短縮するために、ALTER TABLE コマンドの一部の句を組み合わせることができます。

Amazon Redshift では、ALTER TABLE の句の次の組み合わせがサポートされています。

```
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTKEY column_Id;
ALTER TABLE tablename ALTER DISTKEY column_Id, ALTER SORTKEY (column_list);
ALTER TABLE tablename ALTER SORTKEY (column_list), ALTER DISTSTYLE ALL;
ALTER TABLE tablename ALTER DISTSTYLE ALL, ALTER SORTKEY (column_list);
```

## パラメータ
<a name="r_ALTER_TABLE-parameters"></a>

 *table\$1name*   
変更するテーブルの名前 テーブル名のみを指定するか、*schema\$1name.table\$1name* 形式で特定のスキーマを使用します。外部テーブルは、外部スキーマの名前によって修飾される必要があります。また、ALTER TABLE ステートメントを使用してビュー名かビューの所有者を変更する場合、ビュー名を指定することもできます。テーブル名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

ADD *table\$1constraint*   
指定した制約をテーブルに追加する句。有効な *table\$1constraint* 値については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。  
プライマリキー制約を null が許容された列に追加することはできません。列が元々 NOT NULL 制約で作成された場合、プライマリキー制約を追加できます。

DROP CONSTRAINT *constraint\$1name*   
テーブルから指名された制約を削除する句。制約を削除するには、制約タイプではなく制約の名前を指定します。テーブルの制約名を表示するには、次のクエリを実行します。  

```
select constraint_name, constraint_type
from information_schema.table_constraints;
```

RESTRICT   
指定の制約のみを削除する句。RESTRICT は DROP CONSTRAINT のオプションです。RESTRICT を CASCADE と併用することはできません。

CASCADE   
指定の制約と同制約に依存するすべてを削除する句。CASCADE は DROP CONSTRAINT のオプションです。CASCADE を RESTRICT と併用することはできません。

OWNER TO *new\$1owner*   
テーブル (またはビュー) の所有者を *new\$1owner* 値に変更する句。

RENAME TO *new\$1name*   
テーブル (またはビュー) の名前を *new\$1name* で指定された値に変更する句。テーブル名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。  
永続テーブルの名前を「\$1」で始まる名前に変更することはできません。「\$1」で始まるテーブル名は、一時テーブルを示します。  
外部テーブル名を変更することはできません。

ALTER COLUMN *column\$1name* TYPE *updated\$1varchar\$1data\$1type\$1size*   
VARCHAR データ型と定義されている列のサイズを変更する句。この句は VARCHAR データ型のサイズの変更のみをサポートします。次の制限事項を考慮してください。  
+ 圧縮エンコード (BYTEDICT、RUNLENGTH、TEXT255、TEXT32K) で列を変更することはできません。
+ 既存データの最大サイズよりサイズを小さくすることはできません。
+ デフォルト値を含む列は変更できません。
+ UNIQUE、PRIMARY KEY、または FOREIGN KEY を含む列は変更できません。
+ トランザクションブロック (BEGIN ... END) 内の列を変更することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

ALTER COLUMN *column\$1name* ENCODE *new\$1encode\$1type*   
列の圧縮エンコードを変更する句。列に圧縮エンコードを指定すると、テーブルは ENCODE AUTO に設定されなくなります。圧縮エンコードに関する詳細は、「[保存データのサイズを削減するための列圧縮](t_Compressing_data_on_disk.md)」を参照してください。  
列のための圧縮エンコードを変更した後も、テーブルに対しクエリを実行することが可能です。  
次の制限事項を考慮してください。  
+ 列を現在その列に定義されているものと同じエンコードに変更することはできません。
+ インターリーブされたソートキーを使用して、テーブルの列のエンコードを変更することはできません。

ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, ALTER COLUMN *column\$1name* ENCODE *encode\$1type*, .....;  
複数の列で、圧縮エンコードを単一のコマンドにより変更するための句。圧縮エンコードに関する詳細は、「[保存データのサイズを削減するための列圧縮](t_Compressing_data_on_disk.md)」を参照してください。  
列のための圧縮エンコードを変更した後も、テーブルに対しクエリを実行することが可能です。  
 次の制限事項を検討してください。  
+ 1 つのコマンドで、列のエンコーディングを複数回にわたり、同じまたは異なるタイプに変更することはできません。
+ 列を現在その列に定義されているものと同じエンコードに変更することはできません。
+ インターリーブされたソートキーを使用して、テーブルの列のエンコードを変更することはできません。

ALTER DISTSTYLE ALL  
テーブルの既存のディストリビューションスタイルを `ALL` に変更する句。以下の点を考慮します。  
+ ALTER DISTSTYLE、ALTER SORTKEY、およびVACUUM は、同じテーブルで同時に実行することはできません。
  + VACUUM を実行中に、ALTER DISTSTYLE ALL を実行すると、エラーが返されます。
  + ALTER DISTKEY が実行されている場合は、テーブルでバックグラウンドバキュームは開始されません。
+ ALTER DISTSTYLE ALL コマンドは、インターリーブソートキーおよび一時テーブルを持つテーブルではサポートされません。
+ ディストリビューションスタイルが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。
DISTSTYLE ALL の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

ALTER DISTSTYLE EVEN  
テーブルの既存のディストリビューションスタイルを `EVEN` に変更する句。以下の点を考慮します。  
+ ALTER DISTSYTLE、ALTER SORTKEY、およびVACUUM は、同じテーブルで同時に実行することはできません。
  + VACUUM を実行中である場合、ALTER DISTSTYLE EVEN を実行すると、エラーが返されます。
  + ALTER DISTKEY EVEN が実行中である場合、テーブルでバックグラウンドバキュームは開始されません。
+ ALTER DISTSTYLE EVEN コマンドは、インターリーブされたソートキーを持つテーブルや一時テーブルではサポートされません。
+ ディストリビューションスタイルが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。
DISTSTYLE EVEN の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

ALTER DISTKEY *column\$1name* または ALTER DISTSTYLE KEY DISTKEY *column\$1name*  
テーブルの分散キーとして使用される列を変更する句。以下の点を考慮します。  
+ 同じテーブルで、VACUUM と ALTER DISTKEY を同時に実行することはできません。
  + VACUUM がすでに実行されている場合は、ALTER DISTKEY よりエラーが返ります。
  + ALTER DISTKEY が実行されている場合は、テーブルでバックグラウンドバキュームは開始されません。
  + ALTER DISTKEY が実行されている場合は、フォアグラウンドバキュームよりエラーが返ります。
+ ALTER DISTKEY コマンドは、1 つのテーブルに対して一度に 1 回のみ実行することができます。
+ インターリーブソートキーを使用するテーブルについては、ALTER DISTKEY コマンドはサポートされていません。
+ ディストリビューションスタイルが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。
DISTSTYLE KEY を指定する場合、データは、DISTKEY 列の値で分散されます。DISTSTYLE の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

ALTER DISTSTYLE AUTO  
テーブルの既存のディストリビューションスタイルを AUTO に変更する句。  
ディストリビューションスタイルを AUTO に変更すると、テーブルのディストリビューションスタイルは次のように設定されます。  
+ DISTSTYLE ALL を持つ小さなテーブルは、AUTO(ALL) に変換されます。
+ DISTSTYLE EVEN を持つ小さなテーブルは、AUTO(ALL) に変換されます。
+ DISTSTYLE KEY を持つ小さなテーブルは、AUTO(ALL) に変換されます。
+ DISTSTYLE ALL を持つ大きなテーブルは、AUTO(EVEN) に変換されます。
+ DISTSTYLE EVEN を持つ大きなテーブルは、AUTO(EVEN) に変換されます。
+ DISTSTYLE KEY を持つ大きなテーブルは、AUTO(KEY) に変換され、DISTKEY は保持されます。この場合、Amazon Redshift はテーブルに変更を加えません。
Amazon Redshift が、新しいディストリビューションスタイルまたはキーによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift は、将来、テーブルのディストリビューションスタイルまたはキーを変更する可能性があります。例えば、Amazon Redshift は、DISTSTYLE が AUTO (KEY) のテーブルを AUTO(EVEN) に、またはその逆に変更する場合があります。データの再配布やロックなど、配布キーが変更されたときの動作の詳細については、「[Amazon Redshift Advisor の推奨事項](https://docs.aws.amazon.com/redshift/latest/dg/advisor-recommendations.html#alter-diststyle-distkey-recommendation)」を参照してください。  
DISTSTYLE AUTO の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。  
テーブルのディストリビューションスタイルを表示するには、SVV\$1TABLE\$1INFO システムカタログビューに対してクエリを実行します。詳細については、「[SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)」を参照してください。テーブルの Amazon Redshift Advisor のレコメンデーションを表示するには、SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「[SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md)」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL\$1AUTO\$1WORKER\$1ACTION システムカタログビューにクエリを実行します。詳細については、「[SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md)」を参照してください。

ALTER [COMPOUND] SORTKEY ( *column\$1name* [,...] )  
テーブルで使用されるソートキーを変更または追加する句。ALTER SORTKEY は一時テーブルではサポートされていません。  
ソートキーを変更すると、新しいソートキーまたは元のソートキーの列の圧縮エンコードが変更される場合があります。テーブルにエンコードが明示的に定義されていない場合、Amazon Redshift は、次のように圧縮エンコードを自動的に割り当てます。  
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、または DOUBLE PRECISION データ型として定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR または VARCHAR として定義された列には、LZO 圧縮が割り当てられます。
以下の点を考慮します。  
+ テーブルあたりのソートキーには最大 400 列を定義できます。
+ インターリーブソートキーは、複合ソートキーに変更することが可能です。あるいは、ソートキーなしに変更することもできます。ただし、複合ソートキーをインターリーブソートキーに変更することはできません。
+ ソートキーが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。
+ Amazon Redshift では、ソートキーとして定義された列に RAW エンコード (圧縮なし) を使用することをお勧めします。列を変更してソートキーとして選択すると、列の圧縮が RAW 圧縮 (圧縮なし) に変更されます。これにより、テーブルに必要なストレージ量が増加する可能性があります。テーブルのサイズがどれだけ増加するかは、特定のテーブル定義とテーブルの内容によって異なります。圧縮の詳細については、「[圧縮エンコード](c_Compression_encodings.md)」を参照してください。
データがテーブルに読み込まれる際、データはソートキーの順序で読み込まれます。ソートキーが変更されると、Amazon Redshift によってデータの順序が変更されます。SORTKEY の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

ALTER SORTKEY AUTO  
ターゲットテーブルのソートキーを AUTO に変更または追加する句。ALTER SORTKEY AUTO は一時テーブルではサポートされていません。  
ソートキーを AUTO に変更すると、Amazon Redshift はテーブルの既存のソートキーを保持します。  
Amazon Redshift が新しいソートキーによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift は今後、テーブルのソートキーを変更する可能性があります。  
SORTKEY AUTO の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。  
テーブルのソートキーを表示するには、SVV\$1TABLE\$1INFO システムカタログビューに対してクエリを実行します。詳細については、「[SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)」を参照してください。テーブルの Amazon Redshift Advisor のレコメンデーションを表示するには、SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「[SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md)」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL\$1AUTO\$1WORKER\$1ACTION システムカタログビューにクエリを実行します。詳細については、「[SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md)」を参照してください。

ALTER SORTKEY NONE  
ターゲットテーブルのソートキーを削除する句。  
ソートキーが以前に AUTO として定義されていた場合、テーブルは自動テーブル最適化の候補ではなくなります。

ALTER ENCODE AUTO  
ターゲットテーブルの列のエンコードタイプを AUTO に変更する句。エンコードを AUTO に変更すると、Amazon Redshift はテーブル内の列の既存のエンコードタイプを保持します。その後、Amazon Redshift が新しいエンコードタイプによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift はテーブル列のエンコードタイプを変更できます。  
1 つ以上の列を変更してエンコードを指定した場合、Amazon Redshift はテーブル内のすべての列のエンコードを自動的に調整しなくなりました。列は現在のエンコード設定を保持します。  
次のアクションは、テーブルの ENCODE AUTO 設定には影響しません。  
+ テーブルの名前を変更します。
+ テーブルの DISTSTYLE または SORTKEY 設定を変更します。
+ ENCODE 設定で列を追加または削除します。
+ COPY コマンドの COMPUPDATE オプションを使用します。詳細については、「[データのロード操作](copy-parameters-data-load.md)」を参照してください。
テーブルのエンコードを表示するには、SVV\$1TABLE\$1INFO システムカタログビューにクエリを実行します。詳細については、「[SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)」を参照してください。

RENAME COLUMN *column\$1name* TO *new\$1name*   
列の名前を *new\$1name* で指定された値に変更する句。列名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

ADD [ COLUMN ] *column\$1name*   
指定した名前を持つ列をテーブルに追加する句。各 ALTER TABLE ステートメントでは 1 列しか追加できません。  
テーブルの分散キー (DISTKEY) またはソートキー (SORTKEY) である列は追加できません。  
 ALTER TABLE ADD COLUMN コマンドを使用して次のテーブルと列の属性を変更することはできません。  
+ UNIQUE
+ PRIMARY KEY
+ REFERENCES (外部キー)
+ IDENTITY または GENERATED BY DEFAULT AS IDENTITY
列名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。1 つのテーブルで定義できる列の最大数は 1,600 です。  
外部テーブルに列を追加する場合、次の制限が適用されます。  
+ DEFAULT、ENCODE、NOT NULL または NULL を制約する列がある外部テーブルに列を追加することはできません。
+ AVRO ファイル形式を使用して定義した外部テーブルに列を追加することはできません。
+ 擬似列が有効になっている場合、1 つの外部テーブルで定義できる列の最大数は 1,598 です。擬似列が有効でない場合、1 つのテーブルで定義できる列の最大数は 1,600 です。
詳細については、「[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)」を参照してください。

 *column\$1type*   
追加する列のデータ型。CHAR および VARCHAR の列の場合、最大長を宣言する代わりに MAX キーワードを使用できます。MAX は、最大長を CHAR では 4096 バイト、VARCHAR では 65535 バイトに設定します。GEOMETRY オブジェクトの最大サイズは 1,048,447 バイトです。  
Amazon Redshift でサポートされているデータ型の詳細については、「[データ型](c_Supported_data_types.md)」を参照してください。

DEFAULT *default\$1expr*   <a name="alter-table-default"></a>
列のデフォルトのデータ値を割り当てる句。*default\$1expr* のデータ型は列のデータ型に一致する必要があります。DEFAULT 値は、変数を使用しない式にする必要があります。サブクエリ、現在のテーブルに含まれる他の列の相互参照、およびユーザー定義の関数は使用できません。  
*default\$1expr* は、列の値を指定しないすべての INSERT 操作で使用されます。デフォルト値を指定しなかった場合、列のデフォルト値は null です。  
COPY 操作により、DEFAULT 値と NOT NULL 制約が設定された列で null フィールドが見つかった場合、COPY コマンドは *default\$1expr* の値を挿入します。  
DEFAULT は外部テーブルでサポートされていません。

ENCODE *encoding*   
列の圧縮エンコード。デフォルトでは、テーブル内のどの列にも圧縮エンコードを指定しない場合、またはテーブルに ENCODE AUTO オプションを指定した場合、Amazon Redshift はテーブル内のすべての列の圧縮エンコードを自動的に管理します。  
テーブルで任意の列に圧縮エンコードを指定する場合、またはテーブルに ENCODE AUTO オプションを指定しない場合、Amazon Redshift は次のように圧縮エンコードを指定しない列に圧縮エンコードを自動的に割り当てます。  
+ 一時テーブルのすべての列には RAW 圧縮がデフォルトで割り当てられます。
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、DOUBLE PRECISION、GEOMETRY、もしくは GEOGRAPHY の各データ型で定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR、VARCHAR、または VARBYTE として定義されている列には、LZO 圧縮が割り当てられます。
列を圧縮しない場合は、明示的に RAW エンコードを指定します。
次の [compression encodings](c_Compression_encodings.md#compression-encoding-list) がサポートされています。  
+ AZ64
+ BYTEDICT
+ DELTA
+ DELTA32K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (非圧縮)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD
ENCODE は外部テーブルでサポートされていません。

NOT NULL \$1 NULL   
NOT NULL は、列に null 値を使用できないことを指定します。NULL はデフォルトであり、列で null 値を使用できることを指定します。  
NOT NULL と NULL は外部テーブルでサポートされていません。

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
列での文字列の検索または比較において、大文字と小文字を区別するか、区別しないかを指定する句。デフォルト値は、大文字と小文字を区別する、現行のデータベースの設定と同じです。  
データベース照合に関する情報を検索するには、次のコマンドを使用します。  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE と CS は互換性があり、同じ結果が得られます。同様に、CASE\$1INSENSITIVE と CI は互換性があり、同じ結果が得られます。

DROP [ COLUMN ] *column\$1name*   
テーブルから削除する列の名前。  
テーブルの末尾列は削除できません。テーブルには少なくとも 1 つの列が必要です。  
テーブルの分散キー (DISTKEY) またはソートキー (SORTKEY) である列は削除できません。ビュー、プライマリキー、外部キー、UNIQUE 制約などの依存オブジェクトが列にある場合、DROP COLUMN のデフォルト動作は RESTRICT です。  
外部テーブルから列を削除する場合は、次の制限が適用されます。  
+ 列をパーティションとして使用している場合、外部テーブルから列を削除することはできません。
+ AVRO ファイル形式を使用して定義した外部テーブルから列を削除することはできません。
+ RESTRICT と CASCADE は外部テーブルに無視されます。
+ ポリシーを削除するかデタッチしない限り、ポリシー定義内で参照されるポリシーテーブルの列を削除することはできません。これは、CASCADE オプションが指定されている場合にも当てはまります。ポリシーテーブル内の他の列を削除できます。
詳細については、「[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)」を参照してください。

RESTRICT   
RESTRICT を DROP COLUMN とともに使用すると、以下の場合に、ドロップされる列がドロップされません。  
+ 定義されたビューがドロップされる列を参照している場合
+ 外部キーが列を参照している場合
+ 列がマルチパートキーに属している場合
RESTRICT を CASCADE と併用することはできません。  
RESTRICT と CASCADE は外部テーブルに無視されます。

CASCADE   
DROP COLUMN と共に使用すると、指定した列およびその列に依存するすべてのものを削除します。CASCADE を RESTRICT と併用することはできません。  
RESTRICT と CASCADE は外部テーブルに無視されます。

以下のオプションは、外部テーブルにのみ適用されます。

SET LOCATION \$1 's3://*bucket/folder*/' \$1 's3://*bucket/manifest\$1file*' \$1  
データファイルを含む Amazon S3 フォルダ、または Amazon S3 オブジェクトパスのリストを含むマニフェストファイルへのパス。バケットは、Amazon Redshift クラスターと同じ AWS リージョン内に置かれている必要があります。サポートされている AWS リージョンの一覧は、「[Amazon Redshift Spectrum の制限事項](c-spectrum-considerations.md)」でご確認ください。マニフェストファイルの使用に関する詳細は、CREATE EXTERNAL TABLE [パラメータ](r_CREATE_EXTERNAL_TABLE.md#r_CREATE_EXTERNAL_TABLE-parameters) リファレンスの LOCATION を参照してください。

SET FILE FORMAT *format*  
外部データファイルのファイル形式。  
有効な形式は次のとおりです。  
+ AVRO 
+ PARQUET
+ RCFILE
+ SEQUENCEFILE
+ TEXTFILE 

SET TABLE PROPERTIES ( '*property\$1name*'='*property\$1value*')   
外部テーブルのテーブルプロパティのテーブル定義を設定する句。  
テーブルのプロパティでは、大文字と小文字が区別されます。  
'numRows'='*row\$1count*'  
テーブル定義の numRows 値を設定するプロパティ。外部テーブルの統計を明示的に更新するには、テーブルのサイズを示す numRows プロパティを設定します。Amazon Redshift は、外部テーブルを分析して、クエリオプティマイザがクエリプランを生成するために使用するテーブル統計を生成することはありません。外部テーブルに対してテーブル統計が設定されていない場合、Amazon Redshift はクエリ実行プランを生成します。このプランは、外部テーブルの方が大きくローカルテーブルの方が小さいという前提に基づきます。  
'skip.header.line.count'='*line\$1count*'  
各ソースファイルの最初に省略する行数を設定するプロパティ。

PARTITION ( *partition\$1column*=*partition\$1value* [, ...] SET LOCATION \$1 's3://*bucket*/*folder*' \$1 's3://*bucket*/*manifest\$1file*' \$1  
1 つ以上のパーティション列の新しい場所を設定する句。

ADD [ IF NOT EXISTS ] PARTITION ( *partition\$1column*=*partition\$1value* [, ...] ) LOCATION \$1 's3://*bucket*/*folder*' \$1 's3://*bucket*/*manifest\$1file*' \$1 [, ... ]  
1 つ以上のパーティションを追加する句。複数の PARTITION 句を指定するには、単一の ALTER TABLE … ADD ステートメントを使用します。  
AWS Glue を使用する場合、単一の ALTER TABLE ステートメントを使用して、最大 100 パーティションまで追加できます。
IF NOT EXISTS 句は、指定されたパーティションが既に存在する場合はコマンドが変更を加えないことを示します。また、コマンドが、エラーで終了するのではなく、パーティションが存在することを示すメッセージを返すことも示します。この句は、ALTER TABLE で既存のパーティションを追加しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

DROP PARTITION (*partition\$1column*=*partition\$1value* [, ...] )   
指定のパーティションを削除する句。パーティションを削除すると、外部テーブルのメタデータのみが変化します。Amazon S3 のデータは影響を受けません。

ROW LEVEL SECURITY \$1 ON \$1 OFF \$1 [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] [ FOR DATASHARES ]  
リレーションの行レベルのセキュリティをオンまたはオフにする句。  
リレーションで行レベルのセキュリティがオンになっている場合、行レベルのセキュリティポリシーでアクセスが許可されている行のみを読み取ることができます。リレーションへのアクセス権を付与するポリシーがない場合は、リレーションから行を表示できません。ROW LEVEL SECURITY 句を設定できるのは、スーパーユーザーと、`sys:secadmin` ロールを持つユーザーまたはロールのみです。詳細については、「[行レベルのセキュリティ](t_rls.md)」を参照してください。このステートメントは、接続されたデータベース、または Amazon Redshift フェデレーティッドアクセス許可を持つデータベースでサポートされています。FOR DATASHARES 句は、Amazon Redshift フェデレーティッドアクセス許可を持つデータベースではサポートされていません。  
+ [ CONJUNCTION TYPE \$1 AND \$1 OR \$1 ] 

  リレーションの行レベルのセキュリティポリシーの結合タイプを選択できる句。1 つのリレーションに複数の行レベルのセキュリティポリシーがアタッチされている場合、それらのポリシーを AND 句や OR 句で組み合わせることができます。デフォルトでは、Amazon Redshift は RLS ポリシーを AND 句で組み合わせます。スーパーユーザーと、`sys:secadmin` ロールを持つユーザーまたはロールは、この句を使用して、リレーションの行レベルのセキュリティポリシーの結合タイプを定義できます。詳細については、「[ユーザーごとに複数ポリシーの組み合わせ](t_rls_combine_policies.md)」を参照してください。
+ FOR DATASHARES

  RLS で保護されたリレーションにデータ共有上でアクセスできるかどうかを決定する句。デフォルトでは、RLS で保護されたリレーションにデータ共有経由でアクセスすることはできません。この句を指定して実行される ALTER TABLE ROW LEVEL SECURITY コマンドは、リレーションのデータ共有アクセシビリティプロパティにのみ影響します。ROW LEVEL SECURITY のプロパティは変更されません。

   RLS で保護されたリレーションにデータ共有上でアクセスできるようにした場合、コンシューマー側のデータ共有データベースにおいて、そのリレーションには行レベルのセキュリティが適用されません。リレーションはプロデューサー側の RLS プロパティを保持します。

MASKING \$1 ON \$1 OFF \$1 FOR DATASHARES  
DDM で保護されたリレーションにデータ共有を介してアクセスできるかどうかを決定する句。デフォルトでは、DDM で保護されたリレーションにデータ共有を介してアクセスすることはできません。DDM で保護されたリレーションにデータ共有を介してアクセスできるようにした場合、コンシューマー側のデータ共有データベースでそのリレーションにマスキング保護が適用されません。リレーションは、プロデューサー側でマスキングプロパティを保持します。MASKING FOR DATASHARES 句を設定できるのは、スーパーユーザーと、`sys:secadmin` ロールを持つユーザーまたはロールのみです。詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

## 例
<a name="r_ALTER_TABLE-examples"></a>

ALTER TABLE コマンドの使用方法を示す例については、以下を参照してください。
+ [ALTER TABLE の例](r_ALTER_TABLE_examples_basic.md)
+ [ALTER EXTERNAL TABLE 例](r_ALTER_TABLE_external-table.md)
+ [ALTER TABLE ADD および DROP COLUMN の例](r_ALTER_TABLE_COL_ex-add-drop.md)

# ALTER TABLE の例
<a name="r_ALTER_TABLE_examples_basic"></a>

次の例は、ALTER TABLE コマンドの基本用法を示しています。

## テーブルまたはビューの名前の変更
<a name="r_ALTER_TABLE_examples_basic-rename-a-table"></a>

次のコマンドは、USERS テーブルを USERS\$1BKUP に名前変更します。

```
alter table users
rename to users_bkup;
```

 このタイプのコマンドを使用して、ビューの名前を変更することもできます。

## テーブルまたはビューの所有者の変更
<a name="r_ALTER_TABLE_examples_basic-change-the-owner-of-a-table-or-view"></a>

次のコマンドは VENUE テーブルの所有者をユーザー DWUSER に変更します。

```
alter table venue
owner to dwuser;
```

次のコマンドは、ビューを作成した後、その所有者を変更します。

```
create view vdate as select * from date;
alter table vdate owner to vuser;
```

## 列名の変更
<a name="r_ALTER_TABLE_examples_basic-rename-a-column"></a>

次のコマンドは VENUE テーブルの列名を VENUESEATS から VENUESIZE に変更します。

```
alter table venue
rename column venueseats to venuesize;
```

## テーブルの制約を削除する
<a name="r_ALTER_TABLE_examples_drop-constraint"></a>

プライマリキー、外部キーまたは一意の制約のようなテーブルの制約を削除するには、まず内部の制約名を見つけます。その後、ALTER TABLE コマンドで制約名を指定します。次の例では、CATEGORY テーブルの制約を見つけてから、`category_pkey`という名前のプライマリキーを削除します。

```
select constraint_name, constraint_type
from information_schema.table_constraints
where constraint_schema ='public'
and table_name = 'category';

constraint_name | constraint_type
----------------+----------------
category_pkey   | PRIMARY KEY

alter table category
drop constraint category_pkey;
```

## VARCHAR 列の変更
<a name="r_ALTER_TABLE_examples_alter-column"></a>

ストレージを節約するため、最初に現在のデータ要件に必要な最小サイズの VARCHAR 列を使用してテーブルを定義することができます。後でより長い文字列を収容するには、テーブルを変更して列のサイズを大きくすることができます。

次の例では、EVENTNAME 列のサイズを VARCHAR(300) に増やします。

```
alter table event alter column eventname type varchar(300);
```

## VARBYTE 列を変更する
<a name="r_ALTER_TABLE_examples_alter-varbyte-column"></a>

ストレージを節約するために、最初に現在のデータ要件に必要な最小サイズの VARBYTE 列を使用してテーブルを定義できます。後でより長い文字列を収容するには、テーブルを変更して列のサイズを大きくすることができます。

次の例では、EVENTNAME 列のサイズを VARBYTE(300) に増やします。

```
alter table event alter column eventname type varbyte(300);
```

## 列の圧縮エンコードを変更する
<a name="r_ALTER_TABLE_examples_alter-column-encoding"></a>

列の圧縮エンコードは変更できます。以下に、このアプローチを示す一連の例を示します。これらの例のテーブルは次のように定義されています。

```
create table t1(c0 int encode lzo, c1 bigint encode zstd, c2 varchar(16) encode lzo, c3 varchar(32) encode zstd);
```

次のステートメントは、列 c0 の圧縮エンコードを LZO エンコードから AZ64 エンコードに変更します。

```
alter table t1 alter column c0 encode az64;
```

次のステートメントは、列 c1 の圧縮エンコードを Zstandard エンコードから AZ64 エンコードに変更します。

```
alter table t1 alter column c1 encode az64;
```

次のステートメントは、列 c2 の圧縮エンコードを LZO エンコードからバイトディクショナリエンコードに変更します。

```
alter table t1 alter column c2 encode bytedict;
```

次のステートメントは、列 c3 の圧縮エンコードを Zstandard エンコードから Runlength エンコードに変更します。

```
alter table t1 alter column c3 encode runlength;
```

## DISTSTYLE KEY DISTKEY 列の変更
<a name="r_ALTER_TABLE_examples_alter-distkey"></a>

次の例は、テーブルの DISTSTYLE および DISTKEY を変更する方法を示しています。

EVEN 分散スタイルを指定してテーブルを作成します。SVV\$1TABLE\$1INFO ビューは、DISTSTYLE が EVEN であることを示しています。

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

DISTKEY テーブルを `inv_warehouse_sk` に変更してください。SVV\$1TABLE\$1INFO ビューは、`inv_warehouse_sk`列を結果の分散キーとして示しています。

```
alter table inventory alter diststyle key distkey inv_warehouse_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_warehouse_sk)
```

DISTKEY テーブルを `inv_item_sk` に変更してください。SVV\$1TABLE\$1INFO ビューは、`inv_item_sk`列を結果の分散キーとして示しています。

```
alter table inventory alter distkey inv_item_sk;

select "table", "diststyle" from svv_table_info;

   table   |       diststyle
-----------+-----------------------
 inventory | KEY(inv_item_sk)
```

## テーブルを DISTSTYLE ALL に変更する
<a name="r_ALTER_TABLE_examples_alter-diststyle-all"></a>

次の例では、テーブルを DISTSTYLE ALL に変更する方法を説明します。

EVEN 分散スタイルを指定してテーブルを作成します。SVV\$1TABLE\$1INFO ビューは、DISTSTYLE が EVEN であることを示しています。

```
create table inventory(
  inv_date_sk int4 not null ,
  inv_item_sk int4 not null ,
  inv_warehouse_sk int4 not null ,
  inv_quantity_on_hand int4
) diststyle even;

Insert into inventory values(1,1,1,1);

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     EVEN
```

DISTSTYLE テーブルを ALL に変更します。SVV\$1TABLE\$1INFO ビューには、変更された DISTSYTLE が表示されます。

```
alter table inventory alter diststyle all;

select "table", "diststyle" from svv_table_info;

   table   |   diststyle
-----------+----------------
 inventory |     ALL
```

## テーブルの SORTKEY を変更する
<a name="r_ALTER_TABLE_examples_alter-sortkey"></a>

複合ソートキーを使用する、あるいはソートキーを使用しないようにテーブルを変更できます。

次のテーブル定義では、テーブル `t1` は、インターリーブソートキーを使用するように定義されます。

```
create table t1 (c0 int, c1 int) interleaved sortkey(c0, c1);
```

次のコマンドは、インターリーブされたソートキーの使用から複合ソートキーの使用に、テーブルを変更します。

```
alter table t1 alter sortkey(c0, c1);
```

次のコマンドは、インターリーブソートキーを削除するためにテーブルを変更します。

```
alter table t1 alter sortkey none;
```

次のテーブル定義では、テーブル `t1` のソートキーとして `c0` 列を定義しています。

```
create table t1 (c0 int, c1 int) sortkey(c0);
```

次のコマンドは、テーブル `t1` を複合ソートキーの使用に変更します。

```
alter table t1 alter sortkey(c0, c1);
```

## テーブルを ENCODE AUTO に変更する
<a name="r_ALTER_TABLE_examples_alter-encode-auto"></a>

次の例は、テーブルを ENCODE AUTO に変更する方法を示しています。

例えば、テーブルは次のように定義されています。列 `c0` はエンコードタイプ AZ64 で定義され、列 `c1` はエンコードタイプ LZO で定義されます。

```
create table t1(c0 int encode AZ64, c1 varchar encode LZO);
```

このテーブルの場合、次のステートメントはエンコードを AUTO に変更します。

```
alter table t1 alter encode auto;
```

次の例は、テーブルを変更して ENCODE AUTO 設定を削除する方法を示しています。

例えば、テーブルは次のように定義されています。テーブルの列は、エンコードなしで定義されます。この場合、エンコードはデフォルトで ENCODE AUTO になります。

```
create table t2(c0 int, c1 varchar);
```

このテーブルの場合、次のステートメントは列 c0 のエンコードを LZO に変更します。テーブルのエンコードが ENCODE AUTO に設定されなくなりました。

```
alter table t2 alter column c0 encode lzo;;
```

## 行レベルのセキュリティコントロールの変更
<a name="r_ALTER_TABLE_examples_basic-rls"></a>

次のコマンドは、テーブルの RLS をオフにします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY OFF;
```

次のコマンドは、テーブルの RLS をオンにします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
```

次のコマンドは、テーブルの RLS をオンにし、データ共有上でテーブルにアクセスできるようにします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES OFF;
```

次のコマンドは、テーブルの RLS をオンにして、データ共有上でテーブルにアクセスできなくします。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON;
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY FOR DATASHARES ON;
```

次のコマンドは、RLS をオンにし、テーブルの RLS 結合タイプを OR に設定します。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE OR;
```

次のコマンドは、RLS をオンにし、テーブルの RLS 結合タイプを AND に設定します。

```
ALTER TABLE tickit_category_redshift ROW LEVEL SECURITY ON CONJUNCTION TYPE AND;
```

# ALTER EXTERNAL TABLE 例
<a name="r_ALTER_TABLE_external-table"></a>

次の例では、米国東部 (バージニア北部) リージョン (`us-east-1`) AWS リージョン にある Amazon S3 バケットおよび CREATE TABLE の [例](r_CREATE_EXTERNAL_TABLE_examples.md) で作成されたテーブル例を使用します。外部テーブルでパーティションを使用する方法の詳細については、「[Redshift Spectrum 外部テーブルのパーティション化](c-spectrum-external-tables.md#c-spectrum-external-tables-partitioning)」を参照してください。

次の例では、SPECTRUM.SALES 外部テーブルの numRows テーブルプロパティを 170,000 行に設定します。

```
alter table spectrum.sales
set table properties ('numRows'='170000');
```

次の例では、SPECTRUM.SALES 外部テーブルの場所を変更します。

```
alter table spectrum.sales
set location 's3://redshift-downloads/tickit/spectrum/sales/';
```

次の例では、SPECTRUM.SALES 外部テーブルの型式を Parquet に変更します。

```
alter table spectrum.sales
set file format parquet;
```

次の例では、SPECTRUM.SALES\$1PART テーブルに対して 1 つのパーティションを追加します。

```
alter table spectrum.sales_part
add if not exists partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
```

次の例では、SPECTRUM.SALES\$1PART テーブルに対して 3 つのパーティションを追加します。

```
alter table spectrum.sales_part add if not exists
partition(saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/'
partition(saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/'
partition(saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
```

次の例では、SPECTRUM.SALES\$1PART を変更して `saledate='2008-01-01''` のパーティションを削除します。

```
alter table spectrum.sales_part
drop partition(saledate='2008-01-01');
```

次の例では、`saledate='2008-01-01'` のパーティションに新しい Amazon S3 パスを設定します。

```
alter table spectrum.sales_part
partition(saledate='2008-01-01')
set location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01-01/';
```

次の例では、`sales_date`の名前を `transaction_date` に変更します。

```
alter table spectrum.sales rename column sales_date to transaction_date;
```

次の例では、最適化された行列 (ORC) 形式を使用する外部テーブルのために、列マッピングを位置マッピングに設定します。

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='position');
```

次の例では、最適化された ORC 形式を使用する外部テーブルのために、列マッピングを名前マッピングに設定します。

```
alter table spectrum.orc_example
set table properties('orc.schema.resolution'='name');
```

# ALTER TABLE ADD および DROP COLUMN の例
<a name="r_ALTER_TABLE_COL_ex-add-drop"></a>

次の例は、ALTER TABLE を使用して基本テーブル列を追加した後に削除する方法、および依存オブジェクトがある列を削除する方法を示しています。

## 基本列の追加と削除
<a name="r_ALTER_TABLE_COL_ex-add-then-drop-a-basic-column"></a>

次の例では、スタンドアロンの FEEDBACK\$1SCORE 列を USERS テーブルに追加します。この列には 1 つの整数が含まれます。この列のデフォルト値は NULL です (フィードバックスコアなし)。

まず、PG\$1TABLE\$1DEF カタログテーブルにクエリして、USERS テーブルのスキーマを表示します。

```
column        | type                   | encoding | distkey | sortkey
--------------+------------------------+----------+---------+--------
userid        | integer                | delta    | true    |       1
username      | character(8)           | lzo      | false   |       0
firstname     | character varying(30)  | text32k  | false   |       0
lastname      | character varying(30)  | text32k  | false   |       0
city          | character varying(30)  | text32k  | false   |       0
state         | character(2)           | bytedict | false   |       0
email         | character varying(100) | lzo      | false   |       0
phone         | character(14)          | lzo      | false   |       0
likesports    | boolean                | none     | false   |       0
liketheatre   | boolean                | none     | false   |       0
likeconcerts  | boolean                | none     | false   |       0
likejazz      | boolean                | none     | false   |       0
likeclassical | boolean                | none     | false   |       0
likeopera     | boolean                | none     | false   |       0
likerock      | boolean                | none     | false   |       0
likevegas     | boolean                | none     | false   |       0
likebroadway  | boolean                | none     | false   |       0
likemusicals  | boolean                | none     | false   |       0
```

次に、feedback\$1score 列を追加します。

```
alter table users
add column feedback_score int
default NULL;
```

USERS から FEEDBACK\$1SCORE 列を選択し、追加されたことを確認します。

```
select feedback_score from users limit 5;

feedback_score
----------------
NULL
NULL
NULL
NULL
NULL
```

列を削除して元の DDL に戻します。

```
alter table users drop column feedback_score;
```

## 依存オブジェクトがある列の削除
<a name="r_ALTER_TABLE_COL_ex-dropping-a-column-with-a-dependent-object"></a>

以下の例では、依存オブジェクトがある列を削除します。その結果、依存オブジェクトも削除されます。

初めに、もう一度 FEEDBACK\$1SCORE 列を USERS テーブルに追加します。

```
alter table users
add column feedback_score int
default NULL;
```

次に、USERS テーブルから USERS\$1VIEW というビューを作成します。

```
create view users_view as select * from users;
```

次に、USERS テーブルから FEEDBACK\$1SCORE 列の削除を試みます。この DROP ステートメントではデフォルト動作 (RESTRICT) を使用します。

```
alter table users drop column feedback_score;
```

Amazon Redshift は列に別のオブジェクトが依存しているため、列を削除できないことを示すエラーメッセージが表示されます。

今度はすべての依存オブジェクトを削除するため CASCADE を指定して、FEEDBACK\$1SCORE 列の削除を再度試みます。

```
alter table users
drop column feedback_score cascade;
```

# ALTER TABLE APPEND
<a name="r_ALTER_TABLE_APPEND"></a>

既存のソーステーブルのデータを移動して、ターゲットテーブルに行を追加します。ソーステーブル内のデータはターゲットテーブルの一致する列に移動されます。列の順序は関係ありません。データがターゲットテーブルに正常に追加されると、ソーステーブルは空になります。通常、ALTER TABLE APPEND は、データを複製するのではなく移動するため、同様の [CREATE TABLE AS](r_CREATE_TABLE_AS.md) または [INSERT](r_INSERT_30.md) の INTO オペレーションよりもはるかに高速です。

**注記**  
ALTER TABLE APPEND は、ソーステーブルとターゲットテーブル間でデータブロックを移動します。パフォーマンスを向上させるため、ALTER TABLE APPEND は追加操作の一部としてストレージを圧縮しません。その結果、ストレージ使用量は一時的に増加します。スペースを回復するには、[VACUUM](r_VACUUM_command.md)操作を実行します。

同じ名前の列には、同じ列属性も必要です。ソーステーブルまたはターゲットテーブルに、他のテーブルに含まれる列が含まれない場合は、IGNOREEXTRA または FILLTARGET パラメータを使用して、追加の列を管理する方法を指定します。

IDENTITY 列を追加することはできません。テーブルの両方に IDENTITY 列が含まれる場合、コマンドは失敗します。1 つのテーブルのみに IDENTITY 列がある場合は、FILLTARGET パラメータまたは IGNOREEXTRA パラメータを含めます。詳細については、「[ALTER TABLE APPEND の使用に関する注意事項](#r_ALTER_TABLE_APPEND_usage)」を参照してください。

GENERATED BY DEFAULT AS IDENTITY 列を追加できます。GENERATED BY DEFAULT AS IDENTITY として定義された列を、指定した値で更新できます。詳細については、「[ALTER TABLE APPEND の使用に関する注意事項](#r_ALTER_TABLE_APPEND_usage)」を参照してください。

ターゲットテーブルは永続テーブルである必要があります。ただし、ソースはパーマネントテーブルでも、ストリーミング取り込み用に設定されたマテリアライズドビューでもかまいません。両方のオブジェクトは同じ分散スタイルと分散キーを使用する必要があります (定義されている場合)。オブジェクトがソートされている場合、両方のオブジェクトは同じソート形式を使用し、ソートキーとして同じ列を定義する必要があります。

ALTER TABLE APPEND コマンドは、オペレーションが完了するとすぐに自動的にコミットします。ロールバックすることはできません。トランザクションブロック (BEGIN ... END) 内で ALTER TABLE APPEND を実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

## 必要な権限
<a name="r_ALTER_TABLE_APPEND-privileges"></a>

ALTER TABLE APPEND コマンドによっては、次のいずれかの権限が必要です。
+ スーパーユーザー
+ ALTER TABLE システム権限を持つユーザー
+ ソーステーブルに対する DELETE 権限と SELECT 権限、およびターゲットテーブルに対する INSERT 権限を持つユーザー

## 構文
<a name="r_ALTER_TABLE_APPEND-synopsis"></a>

```
ALTER TABLE target_table_name APPEND FROM [ source_table_name | source_materialized_view_name ]
[ IGNOREEXTRA | FILLTARGET ]
```

マテリアライズドビューからの追加は、マテリアライズドビューが [マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md) に設定されている場合にのみ機能します。

## パラメータ
<a name="r_ALTER_TABLE_APPEND-parameters"></a>

 *target\$1table\$1name*   
列が追加されるテーブルの名前。テーブル名のみを指定するか、*schema\$1name.table\$1name* 形式で特定のスキーマを使用します。ターゲットテーブルは既存の永続テーブルである必要があります。

 FROM *source\$1table\$1name*   
追加する行を提供するテーブルの名前。テーブル名のみを指定するか、*schema\$1name.table\$1name* 形式で特定のスキーマを使用します。ソーステーブルは既存の永続テーブルである必要があります。

 *source\$1materialized\$1view\$1name* から   
追加する行を提供するマテリアライズドビューの名前。マテリアライズドビューからの追加は、マテリアライズドビューが [マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md) に設定されている場合にのみ機能します。ソースマテリアライズドビューは既に存在している必要があります。

IGNOREEXTRA   
ターゲットテーブルにない列がソーステーブルに含まれている場合に、追加の列のデータを破棄することを指定するキーワード。IGNOREEXTRA を FILLTARGET と使用することはできません。

FILLTARGET   
ソーステーブルにない列がターゲットテーブルに含まれている場合に、列に [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 列値を入れるか (定義されている場合)、NULL にすることを指定するキーワード。IGNOREEXTRA を FILLTARGET と使用することはできません。

## ALTER TABLE APPEND の使用に関する注意事項
<a name="r_ALTER_TABLE_APPEND_usage"></a>
+ ALTER TABLE APPEND はソーステーブルからターゲットテーブルに同一の列のみを移動します。列の順序は関係ありません。
+  ソーステーブルまたはターゲットテーブルに追加の列が含まれている場合、以下のルールに従って FILLTARGET または IGNOREEXTRA を使用します。
  + ターゲットテーブルに存在しない列がソーステーブルに含まれている場合は、IGNOREEXTRA を含めます。コマンドは、ソーステーブルの追加の列を無視します。
  + ソーステーブルに存在しない列がターゲットテーブルに含まれている場合は、FILLTARGET を含めます。コマンドは、デフォルトの列値または IDENTITY 値 (定義されている場合)、あるいは NULL をターゲットテーブルの追加の列に入れます。
  + ソーステーブルとターゲットテーブルの両方に追加の列が含まれる場合、コマンドは失敗します。FILLTARGET と IGNOREEXTRA の両方を使用することはできません。
+ 同じ名前で別の属性を持つ列が両方のテーブルに存在する場合、コマンドは失敗します。同様の名前の列には、共通して次の属性が必要です。
  + データ型
  + 列のサイズ
  + 圧縮エンコード
  + null でない
  + ソート形式
  + ソートキーの列
  + 分散スタイル
  + 分散キー列
+ IDENTITY 列を追加することはできません。ソーステーブルとターゲットテーブルの両方に IDENTITY 列がある場合、コマンドは失敗します。ソーステーブルのみに IDENTITY 列がある場合、IDENTITY 列が無視されるように IGNOREEXTRA パラメータを含めます。ターゲットテーブルのみに IDENTITY 列がある場合は、テーブルに対して定義されている IDENTITY 句に従って IDENTITY 列が入力されるように FILLTARGET パラメータを含めます。詳細については、「[DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default)」を参照してください。
+ ALTER TABLE APPEND ステートメントを使用して、デフォルトの IDENTITY 列を追加できます。詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。
+ ALTER TABLE APPEND オペレーションは、次のいずれかに接続された Amazon Redshift ストリーミングマテリアライズドビューで実行されると、排他的ロックを保持します。
  +  1 つの Amazon Kinesis Data Streams 
  +  1 つの Amazon Managed Streaming for Apache Kafka トピック 
  +  Confluent Cloud Kafka トピックなど、サポートされている外部ストリーム 

  詳細については、「[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)」を参照してください。

## ALTER TABLE APPEND の例
<a name="r_ALTER_TABLE_APPEND_examples"></a>

最新の売上を把握するために、組織で SALES\$1MONTHLY テーブルを維持しているとします。毎月、トランザクションテーブルから SALES テーブルにデータを移動するとします。

次の INSERT INTO または TRUNCATE コマンドを使用して、このタスクを完了できます。

```
insert into sales (select * from sales_monthly);
truncate sales_monthly;
```

ただし、ALTER TABLE APPEND コマンドを使用すると、同じオペレーションをはるかに効率的に実行できます。

最初に、[PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md)システムカタログテーブルにクエリを実行し、両方のテーブルに、同じ列属性を持つ同じ列があることを確認します。

```
select trim(tablename) as table, "column", trim(type) as type,
encoding, distkey, sortkey, "notnull"
from pg_table_def where tablename like 'sales%';

table      | column     | type                        | encoding | distkey | sortkey | notnull
-----------+------------+-----------------------------+----------+---------+---------+--------
sales      | salesid    | integer                     | lzo      | false   |       0 | true
sales      | listid     | integer                     | none     | true    |       1 | true
sales      | sellerid   | integer                     | none     | false   |       2 | true
sales      | buyerid    | integer                     | lzo      | false   |       0 | true
sales      | eventid    | integer                     | mostly16 | false   |       0 | true
sales      | dateid     | smallint                    | lzo      | false   |       0 | true
sales      | qtysold    | smallint                    | mostly8  | false   |       0 | true
sales      | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
sales      | commission | numeric(8,2)                | delta32k | false   |       0 | false
sales      | saletime   | timestamp without time zone | lzo      | false   |       0 | false
salesmonth | salesid    | integer                     | lzo      | false   |       0 | true
salesmonth | listid     | integer                     | none     | true    |       1 | true
salesmonth | sellerid   | integer                     | none     | false   |       2 | true
salesmonth | buyerid    | integer                     | lzo      | false   |       0 | true
salesmonth | eventid    | integer                     | mostly16 | false   |       0 | true
salesmonth | dateid     | smallint                    | lzo      | false   |       0 | true
salesmonth | qtysold    | smallint                    | mostly8  | false   |       0 | true
salesmonth | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | commission | numeric(8,2)                | delta32k | false   |       0 | false
salesmonth | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

次に、各テーブルのサイズを確認します。

```
select count(*) from sales_monthly;
 count
-------
  2000
(1 row)

select count(*) from sales;
 count
-------
 412,214
(1 row)
```

ここで、次の ALTER TABLE APPEND コマンドを実行します。

```
alter table sales append from sales_monthly;         
```

もう一度、各テーブルのサイズを確認します。SALES\$1MONTHLY テーブルは 0 行になり、SALES テーブルは 2000 行増えています。

```
select count(*) from sales_monthly;
 count
-------
     0
(1 row)

select count(*) from sales;
 count
-------
 414214
(1 row)
```

ソーステーブルにターゲットテーブルより多くの列がある場合は、IGNOREEXTRA パラメータを指定します。次の例では、IGNOREEXTRA パラメータを使用して、SALES テーブルに追加するときに SALES\$1LISTING テーブル列の追加の列を無視します。

```
alter table sales append from sales_listing ignoreextra;
```

ターゲットテーブルにソーステーブルより多くの列がある場合は、FILLTARGET パラメータを指定します。次の例では、FILLTARGET パラメータを使用して、SALES\$1MONTH テーブルに存在しない列を SALES\$1REPORT テーブルに入力します。

```
alter table sales_report append from sales_month filltarget;
```

次の例は、マテリアライズドビューをソースとして ALTER TABLE APPEND を使用する方法の例を示しています。

```
ALTER TABLE target_tbl APPEND FROM my_streaming_materialized_view;
```

この例のテーブル名とマテリアライズドビュー名はサンプルです。マテリアライズドビューからの追加は、マテリアライズドビューが [マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md) に設定されている場合にのみ機能します。ソースマテリアライズドビューのすべてのレコードを、マテリアライズドビューと同じスキーマのターゲットテーブルに移動し、マテリアライズドビューはそのまま残します。これは、データのソースがテーブルである場合と同じ動作です。

# ALTER TEMPLATE
<a name="r_ALTER_TEMPLATE"></a>

既存のテンプレートの定義を変更します。このコマンドを使用して、テンプレートの名前を変更したり、テンプレートの所有者を変更したり、テンプレート定義にパラメータを追加または削除したり、パラメータ値を設定したりします。

## 必要な権限
<a name="r_ALTER_TEMPLATE-privileges"></a>

テンプレートを変更するには、次のいずれかが必要です。
+ スーパーユーザー権限
+ テンプレートを含むスキーマに対する ALTER TEMPLATE 権限と USAGE 権限

## 構文
<a name="r_ALTER_TEMPLATE-synopsis"></a>

```
ALTER TEMPLATE [database_name.][schema_name.]template_name
{
RENAME TO new_name
| OWNER TO new_owner
| ADD  parameter [AS] [value]
| DROP parameter
| SET parameter TO value1 [, parameter2 TO value2 , ...]
};
```

## パラメータ
<a name="r_ALTER_TEMPLATE-parameters"></a>

 *database\$1name*   
(オプション) テンプレートが作成されるデータベースの名前。指定しない場合は、現在のデータベースが使用されます。

 *schema\$1name*   
(オプション) テンプレートが作成されるスキーマの名前。指定しない場合は、現在の検索パスでテンプレートが検索されます。

 *template\$1name*   
変更するテンプレートの名前。

RENAME TO   
テンプレートの名前を変更する句。

 *new\$1name*   
テンプレートの新しい名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

OWNER TO   
テンプレートの所有者を変更する句。

 *new\$1owner*   
テンプレートの新しい所有者。

ADD *パラメータ* [AS] [*値*]  
テンプレートに新しいパラメータを追加します。  
+ キーワードのみのパラメータ (CSV や GZIP など) の場合は、パラメータ名のみを指定します。
+ 値を必要とするパラメータの場合は、パラメータ名に続けて値を指定します。オプションで、パラメータと値の間に AS を含めることができます。

DROP *パラメータ*  
指定されたパラメータをテンプレートから削除します。1 つの DROP コマンドで複数のパラメータを削除することはできません。

SET *パラメータ* TO *value1* [, *parameter2* TO *value2* , ...]  
既存のテンプレートパラメータの値を更新します。値が既にあるパラメータにのみ使用します。1 つのコマンドで複数のパラメータを更新できます。

## 例
<a name="r_ALTER_TEMPLATE-examples"></a>

次の例では、test\$1template テンプレートの名前を demo\$1template に変更します。

```
ALTER TEMPLATE test_template
RENAME TO demo_template;
```

次の例では、demo\$1template スキーマの所有権をユーザー bob に与えます。

```
ALTER TEMPLATE demo_template
OWNER TO bob;
```

次の例では、テンプレート demo\$1template にパラメータ `CSV` を追加します。

```
ALTER TEMPLATE demo_template
ADD CSV;
```

次の例では、テンプレート demo\$1template にパラメータ `TIMEFORMAT 'auto'` を追加します。

```
ALTER TEMPLATE demo_template
ADD TIMEFORMAT 'auto';
```

次の例では、テンプレート demo\$1template からパラメータ `ENCRYPTED` を削除します。

```
ALTER TEMPLATE demo_template
DROP ENCRYPTED;
```

次の例では、`DELIMITER` パラメータを `'|'` に設定し、`TIMEFORMAT` パラメータを `'epochsecs'` に設定します。

```
ALTER TEMPLATE demo_template
SET DELIMITER TO '|', TIMEFORMAT TO 'epochsecs';
```

# ALTER USER
<a name="r_ALTER_USER"></a>

データベースユーザーを変更します。

## 必要な権限
<a name="r_ALTER_USER-privileges"></a>

以下に、ALTER USER に必要な権限を示します。
+ スーパーユーザー
+ ALTER USER の権限を持つユーザー
+ 自身のパスワードを変更しようとする現在のユーザー

## 構文
<a name="r_ALTER_USER-synopsis"></a>

```
ALTER USER username [ WITH ] option [, ... ]

where option is

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ VALID UNTIL 'expiration_date' ]
| RENAME TO new_name |
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit | RESET SESSION TIMEOUT
| SET parameter { TO | = } { value | DEFAULT }
| RESET parameter
| EXTERNALID external_id
```

## パラメータ
<a name="r_ALTER_USER-parameters"></a>

 * ユーザー名*   
ユーザーの名前。

WiTH   
オプションキーワード 

CREATEDB \$1 NOCREATEDB   
CREATEDB オプションを使用すると、ユーザーは新しいデータベースを作成できます。NOCREATEDB がデフォルトです。

CREATEUSER \$1 NOCREATEUSER   
CREATEUSER オプションを使用すると、CREATE USER を含め、データベースに関するすべての権限を持つスーパーユーザーが作成されます。デフォルトは NOCREATEUSER です。詳細については、「[スーパーユーザー](r_superusers.md)」を参照してください。

SYSLOG ACCESS \$1 RESTRICTED \$1 UNRESTRICTED \$1  <a name="alter-user-syslog-access"></a>
Amazon Redshift のシステムテーブルとビューに対するユーザーのアクセスレベルを指定する句です。  
SYSLOG ACCESS RESTRICTED アクセス許可を持つ通常のユーザーは、ユーザーが表示できるシステムテーブルとビューで自分が生成した行のみを表示できます。デフォルトは RESTRICTED です。  
SYSLOG ACCESS UNRESTRICTED アクセス許可を持つ通常のユーザーは、ユーザーが表示できるシステムテーブルとビューのすべての行 (別のユーザーが生成した行を含む) を表示できます。UNRESTRICTED を指定しても、スーパーユーザーが表示可能なテーブルへのアクセス権が、通常のユーザーに付与されるわけではありません。スーパーユーザーが表示可能なテーブルを表示できるのはスーパーユーザーだけです。  
システムテーブルに対する無制限のアクセス権限を付与されたユーザーは、別のユーザーが生成したデータへの可視性が提供されます。例えば、STL\$1QUERY と STL\$1QUERYTEXT には INSERT、UPDATE、および DELETE ステートメントのフルテキストが含まれており、ユーザーが生成した機密データがこれらに含まれている可能性があります。
SVV\$1TRANSACTIONS のすべての行は、すべてのユーザーが表示可能です。  
詳細については、「[システムテーブルとビューのデータの可視性](cm_chap_system-tables.md#c_visibility-of-data)」を参照してください。

PASSWORD \$1 '*password*' \$1 '*md5hash*' \$1 '*sha256hash*' \$1 DISABLE \$1  
ユーザーのパスワードを設定します。  
デフォルトでは、ユーザーはパスワードが無効になっていない限り、自分のパスワードを変更できます。ユーザーのパスワードを無効にするには、DISABLE を指定します。ユーザーのパスワードが無効になると、パスワードはシステムから削除され、ユーザーは AWS Identity and Access Management (IAM) ユーザーの一時的認証情報を使用してのみログオンできます。詳細については、「[IAM 認証を使用したデータベースユーザー認証情報の生成](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)」を参照してください。スーパーユーザーのみが、パスワードを有効または無効にできます。スーパーユーザーのパスワードを無効にすることはできません。パスワードを有効にするには、ALTER USER を実行し、パスワードを指定します。  
PASSWORD パラメータの使用の詳細については、「[CREATE USER](r_CREATE_USER.md)」を参照してください。

VALID UNTIL '*expiration\$1date*'  
パスワードに失効日があることを指定します。値 `'infinity'` を使用すると、失効日を設定しないようにすることができます。このパラメータの有効なデータ型はタイムスタンプです。  
このパラメータを使用できるのはスーパーユーザーだけです。

RENAME TO   
ユーザーの名前を変更します。

 *new\$1name*   
ユーザーの新しい名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
ユーザーの名前を変更すると、ユーザーのパスワードもリセットする必要があります。リセット後のパスワードは、以前のパスワードと異ならなくても構いません。ユーザー名はパスワード暗号化の一部として使用されるため、ユーザーの名前を変更すると、パスワードは消去されます。パスワードをリセットするまで、ユーザーはログオンできません。次に例を示します。  

```
alter user newuser password 'EXAMPLENewPassword11'; 
```

CONNECTION LIMIT \$1 *limit* \$1 UNLIMITED \$1   
ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。データベースごとの接続数の制限が適用される場合もあります。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、[STV\$1SESSIONS](r_STV_SESSIONS.md)システムビューに対してクエリを実行します。  
ユーザーとデータベースの両方の接続制限が適用される場合は、ユーザーが接続しようとしたときに、両方の制限内に未使用の接続スロットがなければなりません。

SESSION TIMEOUT *limit* \$1 RESET SESSION TIMEOUT  
セッションが非アクティブまたはアイドル状態を維持する最大時間 (秒) です。指定できる範囲は 60 秒 (1 分) から 1,728,000 秒 (20 日) です。ユーザーに対しセッションタイムアウトが設定されていない場合は、クラスターの設定値が適用されます。詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift のクォータと制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。  
設定されたセッションタイムアウトは、新しいセッションにのみ適用されます。  
開始時刻、ユーザー名、セッションタイムアウトなど、アクティブなユーザーセッションに関する情報を表示するには、[STV\$1SESSIONS](r_STV_SESSIONS.md)システムビューを参照します。ユーザーセッションの履歴に関する情報を表示するには、[STL\$1SESSIONS](r_STL_SESSIONS.md)ビューを参照します。セッションタイムアウト値など、データベースユーザーに関する情報を取得するには、[SVL\$1USER\$1INFO](r_SVL_USER_INFO.md)ビューを参照します。

SET   
指定したユーザーによって実行されるすべてのセッションに対して、設定パラメータを新しいデフォルト値に設定します。

RESET   
指定したユーザーに対して、設定パラメータを元のデフォルト値にリセットします。

 * パラメータ*   
設定またはリセットするパラメータの名前。

 *value*   
パラメータの新しい値。

DEFAULT   
指定したユーザーによって実行されるすべてのセッションに対して、設定パラメータをデフォルト値に設定します。

EXTERNALID *external\$1id*   
ID プロバイダーに関連付けられているユーザーの識別子。ユーザーはパスワードを無効にする必要があります。詳細については、「[Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。

## 使用に関する注意事項
<a name="r_ALTER_USER_usage_notes"></a>
+ **rdsdb を変更する試行** — `rdsdb` という名前のユーザーは変更できません。
+ **不明なパスワードの作成** – AWS Identity and Access Management (IAM) 認証情報を使用してデータベースのユーザー認証情報を作成する場合、一時的認証情報を使用してのみログオンできるスーパーユーザーを作成することをお勧めします。スーパーユーザーのパスワードを無効にすることはできませんが、ランダムに生成された MD5 ハッシュ文字列を使って不明なパスワードを作成することはできます。

  ```
  alter user iam_superuser password 'md51234567890123456780123456789012';
  ```
+ **search\$1path の設定** – ALTER USER コマンドに [search\$1path](r_search_path.md) パラメータを設定した場合、指定したユーザーの次のログイン時に変更が反映されます。現在のユーザーとセッションの search\$1path 値を変更する場合は、SET コマンドを使用します。
+ **タイムゾーンの設定** – ALTER USER コマンドに SET TIMEZONE を使用する場合、指定したユーザーの次のログイン時に変更が反映されます。
+ **動的データマスキングと行レベルのセキュリティポリシーとの連携** – プロビジョニングされたクラスターまたはサーバーレス名前空間に動的データマスキングまたは行レベルのセキュリティポリシーが適用されている場合、次のコマンドは標準ユーザーに対してブロックされます。

  ```
  ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
  ```

  これらの設定オプションを設定できるのは、スーパーユーザーと、ALTER USER 権限を持つユーザーのみです。行レベルのセキュリティの詳細については、「[行レベルのセキュリティ](t_rls.md)」を参照してください。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

## 例
<a name="r_ALTER_USER-examples"></a>

次の例では、ユーザー ADMIN にデータベースを作成する権限を与えます。

```
alter user admin createdb;
```

次の例では、ユーザー ADMIN のパスワードを `adminPass9` に設定し、パスワードの有効期限切れの日時を設定します。

```
alter user admin password 'adminPass9'
valid until '2017-12-31 23:59';
```

次の例では、ユーザー名を ADMIN から SYSADMIN に変更します。

```
alter user admin rename to sysadmin;
```

次の例では、ユーザーのアイドルセッションタイムアウトを 300 秒に変更しています。

```
ALTER USER dbuser SESSION TIMEOUT 300;
```

ユーザーのアイドルセッションタイムアウトをリセットします。これをリセットすると、クラスターの設定内容が適用されます。このコマンドを実行するには、データベースのスーパーユーザー権限を持つ必要があります。詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift のクォータと制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。

```
ALTER USER dbuser RESET SESSION TIMEOUT;
```

次の例では、`bob` という名前のユーザーの外部 ID を更新します。名前空間は `myco_aad` です。名前空間が登録された ID プロバイダーに関連付けられていない場合、エラーが発生します。

```
ALTER USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

次の例では、特定のデータベースユーザーが実行するすべてのセッションのタイムゾーンを設定します。現在のセッションではなく、後のセッションのタイムゾーンを変更します。

```
ALTER USER odie SET TIMEZONE TO 'Europe/Zurich';
```

次の例では、ユーザー `bob` が開くことができるデータベース接続の最大数を設定します。

```
ALTER USER bob CONNECTION LIMIT 10;
```

# ANALYZE
<a name="r_ANALYZE"></a>

クエリプランナーで使用するテーブル統計を更新します。

## 必要な権限
<a name="r_ANALYZE-privileges"></a>

ANALYZE に必要な権限を以下に示します。
+ スーパーユーザー
+ ANALYZE の権限を持つユーザー
+ 関連付けの所有者
+ テーブルの共有先であるデータベース所有者

## 構文
<a name="r_ANALYZE-synopsis"></a>

```
ANALYZE [ VERBOSE ]
[ [ table_name [ ( column_name [, ...] ) ] ]
[ PREDICATE COLUMNS | ALL  COLUMNS ]
```

## パラメータ
<a name="r_ANALYZE-parameters"></a>

VERBOSE   
ANALYZE オペレーションに関する進捗情報メッセージを返す句。このオプションは、テーブルを指定しないときに役立ちます。

 *table\$1name*   
一時テーブルを含む、特定のテーブルを分析できます。テーブルをそのスキーマ名で修飾することができます。また、table\$1name を指定して単一のテーブルを分析することもできます。1 つの ANALYZE *table\$1name* ステートメントで複数の *table\$1name* を指定することはできません。*table\$1name* 値を指定しなかった場合、システムカタログの永続テーブルを含め、現在接続されているデータベースのすべてのテーブルが分析されます。最後の ANALYZE 以降に変更された行の割合が分析のしきい値よりも低い場合、Amazon Redshift はテーブルの分析をスキップします。詳細については、「[分析のしきい値](#r_ANALYZE-threshold)」を参照してください。  
Amazon Redshift のシステムテーブル (STL テーブルと STV テーブル) を分析する必要はありません。

 *column\$1name*   
*table\$1name* を指定する場合、テーブルの 1 つ以上の列を指定することもできます (括弧内に列をカンマ区切りリストとして指定します)。列リストが指定された場合、リストされている列のみが分析されます。

 PREDICATE COLUMNS \$1 ALL COLUMNS   
ANALYZE に述語列のみを含めるかどうかを示す句。PREDICATE COLUMNS を指定すると、前のクエリで述語として使用されている列、または述語として使用される可能性が高い列のみが分析されます。すべての行を分析するには、ALL COLUMNS を指定します。デフォルトは ALL COLUMNS です。  
次のいずれかが当てはまる場合、列は述語列のセットに含まれます。  
+ この列は、フィルタ、結合条件、または GROUP BY 句の一部としてクエリで使用されています。
+ 列が分散キーです。
+ 列はソートキーの一部です。
例えば、テーブルがまだ照会されていないなどの理由で列が述語列としてマークされていない場合は、PREDICATE COLUMNS が指定されていてもすべての列が分析されます。この場合、Amazon Redshift は「*table-name* の述語列が見つかりません」 「すべての列を分析しています」などのメッセージで応答することがあります。述語の列の詳細については、[テーブルを分析する](t_Analyzing_tables.md)を参照してください。

## 使用に関する注意事項
<a name="r_ANALYZE-usage-notes"></a>

Amazon Redshift では、以下のコマンドを使用して作成したテーブルで自動的に ANALYZE を実行します。
+ CREATE TABLE AS
+ CREATE TEMP TABLE AS 
+ SELECT INTO

 外部テーブルを分析することはできません。

最初に作成したとき、これらのテーブルに ANALYZE コマンドを実行する必要はありません。変更する場合は、他のテーブルと同じように分析する必要があります。

### 分析のしきい値
<a name="r_ANALYZE-threshold"></a>

処理時間を短縮し、システム全体のパフォーマンスを向上させるために、最後の ANALYZE コマンドの実行以降に変更された行の割合が、[analyze\$1threshold\$1percent](r_analyze_threshold_percent.md) パラメータで指定された分析のしきい値よりも低い場合、Amazon Redshift はテーブルの分析をスキップします。デフォルトでは、`analyze_threshold_percent`は 10 です。現在のセッションの `analyze_threshold_percent` を変更するには、[SET](r_SET.md)コマンドを実行します。次の例では、`analyze_threshold_percent`を 20 パーセントに変更します。

```
set analyze_threshold_percent to 20;
```

数行のみを変更した場合にテーブルを分析するには、`analyze_threshold_percent`に任意の小さい数字を設定します。たとえば、`analyze_threshold_percent`を 0.01 に設定すると、少なくとも 10,000 行が変更された場合は 100,000,000 行のテーブルをスキップしません。

```
set analyze_threshold_percent to 0.01;
```

ANALYZE でテーブルがスキップされるのは、分析のしきい値を満たしていないためです。Amazon Redshift は次のメッセージを返します。

```
ANALYZE SKIP
```

行が変更されていない場合でもすべてのテーブルを分析するには、`analyze_threshold_percent`を 0 に設定します。

ANALYZE オペレーションの結果を表示するには、[STL\$1ANALYZE](r_STL_ANALYZE.md)システムテーブルに対してクエリを実行します。

テーブル分析の詳細については、「[テーブルを分析する](t_Analyzing_tables.md)」を参照してください。

## 例
<a name="r_ANALYZE-examples"></a>

TICKIT データベースのすべてのテーブルを分析し、進捗情報を返します。

```
analyze verbose;
```

LISTING テーブルのみを分析します。

```
analyze listing;
```

VENUE テーブルの VENUEID 列と VENUENAME 列を分析します。

```
analyze venue(venueid, venuename);
```

VENUE テーブルの述語の列のみを分析します。

```
analyze venue predicate columns;
```

# ANALYZE COMPRESSION
<a name="r_ANALYZE_COMPRESSION"></a>

圧縮分析を行い、分析されたテーブルの推奨列エンコードスキームのレポートを生成します。レポートには、列ごとに RAW エンコードと比較したディスク容量の圧縮可能率の推定値が含まれます。

## 構文
<a name="r_ANALYZE_COMPRESSION-synopsis"></a>

```
ANALYZE COMPRESSION
[ [ table_name ]
[ ( column_name [, ...] ) ] ]
[COMPROWS numrows]
```

## パラメータ
<a name="r_ANALYZE_COMPRESSION-parameters"></a>

 *table\$1name*   
一時テーブルを含む、特定のテーブルの圧縮を分析できます。テーブルをそのスキーマ名で修飾することができます。また、*table\$1name* を指定して単一のテーブルを分析することもできます。*table\$1name* を指定しなかった場合、現在接続されているデータベースがすべて分析されます。1 つの ANALYZE COMPRESSION ステートメントで複数の *table\$1name* を指定することはできません。

 *column\$1name*   
*table\$1name* を指定する場合、テーブルの 1 つ以上の列を指定することもできます (括弧内に列をカンマ区切りリストとして指定します)。

COMPROWS  
圧縮分析のサンプルサイズとして使用される行数。分析は各データスライスの行に対して実行されます。例えば、COMPROWS 1000000 (1,000,000) を指定し、システムに合計 4 つのスライスが含まれている場合、スライスごとに 250,000 行のみが読み取られ、分析されます。COMPROWS を指定しない場合、サンプルサイズはデフォルトでスライスごとに 100,000 になります。COMPROWS の値がスライスごとに 100,000 行のデフォルト値より小さい場合、自動的にデフォルト値にアップグレードされます。ただし、テーブルのデータが不十分であるため有意のサンプルを作成できない場合、圧縮分析では推奨を作成しません。COMPROWS 数がテーブルの行数より大きい場合でも、ANALYZE COMPRESSION コマンドは続行し、利用可能なすべての行に対して圧縮分析を実行します。テーブルが指定されていない場合、COMPROWS を使用するとエラーが発生します。

 *numrows*   
圧縮分析のサンプルサイズとして使用される行数。*numrows* の許容範囲は 1000～1000000000 (1,000,000,000) の数値です。

## 使用に関する注意事項
<a name="r_ANALYZE_COMPRESSION_usage_notes"></a>

ANALYZE COMPRESSION は排他的テーブルロックを取得し、テーブルに対する同時読み取り書き込みが防止されます。ANALYZE COMPRESSION コマンドは、テーブルがアイドル状態になっている場合にのみ実行してください。

テーブルの内容サンプルに基づいて推奨列エンコードスキームを取得するには、ANALYZE COMPRESSION を実行します。ANALYZE COMPRESSION はアドバイスツールであり、テーブルの列エンコードは変更しません。推奨エンコードは、テーブルを再作成するか、同じスキーマを持つ新しいテーブルを作成することにより適用できます。適切なエンコードスキームを使用して未圧縮テーブルを再作成すると、オンディスクフットプリントを大幅に減らすことができます。このアプローチにより、ディスクスペースを節約でき、I/O 関連ワークロードのクエリパフォーマンスが向上します。

ANALYZE COMPRESSION は、実際の分析フェーズをスキップし、SORTKEY として指定されている任意の列で元のエンコードタイプを直接返します。これは、SORTKEY 列が他の列よりも大幅に圧縮されている場合に、範囲制限されたスキャンのパフォーマンスが低下する可能性があるためです。

## 例
<a name="r_ANALYZE_COMPRESSION-examples"></a>

次の例は、LISTING テーブルのみの列に対するエンコードおよび推定減少パーセントを示しています。

```
analyze compression listing;
  
  Table  |     Column     | Encoding | Est_reduction_pct 
---------+----------------+----------+-------------------
 listing | listid         | az64     | 40.96
 listing | sellerid       | az64     | 46.92
 listing | eventid        | az64     | 53.37
 listing | dateid         | raw      | 0.00
 listing | numtickets     | az64     | 65.66
 listing | priceperticket | az64     | 72.94
 listing | totalprice     | az64     | 68.05
 listing | listtime       | az64     | 49.74
```

次の例は､SALES テーブルの QTYSOLD、COMMISSION、SALETIME の各列を分析します。

```
analyze compression sales(qtysold, commission, saletime);

 Table |   Column   | Encoding | Est_reduction_pct 
-------+------------+----------+-------------------
 sales | salesid    | N/A      | 0.00
 sales | listid     | N/A      | 0.00
 sales | sellerid   | N/A      | 0.00
 sales | buyerid    | N/A      | 0.00
 sales | eventid    | N/A      | 0.00
 sales | dateid     | N/A      | 0.00
 sales | qtysold    | az64     | 83.06
 sales | pricepaid  | N/A      | 0.00
 sales | commission | az64     | 71.85
 sales | saletime   | az64     | 49.63
```

# ATTACH MASKING POLICY
<a name="r_ATTACH_MASKING_POLICY"></a>

既存の動的データマスキングポリシーを列にアタッチします。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールは、マスキングポリシーをアタッチできます。

## 構文
<a name="r_ATTACH_MASKING_POLICY-synopsis"></a>

```
ATTACH MASKING POLICY 
{
  policy_name ON relation_name
  | database_name.policy_name ON database_name.schema_name.relation_name
}
( { output_column_names | output_path } )
[ USING ( { input_column_names | input_path } ) ]
TO { user_name | ROLE role_name | PUBLIC }
[ PRIORITY priority ];
```

## パラメータ
<a name="r_ATTACH_MASKING_POLICY-parameters"></a>

*policy\$1name*   
アタッチするマスキングポリシーの名前。

database\$1name  
ポリシーとリレーションが作成されるデータベースの名前。ポリシーとリレーションは同じデータベースに存在する必要があります。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

schema\$1name  
リレーションが属するスキーマの名前。

 *relation\$1name*   
マスキングポリシーをアタッチするリレーションの名前。

*output\$1column\$1names*   
マスキングポリシーが適用される列の名前。

*output\$1paths*   
マスキングポリシーが適用される SUPER オブジェクトのフルパス (列名を含む)。例えば、`person` という SUPER 型の列を使用したリレーションの場合、*output\$1path* は `person.name.first_name` になります。

*input\$1column\$1names*   
マスキングポリシーが入力として受け取る列の名前。このパラメータはオプションです。指定しない場合、マスキングポリシーは *output\$1column\$1names* を入力として使用します。

*input\$1paths*   
マスキングポリシーが入力として受け取る SUPER オブジェクトのフルパス。このパラメータはオプションです。指定しない場合、マスキングポリシーは *output\$1path* を入力に使用します。

*user\$1name*   
マスキングポリシーをアタッチするユーザーの名前。ユーザーと列、またはロールと列の同じ組み合わせに 2 つのポリシーをアタッチすることはできません。ポリシーをユーザーに、別のポリシーをユーザーのロールにアタッチできます。この場合、優先度の高いポリシーが適用されます。  
1 回の ATTACH MASKING POLICY コマンドで設定できるのは、user\$1name、role\$1name、PUBLIC のいずれか 1 つのみです。

*role\$1name*   
マスキングポリシーがアタッチされるロールの名前。同じ列/ロールのペアに 2 つのポリシーをアタッチすることはできません。ポリシーをユーザーに、別のポリシーをユーザーのロールにアタッチできます。この場合、優先度の高いポリシーが適用されます。  
1 回の ATTACH MASKING POLICY コマンドで設定できるのは、user\$1name、role\$1name、PUBLIC のいずれか 1 つのみです。

*PUBLIC*   
テーブルにアクセスするすべてのユーザーにマスキングポリシーをアタッチします。特定の列/ユーザーまたは列/ロールのペアにアタッチされている他のマスキングポリシーを適用するには、PUBLIC ポリシーよりも高い優先度を設定する必要があります。  
1 回の ATTACH MASKING POLICY コマンドで設定できるのは、user\$1name、role\$1name、PUBLIC のいずれか 1 つのみです。

*priority*   
マスキングポリシーの優先度。特定のユーザーのクエリに複数のマスキングポリシーが適用される場合、最も優先度の高いポリシーが適用されます。  
2 つの異なるポリシーを同じ優先順位で同じ列にアタッチすることはできません。2 つの異なるポリシーが別々のユーザーまたはロールにアタッチされている場合でも同様です。ポリシーをアタッチするユーザーまたはロールが毎回異なる場合に限り、同じポリシーを同じテーブル、出力列、入力列、優先度のパラメータのセットに複数回アタッチできます。  
ロールが異なっていても、その列にアタッチされている別のポリシーと同じ優先度の列にポリシーを適用することはできません。このフィールドはオプションです。優先度を指定しない場合、マスキングポリシーのアタッチの優先度はデフォルトで 0 に設定されます。

Amazon Redshift フェデレーティッドアクセス許可カタログでの ATTACH MASKING POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

# ATTACH RLS POLICY
<a name="r_ATTACH_RLS_POLICY"></a>

行レベルのセキュリティポリシーをテーブルで 1 人以上のユーザーまたはロールにアタッチします。

スーパーユーザーとユーザー、または `sys:secadmin` ロールを持つロールは、ポリシーをアタッチできます。

## 構文
<a name="r_ATTACH_RLS_POLICY-synopsis"></a>

```
ATTACH RLS POLICY 
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
TO { user_name | ROLE role_name | PUBLIC } [, ...]
```

## パラメータ
<a name="r_ATTACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
ポリシーの名前。

database\$1name  
ポリシーとリレーションが作成されるデータベースの名前。ポリシーとリレーションは同じデータベースに存在する必要があります。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

schema\$1name  
リレーションが属するスキーマの名前。

table\$1name  
行レベルのセキュリティポリシーがアタッチされているリレーション。

TO \$1 *user\$1name* \$1 ROLE *role\$1name* \$1 PUBLIC\$1 [, ...]  
ポリシーが指定した 1 つ以上のユーザーまたはロールにアタッチするかどうか指定します。

Amazon Redshift フェデレーティッドアクセス許可カタログでの ATTACH RLS ポリシーの使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

## 使用に関する注意事項
<a name="r_ATTACH_RLS_POLICY-usage"></a>

ATTACH RLS POLICY ステートメントを使用する際、次の点に注意してください。
+ アタッチされるテーブルには、ポリシー作成ステートメントの WITH 句に一覧表示されているすべての列が含まれている必要があります。
+ Amazon Redshift RLS では、以下のオブジェクトに RLS ポリシーをアタッチできます。
  +  テーブル 
  +  ビュー
  +  遅延バインドビュー 
  +  具体化されたビュー
+ Amazon Redshift RLS は、以下のオブジェクトへの RLS ポリシーのアタッチをサポートしていません。
  +  カタログテーブル 
  +  データベース間のリレーション 
  +  外部テーブル 
  +  一時テーブル 
  +  ポリシールックアップテーブル
  + マテリアライズドビューのベーステーブル
+ スーパーユーザーまたは `sys:secadmin` アクセス許可を持つユーザーにアタッチした RLS ポリシーは、無視されます。

## 例
<a name="r_ATTACH_RLS_POLICY-examples"></a>

次の例では、指定したテーブルとロールの組み合わせに RLS ポリシーをアタッチします。RLS ポリシーは、`analyst` または `dbadmin` のロールを持つユーザーが tickit\$1category\$1redshift テーブルにアクセスする場合に適用されます。

```
ATTACH RLS POLICY policy_concerts ON tickit_category_redshift TO ROLE analyst, ROLE dbadmin;
```

# BEGIN
<a name="r_BEGIN"></a>

トランザクションを開始します。START TRANSACTION と同義です。

トランザクションは、1 つのコマンドまたは複数のコマンドから構成される、1 つの論理的作業単位です。通常、1 つのトランザクションのすべてのコマンドはデータベースの 1 つのスナップショットに対して実行されます。その開始時刻は、システム設定パラメータ `transaction_snapshot_begin` に設定されている値によって決定されます。

デフォルトでは、個々の Amazon Redshift オペレーション (クエリ、DDL ステートメント、ロード) はデータベースに自動的にコミットされます。後続の作業が完了するまでオペレーションのコミットを停止する場合、BEGIN ステートメントでトランザクションを開き、必要なコマンドを実行し、[COMMIT](r_COMMIT.md)または [END](r_END.md) ステートメントでトランザクションを閉じます。必要に応じて、[ROLLBACK](r_ROLLBACK.md)ステートメントを使用して、進行中のトランザクションを停止できます。この動作の例外は [TRUNCATE](r_TRUNCATE.md) コマンドです。このコマンドは実行されているトランザクションをコミットします。ロールバックすることはできません。

## 構文
<a name="r_BEGIN-synopsis"></a>

```
BEGIN [ WORK | TRANSACTION ] [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

START TRANSACTION [ ISOLATION LEVEL option ] [ READ WRITE | READ ONLY ]

Where option is

SERIALIZABLE
| READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ

Note: READ UNCOMMITTED, READ COMMITTED, and REPEATABLE READ have no
operational impact and map to SERIALIZABLE in Amazon Redshift. You can see database isolation levels on your cluster 
by querying the stv_db_isolation_level table.
```

## パラメータ
<a name="r_BEGIN-parameters"></a>

WORK   
オプションキーワード

TRANSACTION   
オプションキーワード。WORK と TRANSACTION は同義語です。

ISOLATION LEVEL SERIALIZABLE   
デフォルトで直列化可能な分離がサポートされているため、この構文がステートメントに含まれているかどうかに関係なく、トランザクションの動作は同じです。詳細については、「[同時書き込み操作を管理する](c_Concurrent_writes.md)」を参照してください。他の分離レベルはサポートされていません。  
SQL 標準では、以下の状態を避けるため、4 つのレベルのトランザクション分離を定義しています: *ダーティリード* (トランザクションが未コミットの同時トランザクションによって書き込まれたデータを読み取ります)、*非再現リード* (トランザクションが以前に読み取ったデータを再読み取りし、初回読み取り後にコミットされた別のトランザクションによってデータが変更されたことを検出します)、および*ファントムリード* (トランザクションがクエリを再実行し、検索条件を満たす行セットを返した後、最近コミットされた別のトランザクションのために行セットが変更されていることを検出します)。  
+ 未コミット読み取り: ダーティリード、非再現リード、およびファントムリードの可能性があります。
+ コミット済み読み取り: 非再現リードおよびファントムリードの可能性があります。
+ 再現可能読み取り: ファントムリードの可能性があります。
+ 直列化可能: ダーティリード、非再現リード、およびファントムリードを防止します。
4 つのトランザクション分離レベルのいずれも使用できますが、Amazon Redshift ではすべての分離レベルを直列化可能として処理します。

READ WRITE   
トランザクションに読み取り書き込み権限を与えます。

READ ONLY   
トランザクションに読み取り専用権限を与えます。

## 例
<a name="r_BEGIN-examples"></a>

次の例では、直列化可能なトランザクションブロックを開始します。

```
begin;
```

次の例では、直列化可能分離レベルと読み取り書き込み権限を持つトランザクションブロックを開始します。

```
begin read write;
```

# CALL
<a name="r_CALL_procedure"></a>

ストアドプロシージャを実行します。CALL コマンドには、プロシージャ名と入力引数の値を含める必要があります。CALL ステートメントを使用してストアドプロシージャを呼び出す必要があります。

**注記**  
CALL を通常のクエリの一部にすることはできません。

## 構文
<a name="r_CALL_procedure-synopsis"></a>

```
CALL sp_name ( [ argument ] [, ...] )
```

## パラメータ
<a name="r_CALL_procedure-parameters"></a>

 *sp\$1name*   
実行するプロシージャの名前。

 *argument*   
入力引数の値。このパラメータは、関数名 (`pg_last_query_id()`) とすることもできます。クエリは CALL の引数として使用できません。

## 使用に関する注意事項
<a name="r_CALL_procedure-usage-notes"></a>

Amazon Redshift のストアドプロシージャは、以下に説明するように、ネストされた呼び出しと再帰呼び出しをサポートしています。さらに、以下に説明するように、ドライバーのサポートが最新であることを確認します。

**Topics**
+ [ネストされた呼び出し](#r_CALL_procedure-nested-calls)
+ [ドライバーのサポート](#r_CALL_procedure-driver-support)

### ネストされた呼び出し
<a name="r_CALL_procedure-nested-calls"></a>

Amazon Redshift のストアドプロシージャは、ネストされた呼び出しと再帰呼び出しをサポートしています。ネストレベルの最大許容数は 16 です。ネストされた呼び出しは、ビジネスロジックをより小さいプロシージャにカプセル化できます。これらのプロシージャを複数の発信者が共有できます。

ネストされたプロシージャに出力パラメータが含まれていると、このプロシージャを呼び出す場合、内部プロシージャは INOUT 引数を定義する必要があります。この場合、内部プロシージャを非定数変数で渡す必要があります。OUT 引数は許可されません。この動作が発生するのは、内部呼び出しの出力を保持するために変数が必要であるためです。

内部プロシージャと外部プロシージャの関係は、[SVL\$1STORED\$1PROC\$1CALL](r_SVL_STORED_PROC_CALL.md)の `from_sp_call` 列に記録されます。

次の例は、INOUT 引数を通じて、ネストされたプロシージャ呼び出しに渡される変数を示しています。

```
CREATE OR REPLACE PROCEDURE inner_proc(INOUT a int, b int, INOUT c int) LANGUAGE plpgsql
AS $$
BEGIN
  a := b * a;
  c := b * c;
END;
$$;

CREATE OR REPLACE PROCEDURE outer_proc(multiplier int) LANGUAGE plpgsql
AS $$
DECLARE
  x int := 3;
  y int := 4;
BEGIN
  DROP TABLE IF EXISTS test_tbl;
  CREATE TEMP TABLE test_tbl(a int, b varchar(256));
  CALL inner_proc(x, multiplier, y);
  insert into test_tbl values (x, y::varchar);
END;
$$;

CALL outer_proc(5);

SELECT * from test_tbl;
 a  | b
----+----
 15 | 20
(1 row)
```

### ドライバーのサポート
<a name="r_CALL_procedure-driver-support"></a>

Java Database Connectivity (JDBC) ドライバーと Open Database Connectivity (ODBC) ドライバーを、Amazon Redshift のストアドプロシージャをサポートする最新バージョンにアップグレードすることをお勧めします。

クライアントツールで使用しているドライバーの API オペレーションが CALL ステートメントをサーバーにパススルーする場合は、既存のドライバーを使用できることがあります。出力パラメータ (ある場合) は、1 行の結果セットとして返されます。

最新バージョンの Amazon Redshift JDBC ドライバーと ODBC ドライバーには、ストアドプロシージャを検出するためのメタデータサポートが含まれています。カスタム Java アプリケーション用の `CallableStatement` サポートも含まれています。ドライバーの詳細については、「*Amazon Redshift 管理ガイド*」の「[SQL クライアントツールを使用して Amazon Redshift クラスターに接続する](https://docs.aws.amazon.com/redshift/latest/mgmt/connecting-to-cluster.html)」を参照してください。

以下の例は、ストアドプロシージャ呼び出しで JDBC ドライバーの複数の異なる API オペレーションを使用する方法を示しています。

```
void statement_example(Connection conn) throws SQLException {
  statement.execute("CALL sp_statement_example(1)");
}

void prepared_statement_example(Connection conn) throws SQLException {
  String sql = "CALL sp_prepared_statement_example(42, 84)";
  PreparedStatement pstmt = conn.prepareStatement(sql);
  pstmt.execute();
}

void callable_statement_example(Connection conn) throws SQLException {
  CallableStatement cstmt = conn.prepareCall("CALL sp_create_out_in(?,?)");
  cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
  cstmt.setInt(2, 42);
  cstmt.executeQuery();
  Integer out_value = cstmt.getInt(1);
}
```

## 例
<a name="r_CALL_procedure-examples"></a>

次の例では、プロシージャ名 `test_spl` を呼び出します。

```
call test_sp1(3,'book');
INFO:  Table "tmp_tbl" does not exist and will be skipped
INFO:  min_val = 3, f2 = book
```

次の例では、プロシージャ名 `test_spl2` を呼び出します。

```
call test_sp2(2,'2019');

         f2          | column2
---------------------+---------
 2019+2019+2019+2019 | 2
(1 row)
```

# CANCEL
<a name="r_CANCEL"></a>

現在実行中のデータベースクエリをキャンセルします。

CANCEL コマンドは実行中のクエリのプロセス ID またはセッション ID を必要とし、クエリがキャンセルされたことを確認する確認メッセージを表示します。

## 必要な権限
<a name="r_CANCEL-privileges"></a>

CANCEL に必要な権限を以下に示します。
+ 自身のクエリをキャンセルしているスーパーユーザー
+ ユーザーのクエリをキャンセルしているスーパーユーザー
+ CANCEL の権限を持ち、ユーザーのクエリをキャンセルしているユーザー
+ 自身のクエリをキャンセルしているユーザー

## 構文
<a name="r_CANCEL-synopsis"></a>

```
CANCEL process_id [ 'message' ]
```

## パラメータ
<a name="r_CANCEL-parameters"></a>

 *process\$1id*   
Amazon Redshift クラスターで実行されているクエリをキャンセルするには、キャンセルするクエリに対応する [STV\$1RECENTS](r_STV_RECENTS.md) の `pid` (プロセス ID) を使用します。  
Amazon Redshift Serverless ワークグループで実行されているクエリをキャンセルするには、キャンセルするクエリに対応する [SYS\$1QUERY\$1HISTORY](SYS_QUERY_HISTORY.md) の `session_id` を使用します。

'*message*'  
オプションの確認メッセージ。クエリのキャンセルが完了したときに表示されます。メッセージを指定しなかった場合、Amazon Redshift は確認としてデフォルトメッセージを表示します。メッセージは一重引用符で囲む必要があります。

## 使用に関する注意事項
<a name="r_CANCEL-usage-notes"></a>

クエリ ID **を指定してクエリをキャンセルすることはできません。クエリの**プロセス ID (PID) またはセッション ID **を指定する必要があります。ユーザーによって現在実行されているクエリのみキャンセルできます。スーパーユーザーはすべてのクエリをキャンセルできます。

複数のセッション内のクエリが同じテーブルでロックを保持する場合は、[PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) 関数を使用してセッションの 1 つを終了できます。これを行うと、終了したセッションで現在実行されているトランザクションがすべてのロックを解除し、トランザクションがロールバックされます。[STV\$1LOCKS](r_STV_LOCKS.md) システムテーブルに対してクエリを実行して、現在保持しているロックを表示します。

Amazon Redshift は特定の内部イベントに続いてアクティブなセッションを再起動し、新しい PID を割り当てる場合があります。PID が変更されている場合は、次のようなエラーメッセージが表示されることがあります。

```
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
```

新しい PID を見つけるには、[STL\$1RESTARTED\$1SESSIONS](r_STL_RESTARTED_SESSIONS.md)システムテーブルに対してクエリを実行し、`oldpid`列でフィルタリングします。

```
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
```

## 例
<a name="r_CANCEL-examples"></a>

Amazon Redshift クラスターで現在実行されているクエリをキャンセルするには、キャンセルするクエリのプロセス ID を最初に取得します。現在実行されているすべてのクエリのプロセス ID を確認するには、次のコマンドを入力します。

```
select pid, starttime, duration,
trim(user_name) as user,
trim (query) as querytxt
from stv_recents
where status = 'Running';

pid |         starttime          | duration |   user   |    querytxt
-----+----------------------------+----------+----------+-----------------
802 | 2008-10-14 09:19:03.550885 |      132 | dwuser | select
venuename from venue where venuestate='FL', where venuecity not in
('Miami' , 'Orlando');
834 | 2008-10-14 08:33:49.473585 |  1250414 | dwuser | select *
from listing;
964 | 2008-10-14 08:30:43.290527 |   326179 | dwuser | select
sellerid from sales where qtysold in (8, 10);
```

クエリテキストをチェックし、キャンセルするクエリに対応するプロセス ID (PID) を確認します。

次のコマンドを入力して、PID 802 を使用してクエリをキャンセルします。

```
cancel 802;
```

クエリが実行されていたセッションは、次のメッセージを表示します。

```
ERROR:  Query (168) cancelled on user's request
```

ここでは、`168`はクエリ ID です (クエリをキャンセルするために使用されるプロセス ID ではありません)。

また、デフォルトメッセージの代わりに表示するカスタム確認メッセージを指定することもできます。カスタムメッセージを指定するには、CANCEL コマンドの最後に一重引用符で囲んだメッセージを付けます。

```
cancel 802 'Long-running query';
```

クエリが実行されていたセッションは、次のメッセージを表示します。

```
ERROR:  Long-running query
```

# CLOSE
<a name="close"></a>

(オプション) 開いているカーソルと関連付けられたすべての空きリソースを閉じます。[COMMIT](r_COMMIT.md)、[END](r_END.md)、および [ROLLBACK](r_ROLLBACK.md) は自動的にカーソルを閉じるため、CLOSE コマンドを使用して明示的にカーソルを閉じる必要はありません。

詳細については、「[DECLARE](declare.md)」、「[FETCH](fetch.md)」を参照してください。

## 構文
<a name="close-synopsis"></a>

```
CLOSE cursor
```

## パラメータ
<a name="close-parameters"></a>

*cursor*   
閉じるカーソルの名前。

## CLOSE の例
<a name="close-example"></a>

次のコマンドはカーソルを閉じ、コミットを実行してトランザクションを終了します。

```
close movie_cursor;
commit;
```

# COMMENT
<a name="r_COMMENT"></a>

データベースオブジェクトに関するコメントを作成するか変更します。

## 構文
<a name="r_COMMENT-synopsis"></a>

```
COMMENT ON
{
TABLE object_name |
COLUMN object_name.column_name |
CONSTRAINT constraint_name ON table_name |
DATABASE object_name |
VIEW object_name
}
IS 'text' | NULL
```

## パラメータ
<a name="r_COMMENT-parameters"></a>

 *object\$1name*   
コメント対象のデータベースオブジェクトの名前。コメントは次のオブジェクトに追加できます。  
+ TABLE
+ COLUMN (*column\$1name* も取ります)
+ CONSTRAINT (*constraint\$1name* と *table\$1name* も取ります)
+ DATABASE
+ VIEW
+ SCHEMA

IS '*text*' \$1 NULL  
指定したオブジェクトに追加または置換するコメントテキスト。*テキスト*文字列のデータ型は TEXT です。コメントは一重引用符で囲みます。コメントテキストを削除するには、値を NULL に設定します。

 *column\$1name*   
コメント対象の列の名前。COLUMN のパラメータ。`object_name` で指定するテーブルの後に指定します。

 *constraint\$1name*   
コメント対象の制約の名前。CONSTRAINT のパラメータ。

 *table\$1name*   
制約を含むテーブルの名前。CONSTRAINT のパラメータ。

## 使用に関する注意事項
<a name="r_COMMENT-usage-notes"></a>

コメントを追加または更新するには、スーパーユーザーまたはデータベースオブジェクトの所有者である必要があります。

データベースに関するコメントは現在のデータベースにのみ適用できます。異なるデータベースにコメントしようとすると、警告メッセージが表示されます。存在しないデータベースに関するコメントに対しても、同じ警告が表示されます。

外部テーブル、外部列、遅延バインドビューの列に関するコメントはサポートされていません。

## 例
<a name="r_COMMENT-example"></a>

次の使用例は、SALES テーブルにコメントを追加します。

```
COMMENT ON TABLE sales IS 'This table stores tickets sales data';
```

次の使用例は、SALES テーブルにコメントを追加します。

```
select obj_description('public.sales'::regclass);

obj_description
-------------------------------------
This table stores tickets sales data
```

次の使用例は、SALES テーブルからコメントを削除します。

```
COMMENT ON TABLE sales IS NULL;
```

次の使用例は、SALES テーブルの EVENTID 列にコメントを追加します。

```
COMMENT ON COLUMN sales.eventid IS 'Foreign-key reference to the EVENT table.';
```

次の使用例は、SALES テーブルの EVENTID 列 (列番号 5) にコメントを表示します。

```
select col_description( 'public.sales'::regclass, 5::integer );

col_description
-----------------------------------------
Foreign-key reference to the EVENT table.
```

次の例では、説明的なコメントを EVENT テーブルに追加します。

```
comment on table event is 'Contains listings of individual events.';
```

コメントを表示するには、PG\$1DESCRIPTION システムカタログをクエリします。次の例は、EVENT テーブルの説明を返します。

```
select * from pg_catalog.pg_description
where objoid =
(select oid from pg_class where relname = 'event'
and relnamespace =
(select oid from pg_catalog.pg_namespace where nspname = 'public') );

objoid | classoid | objsubid | description
-------+----------+----------+----------------------------------------
116658 |     1259 |        0 | Contains listings of individual events.
```

# COMMIT
<a name="r_COMMIT"></a>

現在のトランザクションをデータベースにコミットします。このコマンドはトランザクションからのデータベース更新を永続的なものにします。

## 構文
<a name="r_COMMIT-synopsis"></a>

```
COMMIT [ WORK | TRANSACTION ]
```

## パラメータ
<a name="r_COMMIT-parameters"></a>

WORK  
オプションキーワード このキーワードは、ストアドプロシージャ内ではサポートされていません。

TRANSACTION  
オプションキーワード WORK と TRANSACTION は同義語です。ストアドプロシージャ内ではいずれもサポートされていません。

ストアドプロシージャ内での COMMIT の使用方法については、[トランザクションの管理](stored-procedure-transaction-management.md)を参照してください。

## 例
<a name="r_COMMIT-examples"></a>

次の各例では、現在のトランザクションをデータベースにコミットします。

```
commit;
```

```
commit work;
```

```
commit transaction;
```

# COPY
<a name="r_COPY"></a>


|  | 
| --- |
|  COPY コマンドと UNLOAD コマンドのクライアント側の暗号化は、2025 年 4 月 30 日以降、新規のお客様は利用できなくなります。2025 年 4 月 30 日より前の 12 か月間に COPY コマンドと UNLOAD コマンドでクライアント側の暗号化を使用していた場合、2026 年 4 月 30 日までは COPY コマンドまたは UNLOAD コマンドでクライアント側の暗号化を引き続き使用できます。2026 年 4 月 30 日を過ぎると、COPY と UNLOAD でクライアント側の暗号化を使用できなくなります。できるだけ早く COPY と UNLOAD でサーバー側の暗号化を使用するよう切り替えることをお勧めします。COPY と UNLOAD でサーバー側の暗号化を既に使用している場合、変更はなく、クエリを変更せずに引き続き使用できます。COPY と UNLOAD の暗号化の詳細については、以下の ENCRYPTED パラメータを参照してください。  | 

データファイルまたは Amazon DynamoDB テーブルから、テーブルにデータをロードします。ファイルは Amazon Simple Storage Service (Amazon S3) バケット、Amazon EMR クラスターまたは Secure Shell (SSH) 接続を使用したリモートホストに配置できます。

**注記**  
Amazon Redshift Spectrum の外部テーブルは読み込み専用です。外部テーブルには COPY できません。

COPY コマンドは、入力データを追加の行としてテーブルに付加します。

どのソースからであっても、単一の入力行の最大サイズは 4 MB です。

**Topics**
+ [必要なアクセス許可](#r_COPY-permissions)
+ [COPY 構文](#r_COPY-syntax)
+ [必須パラメータ](#r_COPY-syntax-required-parameters)
+ [任意指定のパラメータ](#r_COPY-syntax-overview-optional-parameters)
+ [COPY コマンドの使用上の注意とその他のリソース](#r_COPY-using-the-copy-command)
+ [COPY コマンドの例](#r_COPY-using-the-copy-command-examples)
+ [COPY JOB](r_COPY-JOB.md)
+ [テンプレートを使用したコピー](r_COPY-WITH-TEMPLATE.md)
+ [COPY パラメータリファレンス](r_COPY-parameters.md)
+ [使用に関する注意事項](r_COPY_usage_notes.md)
+ [COPY の例](r_COPY_command_examples.md)

## 必要なアクセス許可
<a name="r_COPY-permissions"></a>

COPY コマンドを使用するには、Amazon Redshift テーブルに対する [INSERT](r_GRANT.md#grant-insert) 権限が必要です。

## COPY 構文
<a name="r_COPY-syntax"></a>

```
COPY table-name 
[ column-list ]
FROM data_source
authorization
[ [ FORMAT ] [ AS ] data_format ] 
[ parameter [ argument ] [, ... ] ]
```

テーブル名、データソース、データにアクセスするための許可のわずか 3 つのパラメータで COPY オペレーションを実行できます。

Amazon Redshift は COPY コマンドの機能を拡張し、マルチデータソースから複数のサービスデータ形式でのデータのロード、ロードデータへのアクセス制御、データ変換の管理、ロードオペレーションの管理を可能にします。

以下のセクションでは、COPY コマンドの必須パラメータと、機能別に分類したオプションのパラメータを示します。また、各パラメータについて説明し、さまざまなオプションがどのように連携するかについても説明します。アルファベット順のパラメータリストを使用すると、パラメータの説明に直接移動できます。

## 必須パラメータ
<a name="r_COPY-syntax-required-parameters"></a>

COPY コマンドには 3 つの要素が必要です。
+ [Table Name](#r_COPY-syntax-overview-table-name)
+ [Data Source](#r_COPY-syntax-overview-data-source)
+ [Authorization](#r_COPY-syntax-overview-credentials)

最も単純な COPY コマンドは次の形式を使用します。

```
COPY table-name 
FROM data-source
authorization;
```

次の例では、CATDEMO というテーブルを作成し、Amazon S3 の `category_pipe.txt` というデータファイルからサンプルデータを含むテーブルをロードします。

```
create table catdemo(catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50));
```

以下の例では、COPY コマンドのデータソースは、`redshift-downloads`という名前の Amazon S3 バケットの `tickit` フォルダ内の `category_pipe.txt` というデータファイルです。COPY コマンドには、AWS Identity and Access Management(IAM) ロールを通して、Amazon S3 バケットにアクセスすることが許可されています。クラスターに Amazon S3 にアクセスする権限を持つ既存の IAM ロールがある場合、次の COPY コマンドに ロールの Amazon Resource Name (ARN) を置換して実行できます。

```
copy catdemo
from 's3://redshift-downloads/tickit/category_pipe.txt'
iam_role 'arn:aws:iam::<aws-account-id>:role/<role-name>'
region 'us-east-1';
```

他の AWS リージョンからデータをロードする手順など、COPY コマンドを使用してサンプルデータをロードする方法の詳細については、「Amazon Redshift 入門ガイド」の「[Amazon S3 からサンプルデータをロードする](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html)」を参照してください。

*table-name*  <a name="r_COPY-syntax-overview-table-name"></a>
COPY コマンドのターゲットテーブル名です。テーブルはすでにデータベースに存在する必要があります。テーブルは一時テーブルまたは永続的テーブルです。COPY コマンドは、新しい入力データをテーブルの既存の行に追加します。

FROM *data\$1source*  <a name="r_COPY-syntax-overview-data-source"></a>
ターゲットテーブルにロードするソースデータの場所です。マニフェストファイルは、いくつかのデータソースで指定できます。  
最もよく使われるデータリポジトリは Amazon S3 バケットです。Amazon EMR クラスター、Amazon EC2 インスタンス、またはクラスターが SSH 接続を使用してアクセスできるリモートホストにあるデータファイルからロードすることもできます。または、DynamoDB テーブルから直接ロードすることもできます。  
+ [Amazon S3 からの COPY](copy-parameters-data-source-s3.md)
+ [Amazon EMR からの COPY](copy-parameters-data-source-emr.md) 
+ [リモートホスト (SSH) からの COPY](copy-parameters-data-source-ssh.md)
+ [Amazon DynamoDB からの COPY](copy-parameters-data-source-dynamodb.md)

承認  <a name="r_COPY-syntax-overview-credentials"></a>
他の AWS リソースにアクセスするための承認と許可のために、クラスターが使用する方法を示す句。COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。クラスターにアタッチされた IAM ロールを参照して、または IAM ユーザーのアクセスキー ID とシークレットアクセスキーを提供して、そのアクセス権限を提供できます。  
+ [認可パラメータ](copy-parameters-authorization.md) 
+ [ロールベースアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based) 
+ [キーベースのアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based) 

## 任意指定のパラメータ
<a name="r_COPY-syntax-overview-optional-parameters"></a>

オプションで、COPY でターゲットテーブルの列にフィールドデータをマッピングする方法の指定、COPY コマンドで正しく読み込み解析できるソースデータ属性の定義、ロード処理中に COPY コマンドが実行する操作の管理ができます。
+ [列のマッピングオプション](copy-parameters-column-mapping.md)
+ [データ形式パラメータ](#r_COPY-syntax-overview-data-format)
+ [データ変換パラメータ](#r_COPY-syntax-overview-data-conversion)
+ [データのロード操作](#r_COPY-syntax-overview-data-load)

### 列のマッピング
<a name="r_COPY-syntax-overview-column-mapping"></a>

デフォルトでは、COPY はデータファイルで発生したフィールドと同じ順序でターゲットテーブルの列にフィールド値を挿入します。デフォルトの列順序が機能しない場合は、列リストを指定するか、JSONPath 式を使用してソースデータフィールドをターゲット列にマッピングできます。
+ [Column List](copy-parameters-column-mapping.md#copy-column-list)
+ [JSONPaths File](copy-parameters-column-mapping.md#copy-column-mapping-jsonpaths)

### データ形式パラメータ
<a name="r_COPY-syntax-overview-data-format"></a>

固定幅、文字区切り形式、カンマ区切り値 (CSV) のテキストファイル、JSON 形式、または Avro ファイルからデータをロードできます。

デフォルトでは、COPY コマンドはソースデータを文字区切り形式 UTF-8 のテキストファイルと見なします。デフォルトの区切り文字はパイプ文字です。ソースデータが別の形式である場合は、以下のパラメータを使用してデータ形式を指定します。
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter) 
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth) 
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile) 
+ [AVRO](copy-parameters-data-format.md#copy-avro) 
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json) 
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) 
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [GZIP](copy-parameters-file-compression.md#copy-gzip) 
+ [LZOP](copy-parameters-file-compression.md#copy-lzop) 
+ [PARQUET](copy-parameters-data-format.md#copy-parquet) 
+ [ORC](copy-parameters-data-format.md#copy-orc) 
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd) 

### データ変換パラメータ
<a name="r_COPY-syntax-overview-data-conversion"></a>

テーブルをロードする際に、COPY は暗黙的にソースデータの文字列をターゲット列のデータ型に変換しようとします。デフォルトの動作とは異なる変換を指定する必要がある場合、またはデフォルトの変換がエラーになった場合、次のパラメータを指定してデータ変換を管理できます。
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars) 
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding) 
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape) 
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) 
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord) 
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines) 
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader) 
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as) 
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes) 
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 

### データのロード操作
<a name="r_COPY-syntax-overview-data-load"></a>

次のパラメータを指定して、トラブルシューティングの際のロード操作のデフォルトの動作を管理したり、ロード時間を短縮します。
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows) 
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate) 
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors) 
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror) 
+ [NOLOAD](copy-parameters-data-load.md#copy-noload) 
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate) 

## COPY コマンドの使用上の注意とその他のリソース
<a name="r_COPY-using-the-copy-command"></a>

COPY コマンドの使用方法の詳細については、次のトピックを参照してください。
+ [使用に関する注意事項](r_COPY_usage_notes.md)
+ [チュートリアル: Amazon S3 からデータをロードする](tutorial-loading-data.md)
+ [データをロードするための Amazon Redshift のベストプラクティス](c_loading-data-best-practices.md)
+ [COPY コマンドを使ってテーブルをロードする](t_Loading_tables_with_the_COPY_command.md)
  + [Amazon S3 からデータをロードする](t_Loading-data-from-S3.md)
  + [Amazon EMR からのデータのロード](loading-data-from-emr.md)
  + [リモートホストからデータをロードする](loading-data-from-remote-hosts.md) 
  + [Amazon DynamoDB テーブルからのデータのロード](t_Loading-data-from-dynamodb.md)
+ [データロードのトラブルシューティング](t_Troubleshooting_load_errors.md)

## COPY コマンドの例
<a name="r_COPY-using-the-copy-command-examples"></a>

さまざまなソースから、異なる形式で、さまざまな COPY オプションを使用して COPY を実行する方法を示すその他の例については、「[COPY の例](r_COPY_command_examples.md)」を参照してください。

# COPY JOB
<a name="r_COPY-JOB"></a>

このコマンドの使用の詳細については、「[S3 イベント統合を作成して Amazon S3 バケットからファイルを自動的にコピーする](loading-data-copy-job.md)」を参照してください。

データをテーブルにロードする COPY コマンドを管理します。COPY JOB コマンドは COPY コマンドの拡張であり、Amazon S3 バケットからのデータロードを自動化します。COPY ジョブを作成すると、Amazon Redshift は、指定されたパスに新しい Amazon S3 ファイルが作成されたことを検出し、ユーザーの操作なしで自動的にロードします。データをロードするときには、元の COPY コマンドで使用されているのと同じパラメータが使用されます。Amazon Redshift は、ロードされたファイルを (ファイル名に基づいて) 追跡し、ロードされたのが 1 回だけであることを確認します。

**注記**  
使用方法、パラメータ、権限など、COPY コマンドの詳細については、「[COPY](r_COPY.md)」を参照してください。

## 必要なアクセス許可
<a name="r_COPY-JOB-privileges"></a>

COPY JOB コマンドを使用するには、COPY を使用するために必要なすべてのアクセス許可に加えて、以下のいずれかのアクセス許可が必要です。
+ スーパーユーザー
+  以下のすべて: 
  +  COPY 先のデータベース内の COPY JOBS に関連する CREATE、ALTER、または DROP の範囲指定されたアクセス許可。
  +  COPY 先のスキーマの USAGE アクセス許可、または COPY 先のデータベース内のスキーマに対する USAGE の範囲指定されたアクセス許可。
  +  COPY 先のテーブルの INSERT アクセス許可、または COPY 先のスキーマまたはデータベース内のテーブルに対する INSERT の範囲指定されたアクセス許可。

COPY コマンドで指定した IAM ロールにはロードするデータへのアクセス権限が必要です。詳細については、「[COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)」を参照してください。

## 構文
<a name="r_COPY-JOB-syntax"></a>

コピージョブを作成します。COPY コマンドのパラメータは、コピージョブと共に保存されます。

トランザクションブロックの範囲内で COPY JOB CREATE を実行することはできません。

```
COPY copy-command JOB CREATE job-name
[AUTO ON | OFF]
```

コピージョブの設定を変更します。

```
COPY JOB ALTER job-name
[AUTO ON | OFF]
```

コピージョブを実行します。保存されている COPY コマンドパラメータが使用されます。

```
COPY JOB RUN job-name
```

すべてのコピージョブを一覧表示します。

```
COPY JOB LIST
```

コピージョブの詳細を表示します。

```
COPY JOB SHOW job-name
```

コピージョブを削除します。

トランザクションブロックの範囲内で COPY JOB DROP を実行することはできません。

```
COPY JOB DROP job-name
```

## パラメータ
<a name="r_COPY-JOB-parameters"></a>

*copy-command*  
Amazon S3 から Amazon Redshift にデータをロードする COPY コマンドです。この句には、Amazon S3 バケット、ターゲットテーブル、IAM ロール、およびデータをロードするときに使用されるその他のパラメータを定義する COPY パラメータが含まれています。Amazon S3 データロードの COPY コマンドパラメータは、以下を除いてすべてサポートされています。  
+ COPY JOB は、COPY コマンドで指定されたフォルダー内の既存のファイルを取り込みません。COPY JOB 作成タイムスタンプ以降に作成されたファイルのみが取り込まれます。
+ COPY コマンドに対しては、MAXERROR オプションまたは IGNOREALLERRORS オプションを指定することはできません。
+ マニフェストファイルは指定できません。COPY JOB では、新しく作成されたファイルをモニタリングするために、指定された Amazon S3 ロケーションが必要です。
+ アクセスキーやシークレットキーなどの認可タイプで COPY コマンドを指定することはできません。この `IAM_ROLE` パラメータを認可に使用する COPY コマンドのみがサポートされます。詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。
+ COPY JOB は、クラスターに関連付けられたデフォルトの IAM ロールをサポートしていません。COPY コマンド内で `IAM_ROLE` を指定する必要があります。
詳細については、「[Amazon S3 からの COPY](copy-parameters-data-source-s3.md)」を参照してください。

*job-name*  
COPY ジョブを参照するために使用されるジョブの名前です。[*job-name*] にハイフン (‐) を含めることはできません。

 [AUTO ON \$1 OFF]   
Amazon S3 データが Amazon Redshift テーブルに自動的にロードされるかどうかを示す句です。  
+ `ON` の場合、Amazon Redshift はソースの Amazon S3 パスで新しく作成されたファイルをモニタリングし、見つかった場合は、ジョブ定義の COPY パラメータを使用して COPY コマンドが実行されます。これがデフォルトです。
+ `OFF` の場合、Amazon Redshift は COPY JOB を自動的に実行しません。

## 使用に関する注意事項
<a name="r_COPY-JOB-usage-notes"></a>

COPY コマンドのオプションは実行時まで検証されません。たとえば、無効な `IAM_ROLE` や Amazon S3 データソースがあると、COPY JOB の開始時にランタイムエラーが発生します。

クラスターが一時停止している場合、COPY JOB は実行されません。

ロードされた COPY コマンドファイルとロードエラーをクエリするには「[STL\$1LOAD\$1COMMITS](r_STL_LOAD_COMMITS.md)、[STL\$1LOAD\$1ERRORS](r_STL_LOAD_ERRORS.md)、[STL\$1LOADERROR\$1DETAIL](r_STL_LOADERROR_DETAIL.md)」を参照してください。詳細については、「[データが正しくロードされたことを確認する](verifying-that-data-loaded-correctly.md)」を参照してください。

COPY JOBS は読み取り専用モードで動作するため、ゼロ ETL データベースではサポートされていません。

## 例
<a name="r_COPY-JOB-examples"></a>

次の例では、Amazon S3 バケットからデータをロードするための COPY JOB を作成しています。

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName' 
JOB CREATE my_copy_job_name
AUTO ON;
```

# テンプレートを使用したコピー
<a name="r_COPY-WITH-TEMPLATE"></a>

Redshift テンプレートを COPY コマンドとともに使用して、コマンド構文を簡素化し、データロードオペレーション全体の一貫性を確保できます。同じ形式パラメータを繰り返し指定する代わりに、テンプレートで 1 回定義し、COPY コマンドでそのテンプレートを参照します。テンプレートを使用する場合、COPY コマンドはテンプレートのパラメータとコマンドで直接指定されたパラメータを結合します。テンプレートとコマンドの両方に同じパラメータが出現した場合、コマンドパラメータが優先されます。詳細については、「[CREATE TEMPLATE](r_CREATE_TEMPLATE.md)」を参照してください。

COPY コマンドのテンプレートは、以下を使用して作成できます。
+ [データ形式パラメータ](copy-parameters-data-format.md)
+ [ファイル圧縮パラメータ](copy-parameters-file-compression.md)
+ [データ変換パラメータ](copy-parameters-data-conversion.md)
+ [データのロード操作](copy-parameters-data-load.md)

サポートされているパラメータの完全なリストについては、「[COPY](r_COPY.md)」コマンドを参照してください。

## 必要なアクセス許可
<a name="r_COPY-WITH-TEMPLATE-privileges"></a>

COPY コマンドでテンプレートを使用するには、次のものが必要です。
+ COPY コマンドを実行するために必要なすべてのアクセス許可 (「[必要なアクセス許可](r_COPY.md#r_COPY-permissions)」を参照)
+ 次のいずれかのテンプレートアクセス許可。
  + スーパーユーザー権限
  + テンプレートに対する USAGE 権限と、テンプレートを含むスキーマに対する USAGE 権限

## 構文
<a name="r_COPY-WITH-TEMPLATE-syntax"></a>

```
COPY target_table FROM 's3://...'
authorization
[ option, ...]
USING TEMPLATE [database_name.][schema_name.]template_name;
```

## パラメータ
<a name="r_COPY-WITH-TEMPLATE-parameters"></a>

 *database\$1name*   
(オプション) テンプレートが存在するデータベースの名前。指定しない場合は、現在のデータベースが使用されます。

 *schema\$1name*   
(オプション) テンプレートが存在するスキーマの名前。指定しない場合は、現在の検索パスでテンプレートが検索されます。

 *template\$1name*   
COPY で使用するテンプレートの名前。

## 使用に関する注意事項
<a name="r_COPY-WITH_TEMPLATE-usage-notes"></a>
+ コマンド固有のパラメータ (送信元、送信先、認証) は COPY コマンドで指定する必要があります。
+ テンプレートに COPY コマンドのマニフェストファイルの仕様を含めることはできません。

## 例
<a name="r_COPY-WITH-TEMPLATE-examples"></a>

次の例は、テンプレートを作成し、COPY コマンドで使用する方法を示しています。

```
CREATE TEMPLATE public.test_template FOR COPY AS
CSV DELIMITER '|' IGNOREHEADER 1 MAXERROR 100;

COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
USING TEMPLATE public.test_template;
```

テンプレートとコマンドの両方にパラメータが存在する場合、コマンドパラメータが優先されます。この例では、テンプレート `public.test_template` に `DELIMITER '|'` が含まれているが、COPY コマンドで `DELIMITER ','` が指定されている場合、テンプレートのパイプ区切り文字 (`|`) の代わりに、コマンドのカンマ区切り文字 (`,`) が使用されます。

```
COPY public.target_table
FROM 's3://amzn-s3-demo-bucket/staging-folder'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyLoadRoleName'
DELIMITER ','
USING TEMPLATE public.test_template;
```

# COPY パラメータリファレンス
<a name="r_COPY-parameters"></a>

COPY には、さまざまな状況で使用できるパラメータが多数あります。ただし、すべてのパラメータがそれぞれの状況でサポートされているわけではありません。例えば、ORC ファイルや PARQUET ファイルからロードする場合、サポートされるパラメーターの数は限られています。詳細については、「[列データ形式の COPY](copy-usage_notes-copy-from-columnar.md)」を参照してください。

**Topics**
+ [データソース](copy-parameters-data-source.md)
+ [認可パラメータ](copy-parameters-authorization.md)
+ [列のマッピングオプション](copy-parameters-column-mapping.md)
+ [データ形式パラメータ](copy-parameters-data-format.md)
+ [ファイル圧縮パラメータ](copy-parameters-file-compression.md)
+ [データ変換パラメータ](copy-parameters-data-conversion.md)
+ [データのロード操作](copy-parameters-data-load.md)
+ [パラメータリスト (アルファベット順)](r_COPY-alphabetical-parm-list.md)

# データソース
<a name="copy-parameters-data-source"></a>

Amazon S3 バケット、Amazon EMR クラスター、またはクラスターが SSH 接続を使用してアクセスできるリモートホストのテキストファイルからデータをロードできます。また、DynamoDB テーブルから直接データをロードすることもできます。

どのソースからであっても、単一の入力行の最大サイズは 4 MB です。

テーブルから Amazon S3 の一連のファイルにデータをエクスポートするには、[UNLOAD](r_UNLOAD.md) コマンドを使用します。

**Topics**
+ [Amazon S3 からの COPY](copy-parameters-data-source-s3.md)
+ [Amazon EMR からの COPY](copy-parameters-data-source-emr.md)
+ [リモートホスト (SSH) からの COPY](copy-parameters-data-source-ssh.md)
+ [Amazon DynamoDB からの COPY](copy-parameters-data-source-dynamodb.md)

# Amazon S3 からの COPY
<a name="copy-parameters-data-source-s3"></a>

S3 バケットに配置したファイルからデータをロードするには、FROM 句を使用して COPY が Amazon S3 にあるファイルを見つける方法を指定します。FROM 句の一部としてデータファイルのオブジェクトパスを指定できます。または、Amazon S3 オブジェクトパスのリストを含むマニフェストファイルの場所を指定できます。Amazon S3 からの COPY では、HTTPS 接続が使用されます。S3 IP 範囲が許可リストに追加されていることを確認します。必要な S3 IP 範囲の詳細については、「[ネットワークの隔離](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)」を参照してください。

**重要**  
データファイルを保持する Amazon S3 バケットがクラスターと同じ AWS リージョンに存在しない場合は、[REGION](#copy-region)パラメータを使用して、データがあるリージョンを指定する必要があります。

**Topics**
+ [構文](#copy-parameters-data-source-s3-syntax)
+ [例](#copy-parameters-data-source-s3-examples)
+ [任意指定のパラメータ](#copy-parameters-data-source-s3-optional-parms)
+ [サポートされないパラメータ](#copy-parameters-data-source-s3-unsupported-parms)

## 構文
<a name="copy-parameters-data-source-s3-syntax"></a>

```
FROM { 's3://objectpath' | 's3://manifest_file' }
authorization
| MANIFEST
| ENCRYPTED
| REGION [AS] 'aws-region'
| optional-parameters
```

## 例
<a name="copy-parameters-data-source-s3-examples"></a>

次の例では、オブジェクトパスを使用して Amazon S3 からデータをロードします。

```
copy customer
from 's3://amzn-s3-demo-bucket/customer' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

次の例では、マニフェストファイルを使用して Amazon S3 からデータをロードします。

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

### パラメータ
<a name="copy-parameters-data-source-s3-parameters"></a>

FROM  <a name="copy-parameters-from"></a>
ロードするデータのソースです。Amazon S3 ファイルのエンコードの詳細については、[データ変換パラメータ](copy-parameters-data-conversion.md) を参照してください。

's3://*copy\$1from\$1s3\$1objectpath*'  <a name="copy-s3-objectpath"></a>
データを含む Amazon S3 オブジェクトへのパスを指定します (例: `'s3://amzn-s3-demo-bucket/custdata.txt'`)。*s3://copy\$1from\$1s3\$1objectpath* パラメータは、1 つのファイルを参照することも、同じキープレフィックスを持つオブジェクトまたはフォルダの集合を参照することもできます。たとえば、名前 `custdata.txt` は `custdata.txt`、`custdata.txt.1`、`custdata.txt.2`、`custdata.txt.bak` など、複数の物理ファイルを参照するキープレフィックスです。キープレフィックスは複数のフォルダを参照することもできます。たとえば、`'s3://amzn-s3-demo-bucket/custfolder'`は `custfolder` フォルダや `custfolder_1` フォルダなどを参照します。`custfolder_2`キープレフィックスが複数のフォルダを参照する場合、フォルダ内のすべてのファイルがロードされます。キープレフィックスが `custfolder.log` などのフォルダだけでなくファイルとも一致する場合、COPY はファイルのロードも試みます。キープレフィックスが原因で COPY が不要なファイルをロードしようとした場合は、マニフェストファイルを使用します。詳細については、[copy_from_s3_manifest_file](#copy-manifest-file)を参照してください。  
データファイルを保持する S3 バケットがクラスターと同じ AWS リージョンに存在しない場合は、[REGION](#copy-region)パラメータを使用して、データがあるリージョンを指定する必要があります。
詳細については、「[Amazon S3 からデータをロードする](t_Loading-data-from-S3.md)」を参照してください。

's3://*copy\$1from\$1s3\$1manifest\$1file*'  <a name="copy-manifest-file"></a>
ロードするデータファイルをリストするマニフェストファイルの Amazon S3 オブジェクトキーを指定します。*'s3://*copy\$1from\$1s3\$1manifest\$1file'** 引数は、単一のファイル (`'s3://amzn-s3-demo-bucket/manifest.txt'` など) を明示的に参照する必要があります。キープレフィックスを参照することはできません。  
マニフェストは、Amazon S3 からロードする各ファイルの URL をリストする、JSON 形式のテキストファイルです。URL にはバケット名およびファイルの完全オブジェクトパスが含まれます。マニフェストで指定するファイルの場所は異なるバケットでもかまいませんが、すべてのバケットは Amazon Redshift クラスターと同じ AWS リージョンに置かれている必要があります。ファイルが 2 回リストされている場合、ファイルは 2 回ロードされます。次の例は、3 つのファイルをロードするマニフェストの JSON を示しています。  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1","mandatory":false}
  ]
}
```
二重引用符は必須であり、傾きの付いた "高機能な" 引用符ではなくシンプルな引用符 (0x22) にする必要があります。マニフェストの各エントリには、オプションとして `mandatory` フラグを含めることができます。`mandatory` が `true` に設定されている場合、そのエントリのファイルが見つからなければ、COPY は終了します。ファイルが見つかれば、COPY 処理は継続します。`mandatory` のデフォルト値は `false` です。  
以下の例に示すように、Parquet または ORC 形式のデータファイルからロードする場合、`meta`フィールドは必須です。  

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```
ENCRYPTED、GZIP、LZOP、BZIP2、または ZSTD オプションを指定している場合でも、マニフェストファイルの暗号化または圧縮は行わないでください。指定したマニフェストファイルが見つからないか、マニフェストファイルの形式が適切ではない場合、COPY はエラーを返します。  
マニフェストファイルを使用する場合、COPY コマンドに MANIFEST パラメータを指定する必要があります。MANIFEST パラメータを指定しない場合、COPY では、FROM で指定されたファイルがデータファイルであると想定します。  
詳細については、「[Amazon S3 からデータをロードする](t_Loading-data-from-S3.md)」を参照してください。

*authorization*  
COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。この認可を付与するには、クラスターにアタッチした AWS Identity and Access Management (IAM) ロールを参照 (ロールベースのアクセスコントロール) するか、ユーザーのアクセス認証情報を指定 (キーベースのアクセスコントロール) します。セキュリティと柔軟性を強化するために、IAM ロールベースのアクセスコントロールを使用することをお勧めします。詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。

MANIFEST  <a name="copy-manifest"></a>
Amazon S3 からロードするデータファイルの識別にマニフェストを使用することを指定します。MANIFEST パラメータが使用されている場合、COPY は *'s3://copy\$1from\$1s3\$1manifest\$1file'* によって参照されるマニフェストに記載されているファイルからデータをロードします。マニフェストファイルが見つからない場合、または形式が正しくない場合、COPY は失敗します。詳細については、「[マニフェストを使用し、データファイルを指定する](loading-data-files-using-manifest.md)」を参照してください。

ENCRYPTED  <a name="copy-encrypted"></a>
Amazon S3 にある入力ファイルの暗号化が、カスタマーマネージドのキーを使用したクライアント側の暗号化であることを指定する句。詳細については、「[暗号化されたデータファイルを Amazon S3 からロードする](c_loading-encrypted-files.md)」を参照してください。入力ファイルが Amazon S3 サーバー側の暗号化 (SSE-KMS または SSE-S3) を使用して暗号化されている場合は、ENCRYPTED を指定しないでください。COPY では、サーバー側で暗号化されたファイルを自動的に読み取ります。  
ENCRYPTED パラメータを指定する場合は、[MASTER_SYMMETRIC_KEY](#copy-master-symmetric-key)パラメータも指定するか、**master\$1symmetric\$1key**値を [CREDENTIALS パラメータの使用](copy-parameters-authorization.md#copy-credentials) 文字列に含める必要があります。  
暗号化されたファイルが圧縮形式である場合は、GZIP、LZOP、BZIP2、ZSTD パラメータを追加してください。  
ENCRYPTED を指定している場合でも、マニフェストファイルと JSONPaths ファイルの暗号化は行わないでください。

MASTER\$1SYMMETRIC\$1KEY '*root\$1key*'  <a name="copy-master-symmetric-key"></a>
Amazon S3 のデータファイルの暗号化に使用されたルート対称キー。MASTER\$1SYMMETRIC\$1KEY を指定する場合、[ENCRYPTED](#copy-encrypted)パラメータも指定する必要があります。MASTER\$1SYMMETRIC\$1KEY は CREDENTIALS パラメータと併用できません。詳細については、「[暗号化されたデータファイルを Amazon S3 からロードする](c_loading-encrypted-files.md)」を参照してください。  
暗号化されたファイルが圧縮形式である場合は、GZIP、LZOP、BZIP2、ZSTD パラメータを追加してください。

REGION [AS] '*aws-region*'  <a name="copy-region"></a>
ソースデータが配置されている AWS のリージョンを指定します。REGION は、データを含む AWS のリソースが Amazon Redshift クラスターと同じリージョンにない場合に、Amazon S3 バケットまたは DynamoDB テーブルから COPY を実行するために必要となります。  
*aws\$1region* の値は、[Amazon Redshift リージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region)テーブルに示されているリージョンと一致している必要があります。  
REGION パラメータが指定されている場合、マニフェストファイルや複数の Amazon S3 バケットを含むすべてのリソースが指定されたリージョンに存在している必要があります。  
リージョン間でデータを転送する場合、Amazon S3 バケットやデータを含む DynamoDB テーブルに対して追加料金が発生します。料金の詳細については、「[Amazon S3 料金](https://aws.amazon.com/s3/pricing/)」ページの「**Amazon S3 から別の AWS リージョンへのデータ転送 (アウト)**」、および「[Amazon DynamoDB 料金](https://aws.amazon.com/dynamodb/pricing/)」ページの「**データ転送 (アウト)**」を参照してください。
デフォルトでは、COPY はデータが Amazon Redshift クラスターと同じリージョンにあると見なします。

## 任意指定のパラメータ
<a name="copy-parameters-data-source-s3-optional-parms"></a>

Amazon S3 からの COPY では、オプションで次のパラメータを指定できます。
+ [列のマッピングオプション](copy-parameters-column-mapping.md)
+ [データ形式パラメータ](copy-parameters-data-format.md#copy-data-format-parameters)
+ [データ変換パラメータ](copy-parameters-data-conversion.md)
+ [データのロード操作](copy-parameters-data-load.md)

## サポートされないパラメータ
<a name="copy-parameters-data-source-s3-unsupported-parms"></a>

Amazon S3 からの COPY では、次のパラメータは使用できません。
+ SSH
+ READRATIO

# Amazon EMR からの COPY
<a name="copy-parameters-data-source-emr"></a>

COPY コマンドを使用することで、クラスターの Hadoop Distributed File System (HDFS) に、固定幅ファイル、文字区切りファイル、CSV ファイル、JSON 形式ファイル、または Avro ファイルでテキストファイルを書き込むように設定された Amazon EMR クラスターから、データを並列にロードできます。

**Topics**
+ [Syntax](#copy-parameters-data-source-emr-syntax)
+ [例](#copy-parameters-data-source-emr-example)
+ [パラメータ](#copy-parameters-data-source-emr-parameters)
+ [サポートされているパラメータ](#copy-parameters-data-source-emr-optional-parms)
+ [サポートされないパラメータ](#copy-parameters-data-source-emr-unsupported-parms)

## Syntax
<a name="copy-parameters-data-source-emr-syntax"></a>

```
FROM 'emr://emr_cluster_id/hdfs_filepath'  
authorization
[ optional_parameters ]
```

## 例
<a name="copy-parameters-data-source-emr-example"></a>

次の例では、Amazon EMR クラスターからデータをロードします。

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## パラメータ
<a name="copy-parameters-data-source-emr-parameters"></a>

FROM  
ロードするデータのソースです。

 'emr://*emr\$1cluster\$1id*/*hdfs\$1file\$1path*'  <a name="copy-emr"></a>
Amazon EMR クラスターの一意の識別子、および COPY コマンドのデータファイルを参照する HDFS ファイルパスです。HDFS データファイル名には、ワイルドカード文字のアスタリスク (\$1) および疑問符 (?) を含めることはできません。  
Amazon EMR クラスターは、COPY 操作が完了するまで稼動している必要があります。COPY 操作が完了する前に HDFS データファイルのいずれかが変更または削除されると、予期しない結果を招いたり、COPY 操作が失敗したりする可能性があります。
ファイル名の引数には、ロードする複数のファイルを指定する *hdfs\$1file\$1path* 引数の一部としてアスタリスク (\$1) および疑問符 (?) を使用できます。たとえば、`'emr://j-SAMPLE2B500FC/myoutput/part*'`であれば、`part-0000`、`part-0001`などのファイルが識別されます。ファイルパスにワイルドカード文字が含まれていない場合は、文字列リテラルとして処理されます。COPY コマンドでフォルダー名のみを指定した場合には、フォルダー内のすべてのファイルがロードされます。  
ワイルドカード文字を使用する場合、またはフォルダ名のみを使用する場合は、不要なファイルがロードされないことを確認してください。例えば、一部のプロセスでは出力フォルダにログファイルが書き込まれることがあります。
詳細については、「[Amazon EMR からのデータのロード](loading-data-from-emr.md)」を参照してください。

*authorization*  
COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。この認可を付与するには、クラスターにアタッチした AWS Identity and Access Management (IAM) ロールを参照 (ロールベースのアクセスコントロール) するか、ユーザーのアクセス認証情報を指定 (キーベースのアクセスコントロール) します。セキュリティと柔軟性を強化するために、IAM ロールベースのアクセスコントロールを使用することをお勧めします。詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。

## サポートされているパラメータ
<a name="copy-parameters-data-source-emr-optional-parms"></a>

Amazon EMR からの COPY では、オプションで次のパラメータを指定できます。
+ [列のマッピングオプション](copy-parameters-column-mapping.md)
+ [データ形式パラメータ](copy-parameters-data-format.md#copy-data-format-parameters)
+ [データ変換パラメータ](copy-parameters-data-conversion.md)
+ [データのロード操作](copy-parameters-data-load.md)

## サポートされないパラメータ
<a name="copy-parameters-data-source-emr-unsupported-parms"></a>

Amazon EMR からの COPY では、次のパラメータは使用できません。
+ ENCRYPTED
+ MANIFEST
+ REGION
+ READRATIO
+ SSH

# リモートホスト (SSH) からの COPY
<a name="copy-parameters-data-source-ssh"></a>

COPY コマンドでは、Amazon Elastic Compute Cloud (Amazon EC2) インスタンスをはじめとするコンピュータなど、1 つ以上のリモートホストから同時にデータをロードすることができます。COPY では Secure Shell (SSH) を使用してリモートホストに接続し、そのホストのコマンドを実行してテキスト出力を生成します。リモートホストになることができるのは、EC2 の Linux インスタンスか、SSH 接続を許可するように設定されている Unix コンピュータまたは Linux コンピュータです。Amazon Redshift は複数のホストに接続でき、各ホストに対して複数の SSH 接続を開くことができます。Amazon Redshift は、各接続を介して一意のコマンドを送信し、ホストの標準出力にテキスト出力を生成します。Amazon Redshift は、テキストファイルと同じようにそれを読み込みます。

FROM 句を使用してマニフェストファイルの Amazon S3 オブジェクトキーを指定します。そのマニフェストファイルは、COPY が SSH 接続を開いてリモートコマンドを実行するために使用する情報を提供します。

**Topics**
+ [構文](#copy-parameters-data-source-ssh-syntax)
+ [例](#copy-parameters-data-source-ssh-examples)
+ [パラメータ](#copy-parameters-data-source-ssh-parameters)
+ [任意指定のパラメータ](#copy-parameters-data-source-ssh-optional-parms)
+ [サポートされないパラメータ](#copy-parameters-data-source-ssh-unsupported-parms)

**重要**  
 マニフェストファイルを保持する S3 バケットがクラスターと同じ AWS リージョンに存在しない場合は、REGION パラメータを使用して、バケットがあるリージョンを指定する必要があります。

## 構文
<a name="copy-parameters-data-source-ssh-syntax"></a>

```
FROM 's3://'ssh_manifest_file' }
authorization
SSH
| optional-parameters
```

## 例
<a name="copy-parameters-data-source-ssh-examples"></a>

次の例では、マニフェストファイルを使用し、SSH を使用してリモートホストからデータをロードします。

```
copy sales
from 's3://amzn-s3-demo-bucket/ssh_manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
ssh;
```

## パラメータ
<a name="copy-parameters-data-source-ssh-parameters"></a>

FROM  
ロードするデータのソースです。

's3://*copy\$1from\$1ssh\$1manifest\$1file*'  <a name="copy-ssh-manifest"></a>
COPY コマンドは、SSH を使用して複数のホストに接続できるだけでなく、各ホストに対して複数の SSH 接続を作成できます。COPY はそれぞれのホスト接続を介してコマンドを実行し、コマンドからの出力を並列的にテーブルにロードします。*s3://copy\$1from\$1ssh\$1manifest\$1file* 引数は、マニフェストファイルの Amazon S3 オブジェクトキーを指定します。そのマニフェストファイルは、COPY が SSH 接続を開いてリモートコマンドを実行するために使用する情報を提供します。  
*s3://copy\$1from\$1ssh\$1manifest\$1file* 引数は 1 つのファイルを明示的に参照する必要があります。これをキープレフィックスにすることはできません。例を以下に示します。  

```
's3://amzn-s3-demo-bucket/ssh_manifest.txt'
```
マニフェストファイルは、Amazon Redshift がホストに接続する際に使用する JSON 形式のテキストファイルです。マニフェストファイルでは、SSH ホストのエンドポイント、ならびに、Amazon Redshift にデータを返すためにホストで実行されるコマンドを指定します。このほか、ホストのパブリックキー、ログインユーザー名、および各エントリの必須フラグを記載することもできます。次の例は、2 つの SSH 接続を作成するマニフェストファイルを示しています。  

```
{ 
    "entries": [ 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"}, 
	    {"endpoint":"<ssh_endpoint_or_IP>", 
           "command": "<remote_command>",
           "mandatory":true, 
           "publickey": "<public_key>", 
           "username": "<host_user_name>"} 
     ] 
}
```
マニフェストファイルには、SSH 接続ごとに 1 つずつ `"entries"` 構造が含まれます。単一のホストに対して接続を複数作成することも、複数のホストに対して複数の接続を作成することもできます。例に示すように、フィールド名と値のどちらにも二重引用符が必要です。引用符の文字は、傾きの付いた "高機能な" 引用符ではなくシンプルな引用符 (0x22) にする必要があります。`"mandatory"` フィールドの中で二重引用符を必要としない値は、`true` または `false` のブール値のみです。  
次のリストでは、マニフェストファイルのフィールドについて説明します。    
endpoint  <a name="copy-ssh-manifest-endpoint"></a>
ホストの URL アドレスまたは IP アドレス (`"ec2-111-222-333.compute-1.amazonaws.com"` や `"198.51.100.0"` など)。  
コマンド  <a name="copy-ssh-manifest-command"></a>
テキスト出力またはバイナリ出力を gzip、lzop、bzip2、zstd 形式で生成する際にホストが実行するコマンド。コマンドは、ユーザー *"host\$1user\$1name"* が実行権限を持つコマンドであれば、どれでも指定できます。ファイルを印刷するなどのシンプルなコマンドでも、データベースにクエリを実行したり、スクリプトを実行したりするコマンドでもかまいません。出力 (テキストファイル、gzip バイナリファイル、lzop バイナリファイル、または bzip2 バイナリファイル) は、Amazon Redshift の COPY コマンドが取り込める形式にする必要があります。詳細については、「[入力データを準備する](t_preparing-input-data.md)」を参照してください。  
publickey  <a name="copy-ssh-manifest-publickey"></a>
(オプション) ホストのパブリックキー。公開キーが指定されている場合、Amazon Redshift は公開キーを使用してホストを特定します。公開キーが指定されていなければ、Amazon Redshift がホストの特定を試みることはありません。例えば、リモートホストのパブリックキーが `ssh-rsa AbcCbaxxx…Example root@amazon.com` であれば、パブリックキーのフィールドには `"AbcCbaxxx…Example"` と入力してください。  
mandatory  <a name="copy-ssh-manifest-mandatory"></a>
(オプション) 接続ができなかった場合に COPY コマンドを失敗とするかどうかを示す句です。デフォルトは `false` です。Amazon Redshift が接続を 1 つも正常に確立できなかった場合に、COPY コマンドが失敗になります。  
username  <a name="copy-ssh-manifest-username"></a>
(オプション) ホストシステムにログオンし、リモートコマンドを実行する際に使用するユーザー名。ユーザーログイン名は、ホストの認可されたキーファイルに Amazon Redshift クラスターの公開キーを追加するときに使用したログイン名と同じものにする必要があります。デフォルトのユーザー名は `redshift` です。
マニフェストファイルの作成の詳細については、「[データをロードする手順](loading-data-from-remote-hosts.md#load-from-host-process)」を参照してください。  
リモートホストから COPY を実行するには、COPY コマンドに SSH パラメータを指定する必要があります。SSH パラメータを指定しない場合、COPY では、FROM で指定されたファイルがデータファイルであると想定され、COPY は失敗します。  
自動圧縮を使用する場合には、COPY コマンドでデータの読み込みオペレーションが 2 回実行されます。つまり、COPY コマンドではリモートコマンドが 2 回実行されることになります。初回の読み取り操作は圧縮の分析用データサンプルを提供するためのものであり、実際にデータがロードされるのは 2 回目の読み取り操作です。リモートコマンドを 2 回実行することが問題になるようであれば、自動圧縮は無効にする必要があります。自動圧縮を無効にするには、COMPUPDATE パラメータを OFF に設定して COPY コマンドを実行します。詳細については、「[自動圧縮ありでテーブルをロードする](c_Loading_tables_auto_compress.md)」を参照してください。  
SSH から COPY を使用するための詳細な手順については、「[リモートホストからデータをロードする](loading-data-from-remote-hosts.md)」を参照してください。

*authorization*  
COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。この認可を付与するには、クラスターにアタッチした AWS Identity and Access Management (IAM) ロールを参照 (ロールベースのアクセスコントロール) するか、ユーザーのアクセス認証情報を指定 (キーベースのアクセスコントロール) します。セキュリティと柔軟性を強化するために、IAM ロールベースのアクセスコントロールを使用することをお勧めします。詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。

SSH  <a name="copy-ssh"></a>
SSH プロトコルを使用してリモートホストからデータがロードされることを指定する句です。SSH を指定する場合は、[s3://copy_from_ssh_manifest_file](#copy-ssh-manifest)引数を使用してマニフェストファイルを指定する必要もあります。  
SSH を使用してリモート VPC でプライベート IP アドレスを使用しているホストからコピーしている場合、VPC は拡張された VPC ルーティングを有効化する必要があります。拡張された VPC ルーティングの詳細については、「[Amazon Redshift 拡張 VPC ルーティング](https://docs.aws.amazon.com/redshift/latest/mgmt/enhanced-vpc-routing.html)」を参照してください。

## 任意指定のパラメータ
<a name="copy-parameters-data-source-ssh-optional-parms"></a>

SSH からの COPY では、オプションで次のパラメータを指定できます。
+ [列のマッピングオプション](copy-parameters-column-mapping.md)
+ [データ形式パラメータ](copy-parameters-data-format.md#copy-data-format-parameters)
+ [データ変換パラメータ](copy-parameters-data-conversion.md)
+ [データのロード操作](copy-parameters-data-load.md)

## サポートされないパラメータ
<a name="copy-parameters-data-source-ssh-unsupported-parms"></a>

SSH からの COPY では、次のパラメータは使用できません。
+ ENCRYPTED
+ MANIFEST
+ READRATIO

# Amazon DynamoDB からの COPY
<a name="copy-parameters-data-source-dynamodb"></a>

既存の DynamoDB テーブルからデータをロードするには、FROM 句を使用して DynamoDB テーブル名を指定します。

**Topics**
+ [構文](#copy-parameters-data-source-dynamodb-syntax)
+ [例](#copy-parameters-data-source-dynamodb-examples)
+ [任意指定のパラメータ](#copy-parameters-data-source-dynamodb-optional-parms)
+ [サポートされないパラメータ](#copy-parameters-data-source-dynamodb-unsupported-parms)

**重要**  
DynamoDB テーブルが Amazon Redshift クラスターと同じリージョンに存在しない場合は、REGION パラメータを使用して、データがあるリージョンを指定する必要があります。

## 構文
<a name="copy-parameters-data-source-dynamodb-syntax"></a>

```
FROM 'dynamodb://table-name' 
authorization
READRATIO ratio
| REGION [AS] 'aws_region'  
| optional-parameters
```

## 例
<a name="copy-parameters-data-source-dynamodb-examples"></a>

次の例では、DynamoDB テーブルからデータをロードします。

```
copy favoritemovies from 'dynamodb://ProductCatalog'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
readratio 50;
```

### パラメータ
<a name="copy-parameters-data-source-dynamodb-parameters"></a>

FROM  
ロードするデータのソースです。

'dynamodb://*table-name*'  <a name="copy-dynamodb"></a>
データが入った DynamoDB テーブルの名前 (`'dynamodb://ProductCatalog'` など)。DynamoDB で Amazon Redshift 列に属性がマッピングされる方法の詳細については、[Amazon DynamoDB テーブルからのデータのロード](t_Loading-data-from-dynamodb.md)を参照してください。  
DynamoDB テーブル名は AWS アカウントに固有のものです。アカウントは AWS アクセス認証情報によって識別されます。

*authorization*, \$1  
COPY コマンドには、Amazon S3、Amazon EMR、DynamoDB、Amazon EC2 を含む、別の AWS リソースのデータにアクセスするための許可が必要になります。この認可を付与するには、クラスターにアタッチした AWS Identity and Access Management (IAM) ロールを参照 (ロールベースのアクセスコントロール) するか、ユーザーのアクセス認証情報を指定 (キーベースのアクセスコントロール) します。セキュリティと柔軟性を強化するために、IAM ロールベースのアクセスコントロールを使用することをお勧めします。詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。

READRATIO [AS] *ratio*  <a name="copy-readratio"></a>
データロードに使用する DynamoDB テーブルのプロビジョニングされたスループットの比率です。READRATIO は DynamoDB からの COPY では必須です。Amazon S3 からの COPY の実行には使用できません。この割合については、未使用のプロビジョニングされたスループットの平均よりも小さい値に設定することを強くお勧めします。有効な値は、1～200 の整数です。  
READRATIO を 100 以上に設定すると、Amazon Redshift で DynamoDB テーブルのプロビジョニングされたスループット全体を使用できるようになり、COPY セッション中に同じテーブルに対する同時読み込みオペレーションのパフォーマンスが大きく低下します。書き込みトラフィックは影響を受けません。Amazon Redshift がテーブルのプロビジョニングされたスループットを満たさないまれなシナリオをトラブルシューティングする場合には、100 を超える値を使用できます。DynamoDB から Amazon Redshift に継続的にデータをロードする場合、DynamoDB テーブルを時系列テーブルとして編成し、COPY 操作からライブトラフィックを分離することを検討してください。

## 任意指定のパラメータ
<a name="copy-parameters-data-source-dynamodb-optional-parms"></a>

Amazon DynamoDB からの COPY では、オプションで次のパラメータを指定できます。
+ [列のマッピングオプション](copy-parameters-column-mapping.md)
+ 次のデータ変換パラメータがサポートされています。
  + [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate) 
  + [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull) 
  + [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat) 
  + [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull) 
  + [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) 
  + [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat) 
  + [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks) 
  + [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns) 
+ [データのロード操作](copy-parameters-data-load.md)

## サポートされないパラメータ
<a name="copy-parameters-data-source-dynamodb-unsupported-parms"></a>

DynamoDB からの COPY では、次のパラメータは使用できません。
+ 全データ形式パラメータ
+ ESCAPE
+ FILLRECORD
+ IGNOREBLANKLINES
+ IGNOREHEADER
+ NULL
+ REMOVEQUOTES
+ ACCEPTINVCHARS
+ MANIFEST
+ ENCRYPTED

# 認可パラメータ
<a name="copy-parameters-authorization"></a>

COPY コマンドが、他の AWS リソース (Amazon S3、Amazon EMR、Amazon DynamoDB、Amazon EC2 など) のデータにアクセスするにためには承認が必要です。この承認は、クラスターにアタッチされた [AWS Identity and Access Management (IAM) ロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) (*ロールベースのアクセスコントロール*) を参照することで提供できます。Amazon S3 のロードデータを暗号化できます。

以下のトピックでは、認証オプションの詳細と例をさらに示します。
+ [COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)
+ [ロールベースアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)
+ [キーベースのアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based)

以下のいずれかを使用して COPY コマンドに認可を提供します。
+ [IAM\$1ROLE パラメータの使用](#copy-iam-role) パラメータ
+ [ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY パラメータの使用](#copy-access-key-id) 個のパラメータ
+ [CREDENTIALS パラメータの使用](#copy-credentials) 句

## IAM\$1ROLE パラメータの使用
<a name="copy-iam-role"></a>

### IAM\$1ROLE
<a name="copy-iam-role-iam"></a>

デフォルトキーワードを使用して、COPY コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。

クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。IAM\$1ROLE を指定すると、ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY、SESSION\$1TOKEN、または CREDENTIALS は使用できません。

以下に、IAM\$1ROLE パラメータの構文を示します。

```
IAM_ROLE { default | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' }
```

詳細については、「[ロールベースアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)」を参照してください。

## ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY パラメータの使用
<a name="copy-access-key-id"></a>

### ACCESS\$1KEY\$1ID、SECRET\$1ACCESS\$1KEY
<a name="copy-access-key-id-access"></a>

この認可方法は推奨されません。

**注記**  
アクセス認証情報をプレーンテキストで提供するのではなく、IAM\$1ROLE パラメータを指定してロールベースの認証を使用することを強くお勧めします。詳細については、「[ロールベースアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)」を参照してください。

### SESSION\$1TOKEN
<a name="copy-token"></a>

一時的アクセス認証情報で使用するセッショントークン。SESSION\$1TOKEN を指定した場合、ACCESS\$1KEY\$1ID と SECRET\$1ACCESS\$1KEY も使用して一時的アクセスキー認証情報を指定する必要があります。SESSION\$1TOKEN を指定した場合、IAM\$1ROLE または CREDENTIALS は使用できません。詳細については、IAM ユーザーガイドの「[一時的な認証情報](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials)」を参照してください。

**注記**  
一時的セキュリティ認証情報を作成するのではなく、ロールベースの認証を使用することを強くお勧めします。IAM ロールを使用して認可すると、Amazon Redshift が自動的に各セッション用の一時的ユーザー認証情報を作成します。詳細については、「[ロールベースアクセスコントロール](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based)」を参照してください。

以下に、ACCESS\$1KEY\$1ID と SECRET\$1ACCESS\$1KEY パラメータを使用した SESSION\$1TOKEN パラメータの構文を示します。

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

SESSION\$1TOKEN を指定した場合、CREDENTIALS または IAM\$1ROLE は使用できません。

## CREDENTIALS パラメータの使用
<a name="copy-credentials"></a>

### CREDENTIALS
<a name="copy-credentials-cred"></a>

クラスターが、データファイルまたはマニフェストファイルを含む他の AWS リソースにアクセスする際の方法を示す句。CREDENTIALS パラメータは、IAM\$1ROLE または ACCESS\$1KEY\$1ID と SECRET\$1ACCESS\$1KEY との併用はできません。

次に示すのは CREDENTIALS パラメータの構文です。

```
[WITH] CREDENTIALS [AS] 'credentials-args'
```

**注記**  
柔軟性を強化するために、CREDENTIALS パラメータの代わりに [IAM\$1ROLE](#copy-iam-role-iam) パラメータを使用することをお勧めします。

必要に応じて [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) パラメータを使用する場合は、*credentials-args* 文字列が、暗号化キーを提供します。

*credentials-args* 文字列では大文字と小文字が区別され、空白を含めることはできません。

キーワード WITH および AS はオプションで、無視されます。

[role-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-role-based.phrase) または [key-based access control](copy-usage_notes-access-permissions.md#copy-usage_notes-access-key-based.phrase) のどちらかを指定できます。どちらの場合も、IAM ロールまたはユーザーは、指定された AWS リソースにアクセスするために必要なアクセス許可が必要です。詳細については、「[COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](copy-usage_notes-access-permissions.md#copy-usage_notes-iam-permissions)」を参照してください。

**注記**  
AWS 認証情報および機密データを保護するには、ロールベースのアクセスコントロールを使用することを強くお勧めします。

ロールベースのアクセスコントロールを指定するには、次の形式で *credentials-args* 文字列を指定します。

```
'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
```

一時トークン認証情報を使用するには、一時アクセスキー ID、一時秘密アクセスキー、および一時トークンを提供する必要があります。*credentials-args* 文字列は次の形式になります。

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>'
```

一時的な認証情報でロールベースのアクセスコントロールを使用する COPY コマンドは、次のサンプルステートメントのようになります。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key-id>;token=<temporary-token>'
```

 詳細については、「[一時的な認証情報](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials)」を参照してください。

[ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) パラメータを使用する場合、*credentials-args* 文字列は下記のような形式になります。ここで *<root-key>* はファイルの暗号化に使用されたルートキーの値です。

```
CREDENTIALS
'<credentials-args>;master_symmetric_key=<root-key>'
```

暗号化キーでロールベースのアクセスコントロールを使用する COPY コマンドは、次のサンプルステートメントのようになります。

```
COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' 
CREDENTIALS 
'aws_iam_role=arn:aws:iam::<account-id>:role/<role-name>;master_symmetric_key=<root-key>'
```

# 列のマッピングオプション
<a name="copy-parameters-column-mapping"></a>

デフォルトでは、COPY はデータファイルで発生したフィールドと同じ順序でターゲットテーブルの列に値を挿入します。デフォルトの列順序が機能しない場合は、列リストを指定するか、JSONPath 式を使用してソースデータフィールドをターゲット列にマッピングできます。
+ [Column List](#copy-column-list)
+ [JSONPaths File](#copy-column-mapping-jsonpaths)

## 列リスト
<a name="copy-column-list"></a>

ソースデータフィールドを特定のターゲット列にロードするには、列名のカンマ区切りリストを指定します。COPY ステートメントで列は任意の順序に指定できますが、Amazon S3 バケットなどにあるフラットファイルからロードする場合、ソースデータの順序に一致する必要があります。

Amazon DynamoDB テーブルからロードする場合、順序は関係ありません。COPY コマンドは、DynamoDB テーブルから取得した項目の属性名と、Amazon Redshift テーブルの列名を一致させます。詳細については、「[Amazon DynamoDB テーブルからのデータのロード](t_Loading-data-from-dynamodb.md)」を参照してください。

 列リストの形式は次のとおりです。

```
COPY tablename (column1 [,column2, ...]) 
```

ターゲットテーブルの列が列リストから削除された場合は、COPY はターゲット列の [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 式をロードします。

ターゲット列にデフォルトがない場合は、COPY は NULL をロードします。

COPY を実行し、NOT NULL として定義されている列に NULL を割り当てようとすると、COPY コマンドは失敗します。

列リストに [IDENTITY](r_CREATE_TABLE_NEW.md#identity-clause) 列が含まれている場合、[EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids) も指定する必要があります。IDENTITY 列を省略した場合、EXPLICIT\$1IDS は指定できません。列リストを指定しない場合、コマンドは、完全で順序正しい列リストが指定されたように動作します。EXPLICIT\$1IDS も指定しなかった場合、IDENTITY 列は省略されます。

列がGENERATED BY DEFAULT AS IDENTITYで定義されている場合は、コピーできます。値は、指定した値で生成または更新されます。EXPLICIT\$1IDS オプションは必須ではありません。COPY は IDENTITY のハイウォーターマークを更新しません。詳細については、「[GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause)」を参照してください。

## JSONPaths ファイル
<a name="copy-column-mapping-jsonpaths"></a>

JSON または Avro 形式からデータファイルをロードする場合、COPY は JSON または Avro ソースデータのデータ要素をターゲットテーブルの列に自動的にマッピングします。Avro スキーマのフィールド名をターゲットテーブルまたは列リストの列名に一致させることで、行われます。

場合によっては、列名とフィールド名が一致しないか、データ階層のより深いレベルにマッピングする必要があります。このような場合、明示的に列に JSON または Avro のデータ要素をマッピングするには、JSONPaths ファイルを使用できます。

詳細については、「[JSONPaths ファイル](copy-parameters-data-format.md#copy-json-jsonpaths)」を参照してください。

# データ形式パラメータ
<a name="copy-parameters-data-format"></a>

デフォルトでは、COPY コマンドはソースデータを文字区切り形式 UTF-8 のテキストと見なします。デフォルトの区切り文字はパイプ文字です。ソースデータが別の形式である場合は、以下のパラメータを使用してデータ形式を指定します。
+ [FORMAT](#copy-format)
+ [CSV](#copy-csv)
+ [DELIMITER](#copy-delimiter) 
+ [FIXEDWIDTH](#copy-fixedwidth) 
+ [SHAPEFILE](#copy-shapefile) 
+ [AVRO](#copy-avro) 
+ [JSON format for COPY](#copy-json) 
+ [PARQUET](#copy-parquet) 
+ [ORC](#copy-orc) 

標準データ形式に加えて、COPY は、Amazon S3 から COPY の以下の列データ形式をサポートしています。
+ [ORC](#copy-orc) 
+ [PARQUET](#copy-parquet) 

列形式の COPY は、特定の制限でサポートされています。詳細については、「[列データ形式の COPY](copy-usage_notes-copy-from-columnar.md)」を参照してください。<a name="copy-data-format-parameters"></a>データ形式パラメータ

FORMAT [AS]  <a name="copy-format"></a>
(オプション) データ形式キーワードを識別します。FORMAT 引数については以下で説明します。

CSV [ QUOTE [AS] *'quote\$1character'* ]  <a name="copy-csv"></a>
入力データで CSV 形式の使用を有効にします。区切り記号、改行文字、およびキャリッジリターンを自動的にエスケープするには、QUOTE パラメータで指定した文字でフィールドを囲みます。デフォルトの引用文字は二重引用符 (") です。フィールド内で引用文字が使用されている場合、引用文字を追加してその文字をエスケープします。例えば、引用文字が二重引用符である場合、文字列 `A "quoted" word` を挿入するには、入力ファイルに文字列 `"A ""quoted"" word"` を含める必要があります。CSV パラメータを使用する場合、デフォルトの区切り記号はカンマ (,) です。DELIMITER パラメータを使用して、異なる区切り記号を指定できます。  
フィールドを引用符で囲んだ場合、区切り記号と引用文字との間の空白は無視されます。区切り記号がタブなどの空白文字である場合、その区切り記号は空白として扱われません。  
CSV は FIXEDWIDTH、REMOVEQUOTES、または ESCAPE と共に使用することはできません。    
QUOTE [AS] *'quote\$1character'*  <a name="copy-csv-quote"></a>
省略可能。CSV パラメータを使用する場合に引用文字として使用する文字を指定します。デフォルトは二重引用符 (") です。QUOTE パラメータを使用して二重引用符以外の引用文字を定義した場合、フィールド内で二重引用符をエスケープする必要はありません。QUOTE パラメータは CSV パラメータと共にしか使用できません。AS キーワードはオプションです。

DELIMITER [AS] ['*delimiter\$1char*']   <a name="copy-delimiter"></a>
パイプ文字 (`|`)、カンマ (`,`)、タブ (`\t`)、複数の文字 (`|~|`) など、入力ファイル内のフィールドを区切るときに使用する文字を指定します。印刷不可の文字がサポートされています。文字は UTF-8 コード単位として 8 進数で表すこともできます。8 進数の場合は、「\$1ddd」の形式を使用します。「d」は 8 進数 (0～7) です。デフォルトの区切り記号はパイプ文字 (`|`) です。ただし、CSV パラメータを使用する場合、デフォルトの区切り記号はカンマ (`,`) です。AS キーワードはオプションです。DELIMITER と FIXEDWIDTH は併用できません。

FIXEDWIDTH '*fixedwidth\$1spec*'  <a name="copy-fixedwidth"></a>
列を区切り記号で区切らずに各列幅を固定長にしたファイルからデータをロードします。*fixedwidth\$1spec* はユーザー定義の列ラベルと列幅を指定する文字列です。列ラベルには、ユーザーの選択に従って、テキスト文字列または整数を指定できます。列ラベルは列名と関係ありません。ラベル/幅のペアの順序はテーブルの列の順序に正確に一致する必要があります。FIXEDWIDTH と CSV または DELIMITER を併用することはできません。Amazon Redshift では、CHAR 列および VARCHAR 列の長さがバイト単位で表されるため、ロードするファイルを準備する際には、指定する列幅がマルチバイト文字のバイナリ長に対応できることを確認してください。詳細については、「[文字型](r_Character_types.md)」を参照してください。  
*fixedwidth\$1spec* の形式を次に示します。  

```
'colLabel1:colWidth1,colLabel:colWidth2, ...'
```

SHAPEFILE [ SIMPLIFY [AUTO] [*'tolerance'*] ]  <a name="copy-shapefile"></a>
入力データで SHAPEFILE 形式の使用を有効にします。デフォルトでは、シェープファイルの最初の列は `GEOMETRY` 列または `IDENTITY` 列のいずれかです。後続のすべての列は、シェープファイルで指定された順序に従います。  
SHAPEFILE を FIXEDWIDTH、EMOVEQUOTES、または ESCAPE と一緒に使用することはできません。  
`COPY FROM SHAPEFILE` で `GEOGRAPHY` オブジェクトを使用するには、まずオブジェクトを `GEOMETRY` 列に取り込んだ後に、そのオブジェクトを `GEOGRAPHY` オブジェクトにキャストします。    
SIMPLIFY [*tolerance*]  <a name="copy-shapefile-simplify"></a>
(オプション) Ramer-Douglas-Peucker アルゴリズムと指定された許容値を使用して、取り込みプロセス中のすべてのジオメトリを簡略化します。  
SIMPLIFY AUTO [*tolerance*]  <a name="copy-shapefile-simplify"></a>
(オプション) 最大ジオメトリのサイズより大きいジオメトリのみを簡略化します。この簡略化では、Ramer-Douglas-Peucker アルゴリズムと、指定した許容値を超えない場合に自動的に計算された許容値が使用されます。このアルゴリズムは、指定された許容値内でオブジェクトを保存するためのサイズを計算します。*許容値*は任意の値です。
シェープファイルのロードの例については、「[シェープファイルを Amazon Redshift にロードする](r_COPY_command_examples.md#copy-example-spatial-copy-shapefile)」を参照してください。

AVRO [AS] '*avro\$1option*'  <a name="copy-avro"></a>
ソースデータが Avro 形式であることを指定します。  
Avro 形式はここに挙げるサービスおよびプロトコルから実行する COPY でサポートされます。  
+ Amazon S3 
+ Amazon EMR 
+ リモートホスト (SSH) 
Avro は DynamoDB から実行する COPY ではサポートされません。  
Avro はデータのシリアル化プロトコルです。Avro のソースファイルには、データ構造を定義するスキーマが含まれています。Avro のスキーマ型は `record` である必要があります。COPY は、デフォルトの非圧縮コーデック、および `deflate` と `snappy` の圧縮コーデックを使用して作成された、Avro ファイルを受け入れます。Avro に関する詳細については、「[Apache Avro](https://avro.apache.org/)」を参照してください。  
*avro\$1option* の有効な値は次のとおりです。  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
デフォルトは `'auto'` です。  
COPY は Avro ソースデータのデータ要素をターゲットテーブルの列に自動的にマッピングします。Avro スキーマのフィールド名をターゲットテーブルの列名に一致させることで、行われます。一致で、`'auto'`では大文字と小文字が区別され、`'auto ignorecase'`では大文字と小文字が区別されません。  
Amazon Redshift テーブルの列名は常に小文字になるため、`'auto'` オプションを使用する場合、対応するフィールド名も小文字である必要があります。フィールド名がすべて小文字でない場合は、`'auto ignorecase'`オプションを使用できます。デフォルトの `'auto'` 引数を使用すると、COPY は構造内の最初のレベルのフィールドまたは*外部フィールド*のみを認識します。  
列名を Avro フィールド名に明示的にマップするには、[JSONPaths ファイル](#copy-json-jsonpaths) を使用できます。  
デフォルトでは、COPY はターゲットテーブルのすべての列が Avro のフィールド名に一致するように試みます。列のサブセットをロードするには、オプションで列リストを指定できます。ターゲットテーブルの列が列リストから削除された場合は、COPY はターゲット列の [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 式をロードします。ターゲット列にデフォルトがない場合は、COPY は NULL をロードしようとします。列が列リストに含まれており、COPY が Avro データで一致するフィールドを見つけることができなかった場合、COPY はその列に NULL をロードしようと試みます。  
COPY を実行し、NOT NULL として定義されている列に NULL を割り当てようとすると、COPY コマンドは失敗します。  
<a name="copy-avro-schema"></a>**Avro スキーマ**  
Avro のソースデータファイルには、データ構造を定義するスキーマが含まれています。COPY は Avro のソースデータファイルの一部であるスキーマを読み込み、ターゲットテーブルの列にデータ要素をマッピングします。次の例で Avro のスキーマを示します。  

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"}]
}
```
Avro スキーマは JSON 形式を使用して定義されています。最上位の JSON オブジェクトには、名前または *キー*の付いた 3 つの名前と値のペア `"name"`、`"type"`、および `"fields"` があります。  
オブジェクトの配置を含む `"fields"` キーペアは、データ構造の各フィールド名とデータ型を定義します。デフォルトでは、COPY はフィールド名を列名に自動的に一致させます。列名は常に小文字であるため、`‘auto ignorecase’` オプションを指定しない限り、一致させるフィールド名もまた小文字にする必要があります。列名と一致しないフィールド名はすべて無視されます。順序は関係ありません。前の例では、COPY は列名 `id`、`guid`、`name`および `address` にマッピングしています。  
デフォルトの `'auto'` 引数を使用すると、COPY は列の第 1 レベルのオブジェクトのみと一致します。スキーマのより深いレベルにマッピングする場合、またはフィールド名と列名が一致しない場合は、JSONPaths ファイルを使用してマッピングを定義します。詳細については、「[JSONPaths ファイル](#copy-json-jsonpaths)」を参照してください。  
キーに関連付けられた値が Avro の複雑なデータ型 (バイト、配列、レコード、マップ、リンクなど) である場合、COPY は値を文字列としてロードします。ここで、文字列はデータの JSON 表現です。COPY は Avro ENUM データ型を文字列としてロードします。文字列の内容は型名です。例については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。  
スキーマおよびファイルメタデータを含む Avro ファイルヘッダーの最大サイズは 1 MB です。    
単一の Avro データブロックの最大サイズは 4 MB です。これは、行の最大サイズとは異なります。単一の Avro データブロックの最大サイズを超えた場合は、最終的な行サイズが 4 MB 未満であっても COPY コマンドは失敗します。  
行のサイズを計算する際、Amazon Redshift では、パイプ文字 ( \$1 ) を 2 回内部的にカウントします。入力データに非常に多くのパイプ文字が含まれる場合、データブロックが 4 MB 未満であっても行サイズが 4 MB を超えることは可能です。

JSON [AS] '*json\$1option*'  <a name="copy-json"></a>
ソースデータは JSON 形式です。  
JSON 形式は次のサービスおよびプロトコルからの COPY でサポートされています。  
+ Amazon S3
+ Amazon EMR からの COPY
+ SSH からの COPY
JSON は DynamoDB からの COPY ではサポートされません。  
*json\$1option* の有効な値は次のとおりです。  
+ `'auto'`
+ `'auto ignorecase'`
+ `'s3://jsonpaths_file'` 
+ `'noshred'` 
デフォルトは `'auto'` です。Amazon Redshift は、JSON ドキュメントのロード中に JSON 構造の属性を複数の列に細分化しません。  
デフォルトでは、COPY はターゲットテーブルのすべての列を JSON のフィールド名キーに一致させるように試みます。列のサブセットをロードするには、オプションで列リストを指定できます。JSON フィールド名のキーがすべて小文字でない場合は、`'auto ignorecase'` オプションまたは [JSONPaths ファイル](#copy-json-jsonpaths) を使用して、明示的に列名を JSON フィールド名のキーにマッピングすることができます。  
ターゲットテーブルの列が列リストから削除された場合は、COPY はターゲット列の [DEFAULT](r_CREATE_TABLE_NEW.md#create-table-default) 式をロードします。ターゲット列にデフォルトがない場合は、COPY は NULL をロードしようとします。列が列リストに含まれており、COPY が JSON データで一致するフィールドを見つけることができなかった場合、COPY はその列に NULL をロードしようと試みます。  
COPY を実行し、NOT NULL として定義されている列に NULL を割り当てようとすると、COPY コマンドは失敗します。  
COPY は、JSON ソースデータ内のデータ要素をターゲットテーブル内の列にマッピングします。これは、ソースの名前と値のペアの*オブジェクトキー*または名前を、ターゲットテーブルの列の名前と一致させることによって行われます。  
各 *json\$1option* 値については、次の詳細を参照してください。    
'auto'  <a name="copy-json-auto"></a>
このオプションでは、一致では大文字と小文字が区別されます。Amazon Redshift テーブルの列名は常に小文字になるため、`'auto'` オプションを使用する場合、対応する JSON フィールド名も小文字である必要があります。  
'auto ignorecase'  <a name="copy-json-auto-ignorecase"></a>
このオプションでは、一致では大文字と小文字は区別されません。Amazon Redshift テーブルの列名は常に小文字であるため、`'auto ignorecase'` オプションを使用する場合、対応する JSON フィールド名は小文字、大文字、または大文字と小文字を混在させることができます。  
's3://*jsonpaths\$1file*'  <a name="copy-json-pathfile"></a>
このオプションでは、COPY は指定された JSONPaths ファイルを使用して、JSON ソースデータ内のデータ要素をターゲットテーブル内の列にマッピングします。*`s3://jsonpaths_file`* 引数は、単一のファイルを明示的に参照する Amazon S3 オブジェクトキーである必要があります。例: 「`'s3://amzn-s3-demo-bucket/jsonpaths.txt`」。引数をキープレフィックスにすることはできません。JSONPaths ファイルの使用方法の詳細については、「[JSONPaths ファイル](#copy-json-jsonpaths)」を参照してください。  
場合によっては、`jsonpaths_file` で指定されたファイルのプレフィックスが、`copy_from_s3_objectpath` で指定されたデータファイルのパスと同じになります。その場合、COPY は JSONPaths ファイルをデータファイルとして読み込み、エラーを返します。例えば、データファイルがオブジェクトパス `s3://amzn-s3-demo-bucket/my_data.json` を使用し、JSONPaths ファイルが `s3://amzn-s3-demo-bucket/my_data.jsonpaths` であるとします。この場合、COPY は `my_data.jsonpaths` をデータファイルとしてロードしようとします。  
'noshred'  <a name="copy-json-noshred"></a>
このオプションを使用すると、Amazon Redshift は JSON ドキュメントのロード中に JSON 構造の属性を複数の列に細分化しません。

## JSON データファイル
<a name="copy-json-data-file"></a>

JSON データファイルには、一連のオブジェクトまたは配列が含まれます。COPY は、それぞれの JSON オブジェクトまたは JSON 配列をターゲットテーブルの 1 つの行にロードします。行に対応する各オブジェクトまたは配列は、スタンドアロンのルートレベル構造である必要があります。つまり、別の JSON 構造のメンバーではない必要があります。

JSON *オブジェクト*の先頭と末尾には中括弧 (\$1 \$1) が付き、順序が設定されていない一連の名前と値のペアが含まれます。ペアの名前と値はコロンで区切られ、各ペアはカンマで区切られます。デフォルトでは、名前と値のペアに含まれる*オブジェクトキー* (名前) は、テーブル内の対応する列の名前に一致する必要があります。Amazon Redshift テーブルの列名は常に小文字であるため、一致する JSON フィールド名のキーも小文字である必要があります。列名と JSON キーが一致しない場合、[JSONPaths ファイル](#copy-json-jsonpaths)を使用して明示的に列をキーにマッピングします。

JSON オブジェクト内の順序は問題ではありません。列名と一致しない名前はすべて無視されます。次に、簡単な JSON オブジェクトの構造を示します。

```
{
  "column1": "value1",
  "column2": value2,
  "notacolumn" : "ignore this value"
}
```

JSON *配列*の先頭と末尾には角括弧 ([  ]) が付き、順序が設定された一連のカンマ区切りの値が含まれます。データファイルで配列を使用している場合は、JSONPaths ファイルを指定して、値を列に一致させる必要があります。次に、簡単な JSON 配列の構造を示します。

```
["value1", value2]
```

JSON は正しい形式になっている必要があります。例えば、オブジェクトまたは配列をカンマまたは空白以外の他の文字で区切ることはできません。文字列は、二重引用文字で囲む必要があります。引用符は、傾きの付いた "高機能な" 引用符ではなくシンプルな引用符 (0x22) にする必要があります。

1 つの JSON オブジェクトまたは JSON 配列の最大サイズ (中括弧または角括弧を含む) は 4 MB です。これは、行の最大サイズとは異なります。単一の JSON オブジェクトまたは配列の最大サイズを超えた場合は、最終的な行サイズが 4 MB 未満であっても COPY コマンドは失敗します。

行のサイズを計算する際、Amazon Redshift では、パイプ文字 ( \$1 ) を 2 回内部的にカウントします。入力データに非常に多くのパイプ文字が含まれる場合、オブジェクトサイズが 4 MB 未満であっても行サイズが 4 MB を超えることは可能です。

COPY は改行文字として `\n` を、タブ文字として `\t` をロードします。バックスラッシュをロードするには、バックスラッシュをバックスラッシュでエスケープします (`\\`)。

COPY は、指定した JSON ソースにおいて、正しい形式の有効な JSON オブジェクトまたは JSON 配列を検索します。使用可能な JSON 構造体を見つける前に、または有効な JSON オブジェクトまたは配列の間で COPY が空白以外の文字を検出した場合、COPY は各インスタンスについてエラーを返します。このエラーは、MAXERROR のエラー数としてカウントされます。エラー数が MAXERROR 以上に達すると、COPY は失敗します。

それぞれのエラーについて、Amazon Redshift は STL\$1LOAD\$1ERRORS システムテーブルの行を記録します。LINE\$1NUMBER 列には、エラーの原因となった JSON オブジェクトの最後の行が記録されます。

IGNOREHEADER を指定した場合、COPY は JSON データの指定数の行を無視します。JSON データに含まれる改行文字は、常に IGNOREHEADER の計算にカウントされます。

デフォルトでは、COPY は空の文字列を空のフィールドとしてロードします。EMPTYASNULL を指定した場合、COPY は CHAR および VARCHAR フィールドの空の文字列を NULL としてロードします。INT など、他のデータ型の空の文字列は常に NULL でロードされます。

次のオプションは JSON ではサポートされません。
+ CSV
+ DELIMITER 
+ ESCAPE
+ FILLRECORD 
+ FIXEDWIDTH
+ IGNOREBLANKLINES
+ NULL AS
+ READRATIO
+ REMOVEQUOTES 

詳細については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。JSON データ構造の詳細については、[www.json.org](https://www.json.org/) を参照してください。

## JSONPaths ファイル
<a name="copy-json-jsonpaths"></a>

JSON 形式または Avro ソースのデータからロードする場合、デフォルトでは COPY はソースデータ内の第 1 レベルのデータ要素をターゲットテーブル内の列にマッピングします。これは、名前と値のペアの各名前またはオブジェクトキーを、ターゲットテーブルの列の名前と一致させることによって行われます。

列名とオブジェクトキーが一致しない場合、またはデータ階層のより深いレベルまでマッピングする場合は、JSONPaths ファイルを使用して明示的に JSON または Avro のデータ要素を列にマッピングできます。JSONPaths ファイルは、ターゲットテーブルまたは列リストで列の順序を一致させることで、JSON データ要素を列にマッピングします。

JSONPaths には、単一の JSON オブジェクト (配列ではない) を格納しなければなりません。JSON オブジェクトは、名前と値のペアです。*オブジェクトキー* (名前と値のペアの名前) は、`"jsonpaths"`にする必要があります。名前の値のペアに含まれる*値*は、*JSONPath 式*の配列です。各 JSONPath 式は、JSON データ階層内または Avro スキーマの単一の要素を参照します。XPath 式が XML ドキュメント内の要素を参照する方法と似ています。詳細については、「[JSONPath 式](#copy-json-jsonpath-expressions)」を参照してください。

JSONPaths ファイルを使用するには、JSON または AVRO キーワードを COPY コマンドに追加します。次の形式を使用して、JSONPaths ファイルの S3 バケット名とオブジェクトパスを指定します。

```
COPY tablename 
FROM 'data_source' 
CREDENTIALS 'credentials-args' 
FORMAT AS { AVRO | JSON } 's3://jsonpaths_file';
```

`s3://jsonpaths_file` 値は、`'s3://amzn-s3-demo-bucket/jsonpaths.txt'`などの単一のファイルを明示的に参照する Amazon S3 オブジェクトキーである必要があります。キープレフィックスにすることはできません。

場合によっては、Amazon S3 からロードする場合、`jsonpaths_file` で指定されたファイルのプレフィックスは、`copy_from_s3_objectpath` で指定されたデータファイルのパスと同じになります。その場合、COPY は JSONPaths ファイルをデータファイルとして読み込み、エラーを返します。例えば、データファイルがオブジェクトパス `s3://amzn-s3-demo-bucket/my_data.json` を使用し、JSONPaths ファイルが `s3://amzn-s3-demo-bucket/my_data.jsonpaths` であるとします。この場合、COPY は `my_data.jsonpaths` をデータファイルとしてロードしようとします。

 キー名が `"jsonpaths"` 以外の文字列である場合、COPY コマンドはエラーを返しませんが、*jsonpaths\$1file* を無視して `'auto'` 引数を代わりに使用します。

以下のいずれかの状況に当てはまる場合、COPY コマンドは失敗します。
+ JSON が正しい形式ではない。
+ 複数の JSON オブジェクトがある。
+ オブジェクトの外に空白以外の文字が存在する。
+ 配列エレメントが空の文字列であるか、文字列ではない。

MAXERROR は JSONPaths には適用されません。

[ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted) オプションを指定している場合でも、JSONPaths ファイルの暗号化は行わないでください。

詳細については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。

## JSONPath 式
<a name="copy-json-jsonpath-expressions"></a>

JSONPaths ファイルは JSONPath 式を使用してターゲット列にデータフィールドをマッピングします。各 JSONPath 式は、Amazon Redshift のターゲットテーブル内の 1 列に対応しています。JSONPath 配列要素の順序は、ターゲットテーブル内の列の順序または列リストが使用される場合は列リスト内の列の順序と一致していなければなりません。

例に示すように、フィールド名と値のどちらにも二重引用符が必要です。引用符の文字は、傾きの付いた "高機能な" 引用符ではなくシンプルな引用符 (0x22) にする必要があります。

JSONPath 式によって参照されるオブジェクト要素が JSON データにない場合、COPY は NULL 値をロードしようとします。参照されるオブジェクトが正しい形式ではない場合、COPY はロードエラーを返します。

JSONPath 式により参照される配列要素が JSON データまたは Avro データに見つからない場合、COPY は次のエラー `Invalid JSONPath format: Not an array or index out of range.` で失敗します。ソースデータに存在しない配列要素を JSONPaths からすべて削除し、ソースデータの配列が正しい形式であることを確認してください。  

JSONPath 式では、ブラケット表記またはドット表記のいずれかを使用できますが、両方の表記を混ぜて使用することはできません。次の例は、ブラケット表記を使用した JSONPath 式を示しています。

```
{
    "jsonpaths": [
        "$['venuename']",
        "$['venuecity']",
        "$['venuestate']",
        "$['venueseats']"
    ]
}
```

次の例は、ドット表記を使用した JSONPath 式を示しています。

```
{
    "jsonpaths": [
        "$.venuename",
        "$.venuecity",
        "$.venuestate",
        "$.venueseats"
    ]
}
```

Amazon Redshift COPY 構文のコンテキストでは、JSONPath 式は、JSON または Avro の階層データ構造内の 1 つの名前要素に対する明示的なパスを指定する必要があります。Amazon Redshift では、あいまいなパスや複数の名前要素に解決される可能性がある、ワイルドカード文字やフィルター式などの JSONPath 要素をサポートしていません。

詳細については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。

## Avro データに対する JSONPaths の使用
<a name="using-jsonpath-with-avro"></a>

次の例で、複数のレベルがある Avro スキーマを示します。

```
{
    "name": "person",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "guid", "type": "string"},
        {"name": "isActive", "type": "boolean"},
        {"name": "age", "type": "int"},
        {"name": "name", "type": "string"},
        {"name": "address", "type": "string"},
        {"name": "latitude", "type": "double"},
        {"name": "longitude", "type": "double"},
        {
            "name": "tags",
            "type": {
                        "type" : "array",
                        "name" : "inner_tags",
                        "items" : "string"
                    }
        },
        {
            "name": "friends",
            "type": {
                        "type" : "array",
                        "name" : "inner_friends",
                        "items" : {
                                    "name" : "friends_record",
                                    "type" : "record",
                                    "fields" : [
                                                 {"name" : "id", "type" : "int"},
                                                 {"name" : "name", "type" : "string"}
                                               ]
                                  }
                    }
        },
        {"name": "randomArrayItem", "type": "string"}
    ]
}
```

次の例で、AvroPath 式を使用して前のスキーマを参照する JSONPaths ファイルを示します。

```
{
    "jsonpaths": [
        "$.id",
        "$.guid",
        "$.address",
        "$.friends[0].id"
    ]
}
```

JSONPaths の例には、以下の要素が含まれています。

jsonpaths  
AvroPath 式を含む JSON オブジェクトの名前です。

[ … ]  
かっこ内にパス要素を含む JSON 配列を囲みます。

\$1  
ドル記号は、`"fields"`配列である Avro スキーマのルート要素を表します。

"\$1.id",  
AvroPath 式のターゲットです。このインスタンスでは、ターゲットは `"fields"` 配列の `"id"` という名前の要素です。式はカンマで区切ります。

"\$1.friends[0].id"  
かっこは配列インデックスを示します。JSONPath 式はゼロベースのインデックスを使用します。従って、この式は `"friends"` 配列の第 1 要素を `"id"` と言う名前で参照します。

Avro スキーマの構文では、*内部フィールド*を使用してレコード構造および配列データ型を定義する必要があります。内部フィールドは AvroPath 式には無視されます。例えば、フィールド `"friends"` は `"inner_friends"` という名前の配列を定義し、は `"friends_record"` という名前のレコードを定義します。フィールド `"id"` を参照する AvroPath 式は、追加のフィールドを無視してターゲットフィールドを直接参照できます。次の AvroPath 式は、`"friends"`配列内に属する 2 つのフィールドを参照します。

```
"$.friends[0].id"
"$.friends[0].name"
```

## 列データ形式のパラメータ
<a name="copy-parameters-columnar-data"></a>

標準データ形式に加えて、COPY は、Amazon S3 から COPY の以下の列データ形式をサポートしています。列形式の COPY は、特定の制限でサポートされています。詳細については、「[列データ形式の COPY](copy-usage_notes-copy-from-columnar.md)」を参照してください。

ORC  <a name="copy-orc"></a>
最適化された行列 (ORC) ファイル形式を使用するファイルからデータをロードします。

PARQUET  <a name="copy-parquet"></a>
Parquet ファイル形式を使用するファイルからデータをロードします。

# ファイル圧縮パラメータ
<a name="copy-parameters-file-compression"></a>

次のパラメータを指定して、圧縮されたデータファイルからロードできます。ファイル圧縮パラメータ

BZIP2   <a name="copy-bzip2"></a>
入力ファイルが圧縮された bzip2 形式 (.bz2 ファイル) であることを指定する値です。COPY 操作では、圧縮されたそれぞれのファイルを読み取り、ロード時にデータを解凍します。

GZIP   <a name="copy-gzip"></a>
入力ファイルが圧縮された gzip 形式 (.gz 形式) であることを指定する値です。COPY 操作では、圧縮されたそれぞれのファイルを読み取り、ロード時にデータを解凍します。

LZOP   <a name="copy-lzop"></a>
入力ファイルが圧縮された lzop 形式 (.lzo ファイル) であることを指定する値です。COPY 操作では、圧縮されたそれぞれのファイルを読み取り、ロード時にデータを解凍します。  
COPY は、lzop *--filter* オプションを使用して圧縮されたファイルをサポートしていません。

ZSTD   <a name="copy-zstd"></a>
入力ファイルが圧縮された Zstandard 形式 (.zst ファイル) であることを指定する値です。COPY 操作では、圧縮されたそれぞれのファイルを読み取り、ロード時にデータを解凍します。  
ZSTD は、Amazon S3 から COPY を使用する場合のみサポートされます。

# データ変換パラメータ
<a name="copy-parameters-data-conversion"></a>

テーブルをロードする際に、COPY は暗黙的にソースデータの文字列をターゲット列のデータ型に変換しようとします。デフォルトの動作とは異なる変換を指定する必要がある場合、またはデフォルトの変換がエラーになった場合、次のパラメータを指定してデータ変換を管理できます。これらのパラメータの構文に関する詳細については、「[COPY 構文](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html#r_COPY-syntax)」を参照してください。
+ [ACCEPTANYDATE](#copy-acceptanydate) 
+ [ACCEPTINVCHARS](#copy-acceptinvchars) 
+ [BLANKSASNULL](#copy-blanksasnull) 
+ [DATEFORMAT](#copy-dateformat) 
+ [EMPTYASNULL](#copy-emptyasnull) 
+ [ENCODING](#copy-encoding) 
+ [ESCAPE](#copy-escape) 
+ [EXPLICIT_IDS](#copy-explicit-ids) 
+ [FILLRECORD](#copy-fillrecord) 
+ [IGNOREBLANKLINES](#copy-ignoreblanklines) 
+ [IGNOREHEADER](#copy-ignoreheader) 
+ [NULL AS](#copy-null-as) 
+ [REMOVEQUOTES](#copy-removequotes) 
+ [ROUNDEC](#copy-roundec) 
+ [TIMEFORMAT](#copy-timeformat) 
+ [TRIMBLANKS](#copy-trimblanks) 
+ [TRUNCATECOLUMNS](#copy-truncatecolumns) <a name="copy-data-conversion-parameters"></a>データ変換パラメータ

ACCEPTANYDATE   <a name="copy-acceptanydate"></a>
`00/00/00 00:00:00` などの無効な形式を含め、任意の日付形式をエラーなしにロードできるようにします。このパラメータは TIMESTAMP 列および DATE 列にのみ適用されます。ACCEPTANYDATE は常に DATEFORMAT パラメータと共に使用します。データの日付形式が DATEFORMAT の仕様と一致しない場合、Amazon Redshift はそのフィールドに NULL 値を挿入します。

ACCEPTINVCHARS [AS] ['*replacement\$1char*']   <a name="copy-acceptinvchars"></a>
データに無効な UTF-8 文字がある場合でも、VARCHAR 列へのデータのロードを有効にします。ACCEPTINVCHARS を指定した場合、COPY は *replacement\$1char* で指定されている文字列から構成される同じ長さの文字列で、無効な各 UTF-8 文字を置き換えます。例えば、置換文字が '`^`' である場合、無効な 3 バイト文字は '`^^^`' で置き換えられます。  
 置換文字には NULL 以外の任意の ASCII 文字を使用できます。デフォルトは疑問符 (?) です。無効な UTF-8 文字の詳細については、「[マルチバイト文字のロードエラー](multi-byte-character-load-errors.md)」を参照してください。  
COPY は無効な UTF-8 文字を含んだ行の数を返し、対象行ごとに [STL\$1REPLACEMENTS](r_STL_REPLACEMENTS.md) システムテーブルにエントリを追加します (各ノードスライスで最大 100 行まで)。さらに多くの無効な UTF-8 文字も置き換えられますが、それらの置換イベントは記録されません。  
ACCEPTINVCHARS を指定しなかった場合、無効な UTF-8 文字があるごとに、COPY はエラーを返します。  
ACCEPTINVCHARS は VARCHAR 列に対してのみ有効です。

BLANKSASNULL   <a name="copy-blanksasnull"></a>
NULL など、空白文字のみから構成される空のフィールドをロードします。このオプションは CHAR と VARCHAR の列にのみ適用されます。INT など、他のデータ型の空のフィールドは常に NULL でロードされます。例えば、3 つの連続するスペース文字を含む (それ以外の文字はない) 文字列は NULL としてロードされます。このオプションなしのデフォルト動作では、スペース文字をそのままロードします。

DATEFORMAT [AS] \$1'*dateformat\$1string*' \$1 'auto' \$1  <a name="copy-dateformat"></a>
DATEFORMAT を指定しない場合、デフォルト形式は `'YYYY-MM-DD'` です。例えば、有効な代替形式は `'MM-DD-YYYY'` です。  
COPY コマンドが日付値または時刻値の形式を認識しない場合、または日付値または時刻値で異なる形式が使用されている場合は、`'auto'`引数を DATEFORMAT または TIMEFORMAT パラメータとともに使用します。`'auto'` 引数は、DATEFORMAT および TIMEFORMAT 文字列を使用する場合にサポートされない形式を認識します。`'auto'` キーワードでは大文字小文字を区別します。詳細については、「[DATEFORMAT と TIMEFORMAT で自動認識を使用する](automatic-recognition.md)」を参照してください。  
日付形式には時間情報 (時、分、秒) を含めることができますが、この情報は無視されます。AS キーワードはオプションです。詳細については、「[DATEFORMAT と TIMEFORMAT の文字列例](r_DATEFORMAT_and_TIMEFORMAT_strings.md)」を参照してください。

EMPTYASNULL   <a name="copy-emptyasnull"></a>
Amazon Redshift で CHAR と VARCHAR の空のフィールドを NULL としてロードすることを指定します。INT など、他のデータ型の空のフィールドは常に NULL でロードされます。データに 2 つの区切り記号が連続し、区切り記号の間に文字がない場合、空のフィールドになります。EMPTYASNULL と NULL AS '' (空の文字列) は同じ動作を生成します。

ENCODING [AS] *file\$1encoding*  <a name="copy-encoding"></a>
ロードデータのエンコードタイプを指定します。COPY コマンドは、ロード時にデータを指定されたエンコードから UTF-8 に変換します。  
*file\$1encoding* の有効な値は次のとおりです。  
+ `UTF8`
+ `UTF16`
+ `UTF16LE`
+ `UTF16BE`
+ `ISO88591`
デフォルトは `UTF8` です。  
ソースファイル名には UTF-8 エンコードを使用する必要があります。  
ロードデータに別のエンコードが指定されている場合でも、以下のファイルには UTF-8 エンコードを使用する必要があります。  
+ マニフェストファイル
+ JSONPaths ファイル
次のパラメータを使用して指定される引数文字列には UTF-8 を使用する必要があります。  
+ FIXEDWIDTH '*fixedwidth\$1spec*'
+ ACCEPTINVCHARS '*replacement\$1char*'
+ DATEFORMAT '*dateformat\$1string*'
+ TIMEFORMAT '*timeformat\$1string*'
+ NULL AS '*null\$1string*'
固定幅データファイルは UTF-8 エンコーディングを使用する必要があります。フィールド幅はバイト数ではなく、文字数をベースにしています。  
すべてのロードデータには、指定されたエンコードを使用する必要があります。COPY が別のエンコードを検出した場合、ファイルがスキップされてエラーが返されます。  
`UTF16` を指定した場合、データにはバイトオーダーマーク (BOM) が必要です。UTF-16 データがリトルエンディアン (LE) であるかビッグエンディアン (BE) であるかがわかっている場合、BOM があるかどうかに関係なく `UTF16LE` または `UTF16BE` を使用できます。  
ISO-8859-1 エンコーディングを使用するには、`ISO88591` を指定します。詳細については、Wikipedia の「[ISO/IEC 8859-1](https://en.wikipedia.org/wiki/ISO/IEC_8859-1)」を参照してください。**

ESCAPE   <a name="copy-escape"></a>
このパラメータを指定した場合、入力データのバックスラッシュ文字 (`\`) はエスケープ文字として扱われます。バックスラッシュ文字の直後に続く文字は、通常は特定の目的に使用される文字である場合でも、現在の列の値の一部としてテーブルにロードされます。例えば、区切り文字、引用符、埋め込まれた改行文字、またはエスケープ文字自体のいずれかが正当な列の値として含まれている場合、このパラメータを使用してその文字をエスケープできます。  
REMOVEQUOTES パラメータと組み合わせて ESCAPE パラメータを使用すると、他の場合には削除される引用符 (`'` または `"`) をエスケープし保持することができます。デフォルトの null 文字列 `\N` はそのまま使用できますが、入力データで `\\N` としてエスケープすることもできます。NULL AS パラメータで代替 null 文字列を指定しない限り、`\N`と `\\N` は同じ結果になります。  
制御文字 `0x00` (NUL) はエスケープできません。入力データから削除するか変換してください。この文字はレコードの終わり (EOR) マーカーとして扱われ、レコードの残りの部分は切り捨てられます。
FIXEDWIDTH ロードに対して ESCAPE パラメータを使用することはできません。また、エスケープ文字自体を指定することはできません。エスケープ文字は常にバックスラッシュ文字です。また、入力データの適切な場所にエスケープ文字が含まれていることを確認する必要があります。  
次に、ESCAPE パラメータを指定する場合の入力データおよびその結果、ロードされるデータの例を示します。行 4 の結果は、REMOVEQUOTES パラメータも指定されていることを想定しています。入力データはパイプで区切られたフィールド 2 つで構成されます。  

```
1|The quick brown fox\[newline]
jumped over the lazy dog.
2| A\\B\\C
3| A \| B \| C
4| 'A Midsummer Night\'s Dream'
```
データは列 2 に次にようにロードされます。  

```
The quick brown fox
jumped over the lazy dog.
A\B\C
A|B|C
A Midsummer Night's Dream
```
ロード用の入力データにエスケープ文字を適用する作業はユーザーが担当します。ただし、ESCAPE パラメータを使用して以前アンロードされたデータを再ロードした場合は例外となります。この場合、データにはすでに必要なエスケープ文字が含まれています。
ESCAPE パラメータでは 8 進数、16 進数、Unicode、またはその他のエスケープシーケンス表記を解釈しません。例えば、ソースデータに 8 進数のラインフィード値 (`\012`) があり、ESCAPE パラメータを使用してこのデータをロードしようとすると、Amazon Redshift は値 `012` をテーブルにロードします。この値は、エスケープされているラインフィードとしては解釈されません。  
Microsoft Windows プラットフォームからのデータの改行文字をエスケープするには、2 つのエスケープ文字の使用が必要となることがあります。1 つはキャリッジリターン用、もう 1 つはラインフィード用です。または、ファイルのロード前にキャリッジリターンを削除することができます (例えば、dos2unix utility を使用)。

EXPLICIT\$1IDS   <a name="copy-explicit-ids"></a>
自動生成される値をテーブルのソースデータファイルの明示的値でオーバーライドするには、IDENTITY 列を持つテーブルに EXPLICIT\$1IDS を使用します。コマンドに列リストが含まれる場合、そのリストにはこのパラメータを使用する IDENTITY 列が含まれている必要があります。EXPLICIT\$1IDS 値のデータ形式は、CREATE TABLE 定義で指定された IDENTITY 形式に一致する必要があります。  
EXPLICIT\$1IDS オプションを使用してテーブルに対して COPY コマンドを実行する際、Amazon Redshift はテーブル内の IDENTITY 列の一意性をチェックしません。  
列がGENERATED BY DEFAULT AS IDENTITYで定義されている場合は、コピーできます。値は、指定した値で生成または更新されます。EXPLICIT\$1IDS オプションは必須ではありません。COPY は IDENTITY のハイウォーターマークを更新しません。  
 EXPLICIT\$1IDS を使用する COPY コマンドの例については、「[IDENTITY 列の明示的値を使用して VENUE をロードする](r_COPY_command_examples.md#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)」を参照してください。

FILLRECORD   <a name="copy-fillrecord"></a>
一部のレコードの最後で連続する列が欠落している場合に、データをロードできるようにします。欠落している列は NULL としてロードされます。テキスト形式と CSV 形式では、VARCHAR 列が欠落している場合、NULL の代わりに長さ 0 の文字列がロードされます。テキストおよび CSV から VARCHAR 列に NULL をロードするには、EMPTYASNULL キーワードを指定します。NULL の置き換えは、列定義で NULL が使用できる場合にのみ可能です。  
例えば、テーブル定義に 4 つの null が許容された CHAR 列があり、レコードに値 `apple, orange, banana, mango` がある場合、COPY コマンドは値 `apple, orange` のみを含むレコードをロードし、記入できます。欠落している CHAR 値は NULL 値としてロードされます。

IGNOREBLANKLINES   <a name="copy-ignoreblanklines"></a>
データファイルでラインフィードのみ含む空白行を無視し、ロードしません。

IGNOREHEADER [ AS ] *number\$1rows*   <a name="copy-ignoreheader"></a>
指定された *number\$1rows* をファイルヘッダーとして扱い、ロードしません。並列ロードですべてのファイルのファイルヘッダーをスキップするには、IGNOREHEADER を使用します。

NULL AS '*null\$1string*'  <a name="copy-null-as"></a>
*null\$1string* に一致するフィールドを NULL としてロードします。ここで *null\$1string* は任意の文字列です。データに null ターミネータ (NUL (UTF-8 0000) またはバイナリゼロ (0x000) と呼ばれることもあります) が含まれる場合、COPY はそれを他の文字として扱います。例えば、'1' \$1\$1 NUL \$1\$1 '2' を含むレコードは長さ 3 バイトの文字列としてコピーされます。フィールドに NUL のみが含まれている場合は、NULL AS を使用して、`'\0'` または `'\000'` (例えば、`NULL AS '\0'` または `NULL AS '\000'`) を指定することにより、null ターミネータを NULL に置き換えることができます。フィールドに NUL で終わる文字列が含まれており、NULL AS を指定した場合、文字列の最後に NUL が挿入されます。*null\$1string* 値に '\$1 n' (改行) を使用しないでください。Amazon Redshift は、行区切り文字として使用するために '\$1n' を予約します。デフォルトの *null\$1string* は `'\N`' です。  
NOT NULL として定義された列に Null のロードを試みた場合、COPY コマンドは失敗します。

REMOVEQUOTES   <a name="copy-removequotes"></a>
入力データの文字列を囲む引用符を削除します。区切り記号を含む引用符内のすべての文字は保持されます。文字列に開始の一重または二重引用符があるが、対応する終了引用符がない場合、COPY コマンドはその行をロードできず、エラーを返します。次の表は、引用符を含む文字列とその結果、ロードされる値の簡単な例を示しています。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/copy-parameters-data-conversion.html)

ROUNDEC   <a name="copy-roundec"></a>
入力値の小数点以下の桁数が列の小数点以下の桁数よりも多い場合に数値を四捨五入します。COPY のデフォルト動作では、列の小数点以下の桁数に合わせて必要に応じて値が切り捨てられます。たとえば、`20.259`という値が DECIMAL(8,2) 列にロードされた場合、COPY はデフォルトでこの値を `20.25` に切り捨てます。ROUNDEC が指定されている場合、COPY はこの値を `20.26` に四捨五入します。INSERT コマンドでは、列の小数点以下の桁数に合わせて必要に応じて値が四捨五入されます。そのため、COPY コマンドを ROUNDEC パラメータとともに使用した場合の動作は、INSERT コマンドを実行した場合の動作と同じになります。

TIMEFORMAT [AS] \$1'*timeformat\$1string*' \$1 'auto' \$1 'epochsecs' \$1 'epochmillisecs' \$1  <a name="copy-timeformat"></a>
時間形式を指定します。TIMEFORMAT が指定されていない場合、デフォルトの形式は、TIMESTAMP 列では `YYYY-MM-DD HH:MI:SS`、TIMESTAMPTZ 列では `YYYY-MM-DD HH:MI:SSOF` です。`OF` は協定世界時 (UTC) からのオフセットです。*timeformat\$1string* には、タイムゾーン指定子を含めることができません。デフォルトの形式と異なる形式の TIMESTAMPTZ データをロードするには、「auto」を指定します。詳細については、「[DATEFORMAT と TIMEFORMAT で自動認識を使用する](automatic-recognition.md)」を参照してください。*timeformat\$1string* の詳細については、「[DATEFORMAT と TIMEFORMAT の文字列例](r_DATEFORMAT_and_TIMEFORMAT_strings.md)」を参照してください。  
`'auto'` 引数は、DATEFORMAT および TIMEFORMAT 文字列を使用する場合にサポートされない形式を認識します。COPY コマンドが日付値または時刻値の形式を認識しない場合、または日付値および時刻値でそれぞれ異なる形式が使用されている場合は、`'auto'`引数を DATEFORMAT または TIMEFORMAT パラメータとともに使用します。詳細については、「[DATEFORMAT と TIMEFORMAT で自動認識を使用する](automatic-recognition.md)」を参照してください。  
ソースデータがエポック時間 (1970 年 1 月 1 日 00:00:00 UTC からの秒数またはミリ秒数) で表されている場合、`'epochsecs'`または `'epochmillisecs'` を指定します。  
`'auto'`、`'epochsecs'`、`'epochmillisecs'`の各キーワードでは大文字小文字を区別します。  
AS キーワードはオプションです。

TRIMBLANKS   <a name="copy-trimblanks"></a>
VARCHAR 文字列から末尾の空白文字を削除します。このパラメータは VARCHAR データ型の列にのみ適用されます。

TRUNCATECOLUMNS   <a name="copy-truncatecolumns"></a>
列の仕様に合うよう、該当する文字数で列のデータを切り捨てます。データ型が VARCHAR または CHAR の列、およびサイズが 4 MB 以下の行にのみ適用されます。

# データのロード操作
<a name="copy-parameters-data-load"></a>

次のパラメータを指定して、トラブルシューティングの際のロード操作のデフォルトの動作を管理したり、ロード時間を短縮します。
+ [COMPROWS](#copy-comprows) 
+ [COMPUPDATE](#copy-compupdate) 
+ [IGNOREALLERRORS](#copy-ignoreallerrors) 
+ [MAXERROR](#copy-maxerror) 
+ [NOLOAD](#copy-noload) 
+ [STATUPDATE](#copy-statupdate) <a name="copy-data-load-parameters"></a>パラメータ

COMPROWS *numrows*   <a name="copy-comprows"></a>
圧縮分析のサンプルサイズとして使用される行数を指定します。分析は各データスライスの行に対して実行されます。たとえば、`COMPROWS 1000000`(1,000,000) を指定し、システムに合計 4 つのスライスが含まれている場合、スライスごとに 250,000 行のみが読み取られ、分析されます。  
COMPROWS を指定しない場合、サンプルサイズはデフォルトでスライスごとに 100,000 になります。COMPROWS の値がスライスごとに 100,000 行のデフォルト値より小さい場合、自動的にデフォルト値にアップグレードされます。ただし、ロードされるデータの量が有意のサンプルとしては不十分な場合、自動圧縮は実行されません。  
COMPROWS 数が入力ファイルの行数より大きい場合でも、COPY コマンドは続行し、利用可能なすべての行で圧縮分析を実行します。この引数の許容範囲は 1000～2147483647 (2,147,483,647) の数値です。

COMPUPDATE [ PRESET \$1 \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-compupdate"></a>
COPY 実行中に圧縮エンコードを自動的に適用するかどうかを制御します。  
COMPUPDATE が PRESET の場合、COPY コマンドを実行すると、ターゲットテーブルが空の場合、列に RAW 以外のエンコードが既に指定されていても、各列に圧縮エンコードが選択されます。現在指定されている列のエンコードは置き換えることができます。各列のエンコードは、列のデータタイプに基づきます。サンプリングされているデータはありません。Amazon Redshift では、次のように圧縮エンコードが自動的に割り当てられます。  
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、または DOUBLE PRECISION データ型として定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR または VARCHAR として定義された列には、LZO 圧縮が割り当てられます。
COMPUPDATE を削除して COPY コマンドを実行すると、ターゲットテーブルが空で、どの列にもエンコード (RAW は除く) を指定していない場合にのみ、各列に圧縮エンコードが選択されます。各列のエンコードは、Amazon Redshift によって決定されます。サンプリングされているデータはありません。  
COMPUPDATE が ON (または TRUE) の場合、または COMPUPDATE がオプションなしで指定されている場合は、テーブルの列に RAW 以外のエンコードがすでに指定されていても、テーブルが空であれば COPY によって自動圧縮が適用されます。現在指定されている列のエンコードは置き換えることができます。列ごとのエンコードは、サンプルデータの分析によって異なります。詳細については、「[自動圧縮ありでテーブルをロードする](c_Loading_tables_auto_compress.md)」を参照してください。  
COMPUPDATE OFF (または FALSE) の場合、自動圧縮は無効になります。列のエンコードを変更することはできません。  
圧縮を分析するシステムテーブルの詳細については、「[STL\$1ANALYZE\$1COMPRESSION](r_STL_ANALYZE_COMPRESSION.md)」を参照してください。

IGNOREALLERRORS   <a name="copy-ignoreallerrors"></a>
このオプションを指定すると、ロードオペレーション中に発生したすべてのエラーを無視します。  
MAXERROR オプションを指定している場合は、IGNOREALLERRORS オプションを指定することはできません。ORC や Parquet の列形式に対しては、IGNOREALLERRORS オプションを指定できません。

MAXERROR [AS] *error\$1count*   <a name="copy-maxerror"></a>
ロードのエラー数が *error\$1count* 以上である場合、ロードは失敗します。ロードのエラーがそれより少ない場合、処理は続行され、ロードできなかった行数を示す INFO メッセージが返されます。データの形式エラーやその他の不整合のために一部の行をテーブルにロードできないときにロードを継続するには、このパラメータを使用します。  
最初のエラーが発生したときにロードを失敗させる場合、この値を `0` または `1` に設定します。AS キーワードはオプションです。MAXERROR のデフォルト値は `0`、そしてその限度は `100000` です。  
 Amazon Redshift の並列処理のため、報告される実際のエラー数が指定された MAXERROR より大きくなることがあります。Amazon Redshift クラスターのノードで MAXERROR を超えたことが検出された場合、各ノードは発生したすべてのエラーを報告します。

NOLOAD   <a name="copy-noload"></a>
データを実際にロードせずにデータファイルの有効性をチェックします。実際にデータロードを実行せずに、エラーなしでデータファイルがロードされることを確認するには、NOLOAD パラメータを使用します。NOLOAD パラメータと共に COPY を実行すると、ファイルを解析するだけであるため、データのロードよりはるかに高速になります。

STATUPDATE [ \$1 ON \$1 TRUE \$1 \$1 \$1 OFF \$1 FALSE \$1 ]  <a name="copy-statupdate"></a>
COPY コマンドが成功したとき最後に行う自動計算とオプティマイザ統計の更新を制御します。デフォルトでは、STATUPDATE パラメータを使用しない場合、テーブルが最初は空ならば、統計は自動的に更新されます。  
データを空ではないテーブルに入れるとテーブルのサイズが大きく変化する場合は、常に [ANALYZE](r_ANALYZE.md) コマンドを実行するか STATUPDATE ON 引数を使用して統計を更新することをお勧めします。  
STATUPDATE ON (または TRUE) の場合、テーブルが最初に空であるかどうかに関係なく、統計は自動的に更新されます。STATUPDATE を使用する場合、現在のユーザーはテーブル所有者またはスーパーユーザーであることが必要です。STATUPDATE を指定しない場合、INSERT 権限のみ必要です。  
STATUPDATE OFF (または FALSE) を使用すると、統計は更新されません。  
詳細については、「[テーブルを分析する](t_Analyzing_tables.md)」を参照してください。

# パラメータリスト (アルファベット順)
<a name="r_COPY-alphabetical-parm-list"></a>

次の一覧は、アルファベット順にソートされた COPY コマンドパラメータのそれぞれの説明へのリンクです。
+ [ACCEPTANYDATE](copy-parameters-data-conversion.md#copy-acceptanydate)
+ [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars)
+ [ACCESS\$1KEY\$1ID、SECRET\$1ACCESS\$1KEY](copy-parameters-authorization.md#copy-access-key-id-access)
+ [AVRO](copy-parameters-data-format.md#copy-avro)
+ [BLANKSASNULL](copy-parameters-data-conversion.md#copy-blanksasnull)
+ [BZIP2](copy-parameters-file-compression.md#copy-bzip2) 
+ [COMPROWS](copy-parameters-data-load.md#copy-comprows)
+ [COMPUPDATE](copy-parameters-data-load.md#copy-compupdate)
+ [CREDENTIALS](copy-parameters-authorization.md#copy-credentials-cred)
+ [CSV](copy-parameters-data-format.md#copy-csv)
+ [DATEFORMAT](copy-parameters-data-conversion.md#copy-dateformat)
+ [DELIMITER](copy-parameters-data-format.md#copy-delimiter)
+ [EMPTYASNULL](copy-parameters-data-conversion.md#copy-emptyasnull)
+ [ENCODING](copy-parameters-data-conversion.md#copy-encoding)
+ [ENCRYPTED](copy-parameters-data-source-s3.md#copy-encrypted)
+ [ESCAPE](copy-parameters-data-conversion.md#copy-escape)
+ [EXPLICIT_IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
+ [FIXEDWIDTH](copy-parameters-data-format.md#copy-fixedwidth)
+ [FORMAT](copy-parameters-data-format.md#copy-format)
+ [FROM](copy-parameters-data-source-s3.md#copy-parameters-from)
+ [GZIP](copy-parameters-file-compression.md#copy-gzip)
+ [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role-iam)
+ [IGNOREALLERRORS](copy-parameters-data-load.md#copy-ignoreallerrors)
+ [IGNOREBLANKLINES](copy-parameters-data-conversion.md#copy-ignoreblanklines)
+ [IGNOREHEADER](copy-parameters-data-conversion.md#copy-ignoreheader)
+ [JSON format for COPY](copy-parameters-data-format.md#copy-json)
+ [LZOP](copy-parameters-file-compression.md#copy-lzop)
+ [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
+ [MASTER_SYMMETRIC_KEY](copy-parameters-data-source-s3.md#copy-master-symmetric-key)
+ [MAXERROR](copy-parameters-data-load.md#copy-maxerror)
+ [NOLOAD](copy-parameters-data-load.md#copy-noload)
+ [NULL AS](copy-parameters-data-conversion.md#copy-null-as)
+ [READRATIO](copy-parameters-data-source-dynamodb.md#copy-readratio)
+ [REGION](copy-parameters-data-source-s3.md#copy-region)
+ [REMOVEQUOTES](copy-parameters-data-conversion.md#copy-removequotes)
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec)
+ [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token)
+ [SHAPEFILE](copy-parameters-data-format.md#copy-shapefile)
+ [SSH](copy-parameters-data-source-ssh.md#copy-ssh)
+ [STATUPDATE](copy-parameters-data-load.md#copy-statupdate)
+ [TIMEFORMAT](copy-parameters-data-conversion.md#copy-timeformat)
+ [TRIMBLANKS](copy-parameters-data-conversion.md#copy-trimblanks)
+ [TRUNCATECOLUMNS](copy-parameters-data-conversion.md#copy-truncatecolumns)
+ [ZSTD](copy-parameters-file-compression.md#copy-zstd)

# 使用に関する注意事項
<a name="r_COPY_usage_notes"></a>

**Topics**
+ [他の AWS リソースにアクセスするアクセス許可](copy-usage_notes-access-permissions.md)
+ [Amazon S3 アクセスポイントのエイリアスで COPY を使用する](copy-usage_notes-s3-access-point-alias.md)
+ [Amazon S3 からマルチバイトのデータをロードする](copy-usage_notes-multi-byte.md)
+ [GEOMETRY もしくは GEOGRAPHY データ型の列のロード](copy-usage_notes-spatial-data.md)
+ [HLLSKETCH データ型のロード](copy-usage_notes-hll.md)
+ [VARBYTE データ型の列のロード](copy-usage-varbyte.md)
+ [複数ファイル読み取り時のエラー](copy-usage_notes-multiple-files.md)
+ [JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)
+ [列データ形式の COPY](copy-usage_notes-copy-from-columnar.md)
+ [DATEFORMAT と TIMEFORMAT の文字列](r_DATEFORMAT_and_TIMEFORMAT_strings.md)
+ [DATEFORMAT と TIMEFORMAT で自動認識を使用する](automatic-recognition.md)

# 他の AWS リソースにアクセスするアクセス許可
<a name="copy-usage_notes-access-permissions"></a>

 クラスターと他の AWS リソース (Amazon S3、Amazon DynamoDB、Amazon EMR、または Amazon EC2 など) との間でデータを移動する場合、クラスターには、リソースにアクセスして必要なアクションを実行するための許可が必要です。例えば、Amazon S3 からデータをロードする場合、COPY はバケットへの LIST アクセスとバケットオブジェクトへの GET アクセスが必要です。最小限のアクセス権限については、「[COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](#copy-usage_notes-iam-permissions)」を参照してください。

リソースにアクセスする認可を取得するには、クラスターが認証される必要があります。次の認証方法のいずれかを選択できます。
+ [ロールベースアクセスコントロール](#copy-usage_notes-access-role-based)– ロールベースのアクセスコントロールの場合、クラスターが認証と認可に使用する AWS Identity and Access Management (IAM) ロールを指定します。AWS 認証情報および機密データを保護するには、ロールベースの認証を使用することを強くお勧めします。
+ [キーベースのアクセスコントロール](#copy-usage_notes-access-key-based) – キーベースのアクセスコントロールの場合は、ユーザーの AWS アクセス認証情報 (アクセスキー ID とシークレットアクセスキー) をプレーンテキストとして指定します。

## ロールベースアクセスコントロール
<a name="copy-usage_notes-access-role-based"></a>

<a name="copy-usage_notes-access-role-based.phrase"></a>ロールベースのアクセスコントロールを使用して、クラスターはユーザーに代わって一時的に、IAM ロールを引き受けます。その後、そのロールに付与された承認内容に基づいて、クラスターは必要な AWS のリソースにアクセスできるようになります。

IAM *ロール*の作成は、ロールが AWS アイデンティティであり、AWS で何を実行でき、何を実行できないかを決定するアクセス許可ポリシーを持つという点で、ユーザーへのアクセス許可の付与と似ています。ただし、1 人のユーザーに一意に関連付けられるのではなく、ロールは必要に応じてすべてのエンティティが引き受けることができます。また、ロールにはいずれの認証情報 (パスワードやアクセスキー) も関連付けられません。代わりに、ロールがクラスターに関連付けられた場合は、アクセスキーが動的に作成され、クラスターに提供されます。

AWS 認証情報を保護することに加えて、AWSのリソースおよび機密ユーザーデータへのアクセスに対して、より安全で、きめの細かいコントロールを提供するロールベースのアクセスコントロールの使用をお勧めします。

ロールベースの認証には次の利点があります。
+ AWS 標準の IAM ツールを使用して、IAM ロールを定義し、そのロールを複数のクラスターと関連付けられます。ロールのためにアクセスポリシーを変更すると、変更はロールを使用するすべてのクラスターに自動的に適用されます。
+ 特定の AWS リソースおよびアクションへのアクセス許可を、特定のクラスターとデータベースユーザーに付与するための、きめ細かな IAM ポリシーを定義できます。
+ クラスターは、実行時に一時的なセッション認証情報を取得し、必要に応じて操作が完了するまで認証情報を更新します。キーに基づく一時的認証情報を使用する場合、完了する前に一時的認証情報の期限が切れると、操作は失敗します。
+ アクセスキー ID とシークレットアクセスキー ID は SQL コードには格納、送信されません。

ロールベースのアクセスコントロールを使用するには、Amazon Redshift サービスロールタイプを使用して IAM ロールを作成してから、クラスターにロールをアタッチする必要があります。ロールは、少なくとも [COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](#copy-usage_notes-iam-permissions) に示されたアクセス権限が必要です。IAM ロールを作成してクラスターにアタッチするステップについては、「*Amazon Redshift 管理ガイド*」の「[ユーザーに代わって Amazon Redshift が他の AWS サービスにアクセスすることを認可する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html)」を参照してください。

クラスターにロールを追加するか、Amazon Redshift マネジメントコンソール、CLI、または API を使用してクラスターに関連付けられるロールを表示できます。詳細については、「*Amazon Redshift 管理ガイド*」の「[IAM ロールとクラスターの関連付け](https://docs.aws.amazon.com/redshift/latest/mgmt/copy-unload-iam-role.html)」を参照してください。

IAM ロールを作成する場合、IAM はロールの Amazon リソースネーム (ARN) を返します。IAM ロールを指定するには、[IAM\$1ROLE パラメータの使用](copy-parameters-authorization.md#copy-iam-role)パラメータまたは [CREDENTIALS パラメータの使用](copy-parameters-authorization.md#copy-credentials) パラメータでロールの ARN を指定します。

例えば、以下のロールがクラスターにアタッチされるとします。

```
"IamRoleArn": "arn:aws:iam::0123456789012:role/MyRedshiftRole"
```

次の COPY コマンドの例では、Amazon S3 への認証とアクセスのために前の例の IAM\$1ROLE パラメータと ARN を使用します。

```
copy customer from 's3://amzn-s3-demo-bucket/mydata'  
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

次の COPY コマンドの例は、CREDENTIALS パラメータを使用して IAM ロールを指定しています。

```
copy customer from 's3://amzn-s3-demo-bucket/mydata' 
credentials 
'aws_iam_role=arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

さらに、スーパーユーザーは、データベースユーザーおよびグループに ASSUMEROLE 権限を付与して、COPY オペレーションのロールへのアクセスを提供できます。詳細については、[GRANT](r_GRANT.md)を参照してください。

## キーベースのアクセスコントロール
<a name="copy-usage_notes-access-key-based"></a>

<a name="copy-usage_notes-access-key-based.phrase"></a>キーベースのアクセスコントロールを使用して、データが含まれている AWS リソースへのアクセスを許可された、IAM ユーザーのアクセスキー ID とシークレットアクセスキーを提供します。[ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY パラメータの使用](copy-parameters-authorization.md#copy-access-key-id) パラメータを一緒に使用するか、[CREDENTIALS パラメータの使用](copy-parameters-authorization.md#copy-credentials)パラメータを使用できます。

**注記**  
プレーンテキストのアクセスキー ID とシークレットアクセスキーを指定する代わりに、認証のために IAM ロールを使用することを強くお勧めします。キーベースのアクセスコントロールを選択する場合は、AWSアカウント (ルート) 認証情報を使用しないでください。常に IAM ユーザーを作成し、そのユーザーのアクセスキー ID とシークレットアクセスキーを指定します。IAM ユーザーを作成する手順については、「[AWS アカウントでの IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html)」を参照してください。

ACCESS\$1KEY\$1ID と SECRET\$1ACCESS\$1KEY を使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、*<access-key-id>* と *<secret-access-key>* を置き換えます。

```
ACCESS_KEY_ID '<access-key-id>'
SECRET_ACCESS_KEY '<secret-access-key>';
```

CREDENTIALS パラメータを使用して認証するには、次に示すように、承認されたユーザーのアクセスキー ID および完全なシークレットアクセスキーで、*<access-key-id>* と *<secret-access-key>* を置き換えます。

```
CREDENTIALS
'aws_access_key_id=<access-key-id>;aws_secret_access_key=<secret-access-key>';
```

IAM ユーザーは、少なくとも [COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可](#copy-usage_notes-iam-permissions) に示された許可が必要です。

### 一時的な認証情報
<a name="r_copy-temporary-security-credentials"></a>

 キーに基づくアクセスコントロールを使用する場合、一時的なセキュリティ認証情報を使用して、データへのユーザーのアクセスを制限できます。ロールベースの認証は、自動的に一時的な認証情報を使用します。

**注記**  
一時的な認証情報を作成してアクセスキー ID とシークレットアクセスキーをプレーンテキストで提供するのではなく、「[role-based access control](#copy-usage_notes-access-role-based.phrase)」を使用することを強くお勧めします。ロールベースのアクセスコントロールは、自動的に一時的な認証情報を使用します。

一時的セキュリティ認証情報はセキュリティを強化します。使用期限が短く、期限が切れた後は再利用できないためです。トークンを使用して生成されるアクセスキー ID とシークレットアクセスキーはトークンなしに使用できません。これらの一時的セキュリティ認証情報を持つユーザーは認証情報の有効期限内のみリソースにアクセスできます。

ユーザーにリソースへの一時的アクセスを許可するには AWS Security Token Service (AWS STS) API 操作を呼び出します。AWS STS API 操作は、セキュリティトークン、アクセスキー ID、およびシークレットアクセスキーから構成される一時的セキュリティ認証情報を返します。一時的セキュリティ認証情報は、リソースへの一時的アクセスを必要とするユーザーに発行します。これらのユーザーは既存の IAM ユーザーであるか、非 AWS ユーザーです。一時的なセキュリティ認証情報の作成に関する詳細については、IAM ユーザーガイドの[一時的なセキュリティ認証情報の使用](https://docs.aws.amazon.com/STS/latest/UsingSTS/Welcome.html)を参照してください。

[ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY パラメータの使用](copy-parameters-authorization.md#copy-access-key-id) パラメータとともに [SESSION\$1TOKEN](copy-parameters-authorization.md#copy-token) パラメータを使用するか、[CREDENTIALS パラメータの使用](copy-parameters-authorization.md#copy-credentials)パラメータを使用できます。また、トークンと共に提供されているアクセスキー ID とシークレットアクセスキーを指定する必要があります。

ACCESS\$1KEY\$1ID、SECRET\$1ACCESS\$1KEY、および SESSION\$1TOKEN を使用して認証するには、次に示すように、*<temporary-access-key-id>*、*<temporary-secret-access-key>*、および *<temporary-token>* を置き換えます。

```
ACCESS_KEY_ID '<temporary-access-key-id>'
SECRET_ACCESS_KEY '<temporary-secret-access-key>'
SESSION_TOKEN '<temporary-token>';
```

CREDENTIALS を使用して認証するには、次のように `session_token=<temporary-token>` を認証情報文字列に含めます。

```
CREDENTIALS
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>';
```

次の例は、一時的セキュリティ認証情報を使用する COPY コマンドを示しています。

```
copy table-name
from 's3://objectpath'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>';
```

次の例では、一時的認証情報とファイル暗号化を使用して LISTING テーブルをロードします。

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
access_key_id '<temporary-access-key-id>'
secret_access_key '<temporary-secret-access-key>'
session_token '<temporary-token>'
master_symmetric_key '<root-key>'
encrypted;
```

次の例では、CREDENTIALS パラメータを一時的認証情報およびファイル暗号化とともに使用して LISTING テーブルをロードします。

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt'
credentials 
'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;session_token=<temporary-token>;master_symmetric_key=<root-key>'
encrypted;
```

**重要**  
一時的セキュリティ認証情報は、COPY および UNLOAD 操作の期間全体で有効にする必要があります。一時的セキュリティ認証情報の期限が操作中に切れた場合、コマンドは失敗し、処理はロールバックされます。例えば、一時的セキュリティ認証情報の期限が 15 分後に切れるときに COPY 操作に 1 時間かかる場合、COPY 操作は完了前に失敗します。ロールベースのアクセスを使用する場合、一時的なセキュリティ認証情報は操作が完了するまで自動的に更新されます。

## COPY、UNLOAD、CREATE LIBRARY のための IAM のアクセス許可
<a name="copy-usage_notes-iam-permissions"></a>

CREDENTIALS パラメータによって参照される IAM ロールまたはユーザーには、少なくとも、次のアクセス許可が必要です。
+ Amazon S3 から COPY の場合、Amazon S3 バケットを LIST するアクセス許可であり、ロードされている Amazon S3 オブジェクトと、マニフェストファイル (使用する場合) を GET するアクセス許可。
+ Amazon S3、Amazon EMR、および JSON 形式のデータのリモートホスト (SSH) から COPY を実行する場合は、Amazon S3 の JSONPaths ファイル (使用する場合) に対して LIST および GET を実行するアクセス許可。
+ DynamoDB から COPY を実行する場合は、ロードされた DynamoDB テーブルに対して SCAN および DESCRIBE を実行するアクセス許可。
+ Amazon EMR クラスターから COPY を実行する場合、`ListInstances` アクションを Amazon EMR クラスターで実行するための許可。
+ Amazon S3 への UNLOAD の場合、データファイルのアンロード先 Amazon S3 バケットに対する GET、LIST、および PUT 許可。
+ Amazon S3 からの CREATE LIBRARY の場合、Amazon S3 バケットを一覧表示し、インポートされる Amazon S3 オブジェクトを取得する許可。

**注記**  
COPY、UNLOAD、CREATE LIBRARY コマンドの実行時に、`S3ServiceException: Access Denied`というエラーメッセージが返される場合、クラスターには Amazon S3 への適切なアクセス許可がありません。

IAM ポリシーを管理するには、クラスター、ユーザー、またはユーザーが属するグループにアタッチされている IAM ロールに IAM ポリシーをアタッチします。例えば、`AmazonS3ReadOnlyAccess` マネージドポリシーは、Amazon S3 リソースへの LIST および GET 許可を付与します。IAM ポリシーの詳細については、*IAM ユーザーガイド*の [IAM ポリシーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage.html)を参照してください。

# Amazon S3 アクセスポイントのエイリアスで COPY を使用する
<a name="copy-usage_notes-s3-access-point-alias"></a>

COPY は、Amazon S3 アクセスポイントのエイリアスをサポートしています。詳細については、*Amazon Simple Storage Service ユーザーガイド*の[アクセスポイントにバケットスタイルのエイリアスを使用する](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-points-alias.html)を参照してください。

# Amazon S3 からマルチバイトのデータをロードする
<a name="copy-usage_notes-multi-byte"></a>

データに ASCII 以外のマルチバイト文字 (漢字やキリル文字) が含まれる場合、データを VARCHAR 列にロードする必要があります。VARCHAR データ型は 4 バイトの UTF-8 文字をサポートしますが、CHAR データ型はシングルバイトの ASCII 文字のみを受け取ります。5 バイト以上の文字を Amazon Redshift テーブルにロードすることはできません。詳細については、「[マルチバイト文字](c_Supported_data_types.md#c_Supported_data_types-multi-byte-characters)」を参照してください。

# GEOMETRY もしくは GEOGRAPHY データ型の列のロード
<a name="copy-usage_notes-spatial-data"></a>

CSV ファイルなどの文字区切りのテキストファイルに含まれるデータから、`GEOMETRY` あるいは `GEOGRAPHY` 列に対して COPY が可能です。データは、Well-known Binary (WKB もしくは EWKB のいずれか) 形式、または Well-known Text (WKT もしくは EWKT) 形式の 16 進表記であり、COPY コマンドへの単一の入力行の最大サイズ内に収まる必要があります。詳細については、「[COPY](r_COPY.md)」を参照してください。

シェープファイルからロードする方法については、「[シェープファイルを Amazon Redshift にロードする](spatial-copy-shapefile.md)」を参照してください。

`GEOMETRY` および `GEOGRAPHY` データ型の詳細については、「[Amazon Redshift での空間データのクエリ](geospatial-overview.md)」を参照してください。

# HLLSKETCH データ型のロード
<a name="copy-usage_notes-hll"></a>

HLL スケッチは、Amazon Redshift でサポートされているスパース形式またはデンス形式でのみコピーできます。HyperLogLog スケッチで COPY コマンドを使用するには、デンスの HyperLogLog スケッチには Base64 形式を使用し、スパースの HyperLogLog スケッチには JSON 形式を使用します。詳細については、「[HyperLogLog 関数](hyperloglog-functions.md)」を参照してください。

次の例では、CREATE TABLE および COPY を使用して、CSV ファイルからテーブルにデータをインポートします。まず、この例では、CREATE TABLE を使用してテーブル `t1` を作成します。

```
CREATE TABLE t1 (sketch hllsketch, a bigint);
```

次に、COPY を使用して CSV ファイルからテーブル `t1` にデータをインポートします。

```
COPY t1 FROM s3://amzn-s3-demo-bucket/unload/' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' CSV;
```

# VARBYTE データ型の列のロード
<a name="copy-usage-varbyte"></a>

CSV、Parquet、ORC 形式のファイルからデータをロードできます。CSV の場合、データは、VARBYTE データの 16 進数表現によりファイルからロードされます。`FIXEDWIDTH` オプションを指定して VARBYTE データをロードすることはできません。COPY の `ADDQUOTES` または `REMOVEQUOTES` オプションは、サポートされていません。VARBYTE 列をパーティション列として使用することはできません。

# 複数ファイル読み取り時のエラー
<a name="copy-usage_notes-multiple-files"></a>

COPY コマンドはアトミックでトランザクショナルです。つまり、COPY コマンドが複数のファイルからデータを読み取る場合でも、プロセス全体は 1 つのトランザクションとして扱われます。COPY でファイル読み込みにエラーが発生した場合、プロセスがタイムアウトになるまで ([statement\$1timeout](r_statement_timeout.md) を参照)、または長時間 (15～30 分間) Amazon S3 からデータをダウンロードできないときは各ファイルを 1 回のみロードするようにして、自動的にファイル読み込みを再試行します。COPY コマンドが失敗した場合、トランザクション全体がキャンセルされ、変更はすべてロールバックされます。ロードエラー処理の詳細については、「[データロードのトラブルシューティング](t_Troubleshooting_load_errors.md)」を参照してください。

COPY コマンドが正常に開始されると、クライアントによる切断などでセッションが終了しても、アプリケーションは停止しません。ただし、COPY コマンドが BEGIN … END セッションブロック内にあり、セッションが終了したためにこのブロックが完了していない場合、COPY を含むすべてのトランザクションがロールバックされます。トランザクションの詳細については、「[BEGIN](r_BEGIN.md)」を参照してください。

# JSON 形式からの COPY
<a name="copy-usage_notes-copy-from-json"></a>

JSON のデータ構造は、一連のオブジェクトまたは配列により構成されています。JSON *オブジェクト*の先頭と末尾には中括弧が付き、順序が設定されていない一連の名前と値のペアが含まれます。各名前と値はコロンで区切られ、ペアはカンマで区切られます。名前は二重引用符で囲まれた文字列です。引用符は、傾きの付いた「高機能な」引用符ではなくシンプルな引用符 (0x22) にする必要があります。

JSON *配列*の先頭と末尾には角括弧が付き、順序が設定された一連のカンマ区切りの値が含まれます。値には、二重引用符で囲まれた文字列、数値、ブール値の true または false、Null、JSON オブジェクト、配列を指定できます。

JSON のオブジェクトと配列を入れ子にして、階層データ構造を実現できます。次の例は、2 つの有効なオブジェクトを持つ JSON データ構造を示しています。

```
{
    "id": 1006410,
    "title": "Amazon Redshift Database Developer Guide"
}
{
    "id": 100540,
    "name": "Amazon Simple Storage Service User Guide"
}
```

2 つの JSON 配列と同じデータを次に示します。

```
[
    1006410,
    "Amazon Redshift Database Developer Guide"
]
[
    100540,
    "Amazon Simple Storage Service User Guide"
]
```

## JSON の COPY オプション
<a name="copy-usage-json-options"></a>

JSON 形式のデータで COPY を使用する場合は、次のオプションを指定できます。
+ `'auto' ` – COPY は JSON ファイルからフィールドを自動的にロードします。
+ `'auto ignorecase'` – COPY は、フィールド名の大文字と小文字を区別せずに、JSON ファイルからフィールドを自動的にロードします。
+ `s3://jsonpaths_file` – COPY は JSONPaths ファイルを使用して JSON ソースデータを解析します。*JSONPaths ファイル*は、JSONPath 式の配列とペアになった `"jsonpaths"` という名前の単一の JSON オブジェクトを格納するテキストファイルです。名前が `"jsonpaths"` 以外の文字列である場合、COPY は JSONPaths ファイルの代わりに `'auto'` 引数を使用します。

`'auto'`、`'auto ignorecase'`、または JSONPaths ファイルを使用し、JSON オブジェクトまたは配列のいずれかを使用してデータをロードする方法を示す例については、[JSON からのコピーの例](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json) を参照してください。

## JSONPath オプション
<a name="copy-usage-json-options"></a>

Amazon Redshift COPY 構文では、JSONPath 式は、角括弧表記またはドット表記のいずれかを使用して、JSON の階層データ構造内の 1 つの名前要素に対する明示的なパスを指定します。Amazon Redshift では、あいまいなパスや複数の名前要素に解決される可能性がある、ワイルドカード文字やフィルター式などの JSONPath 要素をサポートしていません。その結果、Amazon Redshift は複雑な複数レベルのデータ構造を解析することはできません。

次は、ブラケット表記を使用した JSONPath 式を含む JSONPaths ファイルの例です。ドル記号 (\$1) はルートレベル構造を現します。

```
{
    "jsonpaths": [
       "$['id']",
       "$['store']['book']['title']",
	"$['location'][0]" 
    ]
}
```

 前の例で、`$['location'][0]`は配列内の最初の要素を参照します。JSON はゼロベースの配列インデックス付けを使用します。配列インデックスは正の整数 (0 以上) である必要があります。

次の例は、前出の JSONPaths ファイルをドット表記で表したものです。

```
{
    "jsonpaths": [
       "$.id",
       "$.store.book.title",
	"$.location[0]"
    ]
}
```

`jsonpaths` 配列でブラケット表記とドット表記を混在させることはできません。ブラケットは、配列要素を参照するためにブラケット表記とドット表記の両方で使用できます。

ドット表記を使用する場合、JSONPath の式は以下の文字を含む必要があります。
+ 1 つの一重引用符 ( ' ) 
+ ピリオドまたはドット (.) 
+ 配列要素を参照するために使用されていない場合はブラケット ( [ ] ) 

JSONPath 式によって参照される名前と値のペアの値がオブジェクトまたは配列の場合は、中括弧または角括弧を含むオブジェクトまたは配列全体が文字列としてロードされます。例えば、JSON データに次のオブジェクトが含まれているとします。

```
{
    "id": 0,
    "guid": "84512477-fa49-456b-b407-581d0d851c3c",
    "isActive": true,
    "tags": [
        "nisi",
        "culpa",
        "ad",
        "amet",
        "voluptate",
        "reprehenderit",
        "veniam"
    ],
    "friends": [
        {
            "id": 0,
            "name": "Martha Rivera"
        },
        {
            "id": 1,
            "name": "Renaldo"
        }
    ]
}
```

この場合、JSONPath 式 `$['tags']` は次の値を返します。

```
"["nisi","culpa","ad","amet","voluptate","reprehenderit","veniam"]" 
```

この場合、JSONPath 式 `$['friends'][1]` は次の値を返します。

```
"{"id": 1,"name": "Renaldo"}" 
```

`jsonpaths` 配列の各 JSONPath 式は、Amazon Redshift のターゲットテーブル内の 1 列に対応しています。`jsonpaths` 配列要素の順序は、ターゲットテーブル内の列の順序または列リストが使用される場合は列リスト内の列の順序と一致していなければなりません。

`'auto'` 引数または JSONPaths ファイルを使用し、JSON オブジェクトまたは配列のいずれかを使用してデータをロードする方法を示す例については、「[JSON からのコピーの例](r_COPY_command_examples.md#r_COPY_command_examples-copy-from-json)」を参照してください。

複数の JSON ファイルをコピーする方法については、[マニフェストを使用し、データファイルを指定する](loading-data-files-using-manifest.md) を参照してください。

## JSON のエスケープ文字
<a name="copy-usage-json-escape-characters"></a>

COPY は改行文字として `\n` を、タブ文字として `\t` をロードします。バックスラッシュをロードするには、バックスラッシュをバックスラッシュでエスケープします (`\\`)。

例えば、バケット `escape.json` 内の `s3://amzn-s3-demo-bucket/json/` という名前のファイルに、次の JSON があるとします。

```
{
  "backslash": "This is a backslash: \\",
  "newline": "This sentence\n is on two lines.",
  "tab": "This sentence \t contains a tab."
}
```

ESCAPES テーブルを作成し JSON をロードするには、次のコマンドを実行します。

```
create table escapes (backslash varchar(25), newline varchar(35), tab varchar(35));

copy escapes from 's3://amzn-s3-demo-bucket/json/escape.json' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as json 'auto';
```

ESCAPES テーブルにクエリを実行し、結果を表示します。

```
select * from escapes;

       backslash        |      newline      |               tab
------------------------+-------------------+----------------------------------
 This is a backslash: \ | This sentence     | This sentence    contains a tab.
                        :  is on two lines.
(1 row)
```

## 数値の精度の喪失
<a name="copy-usage-json-rounding"></a>

JSON 形式のデータファイルから数値データ型として定義された列に数値をロードするときに、精度が失われる可能性があります。一部の浮動小数点値は、コンピュータシステムで正確に表されません。そのため、JSON ファイルからコピーするデータは、想定したとおりに丸められない可能性があります。精度の喪失を避けるため、次のいずれかの代替策を使用することをお勧めします。
+ 二重引用文字で値を囲んで、数値を文字列として表します。
+ [ROUNDEC](copy-parameters-data-conversion.md#copy-roundec) を使用して、数値を切り捨てるのではなく丸めます。
+ JSON または Avro ファイルを使用する代わりに、CSV、文字区切り形式、または固定幅形式のテキストファイルを使用します。

# 列データ形式の COPY
<a name="copy-usage_notes-copy-from-columnar"></a>

COPY では、次の列形式で Amazon S3 からデータをロードできます。
+ ORC
+ Parquet

列データ形式からの COPY の使用例については、「[COPY の例](r_COPY_command_examples.md)」を参照してください。

COPY では、列形式のデータがサポートされますが、以下の考慮事項があります。
+ Amazon S3 バケットは、Amazon Redshift データベースと同じ AWS リージョンに存在する必要があります。
+ VPC エンドポイントを介して Amazon S3 データにアクセスするには、「*Amazon Redshift 管理ガイド*」の「[拡張 VPC のルーティングで Amazon Redshift Spectrum を使用する](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html)」の説明に沿って、IAM ポリシーと IAM ロールを使用してアクセスを設定します。
+ COPY では、圧縮エンコードは自動的に適用されません。
+ 以下の COPY パラメータのみサポートされています。
  + ORC または Parquet ファイルからコピーする場合は [ACCEPTINVCHARS](copy-parameters-data-conversion.md#copy-acceptinvchars)。
  + [FILLRECORD](copy-parameters-data-conversion.md#copy-fillrecord)
  + [FROM](copy-parameters-data-source-s3.md#copy-parameters-from) ...
  + [IAM\$1ROLE](copy-parameters-authorization.md#copy-iam-role)
  + [CREDENTIALS](copy-parameters-authorization.md#copy-credentials)
  + [STATUPDATE ](copy-parameters-data-load.md#copy-statupdate)
  + [MANIFEST](copy-parameters-data-source-s3.md#copy-manifest)
  + [EXPLICIT\$1IDS](copy-parameters-data-conversion.md#copy-explicit-ids)
+ ロード中に COPY でエラーが発生すると、コマンドは失敗します。ACCEPTANYDATE および MAXERROR は、列データ型ではサポートされていません。
+ エラーメッセージは、SQL クライアントに送信されます。一部のエラーは、STL\$1LOAD\$1ERRORS と STL\$1ERROR に記録されます。
+ COPY は列データファイルで発生した列と同じ順序でターゲットテーブルの列に値を挿入します。ターゲットテーブルの列数とデータファイルの列数が一致する必要があります。
+ COPY オペレーションに指定したファイルに以下のいずれかの拡張子が含まれている場合、データを圧縮解除するためにパラメータを追加する必要はありません。
  + `.gz`
  + `.snappy`
  + `.bz2`
+ Parquet および ORC ファイル形式からの COPY では、Redshift Spectrum とバケットアクセスが使用されます。これらの形式で COPY を使用するには、Amazon S3 の署名付き URL の使用をブロックする IAM ポリシーがないことを確認してください。Amazon Redshift によって生成された署名付き URL は 1 時間有効です。これにより、Amazon Redshift は Amazon S3 バケットからすべてのファイルをロードするのに十分な時間を確保できます。列指向形式から COPY でスキャンしたファイルごとに、一意の署名付き URL が生成されます。`s3:signatureAge` アクションを含むバケットポリシーの場合は、値を少なくとも 3,600,000 ミリ秒に設定してください。詳細については、[拡張された VPC のルーティングで Amazon Redshift Spectrum を使用する](https://docs.aws.amazon.com/redshift/latest/mgmt/spectrum-enhanced-vpc.html)を参照してください。
+ REGION パラメータは、列データ形式からの COPY では使用できません。Amazon S3 バケットとデータベースが同じ AWS リージョンにある場合でも、REGION argument is not supported for PARQUET based COPY などのエラーが発生する可能性があります。
+ 列形式の COPY が同時実行スケーリングをサポートするようになりました。同時実行スケーリングを有効にするには、「[同時実行スケーリングキューの設定](https://docs.aws.amazon.com/redshift/latest/dg/concurrency-scaling.html#concurrency-scaling-queues)」を参照してください。

# DATEFORMAT と TIMEFORMAT の文字列
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings"></a>

COPY コマンドは、DATEFORMAT オプションと TIMEFORMAT オプションを使用して、ソースデータの日付と時刻の値を解析します。DATEFORMAT と TIMEFORMAT はフォーマットされた文字列であり、ソースデータの日付と時刻の値の形式と一致する必要があります。例えば、日付値が `Jan-01-1999` のソースデータをロードする COPY コマンドには、次の DATEFORMAT 文字列を含める必要があります。

```
COPY ...
            DATEFORMAT AS 'MON-DD-YYYY'
```

COPY データ変換の管理の詳細については、「[データ変換パラメータ](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html)」を参照してください。

DATEFORMAT と TIMEFORMAT 文字列には、日時区切り記号 ('`-`'、'`/`'、'`:`' など)、および次の「日付部分」と「時間部分」を含めることができます。

**注記**  
日付値または時刻値の形式を次の dateparts および timeparts と一致させることができない場合、または互いに異なる形式を使用する日付値および時刻値がある場合は、`'auto'` 引数を DATEFORMAT または TIMEFORMAT パラメータと共に使用します。`'auto'` 引数は、DATEFORMAT または TIMEFORMAT 文字列を使用する場合にサポートされない形式を認識します。詳細については、「[DATEFORMAT と TIMEFORMAT で自動認識を使用する](automatic-recognition.md)」を参照してください。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

デフォルトの日付形式は YYYY-MM-DD です。タイムゾーン (TIMESTAMP) 形式なしのデフォルトのタイプスタンプは YYYY-MM-DD HH:MI:SS です。タイムゾーン付きのデフォルトのタイムスタンプ (TIMESTAMPTZ) 形式は、YYYY-MM-DD HH:MI:SSOF です。ここで、OF は UTC からのオフセットです (例えば、–8:00。timeformat\$1string のタイムゾーン指定子 (TZ、tz または OF) を含めることはできません。秒 (SS) フィールドは、マイクロ秒レベルの詳細に至るまでの分数秒もサポートします。デフォルト形式と異なる形式の TIMESTAMPTZ データをロードするには、「auto」を指定します。

次に、ソースデータで検出できるサンプルの日付または時刻と、それらに対応する DATEFORMAT または TIMEFORMAT 文字列を示します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_DATEFORMAT_and_TIMEFORMAT_strings.html)

## 例
<a name="r_DATEFORMAT_and_TIMEFORMAT_strings-examples"></a>

TIMEFORMAT の使用例については、「[タイムスタンプまたは日付スタンプのロード](r_COPY_command_examples.md#r_COPY_command_examples-load-a-time-datestamp)」を参照してください。

# DATEFORMAT と TIMEFORMAT で自動認識を使用する
<a name="automatic-recognition"></a>

DATEFORMAT または TIMEFORMAT パラメータの引数として `'auto'` を指定すると、Amazon Redshift ではソースデータの日付形式または時間形式を自動的に認識して変換します。例を以下に示します。

```
copy favoritemovies from 'dynamodb://ProductCatalog' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
dateformat 'auto';
```

DATEFORMAT と TIMEFORMAT に `'auto'` 引数を使用すると、COPY は「[DATEFORMAT と TIMEFORMAT の文字列例](r_DATEFORMAT_and_TIMEFORMAT_strings.md)」の表に示された日付と時間の形式を認識して変換します。`'auto'` 引数は、DATEFORMAT および TIMEFORMAT 文字列を使用する場合にサポートされない次の形式も認識します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/automatic-recognition.html)

自動認識は epochsecs および epochmillisecs はサポートしていません。

日付またはタイムスタンプの値が自動的に変換されるかどうかをテストするには、CAST 関数を使用して文字列を日付またはタイムスタンプの値に変換します。例えば、次のコマンドはタイムスタンプ値 `'J2345678 04:05:06.789'` をテストします。

```
create table formattest (test char(21));
insert into formattest values('J2345678 04:05:06.789');
select test, cast(test as timestamp) as timestamp, cast(test as date) as date from formattest;

        test          |      timestamp      |	date
----------------------+---------------------+------------
J2345678 04:05:06.789   1710-02-23 04:05:06	1710-02-23
```

DATE 列のソースデータに時間情報が含まれる場合、時間コンポーネントは切り捨てられます。TIMESTAMP 列のソースデータで時間情報が省略されている場合、時間コンポーネントには 00:00:00 が使用されます。

# COPY の例
<a name="r_COPY_command_examples"></a>

**注記**  
次の例では読みやすくするため、改行しています。*credentials-args* 文字列には改行やスペースを含めないでください。

**Topics**
+ [DynamoDB テーブルから FAVORITEMOVIES をロードする](#r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table)
+ [Amazon S3 バケットから LISTING をロードする](#r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket)
+ [Amazon EMR クラスターから LISTING をロードする](#copy-command-examples-emr)
+ [Example: COPY from Amazon S3 using a manifest](#copy-command-examples-manifest)
+ [パイプ区切りファイル (デフォルトの区切り記号）から LISTING をロードする](#r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter)
+ [Parquet 形式の列指向データを使用した LISTING のロード](#r_COPY_command_examples-load-listing-from-parquet)
+ [ORC 形式の列指向データを使用した LISTING のロード](#r_COPY_command_examples-load-listing-from-orc)
+ [オプションを使用した EVENT のロード](#r_COPY_command_examples-load-event-with-options)
+ [固定幅のデータファイルから VENUE をロードする](#r_COPY_command_examples-load-venue-from-a-fixed-width-data-file)
+ [CSV ファイルから CATEGORY をロードする](#load-from-csv)
+ [IDENTITY 列の明示的値を使用して VENUE をロードする](#r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column)
+ [パイプ区切りの GZIP ファイルから TIME をロードする](#r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file)
+ [タイムスタンプまたは日付スタンプのロード](#r_COPY_command_examples-load-a-time-datestamp)
+ [デフォルト値を使用してファイルのデータをロードする](#r_COPY_command_examples-load-data-from-a-file-with-default-values)
+ [ESCAPE データを使用したデータのコピー](#r_COPY_command_examples-copy-data-with-the-escape-option)
+ [JSON からのコピーの例](#r_COPY_command_examples-copy-from-json)
+ [Avro の例からのコピー](#r_COPY_command_examples-copy-from-avro)
+ [ESCAPE オプションを指定する COPY 用のファイルの準備](#r_COPY_preparing_data)
+ [シェープファイルを Amazon Redshift にロードする](#copy-example-spatial-copy-shapefile)
+ [NOLOAD オプションを使用する COPY コマンド](#r_COPY_command_examples-load-noload-option)
+ [マルチバイト区切り文字と ENCODING オプションを含む COPY コマンド](#r_COPY_command_examples-load-encoding-multibyte-delimiter-option)

## DynamoDB テーブルから FAVORITEMOVIES をロードする
<a name="r_COPY_command_examples-load-favoritemovies-from-an-amazon-dynamodb-table"></a>

AWS SDK には、*Movies* という名前の DynamoDB テーブルを作成する簡単な例が含まれています。(この例については、[DynamoDB の使用開始](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.html)を参照)。次の例では、DynamoDB テーブルから Amazon Redshift MOVIES テーブルにデータをロードします。Amazon Redshift テーブルはすでにデータベースに存在する必要があります。

```
copy favoritemovies from 'dynamodb://Movies'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
readratio 50;
```

## Amazon S3 バケットから LISTING をロードする
<a name="r_COPY_command_examples-load-listing-from-an-amazon-s3-bucket"></a>

次の例では、Amazon S3 バケットから LISTING をロードします。COPY コマンドは `/data/listing/` フォルダ内のすべてのファイルをロードします。

```
copy listing
from 's3://amzn-s3-demo-bucket/data/listing/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Amazon EMR クラスターから LISTING をロードする
<a name="copy-command-examples-emr"></a>

次の例は、タブ区切りデータを含んだ SALES テーブルを Amazon EMR クラスター上の LZOP 圧縮ファイルからロードします。COPY は、`myoutput/`フォルダ内の `part-` で始まるすべてのファイルをロードします。

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/part-*' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '\t' lzop;
```

次の例は、Amazon EMR クラスター上の JSON 形式データを SALES テーブルにロードします。COPY は、`myoutput/json/`フォルダ内のすべてのファイルをロードします。

```
copy sales
from 'emr://j-SAMPLE2B500FC/myoutput/json/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON 's3://amzn-s3-demo-bucket/jsonpaths.txt';
```

## マニフェストを使用し、データファイルを指定する
<a name="copy-command-examples-manifest"></a>

マニフェストを使用すると、COPY コマンドで必要なすべてのファイル、しかも必要なファイルのみを Amazon S3 からロードできます。異なるバケットの複数のファイル、または同じプレフィックスを共有しない複数のファイルをロードする必要がある場合も、マニフェストを使用できます。

たとえば、3 つのファイル `custdata1.txt`、`custdata2.txt`、`custdata3.txt`をロードする必要があるとします。次のコマンドを使用し、プレフィックスを指定することで、`amzn-s3-demo-bucket`内で `custdata` で始まるすべてのファイルをロードすることができます。

```
copy category
from 's3://amzn-s3-demo-bucket/custdata' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

エラーのために 2 つのファイルしか存在しない場合、COPY はこれら 2 つのファイルのみロードして正常に終了しますが、データロードは未完了になります。バケット内に同じプレフィックスを使用する不要なファイル (`custdata.backup` などのファイル) がある場合、COPY はそのファイルもロードするため、不要なデータがロードされることになります。

必要なファイルがすべてロードされ、不要なデータがロードされないようにするには、マニフェストファイルを使用できます。マニフェストは、COPY コマンドで処理されるファイルをリストする、JSON 形式のテキストファイルです。例えば、次のマニフェストは前の例の 3 つのファイルをロードします。

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.1",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.2",
         "mandatory":true
      },
      {  
         "url":"s3://amzn-s3-demo-bucket/custdata.3",
         "mandatory":true
      }
   ]
}
```

オプションの `mandatory` フラグは、ファイルが存在しない場合に COPY を終了することを示します。デフォルトは `false` です。mandatory 設定と関係なく、どのファイルも見つからない場合、COPY は終了します。この例で、ファイルが見つからない場合、COPY はエラーを返します。`custdata.backup` など、キープレフィックスのみ指定した場合に選択された可能性がある不要なファイルは、マニフェストにないため、無視されます。

以下の例に示すように、Parquet または ORC 形式のデータファイルからロードする場合、`meta`フィールドは必須です。

```
{  
   "entries":[  
      {  
         "url":"s3://amzn-s3-demo-bucket1/orc/2013-10-04-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      },
      {  
         "url":"s3://amzn-s3-demo-bucket2/orc/2013-10-05-custdata",
         "mandatory":true,
         "meta":{  
            "content_length":99
         }
      }
   ]
}
```

次の例では、`cust.manifest`という名前のマニフェストを使用します。

```
copy customer
from 's3://amzn-s3-demo-bucket/cust.manifest' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc
manifest;
```

マニフェストを使用し、異なるバケットからファイルをロードしたり、同じプレフィックスを共有しないファイルをロードしたりできます。次の例は、日付スタンプで始まる名前を持つファイルのデータをロードする JSON を示しています。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/2013-10-04-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-05-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-06-custdata.txt","mandatory":true},
    {"url":"s3://amzn-s3-demo-bucket/2013-10-07-custdata.txt","mandatory":true}
  ]
}
```

バケットがクラスターと同じ AWS リージョンにある限り、マニフェストは異なるバケットにあるファイルをリストできます。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata1.txt","mandatory":false},
    {"url":"s3://amzn-s3-demo-bucket2/custdata2.txt","mandatory":false}
  ]
}
```

## パイプ区切りファイル (デフォルトの区切り記号）から LISTING をロードする
<a name="r_COPY_command_examples-load-listing-from-a-pipe-delimited-file-default-delimiter"></a>

次の例は、オプションが指定されておらず、入力ファイルにデフォルトの区切り記号であるパイプ文字 (\$1) が含まれる簡単な場合を示しています。

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

## Parquet 形式の列指向データを使用した LISTING のロード
<a name="r_COPY_command_examples-load-listing-from-parquet"></a>

次の例では、parquet と呼ばれる Amazon S3 のフォルダからデータをロードします。

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/parquet/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as parquet;
```

## ORC 形式の列指向データを使用した LISTING のロード
<a name="r_COPY_command_examples-load-listing-from-orc"></a>

次の例では、`orc`と呼ばれる Amazon S3 のフォルダからデータをロードします。

```
copy listing 
from 's3://amzn-s3-demo-bucket/data/listings/orc/' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as orc;
```

## オプションを使用した EVENT のロード
<a name="r_COPY_command_examples-load-event-with-options"></a>

次の例では、パイプ区切りデータを EVENT テーブルにロードし、次のルールを適用します。
+ 引用符のペアを使用して文字列を囲んでいる場合、引用符は削除されます。
+ 空の文字列と空白を含む文字列は NULL 値としてロードされます。
+ 5 件を超えるエラーが返されると、ロードは失敗します。
+ タイムスタンプ値は指定された形式に準拠する必要があります。たとえば、`2008-09-26 05:43:12`は有効なタイムスタンプです。

```
copy event
from 's3://amzn-s3-demo-bucket/data/allevents_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
removequotes
emptyasnull
blanksasnull
maxerror 5
delimiter '|'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

## 固定幅のデータファイルから VENUE をロードする
<a name="r_COPY_command_examples-load-venue-from-a-fixed-width-data-file"></a>

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue_fw.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth 'venueid:3,venuename:25,venuecity:12,venuestate:2,venueseats:6';
```

前述の例では、次のサンプルデータと同じ形式のデータファイルを想定しています。次の例では、すべての列が仕様に示された幅と同じになるよう、スペースがプレースホルダーの役割を果たします。

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
```

## CSV ファイルから CATEGORY をロードする
<a name="load-from-csv"></a>

次の表に示す値とともに CATEGORY をロードしたいとします。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_COPY_command_examples.html)

次の例は、テキストファイルの内容をカンマで区切ったフィールド値とともに示しています。

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,All "non-musical" theatre  
14,Shows,Opera,All opera, light, and "rock" opera
15,Concerts,Classical,All symphony, concerto, and choir concerts
```

カンマ区切り入力を指定する DELIMITER パラメータを使用してファイルをロードした場合、一部の入力フィールドにカンマが含まれているため、COPY コマンドは失敗します。この問題を避けるには、CSV パラメータを使用し、カンマを含むフィールドを引用符で囲みます。引用符で囲んだ文字列内に引用符がある場合、引用符を 2 つにしてエスケープする必要があります。デフォルトの引用符は二重引用符です。したがって、二重引用符を追加して各二重引用符をエスケープする必要があります。新しい入力ファイルは次のようになります。

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,"All ""non-musical"" theatre"
14,Shows,Opera,"All opera, light, and ""rock"" opera"
15,Concerts,Classical,"All symphony, concerto, and choir concerts"
```

ファイル名が `category_csv.txt` であるとした場合、次の COPY コマンドを使用してファイルをロードできます。

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv;
```

または、入力内の二重引用符をエスケープする必要をなくすため、QUOTE AS パラメータを使用して異なる引用文字を指定できます。例えば、`category_csv.txt` の次のバージョンでは引用文字として "`%`" を使用しています。

```
12,Shows,Musicals,Musical theatre
13,Shows,Plays,%All "non-musical" theatre%
14,Shows,Opera,%All opera, light, and "rock" opera%
15,Concerts,Classical,%All symphony, concerto, and choir concerts%
```

次の COPY コマンドでは QUOTE AS を使用して `category_csv.txt` をロードします。

```
copy category
from 's3://amzn-s3-demo-bucket/data/category_csv.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
csv quote as '%';
```

## IDENTITY 列の明示的値を使用して VENUE をロードする
<a name="r_COPY_command_examples-load-venue-with-explicit-values-for-an-identity-column"></a>

次の例では、VENUE テーブルの作成時に少なくとも 1 列 (`venueid` 列など) は IDENTITY 列とするよう指定されたと想定しています。このコマンドは IDENTITY 列の自動生成値のデフォルトの IDENTITY 動作をオーバーライドし、代わりに venue.txt ファイルから明示的値をロードします。Amazon Redshift は、EXLICIT\$1IDS オプションを使用するときに、重複する IDENTITY 値がテーブルにロードされているかどうかを確認しません。

```
copy venue
from 's3://amzn-s3-demo-bucket/data/venue.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
explicit_ids;
```

## パイプ区切りの GZIP ファイルから TIME をロードする
<a name="r_COPY_command_examples-load-time-from-a-pipe-delimited-gzip-file"></a>

次の例では、パイプ区切りの GZIP ファイルから TIME テーブルをロードします。

```
copy time
from 's3://amzn-s3-demo-bucket/data/timerows.gz' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
gzip
delimiter '|';
```

## タイムスタンプまたは日付スタンプのロード
<a name="r_COPY_command_examples-load-a-time-datestamp"></a>

次の例では、書式設定したタイムスタンプ付きのデータをロードします。

**注記**  
TIMEFORMAT `HH:MI:SS` では、`SS`を超える小数点以下の秒数もマイクロ秒レベルまでサポートします。この例で使用されるファイル `time.txt` には `2009-01-12 14:15:57.119568` という 1 行が含まれています。

```
copy timestamp1 
from 's3://amzn-s3-demo-bucket/data/time.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
timeformat 'YYYY-MM-DD HH:MI:SS';
```

このコピーの結果は次のとおりです。

```
select * from timestamp1;
c1
----------------------------
2009-01-12 14:15:57.119568
(1 row)
```

## デフォルト値を使用してファイルのデータをロードする
<a name="r_COPY_command_examples-load-data-from-a-file-with-default-values"></a>

次の例では、TICKIT データベースの VENUE テーブルのバリエーションを使用します。次のステートメントで定義される VENUE\$1NEW テーブルを考えてみます。

```
create table venue_new(
venueid smallint not null,
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

次の例に示すように、VENUESEATS 列に値がない venue\$1noseats.txt データファイルを考えてみます。

```
1|Toyota Park|Bridgeview|IL|
2|Columbus Crew Stadium|Columbus|OH|
3|RFK Stadium|Washington|DC|
4|CommunityAmerica Ballpark|Kansas City|KS|
5|Gillette Stadium|Foxborough|MA|
6|New York Giants Stadium|East Rutherford|NJ|
7|BMO Field|Toronto|ON|
8|The Home Depot Center|Carson|CA|
9|Dick's Sporting Goods Park|Commerce City|CO|
10|Pizza Hut Park|Frisco|TX|
```

次の COPY ステートメントはファイルからテーブルを正しくロードし、省略された列に DEFAULT 値 ('1000') を適用します。

```
copy venue_new(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_noseats.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

ロードされたテーブルを表示します。

```
select * from venue_new order by venueid;
venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |       1000
2 | Columbus Crew Stadium      | Columbus        | OH         |       1000
3 | RFK Stadium                | Washington      | DC         |       1000
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |       1000
5 | Gillette Stadium           | Foxborough      | MA         |       1000
6 | New York Giants Stadium    | East Rutherford | NJ         |       1000
7 | BMO Field                  | Toronto         | ON         |       1000
8 | The Home Depot Center      | Carson          | CA         |       1000
9 | Dick's Sporting Goods Park | Commerce City   | CO         |       1000
10 | Pizza Hut Park             | Frisco          | TX         |       1000
(10 rows)
```

次の例の場合、ファイルに VENUESEATS データが含まれていないことを想定すると共に、VENUENAME データも含まれていないことを想定します。

```
1||Bridgeview|IL|
2||Columbus|OH|
3||Washington|DC|
4||Kansas City|KS|
5||Foxborough|MA|
6||East Rutherford|NJ|
7||Toronto|ON|
8||Carson|CA|
9||Commerce City|CO|
10||Frisco|TX|
```

 同じテーブル定義を使用すると、次の COPY ステートメントは失敗します。これは、VENUENAME に対して DEFAULT 値が指定されておらず、VENUENAME が NOT NULL 列であるためです。

```
copy venue(venueid, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

次に、IDENTITY 列を使用する VENUE テーブルのバリエーションを考えてみます。

```
create table venue_identity(
venueid int identity(1,1),
venuename varchar(100) not null,
venuecity varchar(30),
venuestate char(2),
venueseats integer not null default '1000');
```

前の例と同じように、VENUESEATS 列にはソースファイルに対応する値がないと想定します。次の COPY ステートメントは、IDENTITY データ値を自動生成する代わりに事前定義済みの IDENTITY データ値を含め、テーブルを正しくロードします。

```
copy venue(venueid, venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

次のステートメントは失敗します。これは、IDENTITY 列が含まれていない (列リストから VENUEID が抜けています) が、EXPLICIT\$1IDS パラメータが含まれているためです。

```
copy venue(venuename, venuecity, venuestate) 
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|' explicit_ids;
```

次のステートメントは失敗します。これは EXPLICIT\$1IDS パラメータが含まれていないためです。

```
copy venue(venueid, venuename, venuecity, venuestate)
from 's3://amzn-s3-demo-bucket/data/venue_pipe.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter '|';
```

## ESCAPE データを使用したデータのコピー
<a name="r_COPY_command_examples-copy-data-with-the-escape-option"></a>

次の例は、区切り文字 (この場合、パイプ文字) に一致する文字をロードする方法を示しています。入力ファイルで、ロードするすべてのパイプ文字 (\$1) がバックスラッシュ文字 (\$1) でエスケープされていることを確認します。次に、ESCAPE パラメータを使用してファイルをロードします。

```
$ more redshiftinfo.txt
1|public\|event\|dwuser
2|public\|sales\|dwuser

create table redshiftinfo(infoid int,tableinfo varchar(50));

copy redshiftinfo from 's3://amzn-s3-demo-bucket/data/redshiftinfo.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
delimiter '|' escape;

select * from redshiftinfo order by 1;
infoid |       tableinfo
-------+--------------------
1      | public|event|dwuser
2      | public|sales|dwuser
(2 rows)
```

ESCAPE パラメータを使用しないと、`Extra column(s) found`エラーが発生して、この COPY コマンドは失敗します。

**重要**  
ESCAPE パラメータを指定した COPY を使用してデータをロードした場合、対応する出力ファイルを生成するには、UNLOAD コマンドにも ESCAPE パラメータを指定する必要があります。同様に、ESCAPE パラメータを使って UNLOAD を実行すると、同じデータを COPY する場合に ESCAPE を使用する必要があります。

## JSON からのコピーの例
<a name="r_COPY_command_examples-copy-from-json"></a>

以下の例で、次のデータを含む CATEGORY テーブルをロードします。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ ['auto' オプションを使用した JSON データからのロード](#copy-from-json-examples-using-auto)
+ ['auto ignorecase' オプションを使用した JSON データからのロード](#copy-from-json-examples-using-auto-ignorecase)
+ [JSONPaths ファイルを使用した JSON データからのロード](#copy-from-json-examples-using-jsonpaths)
+ [JSONPaths ファイルを使用した JSON 配列からのロード](#copy-from-json-examples-using-jsonpaths-arrays)

### 'auto' オプションを使用した JSON データからのロード
<a name="copy-from-json-examples-using-auto"></a>

`'auto'` オプションを使用して JSON データからロードするには、JSON データが一連のオブジェクトで構成されている必要があります。キー名が列名と一致している必要がありますが、順序は関係ありません。`category_object_auto.json` という名前のファイルの内容を次に示します。

```
{
    "catdesc": "Major League Baseball",
    "catid": 1,
    "catgroup": "Sports",
    "catname": "MLB"
}
{
    "catgroup": "Sports",
    "catid": 2,
    "catname": "NHL",
    "catdesc": "National Hockey League"
}
{
    "catid": 3,
    "catname": "NFL",
    "catgroup": "Sports",
    "catdesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "catid": 4,
    "catgroup": "Sports",
    "catname": "NBA",
    "catdesc": "National Basketball Association"
}
{
    "catid": 5,
    "catgroup": "Shows",
    "catname": "Musicals",
    "catdesc": "All symphony, concerto, and choir concerts"
}
```

前の例の JSON データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto';
```

### 'auto ignorecase' オプションを使用した JSON データからのロード
<a name="copy-from-json-examples-using-auto-ignorecase"></a>

`'auto ignorecase'` オプションを使用して JSON データからロードするには、JSON データが一連のオブジェクトで構成されている必要があります。キー名の大文字と小文字は列名と一致する必要がなく、順序は関係ありません。`category_object_auto-ignorecase.json` という名前のファイルの内容を次に示します。

```
{
    "CatDesc": "Major League Baseball",
    "CatID": 1,
    "CatGroup": "Sports",
    "CatName": "MLB"
}
{
    "CatGroup": "Sports",
    "CatID": 2,
    "CatName": "NHL",
    "CatDesc": "National Hockey League"
}
{
    "CatID": 3,
    "CatName": "NFL",
    "CatGroup": "Sports",
    "CatDesc": "National Football League"
}
{
    "bogus": "Bogus Sports LLC",
    "CatID": 4,
    "CatGroup": "Sports",
    "CatName": "NBA",
    "CatDesc": "National Basketball Association"
}
{
    "CatID": 5,
    "CatGroup": "Shows",
    "CatName": "Musicals",
    "CatDesc": "All symphony, concerto, and choir concerts"
}
```

前の例の JSON データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_auto ignorecase.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 'auto ignorecase';
```

### JSONPaths ファイルを使用した JSON データからのロード
<a name="copy-from-json-examples-using-jsonpaths"></a>

JSON データオブジェクトが列名に直接対応していない場合、JSONPaths ファイルを使用して、JSON 要素を列にマッピングすることができます。JSON ソースデータの順序は重要ではありませんが、JSONPaths ファイルの式の順序は列の順序と一致している必要があります。`category_object_paths.json` という名前の次のようなデータファイルがあるとします。

```
{
    "one": 1,
    "two": "Sports",
    "three": "MLB",
    "four": "Major League Baseball"
}
{
    "three": "NHL",
    "four": "National Hockey League",
    "one": 2,
    "two": "Sports"
}
{
    "two": "Sports",
    "three": "NFL",
    "one": 3,
    "four": "National Football League"
}
{
    "one": 4,
    "two": "Sports",
    "three": "NBA",
    "four": "National Basketball Association"
}
{
    "one": 6,
    "two": "Shows",
    "three": "Musicals",
    "four": "All symphony, concerto, and choir concerts"
}
```

`category_jsonpath.json` という名前の次の JSONPaths ファイルで、ソースデータをテーブルの列にマッピングします。

```
{
    "jsonpaths": [
        "$['one']",
        "$['two']",
        "$['three']",
        "$['four']"
    ]
}
```

前の例の JSON データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_jsonpath.json';
```

### JSONPaths ファイルを使用した JSON 配列からのロード
<a name="copy-from-json-examples-using-jsonpaths-arrays"></a>

一連の配列で構成される JSON データからロードするには、JSONPaths ファイルを使用して、配列の要素を列にマッピングする必要があります。`category_array_data.json` という名前の次のようなデータファイルがあるとします。

```
[1,"Sports","MLB","Major League Baseball"]
[2,"Sports","NHL","National Hockey League"]
[3,"Sports","NFL","National Football League"]
[4,"Sports","NBA","National Basketball Association"]
[5,"Concerts","Classical","All symphony, concerto, and choir concerts"]
```

`category_array_jsonpath.json` という名前の次の JSONPaths ファイルで、ソースデータをテーブルの列にマッピングします。

```
{
    "jsonpaths": [
        "$[0]",
        "$[1]",
        "$[2]",
        "$[3]"
    ]
}
```

前の例の JSON データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_array_data.json'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
json 's3://amzn-s3-demo-bucket/category_array_jsonpath.json';
```

## Avro の例からのコピー
<a name="r_COPY_command_examples-copy-from-avro"></a>

以下の例で、次のデータを含む CATEGORY テーブルをロードします。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_COPY_command_examples.html)

**Topics**
+ ['auto' オプションを使用した Avro データからのロード](#copy-from-avro-examples-using-auto)
+ ['auto ignorecase' オプションを使用した Avro データからのロード](#copy-from-avro-examples-using-auto-ignorecase)
+ [JSONPaths ファイルを使用した Avro データからのロード](#copy-from-avro-examples-using-avropaths)

### 'auto' オプションを使用した Avro データからのロード
<a name="copy-from-avro-examples-using-auto"></a>

`'auto'` 引数を使用して Avro データからロードするには、Avro スキーマのフィールド名が列名と一致している必要があります。ただし、`'auto'` 引数を使用する場合は、順序は関係ありません。次で `category_auto.avro` という名前のファイルのスキーマを示します。

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "catid", "type": "int"},
        {"name": "catdesc", "type": "string"},
        {"name": "catname", "type": "string"},
        {"name": "catgroup", "type": "string"},
}
```

Avro ファイルのデータはバイナリ形式であるため、人には読み取り不可能です。次に、`category_auto.avro`ファイルのデータの JSON 形式を示します。

```
{
   "catid": 1,
   "catdesc": "Major League Baseball",
   "catname": "MLB",
   "catgroup": "Sports"
}
{
   "catid": 2,
   "catdesc": "National Hockey League",
   "catname": "NHL",
   "catgroup": "Sports"
}
{
   "catid": 3,
   "catdesc": "National Basketball Association",
   "catname": "NBA",
   "catgroup": "Sports"
}
{
   "catid": 4,
   "catdesc": "All symphony, concerto, and choir concerts",
   "catname": "Classical",
   "catgroup": "Concerts"
}
```

前の例の Avro データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto';
```

### 'auto ignorecase' オプションを使用した Avro データからのロード
<a name="copy-from-avro-examples-using-auto-ignorecase"></a>

`'auto ignorecase'` 引数を使用して Avro データからロードするために、Avro スキーマのフィールド名の大文字と小文字が列名の大文字と小文字を一致させる必要はありません。ただし、`'auto ignorecase'` 引数を使用する場合は、順序は関係ありません。次で `category_auto-ignorecase.avro` という名前のファイルのスキーマを示します。

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "CatID", "type": "int"},
        {"name": "CatDesc", "type": "string"},
        {"name": "CatName", "type": "string"},
        {"name": "CatGroup", "type": "string"},
}
```

Avro ファイルのデータはバイナリ形式であるため、人には読み取り不可能です。次に、`category_auto-ignorecase.avro`ファイルのデータの JSON 形式を示します。

```
{
   "CatID": 1,
   "CatDesc": "Major League Baseball",
   "CatName": "MLB",
   "CatGroup": "Sports"
}
{
   "CatID": 2,
   "CatDesc": "National Hockey League",
   "CatName": "NHL",
   "CatGroup": "Sports"
}
{
   "CatID": 3,
   "CatDesc": "National Basketball Association",
   "CatName": "NBA",
   "CatGroup": "Sports"
}
{
   "CatID": 4,
   "CatDesc": "All symphony, concerto, and choir concerts",
   "CatName": "Classical",
   "CatGroup": "Concerts"
}
```

前の例の Avro データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_auto-ignorecase.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
format as avro 'auto ignorecase';
```

### JSONPaths ファイルを使用した Avro データからのロード
<a name="copy-from-avro-examples-using-avropaths"></a>

Avro スキーマのフィールド名が列名に直接対応しない場合、JSONPaths ファイルを使用してスキーマの要素を列にマッピングできます。JSONPaths のファイル式の順序は、列の順序に一致している必要があります。

前の例と同じデータだが次のスキーマを持った `category_paths.avro` という名前のデータファイルがあるとします。

```
{
    "name": "category",
    "type": "record",
    "fields": [
        {"name": "id", "type": "int"},
        {"name": "desc", "type": "string"},
        {"name": "name", "type": "string"},
        {"name": "group", "type": "string"},
        {"name": "region", "type": "string"} 
     ]
}
```

`category_path.avropath` という名前の次の JSONPaths ファイルで、ソースデータをテーブルの列にマッピングします。

```
{
    "jsonpaths": [
        "$['id']",
        "$['group']",
        "$['name']",
        "$['desc']"
    ]
}
```

前の例の Avro データファイルからロードするには、次の COPY コマンドを実行します。

```
copy category
from 's3://amzn-s3-demo-bucket/category_object_paths.avro'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' 
format avro 's3://amzn-s3-demo-bucket/category_path.avropath ';
```

## ESCAPE オプションを指定する COPY 用のファイルの準備
<a name="r_COPY_preparing_data"></a>

次の例では、ESCAPE パラメータを指定した COPY コマンドでデータを Amazon Redshift テーブルにインポートする前に、データを準備して改行文字を "エスケープする" 方法について説明します。データを準備して改行文字を区切らないと、Amazon Redshift は COPY コマンドの実行時にロードエラーを返します。通常、改行文字はレコード区切り文字として使用されるためです。

例えば、ファイルまたは外部テーブルの列を Amazon Redshift テーブルにコピーするとします。そのファイルまたは列に XML 形式のコンテンツまたは同様なデータが含まれている場合、コンテンツの一部である改行文字 (\$1n) はすべてバックスラッシュ文字 (\$1) でエスケープする必要があります。

埋め込み改行文字を含むファイルまたはテーブルは、比較的簡単に一致パターンを提供します。テキストファイル `>` の次の例に示すように、ほとんどの場合、それぞれの埋め込み改行文字は `' '` 文字の後に続きます。場合によっては、その間に空白文字 (`nlTest1.txt` またはタブ) が入ります。

```
$ cat nlTest1.txt
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>|1000
<xml>
</xml>|2000
```

次の例では、テキスト処理ユーティリティを実行してソースファイルを事前処理し、必要な場所にエスケープ文字を挿入できます (`|` 文字は、Amazon Redshift テーブルにコピーされるときに列データを区切る区切り記号として使用されます。) 

```
$ sed -e ':a;N;$!ba;s/>[[:space:]]*\n/>\\\n/g' nlTest1.txt > nlTest2.txt
```

同様に、Perl を使用しても同じような処理を行うことができます。

```
cat nlTest1.txt | perl -p -e 's/>\s*\n/>\\\n/g' > nlTest2.txt
```

`nlTest2.txt` ファイルから Amazon Redshift へのデータロードに対応するため、Amazon Redshift に 2 列のテーブルを作成しました。最初の列 c1 は文字の列です。この列は `nlTest2.txt` ファイルからの XML 形式のコンテンツを保持します。2 番目の列 c2 は同じファイルからロードされる整数値を保持します。

`sed` コマンドを実行した後、ESCAPE パラメータを使用して `nlTest2.txt` ファイルから Amazon Redshift テーブルにデータを正しくロードすることができます。

**注記**  
COPY コマンドに ESCAPE パラメータを指定すると、バックスラッシュ文字を含むいくつかの特殊文字をエスケープします (改行文字を含む)。

```
copy t2 from 's3://amzn-s3-demo-bucket/data/nlTest2.txt' 
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'  
escape
delimiter as '|';

select * from t2 order by 2;

c1           |  c2
-------------+------
<xml start>
<newline characters provide>
<line breaks at the end of each>
<line in content>
</xml>
| 1000
<xml>
</xml>       | 2000
(2 rows)
```

外部データベースからエクスポートされるデータファイルも同様に準備できます。例えば、Oracle データベースの場合、Amazon Redshift にコピーするテーブルの各対象列に対して REPLACE 関数を使用できます。

```
SELECT c1, REPLACE(c2, \n',\\n' ) as c2 from my_table_with_xml
```

また、通常大量のデータを処理する多くのデータベースエクスポートツールや抽出、変換、ロード (ETL) ツールは、エスケープ文字と区切り文字を指定するオプションを備えています。

## シェープファイルを Amazon Redshift にロードする
<a name="copy-example-spatial-copy-shapefile"></a>

次の例は、COPY を使用して Esri シェープファイルをロードする方法を示しています。シェープファイルのロードについての詳細は、「[シェープファイルを Amazon Redshift にロードする](spatial-copy-shapefile.md)」を参照してください。

### シェープファイルのロード
<a name="copy-example-spatial-copy-shapefile-loading-copy"></a>

以下のステップは、COPY コマンドを使用して Amazon S3 から OpenStreetMap データを取り込む方法を示しています。この例では、ノルウェーの[Geofabrik のダウンロードサイト](https://download.geofabrik.de/europe.html)から得たシェープファイルアーカイブが、AWSリージョンのプライベート Amazon S3 バケットにアップロードされていることを前提としています。`.shp`、`.shx`、および `.dbf` ファイルは、同じ Amazon S3 プレフィックスとファイル名を共有する必要があります。

#### 簡素化されていないデータの取り込み
<a name="spatial-copy-shapefile-loading-copy-fits"></a>

次のコマンドは、簡略化せずに最大ジオメトリのサイズに収まるテーブルを作成し、データを取り込みます。好みの GIS ソフトウェアで `gis_osm_natural_free_1.shp` を開き、このレイヤーの列を調べます。デフォルトでは、IDENTITY 列または GEOMETRY 列のいずれかが最初になります。GEOMETRY 列が最初である場合、次のようにテーブルを作成できます。

```
CREATE TABLE norway_natural (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

または、IDENTITY 列が最初であるとき、次のようにテーブルを作成できます。

```
CREATE TABLE norway_natural_with_id (
   fid INT IDENTITY(1,1),
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

これで、COPY を使用してデータを取り込むことができます。

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural' completed, 83891 record(s) loaded successfully
```

または、次に示すように、データを取り込むことができます。

```
COPY norway_natural_with_id FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO: Load into table 'norway_natural_with_id' completed, 83891 record(s) loaded successfully.
```

#### 簡素化されたデータの取り込み
<a name="spatial-copy-shapefile-loading-copy-no-fit"></a>

次のコマンドは、テーブルを作成し、最大ジオメトリのサイズに収まらないデータを簡略化せずに取り込もうとします。`gis_osm_water_a_free_1.shp` シェープファイルを調べて、次のように適切なテーブルを作成します。

```
CREATE TABLE norway_water (
   wkb_geometry GEOMETRY,
   osm_id BIGINT,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

COPY コマンドを実行すると、エラーが発生します。

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
ERROR:  Load into table 'norway_water' failed.  Check 'stl_load_errors' system table for details.
```

`STL_LOAD_ERRORS` をクエリすると、ジオメトリが大きすぎることがわかります。

```
SELECT line_number, btrim(colname), btrim(err_reason) FROM stl_load_errors WHERE query = pg_last_copy_id();
 line_number |    btrim     |                                 btrim
-------------+--------------+-----------------------------------------------------------------------
     1184705 | wkb_geometry | Geometry size: 1513736 is larger than maximum supported size: 1048447
```

これを克服するために、`SIMPLIFY AUTO` パラメータが COPY コマンドに追加され、形状が簡略化されています。

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989196 record(s) loaded successfully.
```

簡略化された行とジオメトリを表示するには、`SVL_SPATIAL_SIMPLIFY` をクエリします。

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size |   final_tolerance
-------+-------------+-------------------+--------------+------------+------------+----------------------
    20 |     1184704 |                -1 |      1513736 | t          |    1008808 |   1.276386653895e-05
    20 |     1664115 |                -1 |      1233456 | t          |    1023584 | 6.11707814796635e-06
```

自動的に計算された許容値よりも低い許容値で SIMPLIFY AUTO *max\$1tolerance* を使用すると、おそらく取り込みエラーが発生します。この場合、MAXERROR を使用してエラーを無視します。

```
COPY norway_water FROM 's3://bucket_name/shapefiles/norway/gis_osm_water_a_free_1.shp'
FORMAT SHAPEFILE
SIMPLIFY AUTO 1.1E-05
MAXERROR 2
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';

INFO:  Load into table 'norway_water' completed, 1989195 record(s) loaded successfully.
INFO:  Load into table 'norway_water' completed, 1 record(s) could not be loaded.  Check 'stl_load_errors' system table for details.
```

`SVL_SPATIAL_SIMPLIFY` を再度クエリして、COPY がロードできなかったレコードを特定します。

```
SELECT * FROM svl_spatial_simplify WHERE query = pg_last_copy_id();
 query | line_number | maximum_tolerance | initial_size | simplified | final_size | final_tolerance
-------+-------------+-------------------+--------------+------------+------------+-----------------
    29 |     1184704 |           1.1e-05 |      1513736 | f          |          0 |               0
    29 |     1664115 |           1.1e-05 |      1233456 | t          |     794432 |         1.1e-05
```

この例では、最初のレコードがうまく収まらなかったため、`simplified` 列に false が表示されています。2 番目のレコードは、指定された許容値内でロードされました。ただし、最終的なサイズは、最大許容値を指定せずに自動的に計算された許容値を使用するよりも大きくなります。

### 圧縮シェープファイルからのロード
<a name="copy-example-spatial-copy-shapefile-compressed"></a>

Amazon Redshift COPY は、圧縮されたシェープファイルからのデータの取り込みをサポートしています。すべてのシェープファイルコンポーネントには、同じ Amazon S3 プレフィックスと同じ圧縮サフィックスが必要です。例として、前の例からデータをロードするとします。この場合、ファイル `gis_osm_water_a_free_1.shp.gz`、`gis_osm_water_a_free_1.dbf.gz`、および `gis_osm_water_a_free_1.shx.gz` は同じ Amazon S3 ディレクトリを共有する必要があります。COPY コマンドには GZIP オプションが必要です。FROM 句では、次に示すように、正しい圧縮ファイルを指定する必要があります。

```
COPY norway_natural FROM 's3://bucket_name/shapefiles/norway/compressed/gis_osm_natural_free_1.shp.gz'
FORMAT SHAPEFILE
GZIP
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural' completed, 83891 record(s) loaded successfully.
```

### 列の順序が異なるテーブルへのデータのロード
<a name="copy-example-spatial-copy-shapefile-column-order"></a>

最初の列が `GEOMETRY` でないテーブルがある場合は、列マッピングを使用して列をターゲットテーブルにマッピングできます。例えば、最初の列として `osm_id` を指定してテーブルを作成します。

```
CREATE TABLE norway_natural_order (
   osm_id BIGINT,
   wkb_geometry GEOMETRY,
   code INT,
   fclass VARCHAR,
   name VARCHAR);
```

次に、列マッピングを使用してシェープファイルを取り込みます。

```
COPY norway_natural_order(wkb_geometry, osm_id, code, fclass, name) 
FROM 's3://bucket_name/shapefiles/norway/gis_osm_natural_free_1.shp'
FORMAT SHAPEFILE
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/MyRoleName';
INFO:  Load into table 'norway_natural_order' completed, 83891 record(s) loaded successfully.
```

### Geogry 列を含めたデータのテーブルへのロード
<a name="copy-example-spatial-copy-shapefile-geography"></a>

`GEOGRAPHY` 列を含むテーブルがある場合は、まず、この列を `GEOMETRY` 列に取り込んだ上で、オブジェクトを `GEOGRAPHY` オブジェクトにキャストします。例えば、シェープファイルを `GEOMETRY` 列にコピーした後で、テーブルを変更して `GEOGRAPHY` データ型の列を追加します。

```
ALTER TABLE norway_natural ADD COLUMN wkb_geography GEOGRAPHY;
```

次に、ジオメトリをジオグラフィに変換します。

```
UPDATE norway_natural SET wkb_geography = wkb_geometry::geography;
```

オプションで、`GEOMETRY`列を削除できます。

```
ALTER TABLE norway_natural DROP COLUMN wkb_geometry;
```

## NOLOAD オプションを使用する COPY コマンド
<a name="r_COPY_command_examples-load-noload-option"></a>

実際にデータをロードする前にデータファイルを検証するには、COPY コマンドで NOLOAD オプションを使用します。Amazon Redshift は入力ファイルを解析し、発生したエラーをすべて表示します。次の例では NOLOAD オプションを使用しており、実際にテーブルに読み込まれた行はありません。

```
COPY public.zipcode1
FROM 's3://amzn-s3-demo-bucket/mydata/zipcode.csv' 
DELIMITER ';' 
IGNOREHEADER 1 REGION 'us-east-1'
NOLOAD
CREDENTIALS 'aws_iam_role=arn:aws:iam::123456789012:role/myRedshiftRole';

Warnings:
Load into table 'zipcode1' completed, 0 record(s) loaded successfully.
```

## マルチバイト区切り文字と ENCODING オプションを含む COPY コマンド
<a name="r_COPY_command_examples-load-encoding-multibyte-delimiter-option"></a>

次の例では、マルチバイトデータを含む Amazon S3 ファイルから LATIN1 をロードします。COPY コマンドは、ISO-8859-1 としてエンコードされた入力ファイルのフィールドを区切る区切り文字として 8 進形式 (`\302\246\303\254`) を指定します。UTF-8 で同じ区切り文字を指定するには、`DELIMITER '¦ì'` を指定します。

```
COPY latin1
FROM 's3://amzn-s3-demo-bucket/multibyte/myfile' 
IAM_ROLE 'arn:aws:iam::123456789012:role/myRedshiftRole'
DELIMITER '\302\246\303\254'
ENCODING ISO88591
```

# CREATE DATABASE
<a name="r_CREATE_DATABASE"></a>

新しいデータベースを作成します。

データベースを作成するには、スーパーユーザーであるか、CREATEDB 権限を持っている必要があります。ゼロ ETL 統合に関連付けられたデータベースを作成するには、スーパーユーザーであるか、CREATEDB 権限と CREATEUSER 権限の両方を持っている必要があります。

トランザクションブロック (BEGIN ... END) 内で CREATE DATABASE を実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

## 構文
<a name="r_CREATE_DATABASE-synopsis"></a>

```
CREATE DATABASE database_name 
[ { [ 
      FROM INTEGRATION '<integration_id>'[ DATABASE '<source_database>' ]
      [ SET ]
      [ ACCEPTINVCHARS [=] { TRUE | FALSE }]
      [ QUERY_ALL_STATES [=] { TRUE | FALSE }] 
      [ REFRESH_INTERVAL <interval> ] 
      [ TRUNCATECOLUMNS [=] { TRUE | FALSE } ]
      [ HISTORY_MODE [=] {TRUE | FALSE} ]
    ]
    [ WITH ]
    [ OWNER [=] db_owner ]
    [ CONNECTION LIMIT { limit | UNLIMITED } ]
    [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]
    [ ISOLATION LEVEL { SNAPSHOT | SERIALIZABLE } ]
  }
  | { FROM { { ARN '<arn>' } { WITH DATA CATALOG SCHEMA '<schema>' | WITH NO DATA CATALOG SCHEMA } } }
  | { IAM_ROLE  {default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' } }
  | { [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid }
]
```

## パラメータ
<a name="r_CREATE_DATABASE-parameters"></a>

 *database\$1name*   
新しいデータベースの名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

FROM INTEGRATION '<integration\$1id>' [ DATABASE '<source\$1database>' ]   
ゼロ ETL 統合識別子を使用してデータベースを作成するかどうかを指定します。SVV\$1INTEGRATION システムビューから `integration_id` を取得できます。Aurora PostgreSQL のゼロ ETL 統合では、SVV\$1INTEGRATION から取得できる `source_database` 名前を指定する必要があります。  
例については、[ゼロ ETL 統合の結果を受け取るデータベースを作成する](#r_CREATE_DATABASE-integration)を参照してください。ゼロ ETL 統合を使用したデータベースの作成の詳細については、「Amazon Redshift 管理ガイド」の「[Amazon Redshift でのデスティネーションデータベースの作成](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html)」を参照してください。**

SET  
オプションキーワード

ACCEPTINVCHARS [=] \$1 TRUE \$1 FALSE \$1  
ACCEPTINVCHARS 句を使用すると、VARCHAR データ型で無効な文字が検出された場合、ゼロ ETL 統合テーブルが取り込みを継続するかどうかを設定できます。無効な文字が検出されると、無効な文字はデフォルトの `?` 文字に置き換えられます。

QUERY\$1ALL\$1STATES [=] \$1 TRUE \$1 FALSE \$1  
QUERY\$1ALL\$1STATES 句を使用すると、ゼロ ETL 統合テーブルをすべての状態 (`Synced`、`Failed`、`ResyncRequired`、`ResyncInitiated`) でクエリできるかどうかを設定できます。ゼロ ETL 統合テーブルはデフォルトでは、`Synced` 状態でのみクエリできます。

REFRESH\$1INTERVAL <interval>  
REFRESH\$1INTERVAL 句を使用すると、ゼロ ETL ソースからターゲットデータベースにデータを更新するためのおよその時間間隔を秒単位で設定できます。この値は、ソースタイプが Aurora MySQL、Aurora PostgreSQL、または RDS for MySQL のゼロ ETL 統合では、0～432,000 秒 (5 日) に設定できます。Amazon DynamoDB ゼロ ETL 統合の場合、値は 900～432,000 秒 (15 分～5 日) に設定できます。ソースタイプが Aurora MySQL、Aurora PostgreSQL、または RDS for MySQL のゼロ ETL 統合では、デフォルトの `interval` はゼロ (0) 秒です。Amazon DynamoDB ゼロ ETL 統合の場合、デフォルトの `interval` は 900 秒 (15 分) です。

TRUNCATECOLUMNS [=] \$1 TRUE \$1 FALSE \$1  
TRUNCATECOLUMNS 句を使用すると、VARCHAR 列の値または SUPER 列の属性が制限を超えた場合に、ゼロ ETL 統合テーブルが取り込みを続行するかどうかを設定できます。`TRUE` の場合、値は列に収まるように切り捨てられ、オーバーフローする JSON 属性の値は SUPER 列に収まるように切り捨てられます。

HISTORY\$1MODE [=] \$1TRUE \$1 FALSE\$1  
Amazon Redshift が、が指定されたデータベース内のすべての新しいテーブルに履歴モードを設定するかどうかを指定する句。このオプションは、ゼロ ETL 統合用に作成されたデータベースにのみ適用されます。  
HISTORY\$1MODE 句は `TRUE` または `FALSE` に設定できます。デフォルトは `FALSE` です。HISTORY\$1MODE の詳細については、「*Amazon Redshift 管理ガイド*」の「[History mode](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-history-mode.html)」(履歴モード) を参照してください。

WiTH  
オプションキーワード

OWNER [=] db\$1owner  
データベース所有者のユーザー名を指定します。

CONNECTION LIMIT \$1 *limit* \$1 UNLIMITED \$1   
ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。ユーザーごとの接続数の制限が適用される場合もあります。詳細については、「[CREATE USER](r_CREATE_USER.md)」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、[STV\$1SESSIONS](r_STV_SESSIONS.md)システムビューに対してクエリを実行します。  
ユーザーとデータベースの両方の接続制限が適用される場合は、ユーザーが接続しようとしたときに、両方の制限内に未使用の接続スロットがなければなりません。

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
文字列の検索または比較において、大文字と小文字を区別するか、区別しないかを指定する句。デフォルトでは、大文字と小文字が区別されます。  
データ共有からデータベースを作成する場合、COLLATE はサポートされません。  
CASE\$1SENSITIVE と CS は互換性があり、同じ結果が得られます。同様に、CASE\$1INSENSITIVE と CI は互換性があり、同じ結果が得られます。

ISOLATION LEVEL \$1 SNAPSHOT \$1 SERIALIZABLE \$1  
データベースに対してクエリを実行するときに使用される分離レベルを指定する句。分離レベルの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。  
+ SNAPSHOT 分離 – 更新および削除の競合に対する保護機能を備えた分離レベルを提供します。これは、プロビジョニングされたクラスターまたはサーバーレス名前空間で作成されたデフォルトのデータベースです。
+ SERIALIZABLE 分離 – 同時実行トランザクションの完全な直列化機能を提供します。

FROM ARN '<ARN>'  
データベースの作成に使用する AWS Glue データベース ARN。

\$1 WITH DATA CATALOG SCHEMA '<schema>' \$1 WITH NO DATA CATALOG SCHEMA \$1  
このパラメータは、CREATE DATABASE コマンドで FROM ARN パラメータも使用する場合にのみ適用されます。
AWS Glue Data Catalog でオブジェクトにアクセスしやすくするためにスキーマを使用してデータベースを作成するかどうかを指定します。

IAM\$1ROLE \$1 default \$1 'SESSION' \$1 'arn:aws:iam::*<AWS アカウント-id>*:role/*<role-name>*' \$1  
このパラメータは、CREATE DATABASE コマンドで FROM ARN パラメータも使用する場合にのみ適用されます。
CREATE DATABASE コマンドの実行時にクラスターに関連付けられた IAM ロールを指定すると、Amazon Redshift はデータベースに対してクエリを実行するときにロールの認証情報を使用します。  
`default` キーワードを指定することは、デフォルトとして設定されてクラスターに関連付けられている IAM ロールを使用することを意味します。  
フェデレーション ID を使用して Amazon Redshift クラスターに接続し、このコマンドを使用して作成された外部スキーマからテーブルにアクセスする場合は、`'SESSION'` を使用します。フェデレーション ID の使用例については、フェデレーション ID の設定方法を説明している「[フェデレーション ID を使用して、ローカルリソースと Amazon Redshift Spectrum の外部テーブルへの Amazon Redshift アクセスを管理する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html)」を参照してください。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。少なくとも、IAM ロールには、Amazon S3 バケットで LIST オペレーションを実行してアクセスを受ける許可と、バケットに含まれる Amazon S3 オブジェクトで GET オペレーションを実行する許可が必要です。データベース用の AWS Glue Data Catalog を使用してデータベースを作成するときに IAM\$1ROLE を使用する方法の詳細については、「[コンシューマーとして Lake Formation 管理のデータ共有を使用する](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html)」を参照してください。  
以下に ARN が 1 つの場合の IAM\$1ROLE パラメータ文字列の構文を示します。  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
ロールを連鎖することで、クラスターは別のアカウントに属している可能性がある別の IAM ロールを引き受けることができます。最大10 個までのロールを連鎖できます。詳細については、「[Amazon Redshift Spectrum での IAM ロールの連鎖](c-spectrum-iam-policies.md#c-spectrum-chaining-roles)」を参照してください。  
 この IAM ロールに次のような IAM アクセス許可ポリシーをアタッチします。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
フェデレーションクエリで使用する IAM ロールを作成するステップについては、「[フェデレーテッドクエリを使用するためのシークレットと IAM ロールの作成](federated-create-secret-iam-role.md)」を参照してください。  
連鎖したロールのリストには空白を含めないでください。
以下に連鎖された 3 つのロールの構文を示します。  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

## データ共有で CREATE DATABASE を使用するための構文
<a name="r_CREATE_DATABASE-datashare-synopsis"></a>

次の構文で、同じ AWS アカウント内のデータ共有からデータベースを作成するために使用される、CREATE DATABASE コマンドについて確認できます。

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF [ ACCOUNT account_id ] NAMESPACE namespace_guid
```

次の構文で、AWSアカウント間のデータ共有からデータベースを作成するために使用される,CREATE DATABASE コマンドについて確認できます。

```
CREATE DATABASE database_name
[ [ WITH PERMISSIONS ] FROM DATASHARE datashare_name OF ACCOUNT account_id NAMESPACE namespace_guid
```

### データ共有で CREATE DATABASE を使用するためのパラメータ
<a name="r_CREATE_DATABASE-parameters-datashare"></a>

FROM DATASHARE   
データ共有の場所を示すキーワード。

 *datashare\$1name*   
コンシューマーデータベースが作成されるデータ共有の名前。

WITH PERMISSIONS  
データ共有から作成されたデータベースに、個々のデータベースオブジェクトにアクセスするためのオブジェクトレベルの許可が必要であることを指定します。この句を指定しないと、データベースに対する USAGE アクセス許可を付与されたユーザーまたはロールは、データベース内のすべてのデータベースオブジェクトに自動的にアクセスできるようになります。

 NAMESPACE *namespace\$1guid*   
データ共有が属しているプロデユーサ名前空間を指定する値。

ACCOUNT *account\$1id*  
データ共有が属しているプロデユーサアカウントを指定する値。

## データ共有のための CREATE DATABASE の使用上の注意
<a name="r_CREATE_DATABASE-usage"></a>

データベーススーパーユーザーとして、CREATE DATABASE を使用して AWS アカウント内のデータ共有からデータベースを作成する場合は、NAMESPACE オプションを指定します。ACCOUNT オプションは省略可能です。CREATE DATABASE を使用して AWS アカウント間のデータ共有からデータベースを作成する場合は、プロデューサーで ACCOUNT と NAMESPACE の両方を指定します。

コンシューマークラスター上の 1 つのデータ共有に対して、作成できるコンシューマデータベースは 1 つだけです。同じデータ共有を参照する、複数のコンシューマーデータベースを作成することはできません。

## AWS Glue Data Catalog の CREATE DATABASE
<a name="r_CREATE_DATABASE_data-catalog"></a>

AWS Glue データベース ARN を使用してデータベースを作成するには、CREATE DATABASE で ARN を指定します。

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA;
```

オプションで、IAM\$1ROLE パラメータに値を指定することもできます。パラメータおよび許容される値の詳細については、「[パラメータ](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html#r_CREATE_DATABASE-parameters)」を参照してください。

IAM ロールを使用して ARN からデータベースを作成する方法を示す例は、以下のとおりです。

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE <iam-role-arn>
```

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH NO DATA CATALOG SCHEMA IAM_ROLE default;
```

DATA CATALOG SCHEMA を使用してデータベースを作成することもできます。

```
CREATE DATABASE sampledb FROM ARN <glue-database-arn> WITH DATA CATALOG SCHEMA <sample_schema> IAM_ROLE default;
```

## ゼロ ETL 統合の結果を受け取るデータベースを作成する
<a name="r_CREATE_DATABASE-integration"></a>

ゼロ ETL 統合 ID を使用してデータベースを作成するには、CREATE DATABASE コマンドで `integration_id` を指定します。

```
CREATE DATABASE destination_db_name FROM INTEGRATION 'integration_id';
```

例えば、まず SVV\$1INTEGRATION から統合 ID を取得します。

```
SELECT integration_id FROM SVV_INTEGRATION;
```

次に、取得した統合 ID のいずれかを使用して、ゼロ ETL 統合を受け取るデータベースを作成します。

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111';
```

ゼロ ETL 統合のソースデータベースが必要な場合は、例えば以下のように指定します。

```
CREATE DATABASE sampledb FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' DATABASE sourcedb;
```

データベースの更新間隔を設定することもできます。例えば、ゼロ ETL 統合のソースからのデータの更新間隔を 7,200 秒にするには以下のように設定します。

```
CREATE DATABASE myacct_mysql FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET REFRESH_INTERVAL 7200;
```

SVV\$1INTEGRATION カタログビューに、integration\$1id、target\$1database、source、refresh\$1interval などのゼロ ETL 統合に関する情報がないかクエリします。

```
SELECT * FROM svv_integration;
```

次の例では、履歴モードがオンになっている統合からデータベースを作成しています。

```
CREATE DATABASE sample_integration_db FROM INTEGRATION 'a1b2c3d4-5678-90ab-cdef-EXAMPLE11111' SET HISTORY_MODE = true;
```

## CREATE DATABASE の制限
<a name="r_CREATE_DATABASE-create-database-limits"></a>

Amazon Redshift は、データベースに次の制限を適用します。
+ クラスターごとのユーザー定義データベースは最大 60 個です。
+ データベース名は最大 127 バイトです。
+ データベース名を予約語にすることはできません。

## データベースの照合
<a name="r_CREATE_DATABASE-collation"></a>

照合とは、データベースエンジンが SQL の文字型データを比較およびソートする方法を定義するための一連の規則です。大文字と小文字が区別されない照合は、最もよく使用されます。Amazon Redshift では、大文字と小文字を区別しない照合を使用して、他のデータウェアハウスシステムからの移行を容易にしています。大文字と小文字を区別しない照合のネイティブサポートにより、Amazon Redshift は、分散キー、ソートキー、範囲が制限されたスキャンなど、重要な調整法や最適化の方法を引き継ぐことができます。

COLLATE 句により、データベース内のすべての CHAR および VARCHAR 列に対する、デフォルトの照合手段を指定します。CASE\$1INSENSITIVE が指定されている場合、すべての CHAR または VARCHAR 列では、大文字と小文字を区別しない照合が使用されます。照合の詳細については、「[照合順序](c_collation_sequences.md)」を参照してください。

大文字と小文字を区別しない列に挿入または取り込んだデータは、元の大文字と小文字を維持します。ただし、ソートやグループ化など、すべての比較ベースの文字列操作は、大文字と小文字を区別しません。LIKE 述語、および正規表現関数などのパターンマッチング操作でも、大文字と小文字を区別しません。

次の SQL オペレーションでは、適切な照合セマンティクスをサポートします。
+ 比較演算子:=、<>、<、<=、>、>=
+ LIKE 演算子
+ ORDER BY 句
+ GROUP BY 句
+ MIN、MAX、LISTAGG など、文字列比較を使用する集計関数
+ PARTITION BY 句や ORDER BY 句などのウィンドウ関数
+ スカラー関数: greatest() 、least()、STRPOS()、REGEXP\$1COUNT()、REGEXP\$1REPLACE()、REGEXP\$1INSTR()、REGEXP\$1SUBSTR()
+ Distinct 句
+ UNION、INTERSECT、および EXCEPT
+ IN LIST

Amazon Redshift Spectrum および Aurora PostgreSQL のフェデレーティッドクエリを含む外部クエリの場合、VARCHAR または CHAR 列の照合は、現行のデータベースレベルの照合と同じです。

次の例では、Amazon Redshift Spectrum テーブルをクエリしています。

```
SELECT ci_varchar FROM spectrum.test_collation
WHERE ci_varchar = 'AMAZON';

ci_varchar
----------
amazon
Amazon
AMAZON
AmaZon
(4 rows)
```

データベースの照合を使用してテーブルを作成する方法については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

COLLATE 関数の詳細については、「[COLLATE 関数](r_COLLATE.md)」を参照してください。

### データベース照合の制限
<a name="r_CREATE_DATABASE-collation-limitations"></a>

Amazon Redshift でデータベース照合を使用する場合、以下の制限事項があります。
+ PG カタログテーブルや Amazon Redshift システムテーブルなど、すべてのシステムテーブルまたはビューでは、大文字と小文字が区別されます。
+ コンシューマデータベースとプロデューサデータベースに異なるデータベースレベルの照合順序がある場合、Amazon Redshift はデータベース間クエリとクラスター間クエリをサポートしません。
+ Amazon Redshift は、リーダーノードのみのクエリで大文字と小文字を区別しない照合をサポートしていません。

  以下に、サポートされていない大文字と小文字を区別しないクエリと、Amazon Redshift から送信されるエラーの例を示します。

  ```
  SELECT collate(usename, 'case_insensitive') FROM pg_user;
  ERROR:  Case insensitive collation is not supported in leader node only query.
  ```
+ Amazon Redshift は、比較、関数、結合、設定オペレーションなど、大文字と小文字を区別する列と区別しない列間でのやり取りはサポートしていません。

  次に、大文字と小文字を区別する列と区別しない列の間で、やり取りした際に発生するエラーの例を示します。

  ```
  CREATE TABLE test
    (ci_col varchar(10) COLLATE case_insensitive,
     cs_col varchar(10) COLLATE case_sensitive,
     cint int,
     cbigint bigint);
  ```

  ```
  SELECT ci_col = cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT concat(ci_col, cs_col) FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT ci_col FROM test UNION SELECT cs_col FROM test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  SELECT * FROM test a, test b WHERE a.ci_col = b.cs_col;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select Coalesce(ci_col, cs_col) from test;
  ERROR:  Query with different collations is not supported yet.
  ```

  ```
  Select case when cint > 0 then ci_col else cs_col end from test;
  ERROR:  Query with different collations is not supported yet.
  ```

これらのクエリを機能させるには、COLLATE 関数を使用して、ある列に対する照合を、別の列と一致するように変換します。詳細については、「[COLLATE 関数](r_COLLATE.md)」を参照してください。

## 例
<a name="r_CREATE_DATABASE-examples"></a>

**データベースを作成する**  
次の例では、TICKIT という名前のデータベースを作成し、その所有権を DWUSER というユーザーに与えます。

```
create database tickit
with owner dwuser;
```

データベースに関する詳細を表示するために、PG\$1DATABASE\$1INFO カタログテーブルに対しクエリを実行しています。

```
select datname, datdba, datconnlimit
from pg_database_info
where datdba > 1;

 datname     | datdba | datconnlimit
-------------+--------+-------------
 admin       |    100 | UNLIMITED
 reports     |    100 | 100
 tickit      |    100 | 100
```

次の例では、スナップショット分離レベルを使用して **sampledb** という名前のデータベースを作成します。

```
CREATE DATABASE sampledb ISOLATION LEVEL SNAPSHOT;
```

次の例では、データ共有 salesshare からデータベース sales\$1db を作成しています。

```
CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

### データベース照合の例
<a name="r_CREATE_DATABASE-collation-examples"></a>

**大文字と小文字を区別しないデータベースの作成**  
次の例では、データベース `sampledb` 、およびテーブル `T1` を作成し、そのテーブル `T1` にデータを挿入します。

```
create database sampledb collate case_insensitive;
```

SQL クライアントを使用して、先ほど作成した新しいデータベースに接続します。Amazon Redshift クエリエディタ v2 を使用している場合は、**エディタ**で `sampledb` を選択します。RSQL を使用している場合は、次のようなコマンドを使用します。

```
\connect sampledb;
```

```
CREATE TABLE T1 (
  col1 Varchar(20) distkey sortkey
);
```

```
INSERT INTO T1 VALUES ('bob'), ('john'), ('Mary'), ('JOHN'), ('Bob');
```

その後、クエリが `John` を含む結果を検索します。

```
SELECT * FROM T1 WHERE col1 = 'John';

 col1
 ------
 john
 JOHN
(2 row)
```

**大文字と小文字を区別しない規則での順序付け**  
次の例は、テーブル T1 での、大文字と小文字を区別しない順序付けを示しています。大文字と小文字を区別しない列では、*Bob* と *bob* や *John* と *john* は同一に扱われるので、その順序は確定しません。

```
SELECT * FROM T1 ORDER BY 1;

 col1
 ------
 bob
 Bob
 JOHN
 john
 Mary
(5 rows)
```

同様に次の例では、GROUP BY 句に対する、大文字と小文字を区別しない順序付けを示しています。*Bob* と *Bob* は等し認識されるので、同じグループに属します。どちらが結果に表示されるかは非決定的です。

```
SELECT col1, count(*) FROM T1 GROUP BY 1;

 col1 | count
 -----+------
 Mary |  1
 bob  |  2
 JOHN |  2
(3 rows)
```

**大文字と小文字を区別しない列でウィンドウ関数を使用してクエリを実行する**  
次の例では、大文字と小文字を区別しない列に対し、ウィンドウ関数によるクエリを実行します。

```
SELECT col1, rank() over (ORDER BY col1) FROM T1;

 col1 | rank
 -----+------
 bob  |   1
 Bob  |   1
 john |   3
 JOHN |   3
 Mary |   5
(5 rows)
```

**DISTINCT キーワードを使用したクエリ**  
次の例に、DISTINCT キーワードを使用しながら、`T1`テーブルに対しクエリを実行します。

```
SELECT DISTINCT col1 FROM T1;

 col1
 ------
 bob
 Mary
 john
(3 rows)
```

**UNION 句を使用したクエリ**  
次の例に、テーブル `T1` および `T2` に対し UNIONN 句を使用した場合の結果を示します。

```
CREATE TABLE T2 AS SELECT * FROM T1;
```

```
SELECT col1 FROM T1 UNION SELECT col1 FROM T2;

 col1
 ------
 john
 bob
 Mary
(3 rows)
```

# CREATE DATASHARE
<a name="r_CREATE_DATASHARE"></a>

現在のデータベースに新しいデータ共有を作成します。このデータ共有の所有者は CREATE DATASHARE コマンドの発行者です。

Amazon Redshift は、各データ共有を単一の Amazon Redshift データベースに関連付けます。関連付けられたデータベースからデータ共有にのみオブジェクトを追加できます。同じ Amazon Redshift データベースに複数のデータ共有を作成できます。

データ共有の詳細については、[Amazon Redshift でのデータの共有](datashare-overview.md)を参照してください。

データ共有に関する情報を表示するには、[SHOW DATASHARES](r_SHOW_DATASHARES.md) を使用します。

## 必要な権限
<a name="r_CREATE_DATASHARE-privileges"></a>

以下に、CREATE DATASHARE に必要な権限を示します。
+ スーパーユーザー
+ CREATE DATASHARE の権限を持つユーザー
+ データベースの所有者

## 構文
<a name="r_CREATE_DATASHARE-synopsis"></a>

```
CREATE DATASHARE datashare_name
[[SET] PUBLICACCESSIBLE [=] TRUE | FALSE ];
```

## パラメータ
<a name="r_CREATE_DATASHARE-parameters"></a>

*datashare\$1name*  
データ共有の名前。データ共有名は、クラスター名前空間内で一意である必要があります。

[[SET] PUBLICACCESSIBLE]  
公開でアクセス可能なクラスターとデータ共有を共有できるかどうかを指定する句。  
`SET PUBLICACCESSIBLE` のデフォルト値は `FALSE` です。

## 使用に関する注意事項
<a name="r_CREATE_DATASHARE_usage"></a>

デフォルトでは、データ共有の所有者は共有のみを所有し、共有内のオブジェクトは所有しません。

スーパーユーザーとデータベース所有者のみが CREATE DATASHARE を使用して、ALTER 権限を他のユーザーまたはグループに委任できます。

## 例
<a name="r_CREATE_DATASHARE_examples"></a>

次の例では、データ共有 `salesshare` を作成します。

```
CREATE DATASHARE salesshare;
```

次の例では、AWS Data Exchangeが管理するデータ共有 `demoshare` を作成します。

```
CREATE DATASHARE demoshare SET PUBLICACCESSIBLE TRUE, MANAGEDBY ADX;
```

# CREATE EXTERNAL FUNCTION
<a name="r_CREATE_EXTERNAL_FUNCTION"></a>

Amazon Redshift 用の AWS Lambda に基づいてスカラーユーザー定義関数 (UDF) を作成します。Lambda のユーザー定義関数の詳細については、[スカラー Lambda UDF](udf-creating-a-lambda-sql-udf.md)を参照してください。

## 必要な権限
<a name="r_CREATE_EXTERNAL_FUNCTION-privileges"></a>

以下に、CREATE EXTERNAL FUNCTION に必要な権限を示します。
+ スーパーユーザー
+ CREATE [もしくは REPLACE ] EXTERNAL FUNCTION の権限を持つユーザー

## 構文
<a name="r_CREATE_EXTERNAL_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] EXTERNAL FUNCTION external_fn_name ( [data_type] [, ...] )
RETURNS data_type
{ VOLATILE | STABLE }
LAMBDA 'lambda_fn_name'
IAM_ROLE { default | ‘arn:aws:iam::<AWS アカウント-id>:role/<role-name>’
RETRY_TIMEOUT milliseconds
MAX_BATCH_ROWS count
MAX_BATCH_SIZE size [ KB | MB ];
```

## パラメータ
<a name="r_CREATE_EXTERNAL_FUNCTION-parameters"></a>

OR REPLACE  
その関数の名前、入力引数のデータ型、あるいは*署名*が既存の関数と同じである場合に既存の関数を置き換えることを指定する句。同一のデータタイプセットを定義する新しい関数によってのみ既存の関数を置き換えることができます。関数の置き換えは、スーパーユーザーのみが行うことができます。  
すでに存在するの関数と同じ名前と入力引数のデータタイプで、異なる署名の関数を定義する場合は、新しい関数を作成することになります。つまり、関数名はオーバーロードされます。詳細については、「[関数名の多重定義](udf-naming-udfs.md#udf-naming-overloading-function-names)」を参照してください。

*external\$1fn\$1name*  
外部関数の名前。スキーマ名を指定すると (myschema.myfunction など)、指定したスキーマを使用して関数が作成されます。指定しない場合、現在のスキーマに関数が作成されます。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
すべての UDF 名の前に `f_` を付けることをお勧めします。Amazon Redshift は、UDF 名の `f_` プレフィックスを予約します。`f_` プレフィックスを使用することで、UDF 名が現在または将来の Amazon Redshift の組み込み SQL 関数名と競合しないようにすることができます。詳細については、「[UDF 名の競合の回避](udf-naming-udfs.md)」を参照してください。

*data\$1type*  
入力引数のデータタイプ。詳細については、「[スカラー Python UDF](udf-creating-a-scalar-udf.md)」および「[スカラー Lambda UDF](udf-creating-a-lambda-sql-udf.md)」を参照してください。

RETURNS *data\$1type*  
関数によって返される値のデータ型。RETURNS データ型には、Amazon Redshift のすべての標準データ型を使用できます。詳細については、「[スカラー Python UDF](udf-creating-a-scalar-udf.md)」および「[スカラー Lambda UDF](udf-creating-a-lambda-sql-udf.md)」を参照してください。

VOLATILE \$1 STABLE  
関数の変動率についてのクエリオプティマイザを報告します。  
関数の最適な変動率の分類を厳正に設定してラベルを付けることで、最高の最適化が得られます。厳正度の順に、低度の厳正度から変動率を分類すると、以下のようになります。  
+ VOLATILE
+ STABLE
VOLATILE  
同じ引数が入っている場合、単一のステートメントに含まれる行であっても、関数は連続の呼び出しに異なる結果を返すことがあります。クエリオプティマイザは、変動的な関数の動作について想定することはできません。変動的な関数を使用するクエリは、入力ごとに関数を再評価する必要があります。  
STABLE  
引数が同じである場合、単一のステートメント内で処理される連続的な呼び出しに対して関数が同じ結果を返すことが保証されます。異なるステートメントから呼び出された場合、関数が異なる結果を返すことがあります。このカテゴリにより、オプティマイザは 1 つのステートメント内で関数が呼び出される回数を減らすことができます。  
選択した厳密さが関数に対して有効でない場合、オプティマイザは、この厳密さに基づく一部の呼び出しをスキップするリスクがあることに注意してください。そのため、結果セットが不正確になる場合があります。  
IMMUTABLE 句は、現在 Lambda UDF ではサポートされていません。

LAMBDA *'lambda\$1fn\$1name'*  
 Amazon Redshift が呼び出す関数の名前。  
AWS Lambda 関数を作成する手順については、*AWS Lambdaデベロッパーガイド*の「[コンソールで Lambda 関数を作成する](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)」を参照してください。  
Lambda 関数に必要なアクセス許可の詳細については、*AWS Lambdaデベロッパーガイド*の「[AWS Lambda アクセス許可](https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html)」を参照してください。

IAM\$1ROLE \$1 default \$1 ‘arn:aws:iam::*<AWS アカウント-id>*:role/*<role-name>*’   
デフォルトキーワードを使用して、CREATE EXTERNAL FUNCTION コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。CREATE EXTERNAL FUNCTION コマンドは、この IAM ロールを介して Lambda 関数を呼び出すことが許可されています。クラスターに Lambda 関数を呼び出す権限を持つ既存の IAM ロールがある場合は、ロールの ARN に置き換えることができます。詳細については、「[Lambda UDF の認可パラメータの設定](udf-creating-a-lambda-sql-udf.md#udf-lambda-authorization)」を参照してください。  
以下に、IAM\$1ROLE パラメータの構文を示します。  

```
IAM_ROLE 'arn:aws:iam::aws-account-id:role/role-name'
```

RETRY\$1TIMEOUT *milliseconds*   
再試行バックオフの遅延に対して Amazon Redshift が使用する合計時間 (ミリ秒)。  
失敗したクエリをすぐに再試行する代わりに、Amazon Redshift はバックオフを実行し、再試行の間に一定の時間待機します。その後、Amazon Redshift は、すべての遅延の合計が指定した RETRY\$1TIMEOUT 値以上になるまで、失敗したクエリを再実行するためのリクエストを再試行します。デフォルト値は 20,000 ミリ秒です。  
Lambda 関数が呼び出されると、Amazon Redshift は、`TooManyRequestsException`、`EC2ThrottledException`、`ServiceException` などのエラーを受け取ったクエリを再試行します。  
RETRY\$1TIMEOUT パラメータを 0 ミリ秒に設定して、Lambda UDF の再試行を防ぐことができます。

MAX\$1BATCH\$1ROWS *count*  
 Amazon Redshift が 1 回の Lambda 呼び出しに対して 1 回のバッチリクエストで送信する最大行数。  
 このパラメータの最小値は 1 です。最大値は INT\$1MAX または 2,147,483,647 です。  
 このパラメータはオプションです。デフォルト値は INT \$1MAX または 2,147,483,647 です。

MAX\$1BATCH\$1SIZE *size* [ KB \$1 MB ]   
 Amazon Redshift が 1 回の Lambda 呼び出しに対して 1 回のバッチリクエストで送信するデータペイロードの最大サイズ。  
 このパラメータの最小値は 1 KB です。最大値は 5 MB です。  
 このパラメータのデフォルト値は 5 MB です。  
 KB と MB はオプションです。測定単位を設定しない場合、Amazon Redshift はデフォルトで KB を使用します。

## 使用に関する注意事項
<a name="r_CREATE_FUNCTION-usage-notes"></a>

Lambda UDF を作成するときは、次の点を考慮してください。
+ 入力引数に対する Lambda 関数呼び出しの順序は、固定も保証もされていません。クラスター設定によっては、クエリを実行するインスタンス間で順序が異なる場合があります。
+ 関数が入力引数ごとに 1 回だけ適用されるという保証はありません。Amazon Redshift と AWS Lambda とのやり取りにより、同じ入力に対して呼び出しが繰り返される可能性があります。

## 例
<a name="r_CREATE_FUNCTION-examples"></a>

以下は、スカラー Lambda ユーザー定義関数 (UDF) の使用例を示します。

### Node.js Lambda 関数を使用したスカラー Lambda UDF の例
<a name="r_CREATE_FUNCTION-lambda-example-node"></a>

次の例では、入力引数として 2 つの整数を受け取る `exfunc_sum` という外部関数を作成します。この関数は、合計を整数出力として返します。呼び出される Lambda 関数の名前は `lambda_sum` です。この Lambda 関数に使用される言語は Node.js 12.x です。IAM ロールを必ず指定してください。この例では、IAM ロールとして `'arn:aws:iam::123456789012:user/johndoe'` を使用しています。

```
CREATE EXTERNAL FUNCTION exfunc_sum(INT,INT)
RETURNS INT
VOLATILE
LAMBDA 'lambda_sum'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

Lambda 関数はリクエストペイロードを受け取り、各行を繰り返して処理します。単一の行ですべての値が加算されて、その行の合計が計算され、応答配列に保存されます。結果配列の行数は、リクエストペイロードで受信した行数と似ています。

JSON 応答ペイロードは、外部関数によって認識されるために、['results' (結果)] フィールドに結果データを持っている必要があります。Lambda 関数に送信されるリクエストの引数フィールドには、データペイロードが含まれます。バッチリクエストの場合、データペイロードに複数の行が存在する可能性があります。次の Lambda 関数は、リクエストデータペイロードのすべての行を繰り返し処理します。また、単一の行内のすべての値を個別に繰り返します。

```
exports.handler = async (event) => {
    // The 'arguments' field in the request sent to the Lambda function contains the data payload.
    var t1 = event['arguments'];

    // 'len(t1)' represents the number of rows in the request payload.
    // The number of results in the response payload should be the same as the number of rows received.
    const resp = new Array(t1.length);

    // Iterating over all the rows in the request payload.
    for (const [i, x] of t1.entries())
    {
        var sum = 0;
        // Iterating over all the values in a single row.
        for (const y of x) {
            sum = sum + y;
        }
        resp[i] = sum;
    }
    // The 'results' field should contain the results of the lambda call.
    const response = {
        results: resp
    };
    return JSON.stringify(response);
};
```

次の例では、リテラル値を使用して外部関数を呼び出します。

```
select exfunc_sum(1,2);
exfunc_sum
------------
 3
(1 row)
```

次の例では、整数データ型の 2 つの列 c1 と c2 を持つ t\$1sum というテーブルを作成し、2 行のデータを挿入します。次に、このテーブルの列名を渡すことにより、外部の関数が呼び出されます。2 つのテーブル行は、リクエストペイロードのバッチリクエストで単一の Lambda 呼び出しとして送信されます。

```
CREATE TABLE t_sum(c1 int, c2 int);
INSERT INTO t_sum VALUES (4,5), (6,7);
SELECT exfunc_sum(c1,c2) FROM t_sum;
 exfunc_sum
---------------
 9
 13
(2 rows)
```

### RETRY\$1TIMEOUT 属性を使用したスカラー Lambda UDF の例
<a name="r_CREATE_FUNCTION-lambda-example-retry"></a>

次のセクションでは、Lambda UDF で RETRY\$1TIMEOUT 属性を使用する方法の例を見つけることができます。

AWS Lambda 関数には、関数ごとに設定する同時実行数についての制限があります。同時実行数の制限に関する詳細については、「*AWS Lambda デベロッパーガイド*」の「[Lambda 関数の同時実行の管理](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html)」と、AWS コンピューティングブログの記事「[AWS Lambda 関数の同時実行の管理](https://aws.amazon.com/blogs/compute/managing-aws-lambda-function-concurrency)」を参照してください。

Lambda UDF によって処理されるリクエストの数が同時実行制限を超えると、新しいリクエストは `TooManyRequestsException` エラーを受け取ります。Lambda UDF は、Lambda 関数に送信されるリクエスト間のすべての遅延の合計が、設定した RETRY\$1TIMEOUT 値以上になるまで、このエラーを再試行します。デフォルトの RETRY\$1TIMEOUT 値は 20,000 ミリ秒です。

次の例では、`exfunc_sleep_3` という名前の Lambda 関数を使用します。この関数は、リクエストペイロードを取り込み、各行を繰り返し処理し、入力を大文字に変換します。その後、3 秒間スリープし、結果を返します。この Lambda 関数に使用される言語は Python 3.8 です。

結果配列の行数は、リクエストペイロードで受信した行数と似ています。JSON 応答ペイロードは、外部関数によって認識されるために、`results` フィールドに結果データを持っている必要があります。Lambda 関数に送信されるリクエストの `arguments` フィールドには、データペイロードが含まれています。バッチリクエストの場合、データペイロードに複数の行が表示されることがあります。

この関数の同時実行制限は、RETRY\$1TIMEOUT 属性の使用法を示すために、予約済み同時実行で特に 1 に設定されています。属性が 1 に設定されている場合、Lambda 関数は一度に 1 つのリクエストしか処理できません。

```
import json
import time
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            resp[i] = y.upper()

    time.sleep(3)
    ret = dict()
    ret['results'] = resp
    ret_json = json.dumps(ret)
    return ret_json
```

次に、RETRY\$1TIMEOUT 属性の追加例を 2 つ示します。それぞれ単一の Lambda UDF を呼び出します。Lambda UDF を呼び出す間、各例は同じ SQL クエリを実行して、2 つの同時実行データベースセッションから同時に Lambda UDF を呼び出します。Lambda UDF を呼び出す最初のクエリが UDF によって処理されている場合、2 番目のクエリは `TooManyRequestsException` エラーを受け取ります。この結果は、UDF で予約された同時実行を特別に 1 に設定したために発生します。Lambda 関数の予約済み同時実行を設定する方法については、[予約済み同時実行数の設定](https://docs.aws.amazon.com/lambda/latest/dg/configuration-concurrency.html#configuration-concurrency-reservedconfiguration-concurrency-reserved)を参照してください。

次の最初の例では、Lambda UDF の RETRY\$1TIMEOUT 属性を 0 ミリ秒に設定します。Lambda リクエストが Lambda 関数から例外を受け取った場合、Amazon Redshift は再試行を行いません。この結果は、RETRY\$1TIMEOUT 属性が 0 に設定されているために発生します。

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 0;
```

RETRY\$1TIMEOUT を 0 に設定すると、別々のデータベースセッションから次の 2 つのクエリを実行して、異なる結果を確認できます。

Lambda UDF を使用する最初の SQL クエリが正常に実行されます。

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

別のデータベースセッションから同時に実行される 2 番目のクエリは、`TooManyRequestsException` エラーを受け取ります。

```
select exfunc_upper('Varchar');
ERROR:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
DETAIL:
-----------------------------------------------
error:  Rate Exceeded.; Exception: TooManyRequestsException; ShouldRetry: 1
code:      32103
context:query:     0
location:  exfunc_client.cpp:102
process:   padbmaster [pid=26384]
-----------------------------------------------
```

次の 2 番目の例では、Lambda UDF の RETRY\$1TIMEOUT 属性を 3,000 ミリ秒に設定します。2 番目のクエリが同時に実行された場合でも、Lambda UDF は遅延の合計が 3,000 ミリ秒になるまで再試行します。したがって、両方のクエリが正常に実行されます。

```
CREATE OR REPLACE EXTERNAL FUNCTION exfunc_upper(varchar)
RETURNS varchar
VOLATILE
LAMBDA 'exfunc_sleep_3'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test'
RETRY_TIMEOUT 3000;
```

RETRY\$1TIMEOUT を 3,000 ミリ秒に設定すると、別々のデータベースセッションから次の 2 つのクエリを実行して、同じ結果を確認できます。

Lambda UDF を実行する最初の SQL クエリが正常に実行されます。

```
select exfunc_upper('Varchar');
 exfunc_upper
 --------------
 VARCHAR
(1 row)
```

2 番目のクエリは同時に実行され、Lambda UDF は遅延の合計が 3,000 ミリ秒になるまで再試行します。

```
select exfunc_upper('Varchar');
 exfunc_upper
--------------
 VARCHAR
(1 row)
```

### Python Lambda 関数を使用したスカラー Lambda UDF の例
<a name="r_CREATE_FUNCTION-lambda-example-python"></a>

次の例では、`exfunc_multiplication` という名前の外部関数を作成します。この関数は、数値を乗算して整数を返します。この例では、Lambda 応答に success フィールドと `error_msg` フィールドが組み込まれています。乗算結果に整数オーバーフローがあり、`error_msg` メッセージが `Integer multiplication overflow` に設定されている場合、成功フィールドは false に設定されます。`exfunc_multiplication` 関数は、入力引数として 3 つの整数を取り、その合計を整数出力として返します。

呼び出される Lambda 関数の名前は `lambda_multiplication` です。この Lambda 関数に使用される言語は Python 3.8 です。IAM ロールを必ず指定してください。

```
CREATE EXTERNAL FUNCTION exfunc_multiplication(int, int, int)
RETURNS INT
VOLATILE
LAMBDA 'lambda_multiplication'
IAM_ROLE 'arn:aws:iam::123456789012:role/Redshift-Exfunc-Test';
```

Lambda 関数はリクエストペイロードを受け取り、各行を繰り返して処理します。1 つの行ですべての値が乗算され、その行の結果が計算されます。この結果は、応答リストに保存されます。この例では、デフォルトで true に設定されているブールの成功値を使用します。行の乗算結果に整数オーバーフローがある場合、成功値は false に設定されます。その後、反復ループが中断されます。

応答ペイロードの作成中に、成功値が false の場合、次の Lambda 関数がペイロードに `error_msg` フィールドを追加します。また、エラーメッセージを `Integer multiplication overflow` に設定します。成功値が true の場合、結果データが結果フィールドに追加されます。結果配列の行数は、存在する場合、リクエストペイロードで受信した行数と似ています。

Lambda 関数に送信されるリクエストの引数フィールドには、データペイロードが含まれます。バッチリクエストの場合、データペイロードに複数の行が存在する可能性があります。次の Lambda 関数は、リクエストデータペイロードのすべての行を繰り返し処理し、1 つの行内のすべての値を個別に繰り返し処理します。

```
import json
def lambda_handler(event, context):
    t1 = event['arguments']
    # 'len(t1)' represents the number of rows in the request payload.
    # The number of results in the response payload should be the same as the number of rows received.
    resp = [None]*len(t1)

    # By default success is set to 'True'.
    success = True
    # Iterating over all rows in the request payload.
    for i, x in enumerate(t1):
        mul = 1
        # Iterating over all the values in a single row.
        for j, y in enumerate(x):
            mul = mul*y

        # Check integer overflow.
        if (mul >= 9223372036854775807 or mul <= -9223372036854775808):
            success = False
            break
        else:
            resp[i] = mul
    ret = dict()
    ret['success'] = success
    if not success:
        ret['error_msg'] = "Integer multiplication overflow"
    else:
        ret['results'] = resp
    ret_json = json.dumps(ret)

    return ret_json
```

次の例では、リテラル値を使用して外部関数を呼び出します。

```
SELECT exfunc_multiplication(8, 9, 2);
  exfunc_multiplication
---------------------------
          144
(1 row)
```

次の例では、整数データ型の 3 つの列 c1、c2、および c3 を持つ t\$1multi という名前のテーブルを作成します。外部関数は、このテーブルの列名を渡すことによって呼び出されます。データは、エラーがどのように伝播されるかを示す整数オーバーフローを引き起こすような方法で挿入されます。

```
CREATE TABLE t_multi (c1 int, c2 int, c3 int);
INSERT INTO t_multi VALUES (2147483647, 2147483647, 4);
SELECT exfunc_multiplication(c1, c2, c3) FROM t_multi;
DETAIL:
  -----------------------------------------------
  error:  Integer multiplication overflow
  code:      32004context:
  context:
  query:     38
  location:  exfunc_data.cpp:276
  process:   query2_16_38 [pid=30494]
  -----------------------------------------------
```

# CREATE EXTERNAL MODEL
<a name="r_create_external_model"></a>

**Topics**
+ [CREATE EXTERNAL MODEL の前提条件](#r_create_external_model_prereqs)
+ [必要な権限](#r_simple_create_model-privileges)
+ [コスト管理](#r_create_model_cost)
+ [CREATE EXTERNAL MODEL 構文](#r_create_external_model_syntax)
+ [CREATE EXTERNAL MODEL のパラメータと設定](#r_create_external_model_parameters_settings)
+ [CREATE EXTERNAL MODEL 推論関数パラメータ](#r_create_external_model_if_parameters)

## CREATE EXTERNAL MODEL の前提条件
<a name="r_create_external_model_prereqs"></a>

CREATE EXTERNAL MODEL ステートメントを使用する前に、[Amazon Redshift ML を使用するためのクラスターの設定](getting-started-machine-learning.md#cluster-setup) の前提条件を満たしてください。前提条件の概要は次のとおりです。
+ AWS マネジメントコンソールまたは AWS Command Line Interface (AWS CLI) を使用して、Amazon Redshift クラスターを作成します。
+ クラスターの作成中に AWS Identity and Access Management (IAM) ポリシーをアタッチします。
+ Amazon Redshift と Amazon Bedrock が、他のサービスとやり取りするロールを引き受けることを許可するには、IAM ロールに適切な信頼ポリシーを追加します。
+ Amazon Bedrock コンソールから、使用対象の特定の LLM へのアクセスを有効にします。
+ (オプション) データが少量にもかかわらず Amazon Bedrock によるスロットリング例外 (`Too many requests, please wait before trying again` など) が発生する場合は、Amazon Bedrock アカウントの **[サービスクォータ]** でクォータを確認します。適用されているアカウントレベルのクォータが、使用しているモデルに対する **InvokeModel** リクエストの AWS デフォルトクォータ値と少なくとも同じであることを確認してください。

IAM ロール、信頼ポリシー、およびその他の前提条件の詳細については、「[Amazon Redshift ML を使用するためのクラスターの設定](getting-started-machine-learning.md#cluster-setup)」を参照してください。

## 必要な権限
<a name="r_simple_create_model-privileges"></a>

CREATE EXTERNAL MODEL に必要な権限を以下に示します。
+ スーパーユーザー
+ CREATE MODEL の権限を持つユーザー
+ GRANT CREATE MODEL の権限を持つロール

## コスト管理
<a name="r_create_model_cost"></a>

 Amazon Redshift 機械学習は既存のクラスターリソースを使用して予測モデルを作成するため、追加料金は発生しません。ただし、選択したモデルに基づいて Amazon Bedrock を使用する場合は AWS 料金が発生します。詳細については、「[Amazon Redshift 機械学習を使用するためのコスト](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)」を参照してください。

## CREATE EXTERNAL MODEL 構文
<a name="r_create_external_model_syntax"></a>

以下は、CREATE EXTERNAL MODEL ステートメントの完全な構文です。

```
CREATE EXTERNAL MODEL model_name 
FUNCTION function_name
IAM_ROLE {default/'arn:aws:iam::<account-id>:role/<role-name>'}
MODEL_TYPE BEDROCK
SETTINGS (
   MODEL_ID model_id
   [, PROMPT 'prompt prefix']
   [, SUFFIX 'prompt suffix']
   [, REQUEST_TYPE {RAW|UNIFIED}]
   [, RESPONSE_TYPE {VARCHAR|SUPER}]
);
```

`CREATE EXTERNAL MODEL` コマンドは、コンテンツの生成に使用する推論関数を作成します。

以下は、`RAW` の `REQUEST_TYPE` を使用して `CREATE EXTERNAL MODEL` が作成する推論関数の構文です。

```
SELECT inference_function_name(request_super) 
[FROM table];
```

以下は、`UNIFIED` の `REQUEST_TYPE` を使用して `CREATE EXTERNAL MODEL` が作成する推論関数の構文です。

```
SELECT inference_function_name(input_text, [, inference_config [, additional_model_request_fields]])
[FROM table];
```

推論関数の使用方法については、「[Amazon Redshift ML と Amazon Bedrock の統合用の外部モデルの使用](machine-learning-br.md#machine-learning-br-use)」を参照してください。

## CREATE EXTERNAL MODEL のパラメータと設定
<a name="r_create_external_model_parameters_settings"></a>

このセクションでは、 `CREATE EXTERNAL MODEL` コマンドのパラメータと設定について説明します。

**Topics**
+ [CREATE EXTERNAL MODEL のパラメータ](#r_create_external_model_parameters)
+ [CREATE EXTERNAL MODEL の設定](#r_create_external_model_settings)

### CREATE EXTERNAL MODEL のパラメータ
<a name="r_create_external_model_parameters"></a>

model\$1name  
外部モデルの名前。スキーマ内のモデル名は一意でなければなりません。

FUNCTION *function\$1name (data\$1type [,...] )*  
`CREATE EXTERNAL MODEL` が作成する推論関数の名前。推論関数を使用して Amazon Bedrock にリクエストを送信し、ML 生成テキストを取得できます。

IAM\$1ROLE * \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1*  
Amazon Redshift が Amazon Bedrock へのアクセスに使用する IAM ロール。IAM ロールに関する詳細は、「[Amazon Redshift ML と Amazon Bedrock の統合のための IAM ロールの作成または更新](machine-learning-br.md#machine-learning-br-iam)」を参照してください。

MODEL\$1TYPE BEDROCK  
モデルタイプを指定します。唯一の有効な値は `BEDROCK` です。

SETTINGS ( MODEL\$1ID model\$1id [,...] )  
外部モデルの設定を指定します。詳細については、以下のセクションを参照してください。

### CREATE EXTERNAL MODEL の設定
<a name="r_create_external_model_settings"></a>

MODEL\$1ID model\$1id  
外部モデルの識別子 (例: `anthropic.claude-v2`)。Amazon Bedrock モデルの ID については、「[Amazon Bedrock model IDs](https://docs.aws.amazon.com/bedrock/latest/userguide/model-ids.html)」を参照してください。

PROMPT 'prompt prefix'  
Amazon Redshift がすべての推論リクエストの先頭に追加する静的プロンプトを指定します。`UNIFIED` の `REQUEST_TYPE` でのみサポートされます。

SUFFIX 'prompt suffix'  
Amazon Redshift がすべての推論リクエストの末尾に追加する静的プロンプトを指定します。`UNIFIED` の `REQUEST_TYPE` でのみサポートされます。

REQUEST\$1TYPE \$1 RAW \$1 UNIFIED \$1  
Amazon Bedrock に送信されるリクエストの形式を指定します。有効な値には次のようなものがあります。  
+ **RAW**: 推論関数は入力を単一の SUPER 値として受け取り、常に SUPER 値を返します。SUPER 値の形式は、選択した Amazon Bedrock モデルに固有です。SUPER は、複数のアルゴリズムを組み合わせて、より優れた単一の予測を生成する予測モデルです。
+ **UNIFIED**: 推論関数は統合 API を使用します。すべてのモデルに Amazon Bedrock との統一された一貫したインターフェイスがあります。これは、メッセージをサポートするすべてのモデルで機能します。この値はデフォルト値です。

  詳細については、「Amazon Bedrock API ドキュメント」の「[Converse API documentation](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html)」を参照してください。**

RESPONSE\$1TYPE \$1 VARCHAR \$1 SUPER \$1  
レスポンスの形式を指定します。`REQUEST_TYPE` が `RAW` の場合、`RESPONSE_TYPE` は必須であり、有効な値は `SUPER` のみです。他のすべての `REQUEST TYPE` 値では、デフォルト値は `VARCHAR` で、`RESPONSE_TYPE` はオプションです。有効な値には次のようなものがあります。  
+ **VARCHAR**: Amazon Redshift は、モデルによって生成されたテキストレスポンスのみを返します。
+ **SUPER**: Amazon Redshift は、モデルによって生成されたレスポンス JSON 全体を SUPER として返します。これには、テキストレスポンス、停止理由、モデル入出力トークンの使用状況などの情報が含まれます。SUPER は、複数のアルゴリズムを組み合わせて、より優れた単一の予測を生成する予測モデルです。

## CREATE EXTERNAL MODEL 推論関数パラメータ
<a name="r_create_external_model_if_parameters"></a>

このセクションでは、`CREATE EXTERNAL MODEL` コマンドが作成する推論関数の有効なパラメータについて説明します。

### `RAW` の `REQUEST_TYPE` 用の CREATE EXTERNAL MODEL 推論関数パラメータ
<a name="r_create_external_model_if_parameters_raw"></a>

`RAW` の `REQUEST_TYPE` で作成された推論関数には 1 つの SUPER 入力引数があり、常に SUPER データ型を返します。入力 SUPER の構文は、Amazon Bedrock から選択された特定のモデルのリクエストの構文に従います。

### `UNIFIED` の `REQUEST_TYPE` 用の CREATE EXTERNAL MODEL 推論関数パラメータ
<a name="r_create_external_model_if_parameters_unified"></a>

input\$1text  
Amazon Redshift が Amazon Bedrock に送信するテキスト。

inference\$1config  
Amazon Redshift が Amazon Bedrock に送信するオプションのパラメータを含む SUPER 値。これには以下が含まれます。  
+ maxTokens
+ stopSequences
+ 温度
+ topP
これらのパラメータはすべてオプションであり、すべて大文字と小文字が区別されます。これらのパラメータの詳細については、「Amazon Bedrock API リファレンス」の「[InferenceConfiguration](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InferenceConfiguration.html)」を参照してください。**

# CREATE EXTERNAL SCHEMA
<a name="r_CREATE_EXTERNAL_SCHEMA"></a>

現在のデータベースに新しい外部スキーマを作成します。この外部スキーマを使用して、Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL 互換エディションデータベースに接続できます。また、AWS Glueや Athena などの外部データカタログ内のデータベース、あるいは Amazon EMR などの Apache Hive メタストアにあるデータベースを参照する、外部スキーマを作成することもできます。

このスキーマの所有者は CREATE EXTERNAL SCHEMA コマンドの発行者です。外部スキーマの所有者を移行するには、「[ALTER SCHEMA](r_ALTER_SCHEMA.md)」を使用して所有者を変更します。スキーマに他のユーザーやグループへのアクセス権を付与するには、[GRANT](r_GRANT.md)コマンドを使用します。

外部テーブルのアクセス権限に対して、GRANT または REVOKE コマンドを使用することはできません。代わりに、外部スキーマに対するアクセス権限の付与または取り消しを実行します。

**注記**  
現在、Amazon Athena データカタログに Redshift Spectrum の外部テーブルがある場合は、AWS Glue Data Catalogに Athena データカタログを移行することが可能です。Redshift Spectrum で AWS Glue データカタログを使用するには、AWS Identity and Access Management(IAM) ポリシーの変更が必要になる場合があります。詳細については、*Athena ユーザーガイド*の「[AWS Glue データカタログへのアップグレード](https://docs.aws.amazon.com/athena/latest/ug/glue-athena.html#glue-upgrade)」を参照してください。

外部スキーマの詳細を表示するには、[SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md)システムビューにクエリを実行します。

## 構文
<a name="r_CREATE_EXTERNAL_SCHEMA-synopsis"></a>

次の構文は、外部データカタログを使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。詳細については、「[Amazon Redshift Spectrum](c-using-spectrum.md)」を参照してください。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM [ [ DATA CATALOG ] | HIVE METASTORE | POSTGRES | MYSQL | KINESIS | MSK | REDSHIFT | KAFKA ]
[ DATABASE 'database_name' ]
[ SCHEMA 'schema_name' ]
[ REGION 'aws-region' ]
[ IAM_ROLE [ default | 'SESSION' | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' ] ]
[ AUTHENTICATION [ none | iam | mtls] ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ]
[ URI ['hive_metastore_uri' [ PORT port_number ] | 'hostname' [ PORT port_number ] | 'Kafka bootstrap URL'] ] 
[ CLUSTER_ARN 'arn:aws:kafka:<region>:<AWS アカウント-id>:cluster/msk/<cluster uuid>' ]
[ CATALOG_ROLE [ 'SESSION' | 'catalog-role-arn-string' ] ]
[ CREATE EXTERNAL DATABASE IF NOT EXISTS ]
[ CATALOG_ID 'Amazon Web Services account ID containing Glue or Lake Formation database' ]
```

次の構文は、RDS POSTGRES または Aurora PostgreSQL への横串検索を使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。作成した外部スキーマで、Kinesis Data Streams などのストリーミングソースを参照することもできます。詳細については、「[Amazon Redshift での横串検索を使用したデータのクエリの実行](federated-overview.md)」を参照してください。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM POSTGRES
DATABASE 'federated_database_name' [SCHEMA 'schema_name']
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

次の構文は、RDS MySQL または Aurora MySQL への横串検索を使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。詳細については、「[Amazon Redshift での横串検索を使用したデータのクエリの実行](federated-overview.md)」を参照してください。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] local_schema_name
FROM MYSQL
DATABASE 'federated_database_name'
URI 'hostname' [ PORT port_number ]
IAM_ROLE [ default | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' ]
SECRET_ARN 'ssm-secret-arn'
```

次に、Kinesis のストリームデータの参照に使用する、CREATE EXTERNAL SCHEMA コマンドでの構文記述を示します。詳細については、「[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)」を参照してください。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KINESIS
IAM_ROLE [ default | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' ]
```

次の構文は、Amazon Managed Streaming for Apache Kafka または Confluent Cloud クラスターとそのトピックを参照し、そこからデータを取り込むために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。接続するには、ブローカー URI を指定します。詳細については、「[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)」を参照してください。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] schema_name
FROM KAFKA
[ IAM_ROLE [ default | 'arn:aws:iam::<AWS アカウント-id>:role/<role-name>' ] ]
URI 'Kafka bootstrap URI'
AUTHENTICATION [ none | iam | mtls ]
[ AUTHENTICATION_ARN 'acm-certificate-arn' | SECRET_ARN 'ssm-secret- arn' ];
```

次の構文は、クロスデータベースクエリを使用してデータを参照するために使用する CREATE EXTERNAL SCHEMA コマンドを示しています。

```
CREATE EXTERNAL SCHEMA local_schema_name
FROM  REDSHIFT
DATABASE 'redshift_database_name' SCHEMA 'redshift_schema_name'
```

## パラメータ
<a name="r_CREATE_EXTERNAL_SCHEMA-parameters"></a>

IF NOT EXISTS  
指定されたスキーマが既に存在する場合、コマンドはエラーで終了するのではなく、何も変更しないで、スキーマが存在するというメッセージを返すことを示す句。この句は、CREATE EXTERNAL SCHEMA で既存のスキーマを作成しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

local\$1schema\$1name  
新しい外部スキーマの名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

FROM [ DATA CATALOG ] \$1 HIVE METASTORE \$1 POSTGRES \$1 MYSQL \$1 KINESIS \$1 MSK \$1 REDSHIFT   
外部データベースの場所を示すキーワード。  
DATA CATALOG は、外部データベースが Athena データカタログまたは AWS Glue Data Catalog 内で定義されていることを示します。  
外部データベースが別の AWS リージョンにある外部データカタログで定義されている場合は、REGION パラメータが必要です。DATA CATALOG はデフォルトです。  
HIVE METASTORE は、外部データベースが Apache Hive メタストアで定義されていることを示します。HIVE METASTORE が指定されている場合は、URI が必要です。  
POSTGRES は、外部データベースが RDS PostgreSQL または Aurora PostgreSQL で定義されていることを示します。  
MYSQL は、外部データベースが RDS MySQL または Aurora MySQL で定義されていることを示します。  
KINESIS は、データソースが Kinesis Data Streams からのストリームであることを示します。  
MSK は、データソースが Amazon MSK でプロビジョニングされたクラスターまたはサーバーレスクラスターであることを示します。  
KAFKA は、データソースが Kafka クラスターであることを示しています。このキーワードは、Amazon MSK と Confluent Cloud の両方で使用できます。

FROM REDSHIFT  
データベースが Amazon Redshift にあることを示すキーワード。

DATABASE '*redshift\$1database\$1name*' SCHEMA '*redshift\$1schema\$1name*'  
Amazon Redshift データベースの名前。  
*redshift\$1schema\$1name* は、Amazon Redshift のスキーマを示します。デフォルトの *redshift\$1schema\$1name* は `public` です。

DATABASE '*federated\$1database\$1name*'  
サポートされている PostgreSQL または MySQL データベースエンジンの外部データベースの名前を示すキーワード。

[SCHEMA '*schema\$1name*']  
*schema\$1name* は、サポートされている PostgreSQL データベースエンジンのスキーマを示します。デフォルトの *schema\$1name* は `public` です。  
サポートされている MySQL データベースエンジンへの横串検索を設定する場合、SCHEMA を指定することはできません。

REGION '*aws-region*'  
外部データベースが Athena データカタログまたは AWS Glue Data Catalog 内で定義されている場合の、データベースが存在する AWS リージョン。このパラメータは、データベースが外部データカタログで定義されている場合に必要です。

URI [ 'hive\$1metastore\$1uri' [ PORT port\$1number ] \$1 'hostname' [ PORT port\$1number ] \$1 'Kafka bootstrap URI' ]  
サポートされている PostgreSQL または MySQL データベースエンジンのホスト名 URI と port\$1number。*hostname* は、レプリカセットのヘッドノードです。エンドポイントは、Amazon Redshift クラスターから到達可能 (ルーティング可能) である必要があります。PostgreSQL のデフォルトの port\$1number は 5432 です。MySQL のデフォルトの port\$1number は 3306 です。  
サポートされている PostgreSQL または MySQL データベースエンジンは、Amazon Redshift クラスターと同じ VPC 内にあり、Amazon Redshift と RDS の url-rsPostgreSQL または Aurora PostgreSQL をリンクするセキュリティグループが必要です。さらに、拡張 VPC ルーティングを使用して、クロス VPC ユースケースを設定できます。詳細については、「[RedShift マネージド VPC エンドポイント](https://docs.aws.amazon.com/redshift/latest/mgmt/managing-cluster-cross-vpc.html)」を参照してください。
**Hive メタストア URI の指定**  
データベースが Hive メタストアにある場合は、URI を指定し、オプションでメタストアのポート番号を指定します。デフォルトのポート番号は 9083 です。  
URI にはプロトコル仕様 ("http://") が含まれていません。有効な URI の例: `uri '172.10.10.10'`。  
**ストリーミング取り込み用のブローカー URI の指定**  
ブートストラップブローカーの URI を指定すると、Amazon MSK または Confluent Cloud クラスターに接続してストリーミングデータを受信できます。詳細と例については、「[Amazon Managed Streaming for Apache Kafka からのストリーミング取り込みを開始する](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion-getting-started-MSK.html)」を参照してください。

IAM\$1ROLE [ default \$1 'SESSION' \$1 'arn:aws:iam::*<AWS アカウント-id>*:role/*<role-name>*' ]  
デフォルトキーワードを使用して、CREATE EXTERNAL SCHEMA コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。  
フェデレーション ID を使用して Amazon Redshift クラスターに接続し、このコマンドを使用して作成された外部スキーマからテーブルにアクセスする場合は、`'SESSION'` を使用します。詳細については、フェデレーション ID の設定方法を説明している「[フェデレーション ID を使用してローカルリソースへの Amazon Redshift アクセスおよび Amazon Redshift Spectrum 外部テーブルを管理する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html)」を参照してください。ARN の代わりに `'SESSION'` を使用するこの設定は、`DATA CATALOG` を使用してスキーマを作成した場合にのみ使用できることに注意してください。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。少なくとも、IAM ロールには、Amazon S3 バケットで LIST オペレーションを実行してアクセスを受ける許可と、バケットに含まれる Amazon S3 オブジェクトで GET オペレーションを実行する許可が必要です。  
以下に ARN が 1 つの場合の IAM\$1ROLE パラメータ文字列の構文を示します。  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
ロールを連鎖することで、クラスターは別のアカウントに属している可能性がある別の IAM ロールを引き受けることができます。最大 10 個までのロールを連鎖できます。ロールの連鎖の例については、「[Amazon Redshift Spectrum での IAM ロールの連鎖](c-spectrum-iam-policies.md#c-spectrum-chaining-roles)」を参照してください。  
 この IAM ロールに次のような IAM アクセス許可ポリシーをアタッチします。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
フェデレーションクエリで使用する IAM ロールを作成するステップについては、「[フェデレーテッドクエリを使用するためのシークレットと IAM ロールの作成](federated-create-secret-iam-role.md)」を参照してください。  
連鎖したロールのリストには空白を含めないでください。
以下に連鎖された 3 つのロールの構文を示します。  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

SECRET\$1ARN '*ssm-secret-arn*'  
AWS Secrets Manager を使用して作成された、(サポート対象の) PostgreSQL または MySQL データベースエンジンシークレットの、Amazon リソースネーム (ARN)。シークレットの ARN を作成および取得する方法については、「*AWS Secrets Manager User Guide*」の「[Manage secrets with AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html)」および「[Amazon Redshift でのシークレットの Amazon リソースネーム (ARN) の取得](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-secrets-manager-integration-retrieving-secret.html)」を参照してください。

CATALOG\$1ROLE [ 'SESSION' \$1 *catalog-role-arn-string*]  
データカタログの認証と認可のためにフェデレーション ID を使用して Amazon Redshift クラスターに接続する場合は、`'SESSION'` を使用します。フェデレーション ID のステップを完了するための詳細については、「[フェデレーション ID を使用してローカルリソースへの Amazon Redshift アクセスおよび Amazon Redshift Spectrum 外部テーブルを管理する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html)」を参照してください。この `'SESSION'` ロールは、DATA CATALOG でスキーマを作成した場合にのみ使用できることに注意してください。  
クラスターによってデータカタログの認証と認可に使用される IAM ロールの Amazon リソースネーム (ARN) を使用します。  
CATALOG\$1ROLE は Amazon Redshift を指定せず、指定された IAM\$1ROLE を使用します。カタログロールには、AWS Glueあるいは Athena のデータカタログへのアクセス許可が必要です。詳細については、「[Amazon Redshift Spectrum 用の IAM ポリシー](c-spectrum-iam-policies.md)」を参照してください。  
以下に ARN が 1 つの場合の CATALOG\$1ROLE パラメータ文字列の構文を示します。  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role>'
```
ロールを連鎖することで、クラスターは別のアカウントに属している可能性がある別の IAM ロールを引き受けることができます。最大10 個までのロールを連鎖できます。詳細については、「[Amazon Redshift Spectrum での IAM ロールの連鎖](c-spectrum-iam-policies.md#c-spectrum-chaining-roles)」を参照してください。  
連鎖したロールのリストは、空白を含むことができません。
以下に連鎖された 3 つのロールの構文を示します。  

```
CATALOG_ROLE 'arn:aws:iam::<aws-account-id>:role/<catalog-role-1-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-2-name>,arn:aws:iam::<aws-account-id>:role/<catalog-role-3-name>'
```


CREATE EXTERNAL DATABASE IF NOT EXISTS  
指定の外部データベースが存在しない場合に、DATABASE 引数で指定された名前で外部データベースを作成する句。指定の外部データベースが存在する場合、コマンドは変更を加えません。この場合、コマンドは、エラーで終了せず、外部データが存在することを示すメッセージを返します。  
CREATE EXTERNAL DATABASE IF NOT EXISTS を HIVE METASTORE と併用することはできません。  
AWS Lake Formation が有効になっているデータカタログで、CREATE EXTERNAL DATABASE IF NOT EXISTS を使用するには、データカタログに対し `CREATE_DATABASE` を実行する許可が必要です。

CATALOG\$1ID '*Glue または Lake Formation データベースに含まれるアマゾン ウェブ サービスのアカウント ID *'  
データカタログデータベースが保存されているアカウント ID。  
`CATALOG_ID` は、次のいずれかを設定することで、データカタログの認証と認可にフェデレーション ID を使用して Amazon Redshift クラスターまたは Amazon Redshift Serverless に接続する予定の場合に限り指定できます。  
+ `CATALOG_ROLE`～`'SESSION'`
+ `IAM_ROLE`、`'SESSION'`、`'CATALOG_ROLE'` をデフォルトに設定する 
フェデレーション ID のステップを完了するための詳細については、「[フェデレーション ID を使用して、ローカルリソースと Amazon Redshift Spectrum の外部テーブルへの Amazon Redshift アクセスを管理する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html)」を参照してください。

AUTHENTICATION  
ストリーミング取り込み用に定義された認証タイプ。認証タイプによるストリーミング取り込みは、Amazon Managed Streaming for Apache Kafka と連携します。`AUTHENTICATION` タイプには以下のものがあります。  
+ **none** — 必要な認証がないことを指定します。これは、MSK の場合は非認証アクセス、Apache Kafka の場合は TLS を使用したプレーンテキストに相当します。
+ **iam** — IAM 認証を指定します。これを選択するときは、IAM ロールに IAM 認証のアクセス許可があることを確認します。外部スキーマの定義の詳細については、「[Apache Kafka ソースからのストリーミング取り込みの開始方法](materialized-view-streaming-ingestion-getting-started-MSK.md)」を参照してください。
+ **mtls** – クライアントとサーバー間の認証を行うことで、相互 Transport Layer Security が安全な通信を提供することを指定します。この場合、クライアントは Redshift で、サーバーは Amazon MSK です。mTLS によるストリーミング取り込みの設定の詳細については、「[Apache Kafka ソースからの Redshift ストリーミング取り込みにおける mTLS による認証](materialized-view-streaming-ingestion-mtls.md)」を参照してください。


AUTHENTICATION\$1ARN  
Amazon Redshift が Amazon MSK による mtls 認証に使用する AWS Certificate Manager 証明書の ARN。ARN は、発行された証明書を選択する際に ACM コンソールで利用できます。

CLUSTER\$1ARN  
ストリーミング取り込みの場合、CLUSTER\$1ARN は、ストリーミング元の Amazon Managed Streaming for Apache Kafka クラスターのクラスター識別子です。CLUSTER\$1ARN を使用する場合は、`kafka:GetBootstrapBrokers` アクセス許可を含む IAM ロールポリシーが必要です。このオプションは、下位互換性のために用意されています。現在、ブートストラップブローカー URI オプションを使用して Amazon Managed Streaming for Apache Kafka クラスターに接続することをお勧めします。詳細については、「[ストリーミングの取り込み](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-streaming-ingestion.html)」を参照してください。

## 使用に関する注意事項
<a name="r_CREATE_EXTERNAL_SCHEMA_usage"></a>

Athena データカタログを使用する場合の制限については、「AWS 全般のリファレンス」の「[Athena の制限](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#amazon-athena-limits)」を参照してください。

AWS Glue Data Catalog を使用する場合の制限については、「AWS 全般のリファレンス」の「[AWS Glue の制限](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_glue)」を参照してください。

これらの制限は、Hive メタストアには適用されません。

スキーマの数は 1 つのデータベースにつき最大 9,900 個です。詳細については、*Amazon Redshift 管理ガイド*の「[クォータと制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。

スキーマの登録を解除するには、[DROP SCHEMA](r_DROP_SCHEMA.md)コマンドを使用します。

外部スキーマの詳細を表示するには、システムビューにクエリを実行します。
+ [SVV\$1EXTERNAL\$1SCHEMAS](r_SVV_EXTERNAL_SCHEMAS.md) 
+ [SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md) 
+ [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) 

## 例
<a name="r_CREATE_EXTERNAL_SCHEMA_examples"></a>

次の例では、米国西部 (オレゴン) リージョンの `sampledb` という名前のデータカタログのデータベースを使用して外部スキーマを作成します。この例を Athena または AWS Glue データカタログで使用します。

```
create external schema spectrum_schema
from data catalog
database 'sampledb'
region 'us-west-2'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

次の例は、外部スキーマを作成し、`spectrum_db`という名前で新しい外部データベースを作成します。

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole'
create external database if not exists;
```

次の例では、`hive_db`という名前の Hive メタストアデータベースを使って外部スキーマを作成します。

```
create external schema hive_schema
from hive metastore
database 'hive_db'
uri '172.10.10.10' port 99
iam_role 'arn:aws:iam::123456789012:role/MySpectrumRole';
```

次の連鎖ロールの例では、Amazon S3 へのアクセスにロール `myS3Role` を使用し、データカタログへのアクセスには `myAthenaRole` を使用します。詳細については、「[Amazon Redshift Spectrum での IAM ロールの連鎖](c-spectrum-iam-policies.md#c-spectrum-chaining-roles)」を参照してください。

```
create external schema spectrum_schema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myRedshiftRole,arn:aws:iam::123456789012:role/myS3Role'
catalog_role 'arn:aws:iam::123456789012:role/myAthenaRole'
create external database if not exists;
```

次の例では、Aurora PostgreSQL データベースを参照する外部スキーマを作成します。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM POSTGRES
DATABASE 'my_aurora_db' SCHEMA 'my_aurora_schema'
URI 'endpoint to aurora hostname' PORT 5432  
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

次の例では、外部スキーマを作成し、コンシューマークラスターにインポートされた sales\$1db を参照しています。

```
CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
```

次の例では、Aurora MySQL データベースを参照する外部スキーマを作成します。

```
CREATE EXTERNAL SCHEMA [IF NOT EXISTS] myRedshiftSchema
FROM MYSQL
DATABASE 'my_aurora_db'
URI 'endpoint to aurora hostname'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyAuroraRole'
SECRET_ARN 'arn:aws:secretsmanager:us-east-2:123456789012:secret:development/MyTestDatabase-AbCdEf'
```

# CREATE EXTERNAL TABLE
<a name="r_CREATE_EXTERNAL_TABLE"></a>

指定のスキーマに新しい外部テーブルを作成します。外部テーブルはすべて、外部スキーマで作成されている必要があります。外部スキーマと外部テーブルは検索パスをサポートしていません。詳細については、「[CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)」を参照してください。

Amazon Redshift では、CREATE EXTERNAL TABLE コマンドを使用して作成された外部テーブルに加えて、AWS Glueまたは AWS Lake Formation カタログ、あるいは Apache Hive メタストアで定義された外部テーブルの参照が可能です。[CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md) コマンドを使用して、外部カタログで定義された外部データベースを登録し、外部テーブルを Amazon Redshift で使用できるようにします。外部テーブルが AWS Glue または AWS Lake Formation カタログあるいは Hive メタストアに存在する場合は、CREATE EXTERNAL TABLE を使用してテーブルを作成する必要はありません。外部テーブルを表示するには、[SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md)システムビューに対してクエリを実行します。

CREATE EXTERNAL TABLE AS コマンドを実行することで、クエリからの列定義に基づいて外部テーブルを作成し、そのクエリの結果を Amazon S3 に書き込むことができます。結果は、Apache Parquet または区切りテキスト形式です。外部テーブルにパーティションキーがある場合、Amazon Redshift はそれらのパーティションキーに従って新しいファイルをパーティション分割し、新しいパーティションを外部カタログに自動的に登録します。CREATE EXTERNAL TABLE AS の詳細については、「[使用に関する注意事項](r_CREATE_EXTERNAL_TABLE_usage.md)」を参照してください。

他の Amazon Redshift テーブルで使用したものと同じ SELECT 構文で、外部テーブルにクエリを実行できます。INSERT 構文を使用して、Amazon S3 の外部テーブルの場所に新しいファイルを書き込むこともできます。詳細については、「[INSERT (外部テーブル)](r_INSERT_external_table.md)」を参照してください。

外部テーブルでビューを作成するには、[CREATE VIEW](r_CREATE_VIEW.md)ステートメントに WITH NO SCHEMA BINDING 句を含めます。

トランザクション内 (BEGIN… END) で CREATE EXTERNAL TABLE を実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

## 必要な権限
<a name="r_CREATE_EXTERNAL_TABLE-privileges"></a>

外部テーブルを作成するには、外部スキーマの所有者またはスーパーユーザーである必要があります。外部スキーマの所有者を移行するには、「ALTER SCHEMA」を使用して所有者を変更します。外部テーブルへのアクセスは、外部スキーマへのアクセスによってコントロールされます。外部テーブルに対してアクセス権限の [GRANT](r_GRANT.md) または [REVOKE](r_REVOKE.md) を実行することはできません。代わりに、外部スキーマに対して USAGE の付与または削除を実行します。

[使用に関する注意事項](r_CREATE_EXTERNAL_TABLE_usage.md) には、外部テーブルに対する特定のアクセス許可に関する追加情報があります。

## 構文
<a name="r_CREATE_EXTERNAL_TABLE-synopsis"></a>

```
CREATE EXTERNAL TABLE
external_schema.table_name
(column_name data_type [, …] )
[ PARTITIONED BY (col_name data_type [, … ] )]
[ { ROW FORMAT DELIMITED row_format |
  ROW FORMAT SERDE 'serde_name'
  [ WITH SERDEPROPERTIES ( 'property_name' = 'property_value' [, ...] ) ] } ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' | 's3://bucket/manifest_file' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
```

以下に示しているのは、CREATE EXTERNAL TABLE AS の構文です。

```
CREATE EXTERNAL TABLE
external_schema.table_name
[ PARTITIONED BY (col_name [, … ] ) ]
[ ROW FORMAT DELIMITED row_format ]
STORED AS file_format
LOCATION { 's3://bucket/folder/' }
[ TABLE PROPERTIES ( 'property_name'='property_value' [, ...] ) ]
 AS
 { select_statement }
```

## パラメータ
<a name="r_CREATE_EXTERNAL_TABLE-parameters"></a>

 *external\$1schema.table\$1name*   
作成され、外部スキーマ名で修飾されるテーブルの名前。外部テーブルは、外部スキーマで作成されている必要があります。詳細については、「[CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)」を参照してください。  
テーブル名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。Amazon Redshift では、ユーザー定義の一時テーブルと、クエリ処理またはシステムメンテナンス中に Amazon Redshift によって作成された一時テーブルを含め、クラスターごとに 9,900 テーブルの制限を適用します。必要に応じて、データベース名でテーブル名を修飾することができます。次の例では、データベース名は `spectrum_db`、外部スキーマ名は `spectrum_schema`、テーブル名は `test` です。  

```
create external table spectrum_db.spectrum_schema.test (c1 int)
stored as parquet
location 's3://amzn-s3-demo-bucket/myfolder/';
```
指定のデータベースまたはスキーマが存在せず、テーブルが作成されていない場合、このステートメントはエラーを返します。システムデータベース `template0`、`template1`、`padb_harvest`、または `sys:internal` にテーブルまたはビューを作成することはできません。  
テーブル名は、指定のスキーマで一意の名前にする必要があります。  
有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

( *column\$1name* *data\$1type* )  
作成される各列の名前とデータタイプ。  
列名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。列名 `"$path"` または `"$size"` は指定できません。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
デフォルトでは、Amazon Redshift は疑似列 (`$path` および `$size`) を使用して外部テーブルを作成します。セッションの疑似列の作成を無効にするには、`spectrum_enable_pseudo_columns`設定パラメータを `false` に設定します。詳細については、「[疑似列](r_CREATE_EXTERNAL_TABLE_usage.md#r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns)」を参照してください。  
擬似列が有効な場合、1 つのテーブルで定義できる列の最大数は 1,598 です。擬似列が有効でない場合、1 つのテーブルで定義できる列の最大数は 1,600 です。  
「横長のテーブル」を作成する場合は、ロードとクエリ処理の結果が即時に表示されるように、列リストが行幅の限度を超えないことを確認します。詳細については、「[使用に関する注意事項](r_CREATE_TABLE_NEW.md#r_CREATE_TABLE_usage)」を参照してください。  
CREATE EXTERNAL TABLE AS コマンドの場合、列はクエリから取得されるため、列リストは必要ありません。

 *data\$1type*   
次の [データ型](c_Supported_data_types.md)がサポートされています。  
+ SMALLINT (INT2)
+ INTEGER (INT、INT4)
+ BIGINT (INT8)
+ DECIMAL (NUMERIC)
+ REAL (FLOAT4)
+ DOUBLE PRECISION (FLOAT8)
+ BOOLEAN (BOOL)
+ CHAR (CHARACTER)
+ VARCHAR (CHARACTER VARYING)
+ VARBYTE (CHARACTER VARYING) – Parquet および ORC データファイルで、パーティション化されていないテーブルでのみ使用できます。
+ DATE – テキスト、Parquet、または ORC データファイルでのみ使用できます。またはパーティション列としてのみ使用できます。
+ TIMESTAMP
  
DATE では、以下に示す形式を使用できます。数字を使用して表される月の値では、次の形式がサポートされています。  
+ `mm-dd-yyyy` は、例えば、`05-01-2017` です。これがデフォルトです。
+ `yyyy-mm-dd`、ただし年は 2 桁以上で表します。例えば、`2017-05-01`。
3 文字の略語を使用して表される月の値では、次の形式がサポートされています。  
+ `mmm-dd-yyyy` は、例えば、`may-01-2017` です。これがデフォルトです。
+ `dd-mmm-yyyy`、ただし年は 2 桁以上で表します。例えば、`01-may-2017`。
+ `yyyy-mmm-dd`、ただし年は 3 桁以上で表します。例えば、`2017-may-01`。
年の値が一貫して 100 未満の場合、年は次の方法で計算されます。  
+ 年の値が 70 より小さい場合、年は 2000 を足した数として計算されます。例えば、`mm-dd-yyyy`形式での 05-01-17 という日付は `05-01-2017` に変換されます。
+ 年の値が 100 未満で 69 より大きい場合、年は 1900 を足した数として計算されます。例えば、`mm-dd-yyyy`形式での 05-01-89 という日付は `05-01-1989` に変換されます。
+ 2 桁で表される年の値については、先頭にゼロを追加した 4 桁として年を表します。
テキストファイルのタイムスタンプ値は、`yyyy-mm-dd HH:mm:ss.SSSSSS`形式であることが必要です。次のタイムスタンプ値は、`2017-05-01 11:30:59.000000`となっています。  
VARCHAR 列の長さは、文字単位ではなくバイト単位で定義されます。例えば、VARCHAR(12) 列には、シングルバイト文字なら 12 個、2 バイト文字なら 6 個含めることができます。外部テーブルのクエリを実行すると、エラーが返されずに、定義された列サイズに合うように結果が切り捨てられます。詳細については、「[ストレージと範囲](r_Character_types.md#r_Character_types-storage-and-ranges)」を参照してください。  
最高のパフォーマンスを得るために、データに合う最小の列サイズを指定することをお勧めします。列の値の最大サイズ (バイト単位) を調べるには、[OCTET\$1LENGTH](r_OCTET_LENGTH.md) 関数を使用します。次の例では、E メール列の値の最大サイズを返します。  

```
select max(octet_length(email)) from users;

max
---
 62
```

PARTITIONED BY (*col\$1name* *data\$1type* [, … ] )  
1 つ以上のパーティション列でパーティション化されたテーブルを定義する句。指定の組み合わせごとに独立したデータディレクトリが使用されます。これにより、一部の状況でクエリパフォーマンスが向上します。パーティション化された列はテーブルデータ内には存在しません。テーブル列と同じ *col\$1name* の値を使用すると、エラーになります。  
パーティションテーブルを作成した後、[ALTER TABLE](r_ALTER_TABLE.md)… ADD PARTITION ステートメントを使用してテーブルを変更し、新しいパーティションを外部カタログに登録します。パーティションを追加する際は、パーティションデータを含む で Amazon S3 サブフォルダの位置を定義します。  
例えば、テーブル `spectrum.lineitem_part` が `PARTITIONED BY (l_shipdate date)` で定義されている場合は、以下の ALTER TABLE コマンドを実行してパーティションを追加します。  

```
ALTER TABLE spectrum.lineitem_part ADD PARTITION (l_shipdate='1992-01-29')
LOCATION 's3://spectrum-public/lineitem_partition/l_shipdate=1992-01-29';
```
CREATE EXTERNAL TABLE AS を使用する場合、ALTER TABLE...ADD PARTITION を実行する必要はありません。Amazon Redshift は、新しいパーティションを外部カタログに自動的に登録します。また、Amazon Redshift は、テーブルに定義された 1 つまたは複数のパーティションキーに基づいて、対応するデータを Amazon S3 のパーティションに自動的に書き込みます。  
パーティションを表示するには、[SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md)システムビューにクエリを実行します。  
CREATE EXTERNAL TABLE AS コマンドの場合、この列はクエリから取得されるため、パーティション列のデータ型を指定する必要はありません。

ROW FORMAT DELIMITED *rowformat*  
仮想データの型式を指定する句。以下に、*rowformat* で想定される値を示します。  
+ LINES TERMINATED BY '*delimiter*'
+ FIELDS TERMINATED BY '*delimiter*'
'*区切り記号*'に 1 つの ASCII 文字を指定します｡ 印刷不能な ASCII 文字は、`'\`*`ddd`*`'` の形式を使用して指定できます。*`d`* は 8 進数 (0～7) で、最大値は「\$1177」です。次の例では、BEL (ベル) 文字を 8 進数で指定しています。  

```
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\007'
```
ROW FORMAT を省略した場合のデフォルト形式は DELIMITED FIELDS TERMINATED BY '\$1A' (ヘッダーの開始) と LINES TERMINATED BY '\$1n' (改行) です。

ROW FORMAT SERDE '*serde\$1name*'[WITH SERDEPROPERTIES ( '*property\$1name*' = '*property\$1value*' [, ...] ) ]  
基盤となるデータの SERDE 形式を指定する句。    
'*serde\$1name*'  
SerDe 名。以下の形式を指定できます。  
+ org.apache.hadoop.hive.serde2.RegexSerDe 
+ com.amazonaws.glue.serde.GrokSerDe 
+ org.apache.hadoop.hive.serde2.OpenCSVSerde 

  このパラメータは、OpenCSVSerde において、次の SerDe プロパティをサポートします。

  ```
  'wholeFile' = 'true' 
  ```

  `wholeFile` プロパティに `true` を設定することで、OpenCSV リクエストの引用符で囲まれた文字列内の改行文字 (\$1 n) を、正しく解析することができます。
+ org.openx.data.jsonserde.JsonSerDe
  + JSON SERDE は Ion ファイルもサポートしています。
  + JSON は正しい形式になっている必要があります。
  + Ion および JSON 形式のタイムスタンプには、ISO8601 形式を使用する必要があります。
  + このパラメータでは、JsonSerDe のための、次の SerDe プロパティがサポートされています。

    ```
    'strip.outer.array'='true' 
    ```

    配列内に複数の JSON レコードが含まれているかのように、大括弧で囲まれた 1 つの非常に大きな配列 ( [ … ] ) を含む Ion/JSON ファイルを処理します。
+ com.amazon.ionhiveserde.IonHiveSerDe

  Amazon ION 形式では、データ型に加えて、テキスト形式とバイナリ形式を使用できます。ION 形式のデータを参照する外部テーブルの場合、外部テーブルの各列を、対応する ION 形式データの各要素にマッピングします。詳細については、「[Amazon Ion](https://amzn.github.io/ion-docs/)」を参照してください。また、入力形式と出力形式を指定する必要もあります。  
WITH SERDEPROPERTIES ( '*property\$1name*' = '*property\$1value*' [, ...] ) ]  
オプションで、プロパティ名と値をコンマで区切って指定します。
ROW FORMAT を省略した場合のデフォルト形式は DELIMITED FIELDS TERMINATED BY '\$1A' (ヘッダーの開始) と LINES TERMINATED BY '\$1n' (改行) です。

STORED AS *file\$1format*  
外部データファイルのファイル形式。  
有効な形式は次のとおりです。  
+ PARQUET
+ RCFILE (LazyBinaryColumnarSerDe ではなく ColumnarSerD eのみを使用するデータ用)
+ SEQUENCEFILE
+ TEXTFILE (JSON ファイルを含むテキストファイル)。
+ ORC 
+ AVRO 
+ INPUTFORMAT '*input\$1format\$1classname*' OUTPUTFORMAT '*output\$1format\$1classname*'
CREATE EXTERNAL TABLE AS コマンドは、TEXTFILE と PARQUET の 2 つのファイル形式のみをサポートしています。  
INPUTFORMAT と OUTPUTFORMAT では、以下の例に示すように、クラス名を指定します。  

```
'org.apache.hadoop.mapred.TextInputFormat'
```

LOCATION \$1 's3://*bucket/folder*/' \$1 's3://*bucket/manifest\$1file*'\$1  <a name="create-external-table-location"></a>
データファイルを含む Amazon S3 バケットかフォルダ、または Amazon S3 オブジェクトパスのリストを含むマニフェストファイルへのパス。バケットは、Amazon Redshift クラスターと同じ AWS リージョン内に置かれている必要があります。サポートされている AWS リージョンの一覧は、「[Amazon Redshift Spectrum の制限事項](c-spectrum-considerations.md)」でご確認ください。  
パスがバケットかフォルダを指定している場合 (`'s3://amzn-s3-demo-bucket/custdata/'` など)、Redshift Spectrum は指定されたバケットかフォルダ、およびサブフォルダのファイルをスキャンします。Redshift Spectrum は、隠しファイルと、ファイル名がピリオドやアンダースコアで始まるファイルを無視します。  
パスがマニフェストファイルを指定している場合、`'s3://bucket/manifest_file'`引数は 1 つのファイル (たとえば `'s3://amzn-s3-demo-bucket/manifest.txt'` など) を明示的に参照する必要があります。キープレフィックスを参照することはできません。  
マニフェストは、JSON 形式のテキストファイルであり、Amazon S3 からロードする各ファイルの URL とファイルサイズ (バイト単位) を示します。URL にはバケット名およびファイルの完全オブジェクトパスが含まれます。マニフェストで指定するファイルの場所は異なるバケットでもかまいませんが、すべてのバケットは Amazon Redshift クラスターと同じ AWS リージョンに置かれている必要があります。ファイルが 2 回リストされている場合、ファイルは 2 回ロードされます。次の例は、3 つのファイルをロードするマニフェストの JSON を示しています。  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
特定のファイルを含めることを必須にすることができます。これを行うには、マニフェストのファイルレベルで `mandatory` オプションを含めます。欠落している必須ファイルを使用して外部テーブルをクエリすると、SELECT ステートメントは失敗します。外部テーブルの定義に含まれるすべてのファイルが存在することを確認します。これらがすべて存在しない場合は、最初の必須ファイルが見つかりませんというエラーが表示されます。次の例では、`mandatory`オプションを `true` に設定したマニフェストの JSON を説明します。  

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket1/custdata.1", "mandatory":true, "meta": { "content_length": 5956875 } },
    {"url":"s3://amzn-s3-demo-bucket1/custdata.2", "mandatory":false, "meta": { "content_length": 5997091 } },
    {"url":"s3://amzn-s3-demo-bucket2/custdata.1", "meta": { "content_length": 5978675 } }
  ]
}
```
UNLOAD を使用して作成したファイルを参照する場合は、[UNLOAD](r_UNLOAD.md)で MANIFEST パラメータを使用して作成したマニフェストを使用できます。マニフェストファイルは、「[Amazon S3 からの COPY](copy-parameters-data-source-s3.md)」でのマニフェストファイルと互換性がありますが、使用するキーが異なります。使用しないキーは無視されます。

TABLE PROPERTIES ( '*property\$1name*'='*property\$1value*' [, ...] )   
テーブルプロパティのテーブル定義を設定する句。  
テーブルのプロパティでは、大文字と小文字が区別されます。  
 'compression\$1type'='*value*'  
 ファイル名に拡張子が含まれていない場合に使用する圧縮タイプを設定するプロパティ。ファイル拡張子があるときに、このプロパティを設定すると、拡張子は無視されて、プロパティで設定された値が使用されます。圧縮タイプの有効値は次のとおりです。  
+ bzip2
+ gzip
+ なし
+ snappy  
'data\$1cleansing\$1enabled'='true / false’  
このプロパティは、テーブルのデータ処理が有効かどうかを設定します。'data\$1cleansing\$1enabled' が true に設定されている場合は、テーブルのデータ処理が有効です。'data\$1cleansing\$1enabled' が false に設定されている場合、テーブルのデータ処理は無効です。以下は、このプロパティが制御するテーブルレベルでのデータ処理プロパティのリストです。  
+ column\$1count\$1mismatch\$1handling
+ invalid\$1char\$1handling
+ overflow\$1handling
+ replacement\$1char
+ surplus\$1char\$1handling
例については、「[データ処理の例](r_CREATE_EXTERNAL_TABLE_examples.md#r_CREATE_EXTERNAL_TABLE_examples-data-handling)」を参照してください。  
'invalid\$1char\$1handling'='*value*'  
クエリ結果に無効な UTF-8 文字値が含まれている場合に実行するアクションを指定します。以下のアクションを指定できます。    
DISABLED  
無効な文字の処理を実行しません。  
FAIL  
無効な UTF-8 値が含まれたデータを返すクエリをキャンセルします。  
SET\$1TO\$1NULL   
無効な UTF-8 値を null に置き換えます。  
DROP\$1ROW  
行内の各値を null に置き換えます。  
REPLACE  
`replacement_char` を使用して無効な文字を指定した置換文字に置き換えます。  
'replacement\$1char'='*character*’  
`invalid_char_handling` を `REPLACE` に設定するときに使用する置換文字を指定します。  
'numeric\$1overflow\$1handling'='value’  
ORC データに列定義 (例えば SMALLINT や int16) よりも大きい整数 (例えば BIGINT や int64) が含まれているときに実行するアクションを指定します。以下のアクションを指定できます。    
DISABLED  
無効な文字の処理が無効化されています。  
FAIL  
データに無効な文字が含まれているときにクエリをキャンセルします。  
SET\$1TO\$1NULL  
無効な文字を null に設定します。  
DROP\$1ROW  
行内の各値を null に設定します。  
'surplus\$1bytes\$1handling'='*value*'  
ロードされているデータで、VARBYTE データが含まれる列に定義されたデータ型の長さを超えるデータの処理方法を指定します。Redshift Spectrum はデフォルトで、列の幅を超えるデータの値を null に設定します。  
クエリがデータ型の長さを超えるデータを返すときに実行する以下のアクションを指定できます。    
SET\$1TO\$1NULL  
列幅を超えるデータを null に置き換えます。  
無効  
余剰バイトの処理を実行しません。  
FAIL  
列幅を超えるデータを返すクエリをキャンセルします。  
DROP\$1ROW  
列幅を超えるデータを含むすべての行を削除します。  
TRUNCATE  
列に定義された最大文字数を超える文字を削除します。  
'surplus\$1char\$1handling'='*value*'  
ロードされているデータで、VARCHAR、CHAR、または文字列データが含まれる列に定義されたデータ型の長さを超えるデータの処理方法を指定します。Redshift Spectrum はデフォルトで、列の幅を超えるデータの値を null に設定します。  
クエリが列幅を超えるデータを返すときに実行する以下のアクションを指定できます。    
SET\$1TO\$1NULL  
列幅を超えるデータを null に置き換えます。  
無効  
余剰文字の処理を実行しません。  
FAIL  
列幅を超えるデータを返すクエリをキャンセルします。  
DROP\$1ROW  
行内の各値を null に置き換えます。  
TRUNCATE  
列に定義された最大文字数を超える文字を削除します。  
'column\$1count\$1mismatch\$1handling'='value'  
ファイルに含まれる行の値が、外部テーブル定義で指定された列数よりも少ないか多いかを識別します。このプロパティは、非圧縮テキストファイル形式でのみ使用できます。以下のアクションを指定できます。    
DISABLED  
列数の不一致処理が無効化されています。  
FAIL  
列数の不一致が検出された場合、クエリは失敗します。  
SET\$1TO\$1NULL  
欠落した値を NULL で埋め、各行の追加の値を無視します。  
DROP\$1ROW  
列数の不一致エラーを含むすべての行をスキャンからドロップします。  
'numRows'='*row\$1count*'  
テーブル定義の numRows 値を設定するプロパティ。外部テーブルの統計を明示的に更新するには、テーブルのサイズを示す numRows プロパティを設定します。Amazon Redshift は、外部テーブルを分析して、クエリオプティマイザがクエリプランを生成するために使用するテーブル統計を生成することはありません。外部テーブルに対してテーブル統計が設定されていない場合、Amazon Redshift は、外部テーブルが大きなテーブルであり、ローカルテーブルが小さいテーブルであるという前提に基づいてクエリ実行プランを生成します。  
'skip.header.line.count'='*line\$1count*'  
各ソースファイルの最初に省略する行数を設定するプロパティ。  
'serialization.null.format'=' '  
範囲を示すプロパティは、フィールドで指定されたテキストに完全に一致するものがある場合に、値 `NULL` を返します。  
'orc.schema.resolution'='mapping\$1type'  
ORC データ形式を使用するテーブルの列マッピングタイプを設定するプロパティ。このプロパティは、他のデータ形式では無視されます。  
列マッピングタイプの有効値は次のとおりです。  
+ name 
+ position 
*orc.schema.resolution* プロパティが省略されている場合、列はデフォルトで、名前を基準としてマップされます。*orc.schema.resolution* が *'name'* または *'position'* 以外の値に設定されている場合、列は位置を基準としてマップされます。列マッピングの詳細については、「[外部テーブル列を ORC 列にマッピングする](c-spectrum-external-tables.md#c-spectrum-column-mapping-orc)」を参照してください。  
COPY コマンドは、位置のみを基準として ORC データファイルにマップします。*orc.schema.resolution* テーブルプロパティは、COPY コマンドの動作には影響しません。  
'write.parallel'='on / off'  
CREATE EXTERNAL TABLE AS がデータを並列で書き込む必要があるかどうかを設定するプロパティ。デフォルトでは、CREATE EXTERNAL TABLE AS は、クラスター内のスライスの数に応じて、データを複数のファイルに並列で書き込みます。デフォルトのオプションは on です。'write.parallel' が off に設定されている場合、CREATE EXTERNAL TABLE AS は 1 つ以上のデータファイルを Amazon S3 に順次に書き込みます。このテーブルプロパティは、同じ外部テーブルへの後続の INSERT ステートメントにも適用されます。  
'write.maxfilesize.mb'='size'  
CREATE EXTERNAL TABLE AS によって Amazon S3 に書き込まれる各ファイルの最大サイズ (MB 単位) を設定するプロパティ。サイズは 5 〜 6200 の有効な整数であることが必要です。デフォルトの最大ファイルサイズは 6,200 MB です。このテーブルプロパティは、同じ外部テーブルへの後続の INSERT ステートメントにも適用されます。  
‘write.kms.key.id’=‘*value*’  
Amazon S3 オブジェクトのサーバー側の暗号化 (SSE) を有効にする AWS Key Management Service キーを指定できます。この *value* は、以下のいずれかになります。  
+ Amazon S3 バケットに保存されたデフォルトの AWS KMS キーを使用するための `auto`。
+ データを暗号化するために指定する *kms-key*。  
*select\$1statement*  
クエリを定義して 1 つ以上の行を外部テーブルに挿入するステートメント。クエリによって生成されるすべての行は、テーブル定義に基づいて、テキストまたは Parquet 形式で Amazon S3 に書き込まれます。

## 例
<a name="r_CREATE_EXTERNAL_TABLE_examples_link"></a>

例のコレクションは、[例](r_CREATE_EXTERNAL_TABLE_examples.md) にあります。

# 使用に関する注意事項
<a name="r_CREATE_EXTERNAL_TABLE_usage"></a>

このトピックには、[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) の使用上の注意事項が含まれています。[PG\$1TABLE\$1DEF](r_PG_TABLE_DEF.md)、[STV\$1TBL\$1PERM](r_STV_TBL_PERM.md)、PG\$1CLASS、または information\$1schema など、標準の Amazon Redshift テーブルに使用したものと同じリソースを使用して Amazon Redshift Spectrum テーブルの詳細を表示することはできません。ビジネスインテリジェンスまたは分析ツールが Redshift Spectrum 外部テーブルを認識しない場合は、[SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md)および [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) にクエリを実行するようにアプリケーションを設定します。

## CREATE EXTERNAL TABLE AS
<a name="r_CETAS"></a>

一部のケースでは、AWS Glueデータカタログ、AWS Lake Formation外部カタログ、または Apache Hive メタストアに対して、CREATE EXTERNAL TABLE AS コマンドを実行します。このような場合は、AWS Identity and Access Management(IAM) ロールを使用して外部スキーマを作成します。この IAM ロールには、Amazon S3 に対する読み込みと書き込みの両方のアクセス許可が必要です。

Lake Formation カタログを使用する場合、IAM ロールにはカタログにテーブルを作成するアクセス許可が必要です。この場合、ターゲット Amazon S3 パスに対するデータレイクの場所のアクセス許可が必要です。この IAM ロールは新しい AWS Lake Formation テーブルの所有者になります。

ファイル名が必ず一意になるように、Amazon Redshift ではデフォルトで、Amazon S3 にアップロードされる各ファイルの名前に以下の形式が使用されます。

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

 例: 「`20200303_004509_810669_1007_0001_part_00.parquet`」。

CREATE EXTERNAL TABLE AS コマンドを実行するときは、以下の点を考慮してください。
+ Amazon S3 の場所は空であることが必要です。
+ Amazon Redshift では、STORED AS 句を使用する場合、PARQUET および TEXTFILE 形式のみがサポートされます。
+ 列定義リストを定義する必要はありません。新しい外部テーブルの列の名前とデータ型は、SELECT クエリから直接派生します。
+ PARTITIONED BY 句でパーティション列のデータ型を定義する必要はありません。パーティションキーを指定する場合、この列の名前が SELECT クエリの結果にあることが必要です。複数のパーティション列がある場合、SELECT クエリでのそれらの順序は重要ではありません。Amazon Redshift は、PARTITIONED BY 句で定義された順序を使用して、外部テーブルを作成します。
+ Amazon Redshift は、パーティションキーの値に基づいて、出力ファイルをパーティションフォルダに自動的にパーティション分割します。デフォルトでは、Amazon Redshift はパーティション列を出力ファイルから削除します。
+ LINES TERMINATED BY 'delimiter' 句はサポートされていません。
+ ROW FORMAT SERDE 'serde\$1name' 句はサポートされていません。
+ マニフェストファイルの使用はサポートされていません。したがって、Amazon S3 のマニフェストファイルに LOCATION 句を定義することはできません。
+ Amazon Redshift は、コマンドの最後で 'numRows' テーブルプロパティを自動的に更新します。
+ 'compression\$1type' テーブルプロパティは、PARQUET ファイル形式に基づいて 'none' または 'snappy' のみを受け入れます。
+ Amazon Redshift では、外側の SELECT クエリで LIMIT 句を使用できません。代わりに、ネストされた LIMIT 句を使用できます。
+ STL\$1UNLOAD\$1LOG を使用して、各 CREATE EXTERNAL TABLE AS オペレーションによって Amazon S3 に書き込まれたファイルを追跡できます。

## 外部テーブルの作成およびクエリのアクセス許可
<a name="r_CREATE_EXTERNAL_TABLE_usage-permissions"></a>

外部テーブルを作成するには、外部スキーマの所有者またはスーパーユーザーであることを確認してください。外部スキーマの所有者を移行するには、「[ALTER SCHEMA](r_ALTER_SCHEMA.md)」を使用します。次の例は、`spectrum_schema`スキーマの所有者を `newowner` に変更します。

```
alter schema spectrum_schema owner to newowner;
```

Redshift Spectrum クエリを実行するには、次のアクセス権限が必要です。
+ スキーマのアクセス権限の使用 
+ 現在のデータベースに一時テーブルを作成するアクセス権限 

次の例では、スキーマ `spectrum_schema` の使用許可を `spectrumusers` ユーザーグループに付与しています。

```
grant usage on schema spectrum_schema to group spectrumusers;
```

次の例では、データベース `spectrumdb` の一時アクセス権限を `spectrumusers` ユーザーグループに付与しています。

```
grant temp on database spectrumdb to group spectrumusers;
```

## 疑似列
<a name="r_CREATE_EXTERNAL_TABLE_usage-pseudocolumns"></a>

Amazon Redshift はデフォルトで疑似列 *\$1path* および *\$1size* を使用して外部テーブルを作成します。これらの列を選択すると、Amazon S3 のデータファイルへのパスとクエリによって返された各行のデータファイルのサイズが表示されます。列名 (*\$1path* および *\$1size*) は、二重引用符で囲む必要があります。*SELECT \$1* 句は、疑似列を返しません。次の例に示すように、*\$1path* と *\$1size* の列名をクエリに明示的に含める必要があります。

```
select "$path", "$size"
from spectrum.sales_part
where saledate = '2008-12-01';
```

セッションの疑似列の作成を無効にするには、*spectrum\$1enable\$1pseudo\$1columns* 設定パラメータを *false* に設定します。

**重要**  
Redshift Spectrum では、Amazon S3 のデータファイルをスキャンして結果セットのサイズを確認しているため、*\$1size* または *\$1path* を選択すると料金が発生します。詳細については、[Amazon Redshift の料金](https://aws.amazon.com/redshift/pricing/)を参照してください。

## データ処理オプションの設定
<a name="r_CREATE_EXTERNAL_TABLE_usage-data-handling"></a>

テーブルパラメータを設定して、外部テーブルでクエリされているデータの入力処理を指定できます。これには、以下が含まれます。
+ VARCHAR、CHAR、および文字列データが含まれる列内の余剰文字。詳細については、外部テーブルプロパティ「`surplus_char_handling`」を参照してください。
+ VARCHAR、CHAR、および文字列データが含まれる列内の無効な文字。詳細については、外部テーブルプロパティ「`invalid_char_handling`」を参照してください。
+ 外部テーブルプロパティ `invalid_char_handling` に REPLACE を指定するときに使用する置換文字。
+ 整数と小数のデータが含まれる列内でのキャストのオーバーフロー処理。詳細については、外部テーブルプロパティ「`numeric_overflow_handling`」を参照してください。
+ Surplus\$1bytes\$1handling は、varbyte データを含む列の余剰バイトの入力処理を指定します。詳細については、外部テーブルプロパティ「`surplus_bytes_handling`」を参照してください。

# 例
<a name="r_CREATE_EXTERNAL_TABLE_examples"></a>

次の例では、SALES という名前のテーブルを `spectrum` という名前の Amazon Redshift 外部スキーマに作成します。データはタブ区切りのテキストファイルになっています。TABLE PROPERTIES 句は、numRows プロパティを 170,000 行に設定します。

CREATE EXTERNAL TABLE の実行に使用する ID によっては、設定が必要な IAM アクセス許可が存在する場合があります。ベストプラクティスとして、アクセス許可ポリシーを IAM ロールにアタッチし、それを必要に応じてユーザーやグループに割り当てることをお勧めします。詳細については、「[Amazon Redshift での Identity and Access Management](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-authentication-access-control.html)」を参照してください。

```
create external table spectrum.sales(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
saledate date,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
row format delimited
fields terminated by '\t'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales/'
table properties ('numRows'='170000');
```

次の例では、JsonSerDe を使用して JSON 形式のデータを参照するテーブルを作成します。

```
create external table spectrum.cloudtrail_json (
event_version int,
event_id bigint,
event_time timestamp,
event_type varchar(10),
awsregion varchar(20),
event_name varchar(max),
event_source varchar(max),
requesttime timestamp,
useragent varchar(max),
recipientaccountid bigint)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties (
'dots.in.keys' = 'true',
'mapping.requesttime' = 'requesttimestamp'
) location 's3://amzn-s3-demo-bucket/json/cloudtrail';
```

以下の CREATE EXTERNAL TABLE AS の例では、パーティション分割されていない外部テーブルを作成します。次に、SELECT クエリの結果を Apache Parquet として Amazon S3 のターゲットの場所に書き込みます。

```
CREATE EXTERNAL TABLE spectrum.lineitem
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/lineitem/'
AS SELECT * FROM local_lineitem;
```

以下の例では、パーティション分割された外部テーブルを作成し、パーティション列を SELECT クエリに含めます。

```
CREATE EXTERNAL TABLE spectrum.partitioned_lineitem
PARTITIONED BY (l_shipdate, l_shipmode)
STORED AS parquet
LOCATION 'S3://amzn-s3-demo-bucket/cetas/partitioned_lineitem/'
AS SELECT l_orderkey, l_shipmode, l_shipdate, l_partkey FROM local_table;
```

外部データカタログ内の既存のデータベースについて、[SVV\$1EXTERNAL\$1DATABASES](r_SVV_EXTERNAL_DATABASES.md)システムビューにクエリを実行します。

```
select eskind,databasename,esoptions from svv_external_databases order by databasename;
```

```
eskind | databasename | esoptions
-------+--------------+----------------------------------------------------------------------------------
     1 | default      | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | sampledb     | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
     1 | spectrumdb   | {"REGION":"us-west-2","IAM_ROLE":"arn:aws:iam::123456789012:role/mySpectrumRole"}
```

外部テーブルの詳細を表示するには、[SVV\$1EXTERNAL\$1TABLES](r_SVV_EXTERNAL_TABLES.md)および [SVV\$1EXTERNAL\$1COLUMNS](r_SVV_EXTERNAL_COLUMNS.md) システムビューにクエリを実行します。

次の例では、SVV\$1EXTERNAL\$1TABLES ビューにクエリを実行します。

```
select schemaname, tablename, location from svv_external_tables;
```

```
schemaname | tablename            | location
-----------+----------------------+--------------------------------------------------------
spectrum   | sales                | s3://redshift-downloads/tickit/spectrum/sales
spectrum   | sales_part           | s3://redshift-downloads/tickit/spectrum/sales_partition
```

次の例では、SVV\$1EXTERNAL\$1COLUMNS ビューにクエリを実行します。

```
select * from svv_external_columns where schemaname like 'spectrum%' and tablename ='sales';
```

```
schemaname | tablename | columnname | external_type | columnnum | part_key
-----------+-----------+------------+---------------+-----------+---------
spectrum   | sales     | salesid    | int           |         1 |        0
spectrum   | sales     | listid     | int           |         2 |        0
spectrum   | sales     | sellerid   | int           |         3 |        0
spectrum   | sales     | buyerid    | int           |         4 |        0
spectrum   | sales     | eventid    | int           |         5 |        0
spectrum   | sales     | saledate   | date          |         6 |        0
spectrum   | sales     | qtysold    | smallint      |         7 |        0
spectrum   | sales     | pricepaid  | decimal(8,2)  |         8 |        0
spectrum   | sales     | commission | decimal(8,2)  |         9 |        0
spectrum   | sales     | saletime   | timestamp     |        10 |        0
```

テーブルパーティションを表示するには、次のクエリを使用します。

```
select schemaname, tablename, values, location
from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+-------------------------------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

次の例では、外部テーブルの関連データファイルの合計サイズを返します。

```
select distinct "$path", "$size"
   from spectrum.sales_part;

 $path                                                                    | $size
--------------------------------------------------------------------------+-------
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/ |  1616
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/ |  1444
```

## パーティション化の例
<a name="r_CREATE_EXTERNAL_TABLE_examples-partitioning"></a>

日付でパーティション化された外部テーブルを作成するには、次のコマンドを実行します。

```
create external table spectrum.sales_part(
salesid integer,
listid integer,
sellerid integer,
buyerid integer,
eventid integer,
dateid smallint,
qtysold smallint,
pricepaid decimal(8,2),
commission decimal(8,2),
saletime timestamp)
partitioned by (saledate date)
row format delimited
fields terminated by '|'
stored as textfile
location 's3://redshift-downloads/tickit/spectrum/sales_partition/'
table properties ('numRows'='170000');
```

パーティションを追加するには、次の ALTER TABLE コマンドを実行します。

```
alter table spectrum.sales_part
add if not exists partition (saledate='2008-01-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-02-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-03-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-04-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-05-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-06-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-07-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-08-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-09-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-10-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-11-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11/';
alter table spectrum.sales_part
add if not exists partition (saledate='2008-12-01')
location 's3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12/';
```

パーティション化されたテーブルからデータを選択するには、次のクエリを実行します。

```
select top 10 spectrum.sales_part.eventid, sum(spectrum.sales_part.pricepaid)
from spectrum.sales_part, event
where spectrum.sales_part.eventid = event.eventid
  and spectrum.sales_part.pricepaid > 30
  and saledate = '2008-12-01'
group by spectrum.sales_part.eventid
order by 2 desc;
```

```
eventid | sum
--------+---------
    914 | 36173.00
   5478 | 27303.00
   5061 | 26383.00
   4406 | 26252.00
   5324 | 24015.00
   1829 | 23911.00
   3601 | 23616.00
   3665 | 23214.00
   6069 | 22869.00
   5638 | 22551.00
```

外部テーブルパーティションを表示するには、[SVV\$1EXTERNAL\$1PARTITIONS](r_SVV_EXTERNAL_PARTITIONS.md)システムビューにクエリを実行します。

```
select schemaname, tablename, values, location from svv_external_partitions
where tablename = 'sales_part';
```

```
schemaname | tablename  | values         | location
-----------+------------+----------------+--------------------------------------------------
spectrum   | sales_part | ["2008-01-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-01
spectrum   | sales_part | ["2008-02-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-02
spectrum   | sales_part | ["2008-03-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-03
spectrum   | sales_part | ["2008-04-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-04
spectrum   | sales_part | ["2008-05-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-05
spectrum   | sales_part | ["2008-06-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-06
spectrum   | sales_part | ["2008-07-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-07
spectrum   | sales_part | ["2008-08-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-08
spectrum   | sales_part | ["2008-09-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-09
spectrum   | sales_part | ["2008-10-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-10
spectrum   | sales_part | ["2008-11-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-11
spectrum   | sales_part | ["2008-12-01"] | s3://redshift-downloads/tickit/spectrum/sales_partition/saledate=2008-12
```

## 行形式の例
<a name="r_CREATE_EXTERNAL_TABLE_examples-row-format"></a>

次に、AVRO 形式で保存されたデータファイルの ROW FORMAT SERDE パラメータの指定例を示します。

```
create external table spectrum.sales(salesid int, listid int, sellerid int, buyerid int, eventid int, dateid int, qtysold int, pricepaid decimal(8,2), comment VARCHAR(255))
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
WITH SERDEPROPERTIES ('avro.schema.literal'='{\"namespace\": \"dory.sample\",\"name\": \"dory_avro\",\"type\": \"record\", \"fields\": [{\"name\":\"salesid\", \"type\":\"int\"},
{\"name\":\"listid\", \"type\":\"int\"},
{\"name\":\"sellerid\", \"type\":\"int\"},
{\"name\":\"buyerid\", \"type\":\"int\"},
{\"name\":\"eventid\",\"type\":\"int\"},
{\"name\":\"dateid\",\"type\":\"int\"},
{\"name\":\"qtysold\",\"type\":\"int\"},
{\"name\":\"pricepaid\", \"type\": {\"type\": \"bytes\", \"logicalType\": \"decimal\", \"precision\": 8, \"scale\": 2}}, {\"name\":\"comment\",\"type\":\"string\"}]}')
STORED AS AVRO
location 's3://amzn-s3-demo-bucket/avro/sales' ;
```

RegEx を使用して ROW FORMAT SERDE パラメータを指定する例を以下に示します。

```
create external table spectrum.types(
cbigint bigint,
cbigint_null bigint,
cint int,
cint_null int)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ('input.regex'='([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)\\x01([^\\x01]+)')
stored as textfile
location 's3://amzn-s3-demo-bucket/regex/types';
```

Grok を使用して ROW FORMAT SERDE パラメータを指定する例を以下に示します。

```
create external table spectrum.grok_log(
timestamp varchar(255),
pid varchar(255),
loglevel varchar(255),
progname varchar(255),
message varchar(255))
row format serde 'com.amazonaws.glue.serde.GrokSerDe'
with serdeproperties ('input.format'='[DFEWI], \\[%{TIMESTAMP_ISO8601:timestamp} #%{POSINT:pid:int}\\] *(?<loglevel>:DEBUG|FATAL|ERROR|WARN|INFO) -- +%{DATA:progname}: %{GREEDYDATA:message}')
stored as textfile
location 's3://DOC-EXAMPLE-BUCKET/grok/logs';
```

次の例では、S3 バケットで Amazon S3 サーバーアクセスログを定義します。Redshift Spectrum を使用して、Amazon S3 アクセスログをクエリできます。

```
CREATE EXTERNAL TABLE spectrum.mybucket_s3_logs(
bucketowner varchar(255),
bucket varchar(255),
requestdatetime varchar(2000),
remoteip varchar(255),
requester varchar(255),
requested varchar(255),
operation varchar(255),
key varchar(255),
requesturi_operation varchar(255),
requesturi_key varchar(255),
requesturi_httpprotoversion varchar(255),
httpstatus varchar(255),
errorcode varchar(255),
bytessent bigint,
objectsize bigint,
totaltime varchar(255),
turnaroundtime varchar(255),
referrer varchar(255),
useragent varchar(255),
versionid varchar(255)
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
'input.regex' = '([^ ]*) ([^ ]*) \\[(.*?)\\] ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) \"([^ ]*)\\s*([^ ]*)\\s*([^ ]*)\" (- |[^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) (\"[^\"]*\") ([^ ]*).*$')
LOCATION 's3://amzn-s3-demo-bucket/s3logs’;
```

次に、ION 形式のデータで ROW FORMAT SERDE パラメータを指定する例を示します。

```
CREATE EXTERNAL TABLE tbl_name (columns)
ROW FORMAT SERDE 'com.amazon.ionhiveserde.IonHiveSerDe'
STORED AS
INPUTFORMAT 'com.amazon.ionhiveserde.formats.IonInputFormat'
OUTPUTFORMAT 'com.amazon.ionhiveserde.formats.IonOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/prefix'
```

## データ処理の例
<a name="r_CREATE_EXTERNAL_TABLE_examples-data-handling"></a>

以下の例は、ファイル [spi\$1global\$1rankings.csv](https://s3.amazonaws.com/redshift-downloads/docs-downloads/spi_global_rankings.csv) にアクセスします。これらの例を試すには、`spi_global_rankings.csv`ファイルを Amazon S3 バケットにアップロードできます。

以下の例は、外部スキーマ `schema_spectrum_uddh` とデータベース `spectrum_db_uddh` を作成します。`aws-account-id` には AWS アカウント ID、`role-name`には Redshift Spectrum ロール名を入力します。

```
create external schema schema_spectrum_uddh
from data catalog
database 'spectrum_db_uddh'
iam_role 'arn:aws:iam::aws-account-id:role/role-name'
create external database if not exists;
```

以下の例は、外部スキーマ `schema_spectrum_uddh` で外部テーブル `soccer_league` を作成します。

```
CREATE EXTERNAL TABLE schema_spectrum_uddh.soccer_league
(
  league_rank smallint,
  prev_rank   smallint,
  club_name   varchar(15),
  league_name varchar(20),
  league_off  decimal(6,2),
  league_def  decimal(6,2),
  league_spi  decimal(6,2),
  league_nspi integer
)
ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\n\l'
stored as textfile
LOCATION 's3://spectrum-uddh/league/'
table properties ('skip.header.line.count'='1');
```

`soccer_league` テーブル内の行数をチェックします。

```
select count(*) from schema_spectrum_uddh.soccer_league;
```

行数が表示されます。

```
count
645
```

以下のクエリは、上位 10 位のクラブを表示します。クラブ `Barcelona` は文字列に無効な文字が含まれているため、名前に NULL が表示されています。

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

```
league_rank	club_name	league_name			league_nspi
1		Manchester City	Barclays Premier Lea		34595
2		Bayern Munich	German Bundesliga		34151
3		Liverpool	Barclays Premier Lea		33223
4		Chelsea		Barclays Premier Lea		32808
5		Ajax		Dutch Eredivisie		32790
6		Atletico 	Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi		31469
8		NULL	        Spanish Primera Divi            31321
9		RB Leipzig	German Bundesliga		31014
10		Paris Saint-Ger	French Ligue 1			30929
```

以下の例は、`soccer_league` テーブルを変更して `invalid_char_handling`、`replacement_char`、および `data_cleansing_enabled` の外部テーブルプロパティを指定し、予期しない文字の代わりに疑問符 (?) を挿入するようにします。

```
alter  table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='REPLACE','replacement_char'='?','data_cleansing_enabled'='true');
```

以下の例は、ランクが 1 から 10 のチームについてテーブル `soccer_league` をクエリします。

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

テーブルプロパティが変更されたため、結果は上位 10 位のクラブを表示し、`Barcelona` のクラブの第 8 列に疑問符 (?) 置換文字があります。

```
league_rank	club_name	league_name		league_nspi
1		Manchester City	Barclays Premier Lea	34595
2		Bayern Munich	German Bundesliga	34151
3		Liverpool	Barclays Premier Lea	33223
4		Chelsea		Barclays Premier Lea	32808
5		Ajax		Dutch Eredivisie	32790
6		Atletico Madrid	Spanish Primera Divi	31517
7		Real Madrid	Spanish Primera Divi	31469
8		Barcel?na	Spanish Primera Divi	31321
9		RB Leipzig	German Bundesliga	31014
10		Paris Saint-Ger	French Ligue 1		30929
```

お以下の例は、`soccer_league` テーブルを変更して `invalid_char_handling` 外部テーブルプロパティを指定し、予期しない文字が含まれる行をドロップするようにします。

```
alter table schema_spectrum_uddh.soccer_league
set table properties ('invalid_char_handling'='DROP_ROW','data_cleansing_enabled'='true');
```

以下の例は、ランクが 1 から 10 のチームについてテーブル `soccer_league` をクエリします。

```
select league_rank,club_name,league_name,league_nspi
from schema_spectrum_uddh.soccer_league
where league_rank between 1 and 10;
```

結果は上位のクラブを表示しますが、`Barcelona` のクラブの第 8 列は含まれません。

```
league_rank   club_name         league_name            league_nspi
1             Manchester City   Barclays Premier Lea   34595
2             Bayern Munich     German Bundesliga      34151
3             Liverpool         Barclays Premier Lea   33223
4             Chelsea           Barclays Premier Lea   32808
5             Ajax              Dutch Eredivisie       32790
6             Atletico Madrid   Spanish Primera Divi   31517
7             Real Madrid       Spanish Primera Divi   31469
9             RB Leipzig        German Bundesliga      31014
10            Paris Saint-Ger   French Ligue 1         30929
```

# CREATE EXTERNAL VIEW
<a name="r_CREATE_EXTERNAL_VIEW"></a>

データカタログビューのプレビュー機能は以下のリージョンでのみ利用できます。
+ 米国東部 (オハイオ) (us-east-2)
+ 米国東部 (バージニア北部) (us-east-1)
+ 米国西部 (北カリフォルニア) (us-west-1)
+ アジアパシフィック (東京) (ap-northeast-1)
+ 欧州 (アイルランド) (eu-west-1)
+ 欧州 (ストックホルム) (eu-north-1)

データカタログでビューを作成します。データカタログビューは、Amazon Athena や Amazon EMR のような他の SQL エンジンと機能する単一のビュースキーマです。選択したエンジンからビューをクエリできます。データカタログビューの詳細については、「[データカタログビューの作成](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)」を参照してください。

## 構文
<a name="r_CREATE_EXTERNAL_VIEW-synopsis"></a>

```
CREATE EXTERNAL VIEW schema_name.view_name [ IF NOT EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
AS query_definition;
```

## パラメータ
<a name="r_CREATE_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
AWS Glue データベースにアタッチされているスキーマ。その後にビューの名前が続きます。

PROTECTED  
query\$1definition 内のクエリが正常に完了した場合にのみ CREATE EXTERNAL VIEW コマンドが完了するように指定します。

IF NOT EXISTS  
ビューがまだ存在しない場合、ビューを作成します。

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
ビューを作成するときに使用するスキーマの表記法。AWS Glue Data Catalog、作成した Glue データベース、または作成した外部スキーマを使用するように指定できます。詳細については、「[CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)」と「[CREATE EXTERNAL SCHEMA ](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。

 *query\$1definition*   
Amazon Redshift がビューを変更するために実行する SQL クエリの定義。

## 例
<a name="r_CREATE_EXTERNAL_VIEW-examples"></a>

次の例では、sample\$1schema.glue\$1data\$1catalog\$1view という名前のデータカタログビューを作成します。

```
CREATE EXTERNAL PROTECTED VIEW sample_schema.glue_data_catalog_view IF NOT EXISTS
AS SELECT * FROM sample_database.remote_table "remote-table-name";
```

# CREATE FUNCTION
<a name="r_CREATE_FUNCTION"></a>

SQL SELECT 句または Python プログラムを使用して、新しいスカラーユーザー定義関数 (UDF) を作成します。

詳細な説明と例については、[Amazon Redshift のユーザー定義関数](user-defined-functions.md) を参照してください。

## 必要な権限
<a name="r_CREATE_FUNCTION-privileges"></a>

CREATE OR REPLACE FUNCTION を実行するには、以下のいずれかの方法によるアクセス許可が必要です。
+ CREATE FUNCTION の場合:
  + スーパーユーザーは、関数を作成する際に、信頼された言語と信頼できない言語の両方を使用できます。
  + CREATE [または REPLACE] FUNCTION の権限を持つユーザーは、信頼できる言語による関数の作成が行えます。
+ REPLACE FUNCTION の場合:
  + スーパーユーザー
  + CREATE [または REPLACE ] FUNCTION の権限を持つユーザー
  + 関数の所有者

## 構文
<a name="r_CREATE_FUNCTION-synopsis"></a>

```
CREATE [ OR REPLACE ] FUNCTION f_function_name
( { [py_arg_name  py_arg_data_type |
sql_arg_data_type } [ , ... ] ] )
RETURNS data_type
{ VOLATILE | STABLE | IMMUTABLE }
AS $$
  { python_program | SELECT_clause }
$$ LANGUAGE { plpythonu | sql }
```

## パラメータ
<a name="r_CREATE_FUNCTION-parameters"></a>

OR REPLACE  
その関数の名前、入力引数のデータ型、あるいは*署名*が既存の関数と同じである場合に既存の関数を置き換えることを指定します。同一のデータタイプセットを定義する新しい関数によってのみ既存の関数を置き換えることができます。関数の置き換えは、スーパーユーザーのみが行うことができます。  
すでに存在するの関数と同じ名前と入力引数のデータタイプで、異なる署名の関数を定義する場合は、新しい関数を作成することになります。つまり、関数名はオーバーロードされます。詳細については、「[関数名の多重定義](udf-naming-udfs.md#udf-naming-overloading-function-names)」を参照してください。

 *f\$1function\$1name*   
 関数の名前。スキーマ名を指定すると (`myschema.myfunction` など)、指定したスキーマを使用して関数が作成されます。指定しない場合、現在のスキーマに関数が作成されます。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
すべての UDF 名の前に `f_` を付けることをお勧めします。Amazon Redshift は、UDF 名のプレフィックスとして `f_` を予約しており、プレフィックスとして `f_` を使用することで、UDF 名が現在使用されている、または将来使用される Amazon Redshift 組み込み SQL 関数名と競合することを回避できます。詳細については、「[UDF 名の競合の回避](udf-naming-udfs.md)」を参照してください。  
入力引数のデータタイプが異なる場合、同じ関数名で 1 つ以上の関数を定義することができます。つまり、関数名はオーバーロードされます。詳細については、「[関数名の多重定義](udf-naming-udfs.md#udf-naming-overloading-function-names)」を参照してください。

 *py\$1arg\$1name py\$1arg\$1data\$1type \$1 sql\$1arg\$1data\$1type*   
Python UDF の場合、入力引数の名前とデータタイプの一覧。SQL UDF の場合、引数名のないデータタイプの一覧。Python UDF の場合は、引数名を使用して引数を参照します。SQL UDF では、引数の一覧での引数の順序に基づいて、\$11、\$12 などを使用して引数を参照します。  
SQL UDF の場合、入力および戻りデータタイプは、どの標準 Amazon Redshift データタイプでも可能です。Python UDF では、入力データ型および戻りデータ型に SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE PRECISION、BOOLEAN、CHAR、VARCHAR、DATE、または TIMESTAMP を使用できます。さらに、Python ユーザー定義関数 (UDF) はデータ型として ANYELEMENT をサポートしています。このタイプは、実行時に渡される対応する引数のデータタイプに基づいて、標準のデータタイプに自動的に変換されます。複数の引数が ANYELEMENT を使用している場合は、一覧の最初の ANYELEMENT 引数に基づいて、すべてが実行時に同じデータタイプに解決されます。詳細については、「[Python UDF データ型](udf-data-types.md)」および「[データ型](c_Supported_data_types.md)」を参照してください。  
最大 32 の引数を指定できます。

 RETURNS *data\$1type*   
関数によって返される値のデータ型。RETURNS データ型には、Amazon Redshift のすべての標準データ型を使用できます。また、Python UDF ではデータタイプとして ANYELEMENT を使用できます。このタイプは、実行時に渡される引数に基づいて、標準データタイプに自動的に変換されます。戻り値のデータタイプとして ANYELEMENT を指定する場合は、少なくとも 1 つの引数で ANYELEMENT を使用する必要があります。実際の戻り型のデータタイプは、関数が呼び出された場合に ANYELEMENT 引数から提供されるデータタイプと一致することになります。詳細については、「[Python UDF データ型](udf-data-types.md)」を参照してください。

 VOLATILE \$1 STABLE \$1 IMMUTABLE   
関数の変動率についてのクエリオプティマイザを報告します。  
関数の最適な変動率の分類を厳正に設定することで、最高の最適化が得られます。ただし、変動幅が厳正すぎると、オプティマイザはその呼び出しを誤って省略してしまい、よって不正確な結果セットを報告することになってしまいます。厳正度の順に、低度の厳正度から変動率を分類すると、以下のようになります。  
+ VOLATILE
+ 安定
+ 不変
変動性  
同じ引数が入っている場合、単一のステートメントに含まれる行であっても、関数は連続の呼び出しに異なる結果を返すことがあります。クエリオプティマイザは変動的な関数の動作を仮定しないので、変動性の関数を使用するクエリは各入力行につき関数の再評価が必要になります。  
安定  
同じ引数が入っている場合、関数が単一のステートメント内で処理されるすべての行に対して同じ結果を返すことが保証されます。異なるステートメントから呼び出された場合、関数が異なる結果を返すことがあります。この分類は、単一のステートメント内でのステートメントへの 1 回の呼び出しにおける関数の複数の呼び出しを最適化するオプティマイザを可能にします。  
不変  
同じ引数が入っている場合、関数は常に永遠に同じ結果を返します。クエリが定数引数の `IMMUTABLE` 関数を呼び出すと、オプティマイザは関数を前評価します。

AS \$1\$1 *statement* \$1\$1  
 実行するステートメントを囲む構造。リテラルキーワードの `AS $$` と `$$` は必須です。  
Amazon Redshift では、関数のステートメントをドル引用符という形式を使用して囲む必要があります。囲まれた内容がそのまま渡されます。文字列の内容がそのまま書き込まれるため、特殊文字のエスケープは一切不要です。  
 *ドル引用符付け*では、次の例に示すように、実行するステートメントの開始と終了を 2 つのドル記号のペア (\$1\$1) で指定します。  

```
$$ my statement $$
```
 必要に応じて、各ペアのドル記号間にステートメントの識別に役立つ文字列を指定できます。使用する文字列は、開始と終了の囲い文字のペアで同じにする必要があります。この文字列では大文字と小文字が区別され、ドル記号を含めることができない点を除いては、引用符で囲まれていない識別子と同じ制約事項に従います。次の例では、文字列 `test` を使用しています   

```
$test$ my statement $test$
```
ドル引用符付けの詳細については、PostgreSQL ドキュメントの「[Lexical StructureDollar](https://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html)」の「Dollar-quoted String Constants」を参照してください。

*python\$1program*   
値を返す有効で実行可能な Python プログラム。関数とともに渡すステートメントは、Python ウェブサイトの [Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/#indentation) に示されるインデント要件に準拠する必要があります。詳細については、「[UDF のための Python 言語のサポート](udf-python-language-support.md)」を参照してください。

*SQL\$1clause*   
SQL SELECT 句。  
SELECT 句には、以下のタイプの句を含めることはできません。  
+ FROM
+ INTO
+ WHERE
+ GROUP BY
+ ORDER BY
+ 制限

言語 \$1 plpythonu \$1 sql \$1   
Python の場合は、`plpythonu`を指定します。SQL の場合は、`sql`を指定します。SQL または plpythonu 用の言語で使用のアクセス権限を持っている必要があります。詳細については、「[UDF のセキュリティとアクセス許可](udf-security-and-privileges.md)」を参照してください。

## 使用に関する注意事項
<a name="r_CREATE_FUNCTION-usage-notes"></a>

### ネストされた関数
<a name="r_CREATE_FUNCTION-usage-notes-nested-functions"></a>

SQL UDF 内から別の SQL ユーザー定義関数 (UDF) を呼び出すことができます。CREATE FUNCTION コマンドを実行するときは、ネストされた関数が存在している必要があります。Amazon Redshift は UDF の依存関係を追跡しないため、ネストされた関数を削除しても、Amazon Redshift はエラーを返しません。ただし、ネストされた関数が存在しない場合、UDF は失敗します。例えば、次の関数は SELECT 句で `f_sql_greater ` 関数を呼び出します。

```
create function f_sql_commission (float, float )
  returns float
stable
as $$
  select f_sql_greater ($1, $2)
$$ language sql;
```

### UDF のセキュリティおよび権限
<a name="r_CREATE_FUNCTION-usage-notes-security-and-privileges"></a>

UDF を作成するには、SQL または plpythonu (Python) 用の言語で使用のアクセス権限を持っている必要があります。デフォルトでは、USAGE ON LANGUAGE SQL は PUBLIC に付与されます。ただし、特定のユーザーやグループに対しては USAGE ON LANGUAGE PLPYTHONU を明示的に付与する必要があります。

SQL の使用を取り消すには、最初に PUBLIC に対して使用を取り消します。次に、SQL UDF の作成を許可された特定のユーザーやグループにのみ、SQL の使用を許可します。次の例では、最初に PUBLIC に対して SQL の使用を取り消し、次にユーザーグループ `udf_devs` に使用を許可します。

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```

UDF を実行するには、関数ごとに実行許可が付与されている必要があります。デフォルトでは、新しい UDF を実行する権限が PUBLIC に付与されます。使用を制限するには、対象の関数の PUBLIC から実行許可を取り消します。次に、特定の個人またはグループに権限を付与します。

次の例では、PUBLIC から関数 `f_py_greater` の実行許可を取り消し、ユーザーグループ `udf_devs` に使用を許可しています。

```
revoke execute on function f_py_greater(a float, b float) from PUBLIC;
grant execute on function f_py_greater(a float, b float) to group udf_devs;
```

スーパーユーザーは、デフォルトですべての権限を持っています。

詳細については、「[GRANT](r_GRANT.md)」および「[REVOKE](r_REVOKE.md)」を参照してください。

## 例
<a name="r_CREATE_FUNCTION-examples"></a>

### スカラー Python UDF の例
<a name="r_CREATE_FUNCTION-python-example"></a>

次の例は、2 つの整数を比較し、大きいほうの数値を返す Python UDF を作成する方法を示しています。

```
create function f_py_greater (a float, b float)
  returns float
stable
as $$
  if a > b:
    return a
  return b
$$ language plpythonu;
```

次の例は、SALES テーブルを検索して新しい `f_py_greater` 関数を呼び出すことによって、COMMISSION または PRICEPAID の 20% のどちらか大きいほうを返します。

```
select f_py_greater (commission, pricepaid*0.20) from sales;
```

### スカラー SQL UDF の例
<a name="r_CREATE_FUNCTION-sql-example"></a>

次の例は、2 つの数値を比較し、大きいほうの数値を返す関数を作成する方法を示しています。

```
create function f_sql_greater (float, float)
  returns float
stable
as $$
  select case when $1 > $2 then $1
    else $2
  end
$$ language sql;
```

次のクエリは、新しい `f_sql_greater` 関数を呼び出して SALES テーブルをクエリし、COMMISSION または PRICEPAID の 20% のどちらか大きいほうを返します。

```
select f_sql_greater (commission, pricepaid*0.20) from sales;
```

# CREATE GROUP
<a name="r_CREATE_GROUP"></a>

新しいユーザーグループを定義します。スーパーユーザーのみがグループを作成できます。

## 構文
<a name="r_CREATE_GROUP-synopsis"></a>

```
CREATE GROUP group_name
[ [ WITH ] [ USER username ] [, ...] ]
```

## パラメータ
<a name="r_CREATE_GROUP-parameters"></a>

 *group\$1name*   
新しいユーザーグループ名。2 個のアンダースコアで始まるグループ名は Amazon Redshift 内部で使用するために予約されています。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

WiTH  
CREATE GROUP の追加のパラメータを指定するオプションの構文。

USER  
1 人または複数のユーザーをグループに追加します。

 * ユーザー名*   
グループに追加するユーザーの名前。

## 例
<a name="r_CREATE_GROUP-examples"></a>

次の例では、ADMIN1 と ADMIN2 の 2 ユーザー が属する ADMIN\$1GROUP というユーザーグループを作成します。

```
create group admin_group with user admin1, admin2;
```

# ID プロバイダーを作成する
<a name="r_CREATE_IDENTITY_PROVIDER"></a>

新しい ID プロバイダーを定義します。スーパーユーザーのみが ID プロバイダーを作成できます。

## 構文
<a name="r_CREATE_IDENTITY_PROVIDER-synopsis"></a>

```
CREATE IDENTITY PROVIDER identity_provider_name TYPE type_name
NAMESPACE namespace_name
[PARAMETERS parameter_string]
[APPLICATION_ARN arn]
[IAM_ROLE iam_role]
[AUTO_CREATE_ROLES
    [ TRUE [ { INCLUDE | EXCLUDE } GROUPS LIKE filter_pattern] |
      FALSE
    ]
  ];
```

## パラメータ
<a name="r_CREATE_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
ID プロバイダーの名前。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

*type\$1name*  
インターフェイスとなる ID プロバイダー。現在、サポートされている ID プロバイダーは、Azure および AWSIDC のみです。

*namespace\$1name*  
名前空間。これは、ID プロバイダーディレクトリの一意の簡略化された識別子です。

 *parameter\$1string*   
ID プロバイダーに必要なパラメータと値を含む、適切にフォーマットされた JSON オブジェクトを含む文字列。

 *arn*   
IAM アイデンティティセンターのマネージドアプリケーションの Amazon リソースネーム (ARN)。このパラメータは、ID プロバイダーのタイプが AWSIDC である場合にのみ適用されます。

 *iam\$1role*   
IAM アイデンティティセンターに接続するためのアクセス許可を提供する IAM ロール。このパラメータは、ID プロバイダーのタイプが AWSIDC である場合にのみ適用されます。

 *auto\$1create\$1roles*   
ロールの自動作成機能を有効または無効にします。値が TRUE の場合、Amazon Redshift はロールの自動作成機能を有効にします。値が FALSE の場合、Amazon Redshift はロールの自動作成機能を無効にします。このパラメータの値が指定されていない場合、Amazon Redshift は次のロジックを使用して値を決定します。  
+  `AUTO_CREATE_ROLES` が指定されていても値が指定されていない場合、値は TRUE に設定されます。
+  `AUTO_CREATE_ROLES` が指定されておらず、ID プロバイダーが AWSIDC の場合、値は FALSE に設定されます。
+  `AUTO_CREATE_ROLES` が指定されておらず、ID プロバイダーが Azure の場合、値は TRUE に設定されます。
グループを含めるには、`INCLUDE` を指定します。デフォルトは空です。つまり、`AUTO_CREATE_ROLES` がオンの場合、すべてのグループが含まれます。  
グループを除外するには、`EXCLUDE` を指定します。デフォルトは空です。つまり、`AUTO_CREATE_ROLES` がオンの場合、グループは除外されません。

 *filter\$1pattern*   
グループ名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CREATE_IDENTITY_PROVIDER.html)
*filter\$1pattern* にメタ文字が含まれていない場合、パターンは文字列そのものを表すだけです。この場合、LIKE は等号演算子と同じ働きをします。  
*filter\$1pattern* は、次の文字をサポートしています。  
+  大文字と小文字のアルファベット文字 (A-Z および a-z) 
+  数値 (0-9) 
+  以下の特殊文字。

  ```
  _ % ^ * + ? { } , $
  ```

## 例
<a name="r_CREATE_IDENTITY_PROVIDER-examples"></a>

次の例では、Microsoft Azure Active Directory (AD) との通信を確立する *oauth\$1standard* という名前の ID プロバイダーを TYPE *Azure* で作成します。

```
CREATE IDENTITY PROVIDER oauth_standard TYPE azure
NAMESPACE 'aad'
PARAMETERS '{"issuer":"https://sts.windows.net/2sdfdsf-d475-420d-b5ac-667adad7c702/",
"client_id":"87f4aa26-78b7-410e-bf29-57b39929ef9a",
"client_secret":"BUAH~ewrqewrqwerUUY^%tHe1oNZShoiU7",
"audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift"]
}'
```

IAM アイデンティティセンターのマネージドアプリケーションは、既存のプロビジョニングされたクラスターまたは Amazon Redshift Serverless ワークグループに接続できます。これにより、IAM アイデンティティセンターを通じて Redshift データベースへのアクセスを管理できます。これを行うには、次の例に示すような SQL コマンドを実行します。データベース管理者である必要があります。

```
CREATE IDENTITY PROVIDER "redshift-idc-app" TYPE AWSIDC
NAMESPACE 'awsidc'
APPLICATION_ARN 'arn:aws:sso::123456789012:application/ssoins-12345f67fe123d4/apl-a0b0a12dc123b1a4'
IAM_ROLE 'arn:aws:iam::123456789012:role/MyRedshiftRole';
```

この例のアプリケーション ARN は、接続先のマネージドアプリケーションを識別します。これは、`SELECT * FROM SVV_IDENTITY_PROVIDERS;` を実行することで確認できます。

その他の例を含め、CREATE IDENTITY PROVIDER の使用方法の詳細については、「[Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。Redshift から IAM アイデンティティセンターへの接続の設定の詳細については、[「Redshift を IAM アイデンティティセンターに接続してユーザーにシングルサインオンエクスペリエンスを提供する](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html)」を参照してください。

# ライブラリを作成する
<a name="r_CREATE_LIBRARY"></a>

[CREATE FUNCTION](r_CREATE_FUNCTION.md) コマンドのユーザー定義関数 (UDF) を作成するときに、ユーザーは Python ライブラリをインストールすることができます。ユーザーがインストールするライブラリの合計サイズは 100 MB を超えられません。

CREATE LIBRARY は、トランザクションブロック内で実行することはできません (BEGIN … END)。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

Amazon Redshift は Python バージョン 2.7 をサポートしています。詳細については、[www.python.org](https://www.python.org/) を参照してください。

詳細については、「[例: カスタム Python ライブラリモジュールのインポート](udf-importing-custom-python-library-modules.md)」を参照してください。

## 必要な権限
<a name="r_CREATE_LIBRARY-privileges"></a>

CREATE LIBRARY に必要な権限を以下に示します。
+ スーパーユーザー
+ CREATE LIBRARY の権限を持つユーザー、または指定した言語の権限を持つユーザー

## 構文
<a name="r_CREATE_LIBRARY-synopsis"></a>

```
CREATE [ OR REPLACE ] LIBRARY library_name LANGUAGE plpythonu
FROM
{ 'https://file_url'
| 's3://bucketname/file_name'
authorization
  [ REGION [AS] 'aws_region']
  IAM_ROLE { default | ‘arn:aws:iam::<AWS アカウント-id>:role/<role-name>’ }
}
```

## パラメータ
<a name="r_CREATE_LIBRARY-parameters"></a>

OR REPLACE  
このライブラリと同じ名前のライブラリがすでに存在する場合、既存のライブラリが置き換えられることを指定します。REPLACE は即座にコミットされます。ライブラリに依存する UDF が同時に実行されている場合、UDF がトランザクション内で実行されていても、UDF は失敗するか、予期しない結果を返す場合があります。ライブラリを置き換えるには、所有者またはスーパーユーザーである必要があります。

 *library\$1name*   
インストールされるライブラリの名前。Python 標準ライブラリモジュール、またはインストール済みの Amazon Redshift Python モジュールと同じ名前のモジュールを含むライブラリを作成することはできません。ユーザーがインストールした既存のライブラリがインストールするライブラリと同じ Python パッケージを使用している場合は、新しいライブラリをインストールする前に既存のライブラリを削除する必要があります。詳細については、「[UDF のための Python 言語のサポート](udf-python-language-support.md)」を参照してください。

plpythonu 言語  
使用される言語。サポートされている言語は Python (plpythonu) のみです。Amazon Redshift は Python バージョン 2.7 をサポートしています。詳細については、[www.python.org](https://www.python.org/) を参照してください。

FROM  
ライブラリファイルの場所。Amazon S3 バケットとオブジェクト名を指定できます。また、公開ウェブサイトからファイルをダウンロードする URL を指定できます。ライブラリは `.zip` ファイルの形式でパッケージ化される必要があります。詳細については、Python ドキュメントから、[Python モジュールの構築とインストール](https://docs.python.org/2/library/distutils.html?highlight=distutils#module-distutils)を参照してください。

 https://*file\$1url*   
公開ウェブサイトからファイルをダウンロードする URL。URL には 3 つまでのリダイレクトを含めることができます。次は URL ファイルの例です。  

```
'https://www.example.com/pylib.zip'
```

 s3://*bucket\$1name/file\$1name*   
ライブラリファイルを含む単一の Amazon S3 オブジェクトのパス。以下は、Amazon S3 オブジェクトパスの例です。  

```
's3://amzn-s3-demo-bucket/my-pylib.zip'
```
Amazon S3 バケットを指定する場合、ファイルをダウンロードする権限を持つ AWS のユーザーの、認証情報を指定する必要もあります。  
 Amazon S3 バケットが Amazon Redshift クラスターと同じ AWS リージョンに存在しない場合は、REGION オプションを使用して、データが置かれている AWS リージョンを指定する必要があります。*aws\$1region* の値は、COPY コマンドの [REGION](copy-parameters-data-source-s3.md#copy-region) パラメータの説明に示されている AWS リージョンと一致する必要があります。

*authorization*, \$1   
ライブラリファイルを含む Amazon S3 バケットへアクセスするための認証と認可にクラスターが使用する方法を示す句です。クラスターは、LIST と GET のアクションにより Amazon S3 にアクセスするためのアクセス許可が必要です。  
認可の構文は COPY コマンドの認可の構文と同じです。詳細については、「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。  

```
IAM_ROLE { default | ‘arn:aws:iam::<AWS アカウント-id>:role/<role-name>’
```
 デフォルトキーワードを使用して、CREATE LIBRARY コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。IAM\$1ROLE を指定すると、ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY、SESSION\$1TOKEN、または CREDENTIALS は使用できません。  
必要に応じて、Amazon S3 バケットがサーバー側の暗号化を使用する場合は、credentials-args 文字列の暗号化キーを指定します。一時的なセキュリティ認証情報を使う場合は、*credentials-args* 文字列の一時トークンを指定します。  
詳細については、「[一時的な認証情報](copy-usage_notes-access-permissions.md#r_copy-temporary-security-credentials)」を参照してください。

 REGION [AS] *aws\$1region*   
Amazon S3 バケットがある AWS リージョン。REGION は、Amazon S3 バケットが Amazon Redshift クラスターと同じ AWS リージョンにない場合に必須です。*aws\$1region* の値は、COPY コマンドの [REGION](copy-parameters-data-source-s3.md#copy-region) パラメータの説明に示されている AWS リージョンと一致する必要があります。  
CREATE LIBRARY のデフォルトでは、Amazon S3 バケットが Amazon Redshift クラスターと同じ AWS リージョンにあると見なします。

## 例
<a name="r_CREATE_LIBRARY-examples"></a>

次の 2 つの例では、`urlparse3-1.0.3.zip`という名前のファイルにパッケージ化されている [urlparse](https://docs.python.org/2/library/urlparse.html#module-urlparse) Python モジュールをインストールします。

次のコマンドは、米国東部リージョンにある Amazon S3 バケットに対しアップロードされたパッケージから、`f_urlparse`という名前の UDF ライブラリをインストールします。

```
create library f_urlparse
language plpythonu
from 's3://amzn-s3-demo-bucket/urlparse3-1.0.3.zip'
credentials 'aws_iam_role=arn:aws:iam::<aws-account-id>:role/<role-name>'
region as 'us-east-1';
```

次の例では、ウェブサイトのライブラリから `f_urlparse` 名のライブラリをインストールします。



```
create library f_urlparse
language plpythonu
from 'https://example.com/packages/urlparse3-1.0.3.zip';
```

# CREATE MASKING POLICY
<a name="r_CREATE_MASKING_POLICY"></a>

新しい動的データマスキングポリシーを作成して、指定した形式のデータを難読化します。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールは、マスキングポリシーを作成できます。

## 構文
<a name="r_CREATE_MASKING_POLICY-synopsis"></a>

```
CREATE MASKING POLICY 
   { policy_name | database_name.policy_name } [IF NOT EXISTS]
   WITH (input_columns)
   USING (masking_expression);
```

## パラメータ
<a name="r_CREATE_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
マスキングポリシーの名前。マスキングポリシーには、データベースに既に存在する別のマスキングポリシーと同じ名前を付けることはできません。

database\$1name  
ポリシーが作成されるデータベースの名前。ポリシーは、接続されたデータベースまたは Amazon Redshift フェデレーティッドアクセス許可カタログで作成できます。

*input\$1columns*   
(col1 データ型、col2 データ型...) 形式の列名のタプル。  
列名はマスキング式の入力として使用されます。列名はマスクされる列の名前と一致する必要はありませんが、入力と出力のデータ型は一致する必要があります。

*masking\$1expression*  
ターゲット列の変換に使用される SQL 式。文字列操作関数などのデータ操作関数を使用して記述することも、SQL、Python、または AWS Lambda で記述されたユーザー定義関数と組み合わせて記述することもできます。マスキングポリシーに複数の出力がある場合は、列式のタプルを含めることができます。マスク式として定数を使用する場合は、入力型と一致する型に明示的にキャストする必要があります。  
 マスキング式で使用するユーザー定義関数には USAGE アクセス許可が必要です。

Amazon Redshift フェデレーティッドアクセス許可カタログでの CREATE MASKING POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

# CREATE MATERIALIZED VIEW
<a name="materialized-view-create-sql-command"></a>

1 つ以上の Amazon Redshift テーブルに基づいてマテリアライズドビューを作成します。また、Spectrum やフェデレーションクエリを使用して作成した外部テーブルに基づいてマテリアライズドビューを作成することもできます。Spectrum の詳細については、「[Amazon Redshift Spectrum](c-using-spectrum.md)」を参照してください。フェデレーションクエリの詳細については、「[Amazon Redshift での横串検索を使用したデータのクエリの実行](federated-overview.md)」を参照してください。

## 構文
<a name="mv_CREATE_MATERIALIZED_VIEW-synopsis"></a>

```
CREATE MATERIALIZED VIEW mv_name
[ BACKUP { YES | NO } ]
[ table_attributes ]
[ AUTO REFRESH { YES | NO } ]
AS query
```

## パラメータ
<a name="mv_CREATE_MATERIALIZED_VIEW-parameters"></a>

BACKUP  
マテリアライズドビューを自動および手動クラスタースナップショットに含めるかどうかを指定する句。  
重要なデータを含まないマテリアライズドビューについては、スナップショットの作成やスナップショットからの復元にかかる時間を節約し、Amazon Simple Storage Service のストレージスペースを節約するため、BACKUP NO を指定します。BACKUP NO の設定は、クラスター内の別ノードへのデータの自動レプリケーションには影響しません。そのため、BACKUP NO が指定されたマテリアライズドビューはノードの障害時に回復されます。デフォルトは BACKUP YES です。

 *table\$1attributes*   
マテリアライズドビュー内のデータの分散方法を指定する句。これには、以下が含まれます。  
+  `DISTSTYLE { EVEN | ALL | KEY }` の形式のマテリアライズドビュー向けの分散スタイル。この句を省略すると、分散スタイルは `EVEN` になります。詳細については、「[分散スタイル](c_choosing_dist_sort.md)」を参照してください。
+ `DISTKEY ( distkey_identifier )` の形式のマテリアライズドビュー向けの分散キー。詳細については、「[分散スタイルの指定](t_designating_distribution_styles.md)」を参照してください。
+ `SORTKEY ( column_name [, ...] )` の形式のマテリアライズドビュー向けのソートキー。詳細については、「[ソートキー](t_Sorting_data.md)」を参照してください。

AS *query*  
マテリアライズドビューとその内容を定義する有効な `SELECT` ステートメント。クエリからの結果は、マテリアライズドビューの列および行を定義します。マテリアライズドビューの作成時の制約事項については、「[制限事項](#mv_CREATE_MATERIALIZED_VIEW-limitations)」を参照してください。  
また、クエリで使用する特定の SQL 言語の構造によって、マテリアライズドビューを増分更新できるかフル更新できるかが決まります。更新方法の詳細については、「[REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)」を参照してください。増分更新の制約事項については、「[増分更新の制約事項](materialized-view-refresh-sql-command.md#mv_REFRESH_MARTERIALIZED_VIEW_limitations)」を参照してください。  
クエリに増分更新をサポートしていない SQL コマンドが含まれている場合、Amazon Redshift ではマテリアライズドビューがフル更新を使用することを示すメッセージが表示されます。このメッセージは、SQL クライアントアプリケーションによって表示される場合と表示されない場合があります。マテリアライズドビューで使用されている更新のタイプについては、[STV\$1MV\$1INFO](r_STV_MV_INFO.md)の `state` 列を確認してください。

AUTO REFRESH  
マテリアライズドビューを、そのベーステーブルからの最新の変更で自動的に更新する必要があるかどうかを定義する句。デフォルト値は `NO` です。詳細については、「[マテリアライズドビューの更新](materialized-view-refresh.md)」を参照してください。

## 使用に関する注意事項
<a name="mv_CREATE_MARTERIALIZED_VIEW_usage"></a>

マテリアライズドビューを作成するには、次の権限が必要です。
+ スキーマの CREATE 権限。
+ マテリアライズドビューを作成するためのベーステーブルに対するテーブルレベルまたは列レベルの SELECT 権限。特定の列に対する列レベルの権限がある場合は、それらの列にのみマテリアライズドビューを作成することができます。

 `mv_name` で外部データベース名を指定することで、リモートデータ共有クラスターからマテリアライズドビューを作成できます。

## データ共有内のマテリアライズドビューの増分更新
<a name="mv_CREATE_MARTERIALIZED_VIEW_datashare"></a>

 Amazon Redshift は、ベーステーブルを共有している場合、コンシューマーデータ共有でのマテリアライズドビューの自動更新と増分更新をサポートしています。増分更新は、Amazon Redshift が前回の更新後に発生したベーステーブルの変更を特定し、マテリアライズドビューの対応するレコードのみを更新する操作です。これにより、フル更新と比べて、実行が迅速化し、ワークロードのパフォーマンスが向上します。増分更新を利用するために、マテリアライズドビュー定義を変更する必要はありません。

マテリアライズドビューによる増分更新を利用する場合、次の 2 つの注意すべき制限があります。
+ マテリアライズドビューは、ローカルまたはリモートの 1 つのデータベースのみを参照する必要があります。
+ 増分更新は、新しいマテリアライズドビューでのみ使用できます。したがって、増分更新を行うには、既存のマテリアライズドビューを削除して再作成する必要があります。

データ共有でのマテリアライズドビューの作成の詳細については、[「Amazon Redshift データ共有でのビューの使用](https://docs.aws.amazon.com/redshift/latest/dg/datashare-views)」を参照してください。これには、いくつかのクエリ例も含まれています。

## マテリアライズドビューまたはベーステーブルの DDL の更新
<a name="materialized-view-ddl"></a>

Amazon Redshift でマテリアライズドビューを使用する場合は、マテリアライズドビューまたはベーステーブルのデータ定義言語 (DDL) の更新に関する以下の注意事項に従ってください。
+ ベーステーブルを参照するマテリアライズドビューに影響を与えることなく、ベーステーブルに列を追加できます。
+ 操作によっては、マテリアライズドビューをまったく更新できない状態になる場合があります。該当する操作として、名前の変更、列の削除、列の種類の変更、スキーマ名の変更などがあります。このようなオペレーションが行われたマテリアライズドビューは、クエリできますが更新できません。この場合、マテリアライズドビューを削除または再作成する必要があります。
+ 一般的に、マテリアライズドビューの定義 (SQL ステートメント) は変更できません。
+ マテリアライズドビューの名前は変更できません。

## 制限事項
<a name="mv_CREATE_MATERIALIZED_VIEW-limitations"></a>

次のものを参照する、または含むマテリアライズドビューは定義できません。
+ 標準ビュー、またはシステムテーブルとビュー。
+ 一時テーブル。
+ ユーザー定義関数。
+ ORDER BY 句、LIMIT 句、OFFSET 句。
+ ベーステーブルへの遅延バインディングの参照。つまり、マテリアライズドビューを定義する SQL クエリで参照されるベーステーブルや関連列は存在し、有効である必要があります。
+ リーダーノードのみの関数: CURRENT\$1SCHEMA、CURRENT\$1SCHEMAS、HAS\$1DATABASE\$1PRIVILEGE、HAS\$1SCHEMA\$1PRIVILEGE、HAS\$1TABLE\$1PRIVILEGE。
+ マテリアライズドビューの定義の中に、変更可能な関数または外部スキーマが含まれている場合、AUTO REFRESH YES オプションは使用できません。また、別のマテリアライズドビューに基づいてマテリアライズドビューを定義する場合にも使用できません。
+ マテリアライズドビューで [ANALYZE](r_ANALYZE.md) を手動で実行する必要はありません。これは現在のところ、AUTO ANALYZE でのみ発生しています。詳細については、「[テーブルを分析する](t_Analyzing_tables.md)」を参照してください。
+ RLS で保護されたテーブルまたは DDM で保護されたテーブル。
+ リモートデータ共有クラスターからのマテリアライズドビューの作成は、他のマテリアライズドビュー、Spectrum テーブル、異なる Redshift クラスターおよび UDF で定義されたテーブルのリファレンスをサポートしていません。これらは、ローカル (プロデューサー) クラスターからのマテリアライズドビューの作成でサポートされています。

## 例
<a name="mv_CREATE_MARTERIALIZED_VIEW_examples"></a>

次の例では、結合および集計された 3 つのベーステーブルからマテリアライズドビューを作成します。各行は、カテゴリと販売されたチケット数を表します。tickets\$1mv マテリアライズドビューのクエリを実行すると、tickets\$1mv マテリアライズドビューの計算済みのデータに直接アクセスします。

```
CREATE MATERIALIZED VIEW tickets_mv AS
    select   catgroup,
    sum(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;
```

以下の例は、前の例と同様のマテリアライズドビューを作成し、集計関数 MAX() を使用します。

```
CREATE MATERIALIZED VIEW tickets_mv_max AS
    select   catgroup,
    max(qtysold) as sold
    from     category c, event e, sales s
    where    c.catid = e.catid
    and      e.eventid = s.eventid
    group by catgroup;

SELECT name, state FROM STV_MV_INFO;
```

次の例では、UNION ALL 句を使用して Amazon Redshift `public_sales` テーブルと Redshift Spectrum `spectrum.sales` テーブルを結合し、`mv_sales_vw` マテリアルビューを作成します。Amazon Redshift Spectrum の CREATE EXTERNAL TABLE コマンドの詳細については、[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md) を参照してください。Redshift Spectrum 外部テーブルは、Amazon S3 のデータを参照します。

```
CREATE MATERIALIZED VIEW mv_sales_vw as
select salesid, qtysold, pricepaid, commission, saletime from public.sales
union all
select salesid, qtysold, pricepaid, commission, saletime from spectrum.sales
```

次の例では、横串検索の外部テーブルに基づいてマテリアライズドビュー `mv_fq` を作成します。横串検索の詳細については、「[CREATE EXTERNAL SCHEMA](r_CREATE_EXTERNAL_SCHEMA.md)」を参照してください。

```
CREATE MATERIALIZED VIEW mv_fq as select firstname, lastname from apg.mv_fq_example;

select firstname, lastname from mv_fq;
 firstname | lastname
-----------+----------
 John      | Day
 Jane      | Doe
(2 rows)
```

次の例は、マテリアライズドビューの定義を示しています。

```
SELECT pg_catalog.pg_get_viewdef('mv_sales_vw'::regclass::oid, true);

pg_get_viewdef
---------------------------------------------------
create materialized view mv_sales_vw as select a from t;
```

 次のサンプルは、マテリアライズドビューの定義で AUTO REFRESH を設定する方法を示しています。また DISTSTYLE を指定しています。まず、簡単なベーステーブルを作成します。

```
CREATE TABLE baseball_table (ball int, bat int);
```

次に、マテリアライズドビューを作成します。

```
CREATE MATERIALIZED VIEW mv_baseball DISTSTYLE ALL AUTO REFRESH YES AS SELECT ball AS baseball FROM baseball_table;
```

これで mv\$1baseball マテリアライズドビューをクエリできるようになりました。マテリアライズドビューの AUTO REFRESH がオンになっているかどうかを確認するには、「[STV\$1MV\$1INFO](r_STV_MV_INFO.md)」を参照してください。

次のサンプルでは、別のデータベースのソーステーブルを参照するマテリアライズドビューを作成します。ソーステーブル database\$1A を含むデータベースが、database\$1B で作成したマテリアライズドビューと同じクラスターまたはワークグループにあることを前提としています (サンプルの代わりに独自のデータベースを使用できます)。まず、database\$1A に、*cityname* 列がある、*cities* という名前のテーブルを作成します。列のデータ型を VARCHAR にします。ソーステーブルを作成したら、database\$1B で次のコマンドを実行して、*cities* テーブルをソースとするマテリアライズドビューを作成します。FROM 句に必ずソーステーブルのデータベースとスキーマを指定してください。

```
CREATE MATERIALIZED VIEW cities_mv AS
SELECT  cityname
FROM    database_A.public.cities;
```

作成したマテリアライズドビューをクエリします。クエリは、元のソースが database\$1A の *cities* テーブルであるレコードを取得します。

```
select * from cities_mv;
```

SELECT ステートメントを実行すると、*cities\$1mv* はレコードを返します。REFRESH ステートメントが実行されたときにのみ、レコードはソーステーブルから更新されます。また、マテリアライズドビューでレコードを直接更新できないことに注意してください。マテリアライズドビューのデータを更新する方法については、[REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md) を参照してください。

マテリアライズドビューの概要およびマテリアライズドビューの更新や削除に使用する SQL コマンドの詳細については、以下のトピックを参照してください。
+ [Amazon Redshift でのマテリアライズドビュー](materialized-view-overview.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)

# モデルを作成する
<a name="r_CREATE_MODEL"></a>

**Topics**
+ [前提条件](#r_create_model_prereqs)
+ [必要な権限](#r_simple_create_model-privileges)
+ [コスト管理](#r_create_model_cost)
+ [フル CREATE MODEL](#r_full_create_model)
+ [パラメータ](#r_create_model_parameters)
+ [使用に関する注意事項](r_create_model_usage_notes.md)
+ [ユースケース](r_create_model_use_cases.md)

## 前提条件
<a name="r_create_model_prereqs"></a>

CREATE MODEL ステートメントを使用する前に、[Amazon Redshift ML を使用するためのクラスターの設定](getting-started-machine-learning.md#cluster-setup) の前提条件を満たしてください。前提条件の概要は次のとおりです。
+ AWS マネジメントコンソールまたは AWS Command Line Interface (AWS CLI) を使用して、Amazon Redshift クラスターを作成します。
+ クラスターの作成中に AWS Identity and Access Management (IAM) ポリシーをアタッチします。
+ Amazon Redshift と SageMaker AI がロールを引き受けて他のサービスとやり取りできるようにするには、その IAM ロールに適切な信頼ポリシーを追加します。

IAM ロール、信頼ポリシー、およびその他の前提条件の詳細については、「[Amazon Redshift ML を使用するためのクラスターの設定](getting-started-machine-learning.md#cluster-setup)」を参照してください。

以下では、CREATE MODEL ステートメントのさまざまなユースケースを見つけることができます。
+ [単純な CREATE MODEL](r_create_model_use_cases.md#r_simple_create_model)
+ [ユーザーガイダンス付きの CREATE MODEL](r_create_model_use_cases.md#r_user_guidance_create_model)
+ [AUTO OFF 付きの CREATE XGBoost モデル](r_create_model_use_cases.md#r_auto_off_create_model)
+ [独自のモデルを持参 (BYOM) - ローカル推論](r_create_model_use_cases.md#r_byom_create_model)
+ [独自のモデルを持参 (BYOM) - リモート推論](r_create_model_use_cases.md#r_byom_create_model_remote)
+ [K-MEANS を使用した CREATE MODEL](r_create_model_use_cases.md#r_k-means_create_model)
+ [フル CREATE MODEL](#r_full_create_model)

## 必要な権限
<a name="r_simple_create_model-privileges"></a>

CREATE MODEL に必要な権限を以下に示します。
+ スーパーユーザー
+ CREATE MODEL の権限を持つユーザー
+ GRANT CREATE MODEL の権限を持つロール

## コスト管理
<a name="r_create_model_cost"></a>

 Amazon Redshift 機械学習は既存のクラスターリソースを使用して予測モデルを作成するため、追加料金は発生しません。ただし、クラスターのサイズを変更する必要がある場合、またはモデルをトレーニングする場合は、追加料金が発生する可能性があります。Amazon Redshift ML は、モデルのトレーニングに Amazon SageMaker AI を使用します。これには追加費用がかかります。トレーニングにかかる最大時間を制限したり、モデルのトレーニングに使用するトレーニング例の数を制限したりするなど、追加料金を管理する方法があります。詳細については、「[Amazon Redshift 機械学習を使用するためのコスト](https://docs.aws.amazon.com/redshift/latest/dg/cost.html)」を参照してください。

## フル CREATE MODEL
<a name="r_full_create_model"></a>

以下に、完全な CREATE MODEL 構文の基本的なオプションをまとめます。

### フル CREATE MODEL 構文
<a name="r_auto_off-create-model-synposis"></a>

以下は、CREATE MODEL ステートメントの完全な構文です。

**重要**  
CREATE MODEL ステートメントを使用してモデルを作成する場合は、次の構文内のキーワードの順序に従います。

```
CREATE MODEL model_name
FROM { table_name | ( select_statement )  | 'job_name' }
[ TARGET column_name ]
FUNCTION function_name [ ( data_type [, ...] ) ] 
[ RETURNS data_type ] 
  -- supported only for BYOM
[ SAGEMAKER 'endpoint_name'[:'model_name']] 
  -- supported only for BYOM remote inference
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[ AUTO ON / OFF ]
  -- default is AUTO ON
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER | KMEANS | FORECAST } ]
  -- not required for non AUTO OFF case, default is the list of all supported types
  -- required for AUTO OFF
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
  -- not supported when AUTO OFF
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1_Macro' | 'AUC' |
             'reg:squarederror' | 'reg:squaredlogerror'| 'reg:logistic'|
             'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge',
             'multi:softmax' | 'RMSE' | 'WAPE' | 'MAPE' | 'MASE' | 'AverageWeightedQuantileLoss' ) ]
  -- for AUTO ON: first 5 are valid
  -- for AUTO OFF: 6-13 are valid
  -- for FORECAST: 14-18 are valid
[ PREPROCESSORS 'string' ]
  -- required for AUTO OFF, when it has to be 'none'
  -- optional for AUTO ON
[ HYPERPARAMETERS { DEFAULT | DEFAULT EXCEPT ( Key 'value' (,...) ) } ]
  -- support XGBoost hyperparameters, except OBJECTIVE
  -- required and only allowed for AUTO OFF
  -- default NUM_ROUND is 100
  -- NUM_CLASS is required if objective is multi:softmax (only possible for AUTO OFF)
 [ SETTINGS (
   S3_BUCKET 'amzn-s3-demo-bucket',  |
    -- required
  TAGS 'string', |
    -- optional
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional, defualt is on.
  MAX_CELLS integer, |
    -- optional, default is 1,000,000
  MAX_RUNTIME integer (, ...) |
    -- optional, default is 5400 (1.5 hours)
  HORIZON integer, |
    -- required if creating a forecast model
  FREQUENCY integer, |
    -- required if creating a forecast model
  PERCENTILES string, |
    -- optional if creating a forecast model
  MAX_BATCH_ROWS integer -- optional for BYOM remote inference
    ) ]
```

## パラメータ
<a name="r_create_model_parameters"></a>

model\$1name  
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1 *'job\$1name'*\$1  
table\$1name またはトレーニングデータを指定するクエリ。これらは、システム内の既存のテーブル、または丸括弧で囲まれた Amazon RedShift 互換の SELECT クエリ、つまり () のいずれかです。クエリ結果には少なくとも 2 つの列が必要です。

TARGET *column\$1name*  
予測対象となる列の名前。列は、FROM 句内に存在する必要があります。

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
作成する関数の名前と、入力引数のデータ型。関数名の代わりに、データベース内のスキーマのスキーマ名を指定できます。

RETURNS *data\$1type*  
モデルの関数から返されるデータ型。返される `SUPER` データ型はリモート推論を使用する BYOM モデルにのみ適用されます。

SAGEMAKER *'endpoint\$1name'*[:*'model\$1name'*]  
Amazon SageMaker AI エンドポイントの名前。エンドポイント名がマルチモデルのエンドポイントを指している場合は、使用するモデルの名前を追加します。エンドポイントは、Amazon Redshift クラスターと同じ AWS リージョン 内でホストされる必要があります。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 デフォルトキーワードを使用して、CREATE MODEL コマンドの実行時にデフォルトとして設定され、同時にクラスターに関連付けられた IAM ロールを、Amazon Redshift が使用するようにします。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

[ AUTO ON / OFF ]  
 プリプロセッサ、アルゴリズム、およびハイパーパラメータの選択での、CREATE MODEL による自動検出をオンまたはオフにします。予測モデルを作成するときに on を指定すると、AutoPredictor を使用することを示します。ここで、Amazon Forecast は、データセット内の各時系列に最適なアルゴリズムの組み合わせを適用します。

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1 KMEANS \$1 FORECAST \$1*   
(オプション) モデルタイプを指定します。特定のモデルタイプのモデルをトレーニングする場合は、例えば、XGBoost、多層パーセプトロン (MLP)、KMEANS、線形学習などのタイプを指定できます。これらはすべて、Amazon SageMaker AI Autopilot でサポートされているアルゴリズムです。パラメータを指定しない場合、トレーニング中にサポートされているすべてのモデルタイプが最適なモデルを検索します。Redshift ML で予測モデルを作成して、正確な時系列予測を作成することもできます。

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(オプション) 問題の種類を指定します。問題の種類がわかっている場合は、Amazon Redshift をその特定のモデルタイプの最適なモデルだけを検索するように制限できます。このパラメータを指定しない場合、トレーニング中にデータに基づく問題の種類が検出されます。

OBJECTIVE ( 'MSE' \$1 'Accuracy' \$1 'F1' \$1 'F1Macro' \$1 'AUC' \$1 'reg:squarederror' \$1 'reg:squaredlogerror' \$1 'reg:logistic' \$1 'reg:pseudohubererror' \$1 'reg:tweedie' \$1 'binary:logistic' \$1 'binary:hinge' \$1 'multi:softmax' \$1 'RMSE' \$1 'WAPE' \$1 'MAPE' \$1 'MASE' \$1 'AverageWeightedQuantileLoss' )  
(オプション) 機械学習システムの予測品質を測定するために使用する目標メトリクスの名前を指定します。このメトリクスは、トレーニング中に最適化され、データからモデルパラメータ値の最良の推定値を提供します。メトリクスを明示的に指定しない場合、デフォルトの動作では、MSE が回帰に、F1 がバイナリ分類に、精度がマルチクラス分類に自動的に使用されます。目標の詳細については、「*Amazon SageMaker AI API リファレンス*」の「[AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)」および XGBOOST ドキュメントの「[Learning task parameters](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters)」を参照してください。RMSE、WAPE、MAPE、MASE、および AverageWeightedQuantileLoss の値は、予測モデルにのみ適用されます。詳細については、[CreateAutoPredictor](https://docs.aws.amazon.com/forecast/latest/dg/API_CreateAutoPredictor.html#forecast-CreateAutoPredictor-request-OptimizationMetric) API オペレーションを参照してください。

 *PREPROCESSORS 'string' *   
(オプション) 特定の列セットに対するプリプロセッサの特定の組み合わせを指定します。形式は、columnSets のリストであり、各列のセットに適用される適切な変換です。Amazon Redshift は、特定のトランスフォーマのリスト内にあるすべてのトランスフォーマを対応する ColumnSet 内のすべての列に適用します。例えば、Imputer を使用した OneHotEncoder を列 t1 と t2 に適用するには、次のサンプルコマンドを使用します。  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
  {"ColumnSet": [
      "t1",
      "t2"
    ],
    "Transformers": [
      "OneHotEncoder",
      "Imputer"
    ]
  },
  {"ColumnSet": [
      "t3"
    ],
    "Transformers": [
      "OneHotEncoder"
    ]
  },
  {"ColumnSet": [
      "temp"
    ],
    "Transformers": [
      "Imputer",
      "NumericPassthrough"
    ]
  }
]'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket'
)
```

HYPERPARAMETERS \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
デフォルトの XGBoost パラメータを使用するか、それをユーザー指定の値で上書きするかを指定します。値は一重引用符で囲む必要があります。以下に、XGBoost のパラメータとそのデフォルトの例を示します。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CREATE_MODEL.html)

SETTINGS ( S3\$1BUCKET *'amzn-s3-demo-bucket'*, \$1 TAGS 'string', \$1 KMS\$1KEY\$1ID *'kms\$1string' *, \$1 S3\$1GARBAGE\$1COLLECT on / off, \$1 MAX\$1CELLS integer , \$1 MAX\$1RUNTIME (,...) , \$1 HORIZON integer, \$1 FREQUENCY forecast\$1frequency, \$1 PERCENTILES array of strings )  
S3\$1BUCKET 句は、中間結果の保存に使用される Amazon S3 の場所を指定します。  
(オプション) TAGS パラメータには、Amazon SageMaker AI および Amazon Forecast で作成されたリソースへのタグ付けに使用できるキーと値のペアを、カンマ区切りのリストで指定します。タグを使用すると、リソースの整理やコストの割り当てに役立ちます。ペアの値はオプションであるため、`key=value` 形式を使用するか、単にキーを作成するだけで、タグを作成できます。Amazon Redshift のタグの詳細については、「[タグ付けの概要](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-tagging.html)」を参照してください。  
(オプション) KMS\$1KEY\$1ID は、Amazon Redshift が AWS KMS キーを使用したサーバー側の暗号化を使用して、保管中のデータを保護するかどうかを指定します。転送中のデータは Secure Sockets Layer (SSL) で保護されています。  
(オプション) S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1 は、Amazon Redshift がモデルのトレーニングに使用される結果のデータセットに対してガベージコレクションを実行するかどうかを指定します。OFF に設定すると、モデルとモデルのトレーニングに使用される結果のデータセットは Amazon S3 に残り、他の目的に使用できます。ON に設定すると、Amazon Redshift はトレーニングの完了後に Amazon S3 内のアーティファクトを削除します。デフォルトはオンです。  
(オプション) MAX\$1CELLS は、トレーニングデータのセル数を指定します。この値は、(トレーニングクエリまたはテーブル内の) レコード数と列数の積です。デフォルトは 1,000,000 です。  
(オプション) MAX\$1RUNTIME は、トレーニングする最大時間を指定します。トレーニングジョブは、データセットのサイズに応じてより早く完了することがよくあります。これは、トレーニングにかかる最大時間を指定します。デフォルトは 5,400 (90 分) です。  
HORIZON は、予測モデルが返すことができる予測の最大数を指定します。モデルのトレーニングが完了すると、この整数は変更できません。このパラメータは、予測モデルをトレーニングする場合に必要です。  
FREQUENCY は、予測の詳細度を時間単位で指定します。使用できるオプションは、`Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min` です。このパラメータは、予測モデルをトレーニングする場合に必要です。  
(オプション) PERCENTILES は、予測子のトレーニングに使用される予測タイプを指定するカンマ区切り文字列です。予測タイプは、0.01 以上の増分で 0.01 から 0.99 までの分位数にすることができます。mean で平均予測を指定することもできます。最大 5 つの予測タイプを指定できます。

 MAX\$1BATCH\$1ROWS *整数*   
(オプション) Amazon Redshift が 1 回の SageMaker AI 呼び出しに対して 1 回のバッチリクエストで送信する最大行数。リモート推論を使用する BYOM でのみサポートされます。このパラメータの最小値は 1 です。最大値は `INT_MAX` または 2,147,483,647 です。このパラメータは、入力データ型と返されたデータ型の両方が *SUPER* である場合にのみ必要です。デフォルト値は `INT_MAX` または 2,147,483,647 です。

# 使用に関する注意事項
<a name="r_create_model_usage_notes"></a>

CREATE MODEL を使用するときは、次の点を考慮してください。
+ CREATE MODEL ステートメントは非同期モードで動作し、Amazon S3 へのトレーニングデータのエクスポート時に戻ります。Amazon SageMaker AI でのトレーニングの残りのステップは、バックグラウンドで行われます。トレーニングが進行している間は、対応する推論関数が表示されますが、実行することはできません。[STV\$1ML\$1MODEL\$1INFO](r_STV_ML_MODEL_INFO.md) にクエリを実行して、トレーニングの状態を確認できます。
+ トレーニングはバックグラウンドで最大 90 分間実行できますが、デフォルトでは自動モデルで実行し、延長することもできます。[DROP MODEL](r_DROP_MODEL.md) コマンドを実行するだけで、トレーニングをキャンセルできます。
+ モデルの作成に使用する Amazon Redshift クラスターと、トレーニングデータとモデルアーティファクトのステージングに使用される Amazon S3 バケットは、同じ AWS リージョンに置かれている必要があります。
+ モデルトレーニング中に、Amazon Redshift と SageMaker AI は、指定された Amazon S3 バケットに中間アーティファクトを保存します。Amazon Redshift のデフォルトでは、CREATE MODEL オペレーションの最後にガベージコレクションが実行されます。Amazon Redshift は、Amazon S3 からこれらのオブジェクトを削除します。これらのアーティファクトを Amazon S3 で保持するには、S3\$1GARBAGE COLLECT OFF オプションを設定します。
+ FROM 句で提供されるトレーニングデータには、少なくとも 500 行を使用する必要があります。
+ CREATE MODEL ステートメントを使用する場合、FROM \$1 table\$1name \$1 ( select\$1query ) \$1 句には、最大 256 個の特徴 (入力) 列しか指定できません。
+ AUTO ON の場合、トレーニングセットとして使用できる列タイプは、SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE、BOOLEAN、CHAR、VARCHAR、DATE、TIME、TIMMETZ、TIMETZ TIMESTAMP、TIMESTAMPTZ です。AUTO OFF の場合、トレーニングセットとして使用できる列タイプは、SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、DOUBLE、BOOLEAN です。
+ ターゲット列のデータ型として、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、TIMESTAMPTZ、GEOMETRY、GEOGRAPHY、HLLSKETCH、SUPER、または VARBYTE を使用することはできません。
+ モデルの精度を上げるには、以下のいずれかを実行します。
  + FROM 句でトレーニングデータを指定するときに、CREATE MODEL コマンドに関連する列をできるだけ多く追加します。
  + MAX\$1RUNTIME と MAX\$1CELLS にはより大きな値を使用してください。このパラメータの値を大きくすると、モデルのトレーニングにかかるコストが増加します。
+ トレーニングデータが計算され、Amazon S3 バケットにエクスポートされるとすぐに CREATE MODEL ステートメントの実行が返されます。その後、SHOW MODEL コマンドを使用して、トレーニングのステータスを確認できます。バックグラウンドでトレーニングされているモデルに障害が発生した場合は、SHOW MODEL を使用してエラーを確認できます。失敗したモデルを再試行することはできません。DROP MODEL を使用すると、失敗したモデルを削除し、新しいモデルを再作成できます。SHOW MODEL の詳細については、「[SHOW MODEL](r_SHOW_MODEL.md)」を参照してください。
+ ローカル BYOM は、Amazon Redshift ML が BYOM 以外の場合にサポートするのと同じ種類のモデルをサポートします。Amazon Redshift は、プレーンな XGBoost (XGBoost バージョン 1.0 以降を使用)、プリプロセッサを使用しない KMEANS モデル、Amazon SageMaker AI Autopilot によってトレーニングされた XGBoost/MLP/線形学習モデルをサポートします。後者は、Autopilot で指定されたプリプロセッサに Amazon SageMaker AI Neo も対応している場合に、サポートされます。
+ Amazon Redshift クラスターで仮想プライベートクラウド (VPC) に対して拡張ルーティングが有効になっている場合は、クラスターが配置されている VPC 用の Amazon S3 VPC エンドポイントと SageMaker AI VPC エンドポイントを作成してください。これにより、CREATE MODEL の実行中にトラフィックがこれらのサービス間で VPC を通過できるようになります。詳細については、「[SageMaker AI Clarify Job Amazon VPC Subnets and Security Groups](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-vpc.html#clarify-vpc-job)」を参照してください。

# ユースケース
<a name="r_create_model_use_cases"></a>

次のユースケースは、ニーズに合わせて CREATE MODEL を使用する方法を示しています。

## 単純な CREATE MODEL
<a name="r_simple_create_model"></a>

次に、CREATE MODEL 構文の基本的なオプションをまとめます。

### 単純な CREATE MODEL 構文
<a name="r_simple-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_query ) }
TARGET column_name
FUNCTION prediction_function_name
IAM_ROLE { default }
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  [ MAX_CELLS integer ]
)
```

### 単純な CREATE MODEL パラメータ
<a name="r_simple-create-model-parameters"></a>

 *model\$1name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FROM \$1 *table\$1name* \$1 ( *select\$1query* ) \$1  
table\$1name またはトレーニングデータを指定するクエリ。これらは、システム内の既存のテーブル、または丸括弧で囲まれた Amazon RedShift 互換の SELECT クエリ、つまり () のいずれかです。クエリ結果には少なくとも 2 つの列が必要です。

TARGET *column\$1name*  
予測対象となる列の名前。列は、FROM 句内に存在する必要があります。

FUNCTION *prediction\$1function\$1name*   
CREATE MODEL によって生成され、このモデルを使用して予測を行うために使用される Amazon Redshift 機械学習関数の名前を指定する値。この関数は、モデルオブジェクトと同じスキーマで作成され、オーバーロードされる可能性があります。  
Amazon Redshift の機械学習では、回帰および分類用の Xtreme Gradient Boosted ツリー (XgBoost) モデルなどのモデルがサポートされています。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1  
 デフォルトキーワードを使用して、CREAT MODEL コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

 *S3\$1BUCKET *'amzn-s3-demo-bucket'**  
前もって作成しておいた Amazon S3 バケットの名前。Amazon Redshift と SageMaker AI の間でトレーニングデータとアーティファクトを共有するために使用されます。Amazon Redshift は、トレーニングデータをアンロードする前に、このバケットにサブフォルダを作成します。トレーニングが完了すると、Amazon Redshift は作成したサブフォルダとその内容を削除します。

MAX\$1CELLS 整数   
FROM 句からエクスポートするセルの最大数。デフォルトは 1,000,000 です。  
セル数は、トレーニングデータ (FROM 句のテーブルまたはクエリによって生成される) の行数と列数を掛けた積です。トレーニングデータのセル数が max\$1cells パラメータで指定された数よりも多い場合、CREATE MODEL は FROM 句のトレーニングデータをダウンサンプリングして、トレーニングセットのサイズを MAX\$1CELLS 未満に減らします。大規模なトレーニングデータセットを許可すると、精度が高くなる可能性がありますが、モデルのトレーニングに時間がかかり、コストも高くなる可能性があります。  
Amazon Redshift の使用コストについては、「[Amazon Redshift 機械学習を使用するためのコスト](cost.md)」を参照してください。  
さまざまなセル番号に関連するコストと無料トライアルの詳細については、[Amazon Redshift の料金](https://aws.amazon.com/redshift/pricing)を参照してください。

## ユーザーガイダンス付きの CREATE MODEL
<a name="r_user_guidance_create_model"></a>

以下に、[単純な CREATE MODEL](#r_simple_create_model) で説明されているオプションに加えて、CREATE MODEL オプションの説明を示します。

デフォルトでは、CREATE MODEL は特定のデータセットの前処理とモデルの最適な組み合わせを検索します。モデルに対して追加の制御が必要な場合や、追加のドメイン知識 (問題の種類や目的など) を導入する場合があります。顧客解約シナリオでは、「顧客がアクティブではない」という結果がまれである場合、精度目標よりも F1 目標が優先されることがよくあります。高精度モデルでは、常に「顧客がアクティブ」であると予測される可能性があるため、精度は高くなりますが、ビジネス価値はほとんどありません。F1 目標の詳細については、「*Amazon SageMaker AI API リファレンス*」の 「[AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)」を参照してください。

次に、CREATE MODELは、目標など、指定された側面に関する提案に従います。同時に、CREATE MODEL は最適なプリプロセッサと最適なハイパーパラメータを自動的に検出します。

### ユーザーガイダンス構文付きの CREATE MODEL
<a name="r_user_guidance-create-model-synposis"></a>

CREATE MODEL を使用すると、指定できる側面と Amazon Redshift が自動的に検出する側面について、より柔軟性が高まります。

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
[ MODEL_TYPE { XGBOOST | MLP | LINEAR_LEARNER} ]
[ PROBLEM_TYPE ( REGRESSION | BINARY_CLASSIFICATION | MULTICLASS_CLASSIFICATION ) ]
[ OBJECTIVE ( 'MSE' | 'Accuracy' | 'F1' | 'F1Macro' | 'AUC') ]
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### ユーザーガイダンスパラメータ付きの CREATE MODEL
<a name="r_user_guidance-create-model-parameters"></a>

 *MODEL\$1TYPE \$1 XGBOOST \$1 MLP \$1 LINEAR\$1LEARNER \$1*   
(オプション) モデルタイプを指定します。特定のモデルタイプのモデルをトレーニングする場合は、例えば、XGBoost、多層パーセプトロン (MLP)、線形学習などのタイプを指定できます。これらはすべて、Amazon SageMaker AI Autopilot でサポートされているアルゴリズムです。パラメータを指定しない場合、トレーニング中にサポートされているすべてのモデルタイプが最適なモデルを検索します。

 *PROBLEM\$1TYPE ( REGRESSION \$1 BINARY\$1CLASSIFICATION \$1 MULTICLASS\$1CLASSIFICATION )*   
(オプション) 問題の種類を指定します。問題の種類がわかっている場合は、Amazon Redshift をその特定のモデルタイプの最適なモデルだけを検索するように制限できます。このパラメータを指定しない場合、トレーニング中にデータに基づく問題の種類が検出されます。

OBJECTIVE ( 'MSE' \$1 'Accuracy' \$1 'F1' \$1 'F1Macro' \$1 'AUC')  
(オプション) 機械学習システムの予測品質を測定するために使用する目標メトリクスの名前を指定します。このメトリクスは、トレーニング中に最適化され、データからモデルパラメータ値の最良の推定値を提供します。メトリクスを明示的に指定しない場合、デフォルトの動作では、MSE が回帰に、F1 がバイナリ分類に、精度がマルチクラス分類に自動的に使用されます。目標の詳細については、「*Amazon SageMaker AI API リファレンス*」の「[AutoMLJobObjective](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_AutoMLJobObjective.html)」を参照してください。

MAX\$1CELLS 整数   
(オプション) トレーニングデータのセル数を指定します。この値は、(トレーニングクエリまたはテーブル内の) レコード数と列数の積です。デフォルトは 1,000,000 です。

MAX\$1RUNTIME 整数   
(オプション) トレーニングする最大時間を指定します。トレーニングジョブは、データセットのサイズに応じてより早く完了することがよくあります。これは、トレーニングにかかる最大時間を指定します。デフォルトは 5,400 (90 分) です。

S3\$1GARBAGE\$1COLLECT \$1 ON \$1 OFF \$1  
(オプション) Amazon Redshift がモデルおよびモデルのトレーニングに使用される結果のデータセットに対してガベージコレクションを実行するかどうかを指定します。OFF に設定すると、モデルとモデルのトレーニングに使用される結果のデータセットは Amazon S3 に残り、他の目的に使用できます。ON に設定すると、Amazon Redshift はトレーニングの完了後に Amazon S3 内のアーティファクトを削除します。デフォルトはオンです。

KMS\$1KEY\$1ID 'kms\$1key\$1id'  
(オプション) AWS KMS キーを使用したサーバー側の暗号化を使用して、Amazon Redshift が保管中のデータを保護するかどうかを指定します。転送中のデータは Secure Sockets Layer (SSL) で保護されています。

 *PREPROCESSORS 'string' *   
(オプション) 特定の列セットに対するプリプロセッサの特定の組み合わせを指定します。形式は、columnSets のリストであり、各列のセットに適用される適切な変換です。Amazon Redshift は、特定のトランスフォーマのリスト内にあるすべてのトランスフォーマを対応する ColumnSet 内のすべての列に適用します。例えば、Imputer を使用した OneHotEncoder を列 t1 と t2 に適用するには、次のサンプルコマンドを使用します。  

```
CREATE MODEL customer_churn
FROM customer_data
TARGET 'Churn'
FUNCTION predict_churn
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
PROBLEM_TYPE BINARY_CLASSIFICATION
OBJECTIVE 'F1'
PREPROCESSORS '[
...
{"ColumnSet": [
    "t1",
    "t2"
  ],
  "Transformers": [
    "OneHotEncoder",
    "Imputer"
  ]
},
{"ColumnSet": [
    "t3"
  ],
  "Transformers": [
    "OneHotEncoder"
  ]
},
{"ColumnSet": [
    "temp"
  ],
  "Transformers": [
    "Imputer",
    "NumericPassthrough"
  ]
}
]'
SETTINGS (
S3_BUCKET 'amzn-s3-demo-bucket'
)
```

Amazon Redshift では、次のトランスフォーマをサポートしています。
+ OneHotEncoder – 通常、離散値をゼロ以外の値を持つバイナリベクトルにエンコードするために使用されます。このトランスフォーマは、多くの機械学習モデルに適しています。
+ OrdinalEncoder – 離散値を 1 つの整数にエンコードします。このトランスフォーマは、MLP や線形学習など特定の機械学習モデルに適しています。
+ NumericPassthrough – 入力をそのままモデルに渡します。
+ Imputer – 数値 (NaN) の値ではなく、欠損値を記入します。
+ ImputerWithIndicator – 欠損値と NaN 値を埋めます。このトランスフォーマは、値が欠落して入力されているかどうかを示すインジケータも作成します。
+ Normalizer – 値を正規化します。これにより、多くの機械学習アルゴリズムのパフォーマンスが向上します。
+ DateTimeVectorizer – 機械学習モデルで使用できる日時データ型の列を表すベクトル埋め込みを作成します。
+ PCA – できるだけ多くの情報を保持しながら、特徴の数を減らすためにデータを低い次元空間に投影します。
+ StandardScaler – 平均を除去し、単位分散にスケーリングして、特徴を標準化します。
+ MinMax – それぞれの特徴を指定された範囲にスケーリングすることで、特徴を変換します。

Amazon Redshift ML は、トレーニング済みのトランスフォーマを保存し、予測クエリの一部として自動的に適用します。モデルから予測を生成するときにそれらを指定する必要はありません。

## AUTO OFF 付きの CREATE XGBoost モデル
<a name="r_auto_off_create_model"></a>

AUTO OFF CREATE MODEL の目的は、通常、デフォルトの CREATE MODEL の目的とは異なります。

使用するモデル型と、これらのモデルをトレーニングする際に使用するハイパーパラメータを既に把握している上級ユーザーであれば、CREATE MODEL で AUTO OFF を指定することで、プリプロセッサとハイパーパラメータに関する CREATE MODEL による自動検出をオフにすることができます。そのためには、明示的にモデルタイプを指定します。XGBoost は現在、AUTO が OFF に設定されている場合にサポートされる唯一のモデルタイプです。ハイパーパラメータを指定できます。Amazon Redshift では、指定したハイパーパラメータにデフォルト値が使用されます。

### AUTO OFF 構文を使用する CREATE XGBoost モデル
<a name="r_auto_off-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | (select_statement ) }
TARGET column_name
FUNCTION function_name
IAM_ROLE { default }
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE { 'reg:squarederror' | 'reg:squaredlogerror' | 'reg:logistic' |
            'reg:pseudohubererror' | 'reg:tweedie' | 'binary:logistic' | 'binary:hinge' |
            'multi:softmax' | 'rank:pairwise' | 'rank:ndcg' }
HYPERPARAMETERS DEFAULT EXCEPT (
    NUM_ROUND '10',
    ETA '0.2',
    NUM_CLASS '10',
    (, ...)
)
PREPROCESSORS 'none'
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', |
  S3_GARBAGE_COLLECT { ON | OFF }, |
  KMS_KEY_ID 'kms_key_id', |
  MAX_CELLS integer, |
  MAX_RUNTIME integer (, ...)
)
```

### AUTO OFF パラメータ付き CREATE XGBoost モデル
<a name="r_auto_off-create-model-parameters"></a>

 *AUTO OFF*   
プリプロセッサ、アルゴリズム、およびハイパーパラメータの選択での、CREATE MODEL による自動検出をオフにします。

MODEL\$1TYPE XGBOOST  
XGBOOST を使用してモデルをトレーニングするよう指定します。

OBJECTIVE str  
アルゴリズムによって認識される目標を指定します。Amazon Redshift は reg:squarederror、reg:squaredlogerror、reg:logistic、reg:pseudohubererror、reg:tweedie、binary:logistic、binary:hinge、multi:softmax をサポートしています。これらの目的の詳細については、XGBoost のドキュメントから[ラーニングタスクのパラメータ](https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters)を参照してください。

HYPERPARAMETERS \$1 DEFAULT \$1 DEFAULT EXCEPT ( key ‘value’ (,..) ) \$1  
デフォルトの XGBoost パラメータを使用するか、それをユーザー指定の値で上書きするかを指定します。値は一重引用符で囲む必要があります。以下に、XGBoost のパラメータとそのデフォルトの例を示します。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_create_model_use_cases.html)

次の例では、XGBoost 用のデータを準備します。

```
DROP TABLE IF EXISTS abalone_xgb;

CREATE TABLE abalone_xgb (
length_val float,
diameter float,
height float,
whole_weight float,
shucked_weight float,
viscera_weight float,
shell_weight float,
rings int,
record_number int);

COPY abalone_xgb
FROM 's3://redshift-downloads/redshift-ml/abalone_xg/'
REGION 'us-east-1'
IAM_ROLE default
IGNOREHEADER 1 CSV;
```

次の例では、MODEL\$1TYPE、OBJECTIVE、PREPROCESSORS など、指定された詳細オプションを使用して XGBoost モデルを作成します。

```
DROP MODEL abalone_xgboost_multi_predict_age;

CREATE MODEL abalone_xgboost_multi_predict_age
FROM ( SELECT length_val,
              diameter,
              height,
              whole_weight,
              shucked_weight,
              viscera_weight,
              shell_weight,
              rings
   FROM abalone_xgb WHERE record_number < 2500 )
TARGET rings FUNCTION ml_fn_abalone_xgboost_multi_predict_age
IAM_ROLE default
AUTO OFF
MODEL_TYPE XGBOOST
OBJECTIVE 'multi:softmax'
PREPROCESSORS 'none'
HYPERPARAMETERS DEFAULT EXCEPT (NUM_ROUND '100', NUM_CLASS '30')
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

次の例では、推論クエリを使用して、レコード番号が 2500 より大きい魚の年齢を予測します。上記のコマンドで作成した関数 ml\$1fn\$1abalone\$1xgboost\$1multi\$1predict\$1age を使用します。

```
select ml_fn_abalone_xgboost_multi_predict_age(length_val,
                                                   diameter,
                                                   height,
                                                   whole_weight,
                                                   shucked_weight,
                                                   viscera_weight,
                                                   shell_weight)+1.5 as age
from abalone_xgb where record_number > 2500;
```

## 独自のモデルを持参 (BYOM) - ローカル推論
<a name="r_byom_create_model"></a>

Amazon Redshift 機械学習では、ローカルの推論において独自のモデルを持参 (BYOM) できるようサポートしています。

次に、BYOM の CREATE MODEL 構文のオプションをまとめます。Amazon SageMaker AI を使用してAmazon Redshift の外部でトレーニングされたモデルを利用し、Amazon Redshift でローカルにデータベース内推論を行うことができます。

### ローカル推論のための CREATE MODEL 構文
<a name="r_local-create-model"></a>

以下では、ローカル推論のための CREATE MODEL 構文について説明します。

```
CREATE MODEL model_name
FROM ('job_name' | 's3_path' )
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
IAM_ROLE { default }
[ SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket', | --required
  KMS_KEY_ID 'kms_string') --optional
];
```

Amazon Redshift は現在、BYOM 用に事前トレーニングされた XGBoost MLP および線形学習モデルのみをサポートしています。このパスを使用して、SageMaker AI Autopilot と、Amazon SageMaker AI で直接トレーニングされたモデルをローカル推論用にインポートできます。

#### ローカル推論のための CREATE MODEL パラメータ
<a name="r_local-create-model-parameters"></a>

 *model\$1name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FROM (*'job\$1name'* \$1 *'s3\$1path'* )  
*job\$1name* では、入力として Amazon SageMaker AI のジョブ名を指定します。ジョブ名は、Amazon SageMaker AI トレーニングジョブ名または Amazon SageMaker AI Autopilot ジョブ名のいずれかです。ジョブは、Amazon Redshift クラスターを所有するのと同じ AWS アカウントで作成する必要があります。ジョブ名を調べるには、Amazon SageMaker AI を起動します。[**トレーニング**] ドロップダウンメニューで、[**トレーニングジョブ**] を選択します。  
*'s3\$1path'* では、モデルの作成時に使用される .tar.gz モデルアーティファクトファイルを格納する S3 の場所を指定します。

FUNCTION *function\$1name* ( *data\$1type* [, ...] )  
作成する関数の名前と、入力引数のデータ型。スキーマ名を指定できます。

RETURNS *data\$1type*  
関数によって返される値のデータ型。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 デフォルトキーワードを使用して、CREATE MODEL コマンドの実行時にデフォルトとして設定され、同時にクラスターに関連付けられた IAM ロールを、Amazon Redshift が使用するようにします。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。

SETTINGS ( S3\$1BUCKET *'amzn-s3-demo-bucket'*, \$1 KMS\$1KEY\$1ID *'kms\$1string'*)  
S3\$1BUCKET 句は、中間結果の保存に使用される Amazon S3 の場所を指定します。  
(オプション) KMS\$1KEY\$1ID 句は、Amazon Redshift が AWS KMS キーを使用したサーバー側の暗号化を使用して、保管中のデータを保護するかどうかを指定します。転送中のデータは Secure Sockets Layer (SSL) で保護されています。  
詳細については、「[ユーザーガイダンス付きの CREATE MODEL](#r_user_guidance_create_model)」を参照してください。

#### ローカル推論のための CREATE MODEL 例
<a name="r_local-create-model-example"></a>

次の例では、Amazon SageMaker AI で以前にトレーニングされたモデルを、Amazon Redshift の外部に作成します。モデル型は Amazon Redshift ML によってローカル推論用にサポートされているため、以下の CREATE MODEL では、Amazon Redshift でローカルで使用できる関数を作成します。SageMaker AI のトレーニングジョブ名を指定できます。

```
CREATE MODEL customer_churn
FROM 'training-job-customer-churn-v4'
FUNCTION customer_churn_predict (varchar, int, float, float)
RETURNS int
IAM_ROLE default
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
```

モデルが作成されたら、指定された引数タイプで関数 *customer\$1churn\$1predict* を使用して予測を行うことができます。

## 独自のモデルを持参 (BYOM) - リモート推論
<a name="r_byom_create_model_remote"></a>

また、Amazon Redshift 機械学習では、リモート推論においても独自のモデルを持参 (BYOM) できるようサポートしています。

次に、BYOM の CREATE MODEL 構文のオプションをまとめます。

### リモート推論のための CREATE MODEL 構文
<a name="r_remote-create-model"></a>

次に、リモート推論用の CREATE MODEL 構文について説明します。

```
CREATE MODEL model_name 
FUNCTION function_name ( data_type [, ...] )
RETURNS data_type
SAGEMAKER 'endpoint_name'[:'model_name']
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
[SETTINGS (MAX_BATCH_ROWS integer)];
```

#### リモート推論の CREATE MODEL パラメータ
<a name="r_remote-create-model-parameters"></a>

 *model\$1name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

FUNCTION *fn\$1name* ( [*data\$1type*] [, ...] )  
関数の名前と入力引数のデータ型。サポートされているすべてのデータ型については、「[データ型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)」を参照してください。`Geography`、`geometry`、`hllsketch` はサポートされていません。  
また、`myschema.myfunction` などの 2 つの部分からなる表記を使用して、スキーマ内に関数名を指定することもできます。

RETURNS *data\$1type*  
関数によって返される値のデータ型。サポートされているすべてのデータ型については、「[データ型](https://docs.aws.amazon.com/redshift/latest/dg/c_Supported_data_types.html)」を参照してください。`Geography`、`geometry`、`hllsketch` はサポートされていません。

SAGEMAKER *'endpoint\$1name'*[:*'model\$1name'*]   
Amazon SageMaker AI エンドポイントの名前。エンドポイント名がマルチモデルのエンドポイントを指している場合は、使用するモデルの名前を追加します。エンドポイントは、Amazon Redshift クラスターと同じ AWS リージョンおよび AWS アカウントでホストされている必要があります。エンドポイントを調べるには、Amazon SageMaker AI を起動します。[**推論**] ドロップダウンメニューで、[**エンドポイント**] を選択します。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>'\$1  
 デフォルトキーワードを使用して、CREATE MODEL コマンドの実行時にデフォルトとして設定され、同時にクラスターに関連付けられた IAM ロールを、Amazon Redshift が使用するようにします。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

MAX\$1BATCH\$1ROWS *整数*  
Amazon Redshift が 1 回の SageMaker AI 呼び出しに対して 1 回のバッチリクエストで送信する最大行数。リモート推論を使用する BYOM でのみサポートされます。バッチ内の実際の行数は入力サイズにも依存しますが、この値以下です。このパラメータの最小値は 1 です。最大値は `INT_MAX` または 2,147,483,647 です。このパラメータは、入力データ型と返されたデータ型の両方が `SUPER` である場合にのみ必要です。デフォルト値は `INT_MAX` または 2,147,483,647 です。

モデルが SageMaker AI エンドポイントにデプロイされると、SageMaker AI が Amazon Redshift でモデルの情報を作成します。その後、外部関数を介して推論を実行します。SHOW MODEL コマンドを使用して、Amazon Redshift クラスターのモデル情報を表示できます。

#### リモート推論の使用上の注意のための CREATE MODEL
<a name="r_remote-create-model-usage-notes"></a>

リモート推論に CREATE MODEL を使用する前に、次の点を考慮してください。
+ エンドポイントは、Amazon Redshift クラスターを所有するのと同じ AWS アカウントでホストされている必要があります。
+ Amazon SageMaker AI エンドポイントに Amazon Redshift からの推論呼び出しに対応するのに十分なリソースがあること、または Amazon SageMaker AI エンドポイントを自動的にスケーリングできることを確認してください。
+ `SUPER` データ型を入力として使用していない場合、モデルは SageMaker AI の `text/CSV` のコンテンツタイプに対応するカンマ区切り値 (CSV) 形式の入力のみを受け入れます。
+ `SUPER` データ型を入力として使用していない場合、モデルの出力は、関数の作成時に指定された型の単一の値です。この出力は、SageMaker AI の `text/CSV` のコンテンツタイプを通じてカンマ区切り値 (CSV) の形式で提供されます。`VARCHAR` データ型は引用符で囲むことができず、改行を含めることもできません。また、各出力は新しい行に配置する必要があります。
+ モデルは空の文字列として null を受け入れます。
+ 入力データ型が `SUPER` の場合、サポートされる入力引数は 1 つだけです。
+ 入力データ型が `SUPER` の場合、返されるデータ型も `SUPER` である必要があります。
+ MAX\$1BATCH\$1ROWS は、入力データ型と返されたデータ型の両方が SUPER の場合に必要です。
+ 入力データ型が `SUPER` のとき、エンドポイント呼び出しのコンテンツ型は、MAX\$1BATCH\$1ROWS が `1` の場合は `application/json`、それ以外の場合は `application/jsonlines` です。
+ 返されるデータ型が `SUPER` のとき、エンドポイント呼び出しの受け入れ型は、MAX\$1BATCH\$1ROWS が `1` の場合は `application/json`、それ以外の場合は `application/jsonlines` です。

##### リモート推論のための CREATE MODEL 例
<a name="r_remote-create-model-example"></a>

次の例では、SageMaker AI エンドポイントを使用して予測を行うモデルを作成します。エンドポイントが実行されていることを確認して予測を行い、CREATE MODEL コマンドでその名前を指定します。

```
CREATE MODEL remote_customer_churn
FUNCTION remote_fn_customer_churn_predict (varchar, int, float, float)
RETURNS int
SAGEMAKER 'customer-churn-endpoint'
IAM_ROLE default;
```

 次の例では、大規模言語モデル (LLM) を使用してリモート推論で BYOM を作成します。Amazon SageMaker AI Jumpstart でホストされている LLM は、`application/json` コンテンツタイプを受け入れて返し、呼び出しごとに単一の JSON をサポートします。入力データ型と返されるデータ型は `SUPER` で、MAX\$1BATCH\$1ROWS は 1 に設定する必要があります。

```
CREATE MODEL sample_super_data_model
FUNCTION sample_super_data_model_predict(super)
RETURNS super
SAGEMAKER 'sample_super_data_model_endpoint'
IAM_ROLE default
SETTINGS (MAX_BATCH_ROWS 1);
```

## K-MEANS を使用した CREATE MODEL
<a name="r_k-means_create_model"></a>

Amazon Redshift は、ラベル付けされていないデータをグループ化する K-Means アルゴリズムをサポートしています。このアルゴリズムは、データ内でグループを検出する際にクラスタリングで発生する問題を解決します。未分類のデータについては、その類似点と相違点に基づいたグループ分けと分割が行われます。

### K-MEANS 構文による CREATE MODEL
<a name="r_k-means-create-model-synposis"></a>

```
CREATE MODEL model_name
FROM { table_name | ( select_statement ) }
FUNCTION function_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>' }
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS 'string'
HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  KMS_KEY_ID 'kms_string', |
    -- optional
  S3_GARBAGE_COLLECT on / off, |
    -- optional
  MAX_CELLS integer, |
    -- optional
  MAX_RUNTIME integer
    -- optional);
```

### K-MEANS パラメータによる CREATE MODEL
<a name="r_k-means-create-model-parameters"></a>

 *AUTO OFF*   
プリプロセッサ、アルゴリズム、およびハイパーパラメータの選択での、CREATE MODEL による自動検出をオフにします。

MODEL\$1TYPE KMEANS  
KMEANS を使用してモデルをトレーニングするよう指定します。

PREPROCESSORS 'string'  
特定の列セットに対するプリプロセッサの特定の組み合わせを指定します。形式は、columnSets のリストであり、各列のセットに適用される適切な変換です。Amazon Redshift は、StandardScaler、MinMax、NumericPassthrough という、3 つの K-Means プリプロセッサをサポートしています。K-Means の前処理を適用しない場合は、トランスフォーマーとして明示的に NumericPassthrough を選択します。サポートされる変換の詳細については、「[ユーザーガイダンスパラメータ付きの CREATE MODEL](#r_user_guidance-create-model-parameters)」を参照してください。  
K-Means アルゴリズムは、ユークリッド距離を使用して類似度を計算します。データの前処理により、モデルの特徴が同じスケールに維持され、信頼性の高い結果が保証されます。

HYPERPARAMETERS DEFAULT EXCEPT ( K 'val' [, ...] )  
K-Means パラメータを使用するかどうかを指定します。K-Means アルゴリズムを使用する際には、`K`パラメータを指定する必要があります。詳細については、「*Amazon SageMaker AI デベロッパーガイド*」の「[K-Means Hyperparameters](https://docs.aws.amazon.com/sagemaker/latest/dg/k-means-api-config.html)」を参照してください。

次に、K-Means 用のデータを準備する際の例を示します。

```
CREATE MODEL customers_clusters
FROM customers
FUNCTION customers_cluster
IAM_ROLE default
AUTO OFF
MODEL_TYPE KMEANS
PREPROCESSORS '[
{
  "ColumnSet": [ "*" ],
  "Transformers": [ "NumericPassthrough" ]
}
]'
HYPERPARAMETERS DEFAULT EXCEPT ( K '5' )
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');

select customer_id, customers_cluster(...) from customers;
customer_id | customers_cluster
--------------------
12345            1
12346            2
12347            4
12348
```

## 予測による CREATE MODEL
<a name="r_forecast_model"></a>

Redshift ML の予測モデルは Amazon Forecast を使用して正確な時系列予測を作成します。そうすることで、ある期間の履歴データを使用して将来のイベントを予測することができます。Amazon Forecast の一般的な使用例としては、小売製品データを使用して在庫の価格を決定する、製造数量データを使用して注文する商品の量を予測する、ウェブトラフィックデータを使用してウェブサーバーが受け取る可能性のあるトラフィック量を予測する、などが含まれます。

 Amazon Redshift 予測モデルには、[Amazon Forecast のクォータ制限](https://docs.aws.amazon.com/forecast/latest/dg/limits.html)が適用されます。例えば、予測の最大数は 100 ですが、調整可能です。予測モデルを削除しても、Amazon Forecast 内の関連リソースは自動的に削除されません。Redshift クラスターを削除すると、関連するモデルもすべて削除されます。

予測モデルは現在、以下のリージョンでのみ利用可能であることに注意してください。
+ 米国東部 (オハイオ) (us-east-2)
+ 米国東部 (バージニア北部) (us-east-1)
+ 米国西部 (オレゴン) (us-west-2)
+ アジアパシフィック (ムンバイ) (ap-south-1)
+ アジアパシフィック (ソウル) (ap-northeast-2)
+ アジアパシフィック (シンガポール) (ap-southeast-1)
+ アジアパシフィック (シドニー) (ap-southeast-2)
+ アジアパシフィック (東京) (ap-northeast-1)
+ ヨーロッパ (フランクフルト) (eu-central-1)
+ 欧州 (アイルランド) (eu-west-1)

### 予測構文による CREATE MODEL
<a name="r_forecast_model-synopsis"></a>

```
CREATE [ OR REPLACE ] MODEL forecast_model_name 
FROM { table_name | ( select_query ) } 
TARGET column_name
IAM_ROLE { default | 'arn:aws:iam::<account-id>:role/<role-name>'} 
AUTO ON
MODEL_TYPE FORECAST
SETTINGS (
  S3_BUCKET 'amzn-s3-demo-bucket',
  HORIZON integer,
  FREQUENCY forecast_frequency
  [PERCENTILES '0.1', '0.5', '0.9']
  )
```

### 予測パラメータによる CREATE MODEL
<a name="r_forecast_model-parameters"></a>

 *forecast\$1model\$1name*   
モデルの名前です。モデル名は一意である必要があります。

FROM \$1 table\$1name \$1 ( select\$1query ) \$1  
table\$1name またはトレーニングデータを指定するクエリ。これは、システム内の既存のテーブル、または丸かっこで囲まれた Amazon RedShift 互換の SELECT クエリのいずれかです。テーブルまたはクエリ結果には、少なくとも次の 3 つの列が必要です。(1) 時系列の名前を指定する varchar 列。各データセットには、複数の時系列を含めることができます。(2) datetime 列、(3) 予測する対象列。このターゲット列は int または float である必要があります。3 つ以上の列を含むデータセットを指定した場合、Amazon Redshift では、追加の列はすべて関連する時系列の一部であると見なします。関連する時系列は int 型または float 型である必要があることに注意してください。関連する時系列の詳細については、「[関連する時系列データセットの使用](https://docs.aws.amazon.com/forecast/latest/dg/related-time-series-datasets.html)」を参照してください。

TARGET column\$1name  
予測対象となる列の名前。列は、FROM 句内に存在する必要があります。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::<account-id>:role/<role-name>' \$1  
デフォルトキーワードを使用して、CREAT MODEL コマンドの実行時にデフォルトとして設定され、クラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。または、IAM ロールの ARN を指定して、そのロールを使用することもできます。

AUTO ON  
アルゴリズムおよびハイパーパラメータの選択での、CREATE MODEL による自動検出をオンにします。予測モデルを作成するときに on を指定すると、Forecast AutoPredictor を使用することを示します。ここで、Amazon Forecast は、データセット内の各時系列に最適なアルゴリズムの組み合わせを適用します。

MODEL\$1TYPE FORECAST  
FORECAST を使用してモデルをトレーニングするよう指定します。

S3\$1BUCKET 'amzn-s3-demo-bucket'  
以前に作成した Amazon Simple Storage Service バケットの名前で、これは Amazon Redshift と Amazon Forecast の間でトレーニングデータとアーティファクトを共有するために使用されます。Amazon Redshift は、トレーニングデータをアンロードする前に、このバケットにサブフォルダを作成します。トレーニングが完了すると、Amazon Redshift は作成したサブフォルダとその内容を削除します。

HORIZON 整数  
予測モデルが返すことができる予測の最大数。モデルのトレーニングが完了すると、この整数は変更できません。

FREQUENCY forecast\$1frequency  
予測の詳細度を指定します。使用できるオプションは、`Y | M | W | D | H | 30min | 15min | 10min | 5min | 1min` です。予測モデルをトレーニングする場合は必須です。

PERCENTILES 文字列  
予測子のトレーニングに使用される予測タイプを指定するカンマ区切り文字列。予測タイプは、0.01 以上の増分で 0.01 から 0.99 までの分位数にすることができます。mean で平均予測を指定することもできます。最大 5 つの予測タイプを指定できます。

次の例は、簡単な予測モデルを作成する方法を示しています。

```
CREATE MODEL forecast_example
FROM forecast_electricity_
TARGET target 
IAM_ROLE 'arn:aws:iam::<account-id>:role/<role-name>'
AUTO ON 
MODEL_TYPE FORECAST
SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket',
          HORIZON 24,
          FREQUENCY 'H',
          PERCENTILES '0.25,0.50,0.75,mean',
          S3_GARBAGE_COLLECT OFF);
```

予測モデルを作成したら、予測データを含む新しいテーブルを作成できます。

```
CREATE TABLE forecast_model_results as SELECT Forecast(forecast_example)
```

その後、新しいテーブルをクエリして予測を取得できます。

```
SELECT * FROM forecast_model_results
```

# CREATE PROCEDURE
<a name="r_CREATE_PROCEDURE"></a>

新しいストアドプロシージャを作成するか、現在のデータベースの既存のプロシージャを置き換えます。

詳細な説明と例については、[Amazon Redshift のストアドプロシージャの作成](stored-procedure-overview.md) を参照してください。

## 必要な権限
<a name="r_CREATE_PROCEDURE-privileges"></a>

CREATE OR REPLACE PROCEDURE を実行するには、以下のいずれかの方法によるアクセス許可が必要です。
+ CREATE PROCEDURE の場合:
  + スーパーユーザー
  + ストアドプロシージャの作成先のスキーマに対する CREATE 権限と USAGE 権限を持つユーザー
+ REPLACE PROCEDURE の場合:
  + スーパーユーザー
  + プロシージャの所有者

## 構文
<a name="r_CREATE_PROCEDURE-synopsis"></a>

```
CREATE [ OR REPLACE ] PROCEDURE sp_procedure_name  
  ( [ [ argname ] [ argmode ] argtype [, ...] ] )
[ NONATOMIC ]
AS $$
  procedure_body
$$ LANGUAGE plpgsql
[ { SECURITY INVOKER | SECURITY DEFINER } ]
[ SET configuration_parameter { TO value | = value } ]
```

## パラメータ
<a name="r_CREATE_PROCEDURE-parameters"></a>

 OR REPLACE   
プロシージャの名前と入力引数のデータタイプ (署名) が既存のプロシージャと同じである場合、既存のプロシージャを置き換えることを指定する句。プロシージャは、同じデータタイプセットを定義する新しいプロシージャにのみ置き換えることができます。  
既存のプロシージャと名前は同じでも、署名が異なるプロシージャを定義する場合は、新しいプロシージャを作成することになります。つまり、プロシージャ名は重複されます。詳細については、「[プロシージャ名の多重定義](stored-procedure-naming.md#stored-procedure-overloading-name)」を参照してください。

 *sp\$1procedure\$1name*   
プロシージャの名前。スキーマ名 (**myschema.myprocedure** など) を指定すると、プロシージャは指定したスキーマで作成されます。指定しない場合、プロシージャは現在のスキーマで作成されます。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
すべてのストアドプロシージャ名の前に `sp_` を付けることをお勧めします。Amazon Redshift は、ストアドプロシージャ名用に `sp_` プレフィックスを予約します。`sp_` プレフィックスを使用すると、ストアドプロシージャ名は既存または将来の Amazon Redshift の組み込みストアドプロシージャ名や関数名と競合しません。詳細については、「[ストアドプロシージャの名前付け](stored-procedure-naming.md)」を参照してください。  
入力引数のデータタイプ (署名) が異なる場合、同じ名前で複数のプロシージャを定義できます。つまり、この場合、プロシージャ名は重複されます。詳細については、「[プロシージャ名の多重定義](stored-procedure-naming.md#stored-procedure-overloading-name)」を参照してください。

*[argname] [ argmode] argtype*   
引数の名前、モード、およびデータタイプのリスト。データタイプのみが必須です。名前とモードはオプションであり、両者の位置は交換できます。  
引数のモードは IN、OUT、INOUT のいずれかです。デフォルトは IN です。  
OUT 引数および INOUT 引数を使用して、プロシージャ呼び出しから 1 つ以上の値を返すことができます。OUT 引数または INOUT 引数がある場合、プロシージャ呼び出しは、*n* 列が含まれている 1 つの結果行を返します。*n* は OUT 引数または INOUT 引数の合計数です。  
INOUT 引数は同時に入力引数であり、出力引数です。*入力引数*には IN 引数と INOUT 引数の両方が含まれます。*出力引数*には OUT 引数と INOUT 引数の両方が含まれます。  
OUT 引数は CALL ステートメントの一部として指定されません。INOUT 引数は、ストアドプロシージャの CALL ステートメントに指定します。INOUT 引数は、ネストされた呼び出しとの間で値を受け渡すときと、`refcursor`を返すときに役立つ場合があります。`refcursor` タイプの詳細については、「[カーソル](c_PLpgSQL-statements.md#r_PLpgSQL-cursors)」を参照してください。  
引数のデータタイプには、Amazon Redshift のすべての標準データタイプを使用できます。さらに、引数のデータタイプとして `refcursor` も使用できます。  
最大 32 個の入力引数と最大 32 個の出力引数を指定できます。

AS \$1\$1 *procedure\$1body* \$1\$1   
実行するプロシージャを囲む構造。リテラルキーワードの AS \$1\$1 および \$1\$1 は必須です。  
Amazon Redshift では、プロシージャのステートメントをドル引用符という形式を使用して囲む必要があります。囲まれた内容がそのまま渡されます。文字列の内容がそのまま書き込まれるため、特殊文字のエスケープは一切不要です。  
*ドル引用符付け*では、次の例に示すように、実行するステートメントの開始と終了を 2 つのドル記号のペア (\$1\$1) で指定します。  

```
$$ my statement $$
```
必要に応じて、各ペアのドル記号間にステートメントの識別に役立つ文字列を指定できます。使用する文字列は、開始と終了の囲い文字のペアで同じにする必要があります。この文字列では大文字と小文字が区別され、ドル記号を含めることができない点を除いては、引用符で囲まれていない識別子と同じ制約事項に従います。次の例では、文字列 test を使用しています。  

```
$test$ my statement $test$
```
この構文は、ネストされたドル引用符付けにも役立ちます。ドル引用符付けの詳細については、PostgreSQL ドキュメントの「[Lexical Structure](https://www.postgresql.org/docs/9.0/sql-syntax-lexical.html)」で「Dollar-quoted String Constants」を参照してください。

 *procedure\$1body*   
有効な PL/pgSQL ステートメントのセット。PL/pgSQL ステートメントは、SQL コマンドをプロシージャ構造体 (ループや条件式など) で強化し、論理フローを制御します。大半の SQL コマンドはプロシージャ本文で使用できます。これには、COPY、UNLOAD、INSERT などのデータ変更言語 (DML) と CREATE TABLE などのデータ定義言語 (DDL) が含まれます。詳細については、「[PL/pgSQL 言語リファレンス](c_pl_pgSQL_reference.md)」を参照してください。

LANGUAGE *plpgsql*  
言語の値。`plpgsql` を指定します。`plpgsql` を使用するために言語の使用に関するアクセス許可が必要です。詳細については、「[GRANT](r_GRANT.md)」を参照してください。

NONATOMIC  
ストアドプロシージャを非アトミックトランザクションモードで作成します。NONATOMIC モードは、プロシージャ内のステートメントを自動的にコミットします。また、NONATOMIC プロシージャ内でエラーが発生しても、例外ブロックによって処理される場合、エラーは再スローされません。詳細については、「[トランザクションの管理](stored-procedure-transaction-management.md)」および「[RAISE](c_PLpgSQL-statements.md#r_PLpgSQL-messages-errors)」を参照してください。  
ストアドプロシージャを `NONATOMIC` として定義する場合は、次の点を考慮してください。  
+ ストアドプロシージャコールをネストするときには、すべてのプロシージャを同じトランザクションモードで作成する必要があります。
+ NONATOMIC モードでプロシージャを作成する場合、`SECURITY DEFINER` オプションと `SET configuration_parameter` オプションはサポートされません。
+ すべての (明示的または暗黙的に) 開いているカーソルは、暗黙的なコミットが処理されるときに自動的に閉じられます。そのため、カーソルループを開始する前に明示的なトランザクションを開いて、ループの反復処理内の SQL が暗黙的にコミットされないようにする必要があります。

SECURITY INVOKER \$1 SECURITY DEFINER  
`SECURITY DEFINER` オプションは、`NONATOMIC` が指定されている場合はサポートされません。  
プロシージャのセキュリティモードは、実行時のプロシージャのアクセス権限を決定します。プロシージャは、基礎となるデータベースオブジェクトにアクセスするためのアクセス許可を必要とします。  
SECURITY INVOKER モードの場合、プロシージャはプロシージャを呼び出すユーザーの特権を使用します。ユーザーは、基礎となるデータベースオブジェクトに対する明示的なアクセス許可を必要とします。デフォルトは SECURITY INVOKER です。  
SECURITY DEFINER モードの場合、このプロシージャは、プロシージャ所有者の権限を使用します。プロシージャ所有者の定義は、実行時にプロシージャを所有するユーザーであり、必ずしも最初にプロシージャを定義したユーザーではありません。プロシージャを呼び出すユーザーは、プロシージャに対する実行権限を必要としますが、基礎となるオブジェクトに対する権限は不要です。

SET configuration\$1parameter \$1 TO value \$1 = value \$1  
これらのオプションは、`NONATOMIC` が指定されている場合はサポートされません。  
SET 句は、プロシージャの開始時に、指定した `configuration_parameter` を指定した値に設定します。次に、プロシージャの終了時に、この句は `configuration_parameter` を以前の値に戻します。

## 使用に関する注意事項
<a name="r_CREATE_PROCEDURE-usage"></a>

SECURITY DEFINER オプションを使用してストアドプロシージャが作成された場合、そのストアドプロシージャ内から CURRENT\$1USER 関数を呼び出すと、Amazon Redshift はストアドプロシージャの所有者のユーザー名を返します。

## 例
<a name="r_CREATE_PROCEDURE-examples"></a>

**注記**  
このような例を実行した場合、次のようなエラーが発生します。  

```
ERROR: 42601: [Amazon](500310) unterminated dollar-quoted string at or near "$$
```
「[Amazon Redshift でのストアドプロシージャの概要](stored-procedure-create.md)」を参照してください。

次の例では、2 つの入力パラメータを使用するプロシージャを作成します。

```
CREATE OR REPLACE PROCEDURE test_sp1(f1 int, f2 varchar(20))
AS $$
DECLARE
  min_val int;
BEGIN
  DROP TABLE IF EXISTS tmp_tbl;
  CREATE TEMP TABLE tmp_tbl(id int);
  INSERT INTO tmp_tbl values (f1),(10001),(10002);
  SELECT min_val MIN(id) FROM tmp_tbl;
  RAISE INFO 'min_val = %, f2 = %', min_val, f2;
END;
$$ LANGUAGE plpgsql;
```

**注記**  
 ストアドプロシージャを記述する場合は、機密の値を保護するためのベストプラクティスに従うことをお勧めします。  
 ストアドプロシージャロジックに機密情報をハードコーディングしないでください。例えば、ストアドプロシージャの本文の CREATE USER ステートメントにユーザーパスワードを割り当てないでください。ハードコードした値は、カタログテーブルにスキーマメタデータとして記録される可能性があるため、セキュリティ上のリスクが生じます。代わりに、パスワードなどの機密の値は、パラメータを使用して引数として、ストアドプロシージャに渡します。  
ストアドプロシージャの詳細については、「[CREATE PROCEDURE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_PROCEDURE.html)」と「[Amazon Redshift のストアドプロシージャの作成](https://docs.aws.amazon.com/redshift/latest/dg/stored-procedure-overview.html)」を参照してください。カタログテーブルの詳細については、「[システムカタログテーブル](https://docs.aws.amazon.com/redshift/latest/dg/c_intro_catalog_views.html)」を参照してください。

次の例では、1 つの IN パラメータ、1 つの OUT パラメータ、および 1 つの INOUT パラメータを使用するプロシージャを作成します。

```
CREATE OR REPLACE PROCEDURE test_sp2(f1 IN int, f2 INOUT varchar(256), out_var OUT varchar(256))
AS $$
DECLARE
  loop_var int;
BEGIN
  IF f1 is null OR f2 is null THEN
    RAISE EXCEPTION 'input cannot be null';
  END IF;
  DROP TABLE if exists my_etl;
  CREATE TEMP TABLE my_etl(a int, b varchar);
    FOR loop_var IN 1..f1 LOOP
        insert into my_etl values (loop_var, f2);
        f2 := f2 || '+' || f2;
    END LOOP;
  SELECT INTO out_var count(*) from my_etl;
END;
$$ LANGUAGE plpgsql;
```

次の例では、`SECURITY DEFINER` パラメータを使用するプロシージャを作成します。このプロシージャは、プロシージャを所有するユーザーの権限を使用して実行します。

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_definer()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
```

次の例では、`SECURITY INVOKER` パラメータを使用するプロシージャを作成します。この手順は、プロシージャを実行するユーザーの権限を使用して実行します。

```
CREATE OR REPLACE PROCEDURE sp_get_current_user_invoker()
AS $$
DECLARE curr_user varchar(250);
BEGIN
  SELECT current_user INTO curr_user;
  RAISE INFO '%', curr_user;
END;
$$ LANGUAGE plpgsql
SECURITY INVOKER;
```

# CREATE RLS POLICY
<a name="r_CREATE_RLS_POLICY"></a>

新しい行レベルのセキュリティポリシーを作成して、データベースオブジェクトへのきめ細かなアクセスを提供します。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールは、ポリシーを作成できます。

## 構文
<a name="r_CREATE_RLS_POLICY-synopsis"></a>

```
CREATE RLS POLICY { policy_name | database_name.policy_name }
[ WITH (column_name data_type [, ...]) [ [AS] relation_alias ] ]
USING ( using_predicate_exp )
```

## パラメータ
<a name="r_CREATE_RLS_POLICY-parameters"></a>

 *policy\$1name*   
ポリシーの名前。

database\$1name  
ポリシーが作成されるデータベース名。ポリシーは、接続されたデータベースまたは Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースに作成できます。

WITH (*column\$1name data\$1type [, ...]*)   
ポリシーがアタッチされているテーブルの列を参照対象の *column\$1name* と *data\$1type* を指定します。  
RLS ポリシーがアタッチされているテーブルの列を参照対象としない場合に限り、WITH 句を省略できます。

AS *relation\$1alias*  
RLS ポリシーをアタッチするテーブルにオプションのエイリアスを指定します。

USING (*using\$1predicate\$1exp*)  
クエリの WHERE 句に適用されるフィルターを指定します。Amazon Redshift は、クエリレベルのユーザー述語より先にポリシー述語を適用します。例えば、**current\$1user = ‘joe’ and price > 10** は Joe に対して価格が 10 USD を超えるレコードのみを表示するように制限します。

Amazon Redshift フェデレーティッドアクセス許可カタログでの CREATE RLS POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

## 使用に関する注意事項
<a name="r_CREATE_RLS_POLICY-usage"></a>

CREATE RLS POLICY ステートメントを操作するとき、次の点に注意してください。
+ Amazon Redshift は、クエリの WHERE 句の一部となるフィルタをサポートしています。
+ テーブルにアタッチされるすべてのポリシーは、同じテーブルエイリアスで作成されている必要があります。
+ ルックアップテーブルを参照する RLS ポリシーの SELECT 許可を明示的に付与および取り消すには、GRANT と REVOKE ステートメントを使用する必要があります。ルックアップテーブルは、ポリシー定義内で使用されるテーブルオブジェクトです。詳細については、「[GRANT](r_GRANT.md)」および「[REVOKE](r_REVOKE.md)」を参照してください。
+ Amazon Redshift の行レベルセキュリティは、ポリシー定義内の以下のオブジェクトタイプをサポートしていません: カタログテーブル、データベース間の関係、外部テーブル、通常のビュー、遅延バインディングビュー、RLS ポリシーがオンになっているテーブル、一時テーブル。

## 例
<a name="r_CREATE_RLS_POLICY-examples"></a>

次の例では、policy\$1concerts という RLS ポリシーを作成します。このポリシーは、catgroup という VARCHAR(10) 列に適用され、catgroup の値が `'Concerts'` である行のみを返すように USING フィルターを設定します。

```
CREATE RLS POLICY policy_concerts
WITH (catgroup VARCHAR(10))
USING (catgroup = 'Concerts');
```

RLS ポリシーを使用するエンドツーエンドの例については、「[行レベルのセキュリティのエンドツーエンドの例](t_rls-example.md)」を参照してください。

# CREATE ROLE
<a name="r_CREATE_ROLE"></a>

アクセス許可のコレクションである新しいカスタムロールを作成します。Amazon Redshift でのシステム定義のロールのリストについては、「[Amazon Redshift でのシステム定義のロール](r_roles-default.md)」を参照してください。クエリ [SVV\$1ROLES](r_SVV_ROLES.md) を実行して、クラスターまたはワークグループに現在作成されているロールを表示します。

作成できるロールの数にはクォータがあります。詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift のクォータと制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。

## 必要なアクセス許可
<a name="r_CREATE_ROLE-privileges"></a>

以下に、CREATE ROLE に必要な権限を示します。
+ スーパーユーザー
+ CREATE ROLE の権限を持つユーザー

## 構文
<a name="r_CREATE_ROLE-synopsis"></a>

```
CREATE ROLE role_name
[ EXTERNALID external_id ]
```

## パラメータ
<a name="r_CREATE_ROLE-parameters"></a>

*role\$1name*  
ロールの名前。ロールの名前は一意にする必要があり、他のユーザー名と同じにすることはできません。ロールの名前に予約語は使用できません。  
スーパーユーザー、または CREATE ROLE の権限を持つ通常のユーザーがロールを作成できます。スーパーユーザーでなくとも、ロールでの WITH GRANT OPTION および ALTER の権限に対する USAGE が付与されているユーザーは、そのロールを任意のユーザーに付与できます。

EXTERNALID *external\$1id*  
ID プロバイダーに関連付けられているロールの識別子。詳細については、「[Amazon Redshift のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。

## 例
<a name="r_CREATE_ROLE-examples"></a>

次の例では、ロール `sample_role1` を作成しています。

```
CREATE ROLE sample_role1;
```

次の例では、ID プロバイダーに関連付けられている外部 ID を持つロール `sample_role1` を作成します。

```
CREATE ROLE sample_role1 EXTERNALID "ABC123";
```

# CREATE SCHEMA
<a name="r_CREATE_SCHEMA"></a>

現在のデータベースの新しいスキーマを定義します。

## 必要な権限
<a name="r_CREATE_SCHEMA-privileges"></a>

以下に、CREATE SCHEMA に必要な権限を示します。
+ スーパーユーザー
+ CREATE SCHEMA の権限を持つユーザー

## 構文
<a name="r_CREATE_SCHEMA-synopsis"></a>

```
CREATE SCHEMA [ IF NOT EXISTS ] schema_name [ AUTHORIZATION username ]
           [ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ]

CREATE SCHEMA AUTHORIZATION username[ QUOTA {quota [MB | GB | TB] | UNLIMITED} ] [ schema_element [ ... ] ]
```

## パラメータ
<a name="r_CREATE_SCHEMA-parameters"></a>

 IF NOT EXISTS   
指定されたスキーマが既に存在する場合、コマンドはエラーで終了するのではなく、何も変更しないで、スキーマが存在するというメッセージを返すことを示す句。  
この句は、CREATE SCHEMA で既存のスキーマを作成しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

 *schema\$1name*   
新しいスキーマの名前。スキーマ名を `PUBLIC` にすることはできません。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
[search\$1path](r_search_path.md) 設定パラメータのスキーマリストによって、スキーマ名を指定せずに同じ名前のオブジェクトが参照されたときに、優先するオブジェクトが決まります。

AUTHORIZATION   
指定されたユーザーに所有権を付与する句。

 * ユーザー名*   
スキーマ所有者の名前。

 *schema\$1element*   
スキーマ内に作成する 1 つまたは複数のオブジェクトの定義。

QUOTA  
指定したスキーマが使用できる最大ディスク容量。この容量は総ディスク使用量です。これには、各コンピューティングノードのすべてのディストリビューションのすべての永続テーブル、指定したスキーマのマテリアライズドビュー、すべてのテーブルの複製されたコピーが含まれます。スキーマクォータでは、一時的な名前空間またはスキーマの一部として作成された一時テーブルは考慮されません。  
構成済みのスキーマクォータを表示するには、「[SVV\$1SCHEMA\$1QUOTA\$1STATE](r_SVV_SCHEMA_QUOTA_STATE.md)」を参照してください。  
スキーマクォータを超過したレコードを表示するには、「[STL\$1SCHEMA\$1QUOTA\$1VIOLATIONS](r_STL_SCHEMA_QUOTA_VIOLATIONS.md)」を参照してください。  
Amazon Redshift は選択した値をメガバイトに変換します。値を指定しない場合、デフォルトの測定単位はギガバイトです。  
スキーマのクォータを設定および変更するには、データベースのスーパーユーザーである必要があります。スーパーユーザーではなくても、CREATE SCHEMA 権限を持つユーザーは、クォータを定義してスキーマを作成できます。クォータを定義せずにスキーマを作成すると、スキーマのクォータは無制限になります。クォータをスキーマで現在使用されている値よりも低く設定した場合、Amazon Redshift ではディスク容量を解放するまでそれ以上の取り込みを行うことはできません。DELETE ステートメントはテーブルからデータを削除するものであり、ディスク容量は VACUUM が実行された場合にのみ解放されます。  
Amazon Redshift は、トランザクションをコミットする前に、各トランザクションのクォータ違反をチェックします。Amazon Redshift は、変更された各スキーマのサイズ (スキーマ内のすべてのテーブルで使用されるディスク容量) を、設定されたクォータに対してチェックします。クォータ違反のチェックはトランザクションの最後に行われるため、トランザクションをコミットする前にトランザクションでクォータを一時的に超過する場合があります。トランザクションがクォータを超過した場合、Amazon Redshift はそのトランザクションを中止し、後続の取り込みを禁止した上で、ディスク容量が解放されるまでの間はすべての変更を元に戻します。バックグラウンドでの VACUUM と内部のクリーンアップが原因で、トランザクションをキャンセルした後にスキーマをチェックするまでの間に、スキーマのサイズに空きが発生する場合があります。  
例外として、Amazon Redshift はクォータ違反を無視し、特定の場合にトランザクションをコミットします。Amazon Redshift は、同じトランザクション内に INSERT または COPY の取り込みステートメントが存在しない、次の 1 つ以上のステートメントのみで構成されるトランザクションに対してこれを行います。  
+ DELETE
+ TRUNCATE
+ VACUUM
+ DROP TABLE
+ ALTER TABLE APPEND (サイズに空きのないスキーマから空きのあるスキーマにデータを移動する場合のみ)

 *UNLIMITED*   
Amazon Redshift は、スキーマの合計サイズの増加に制限を課しません。

## 制限
<a name="r_CREATE_SCHEMA-limit"></a>

Amazon Redshift では、スキーマに次の制限があります。
+ スキーマの数は 1 つのデータベースにつき最大 9900 個です。

## 例
<a name="r_CREATE_SCHEMA-examples"></a>

次の例では、US\$1SALES というスキーマを作成し、DWUSER というユーザーに所有権を付与します。

```
create schema us_sales authorization dwuser;
```

次の例では、US\$1SALES というスキーマを作成し、DWUSER というユーザーに所有権を付与し、クォータを 50 GB に設定します。

```
create schema us_sales authorization dwuser QUOTA 50 GB;
```

新しいスキーマを確認するには、次に示すように PG\$1NAMESPACE カタログテーブルに対してクエリを実行します。

```
select nspname as schema, usename as owner
from pg_namespace, pg_user
where pg_namespace.nspowner = pg_user.usesysid
and pg_user.usename ='dwuser';

   schema |  owner
----------+----------
 us_sales | dwuser
(1 row)
```

次の例では、US\$1SALES スキーマを作成します。そのスキーマが既に存在する場合は、何もしないでメッセージを返します。

```
create schema if not exists us_sales;
```

# CREATE TABLE
<a name="r_CREATE_TABLE_NEW"></a>

現在のデータベースに新しいテーブルを作成します。各列が異なる型のデータを保持する列のリストを定義します。テーブルの所有者は CREATE TABLE コマンドの発行者です。

## 必要な権限
<a name="r_CREATE_TABLE-privileges"></a>

以下に、CREATE TABLE に必要な権限を示します。
+ スーパーユーザー
+ CREATE TABLE の権限を持つユーザー

## 構文
<a name="r_CREATE_TABLE_NEW-synopsis"></a>

```
CREATE [ [LOCAL ] { TEMPORARY | TEMP } ] TABLE
[ IF NOT EXISTS ] table_name
( { column_name data_type [column_attributes] [ column_constraints ]
  | table_constraints
  | LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] }
  [, ... ]  )
[ BACKUP { YES | NO } ]
[table_attributes]

where column_attributes are:
  [ DEFAULT default_expr ]
  [ IDENTITY ( seed, step ) ]
  [ GENERATED BY DEFAULT AS IDENTITY ( seed, step ) ]
  [ ENCODE encoding ]
  [ DISTKEY ]
  [ SORTKEY ]
  [ COLLATE { CASE_SENSITIVE | CS | CASE_INSENSITIVE | CI } ]

and column_constraints are:
  [ { NOT NULL | NULL } ]
  [ { UNIQUE  |  PRIMARY KEY } ]
  [ REFERENCES reftable [ ( refcolumn ) ] ]

and table_constraints  are:
  [ UNIQUE ( column_name [, ... ] ) ]
  [ PRIMARY KEY ( column_name [, ... ] )  ]
  [ FOREIGN KEY (column_name [, ... ] ) REFERENCES reftable [ ( refcolumn ) ]


and table_attributes are:
  [ DISTSTYLE { AUTO | EVEN | KEY | ALL } ]
  [ DISTKEY ( column_name ) ]
  [ [COMPOUND | INTERLEAVED ] SORTKEY ( column_name [,...]) |  [ SORTKEY AUTO ] ]
  [ ENCODE AUTO ]
```

## パラメータ
<a name="r_CREATE_TABLE_NEW-parameters"></a>

LOCAL   
省略可能。このキーワードは、ステートメントに指定できますが、Amazon Redshift では効果がありません。

TEMPORARY \$1 TEMP   
現在のセッション内でのみ表示可能な一時テーブルを作成するキーワード。このテーブルは、作成したセッションの終了時に自動的に削除されます。一時テーブルには永続テーブルと同じ名前を付けることができます。一時テーブルは、別のセッション固有のスキーマ内に作成されます (このスキーマの名前を指定することはできません)。この一時スキーマは検索パスの最初のスキーマになるため、永続テーブルにアクセスするようにスキーマ名でテーブル名を修飾しない限り、一時テーブルは永続テーブルよりも優先されます。スキーマと優先順位の詳細については、「[search\$1path](r_search_path.md)」を参照してください。  
デフォルトでは、データベースユーザーは、PUBLIC グループの自動メンバーシップにより、一時テーブルを作成するアクセス許可を持ちます。あるユーザーにこの権限が付与されないようにするには、PUBLIC グループから TEMP 権限を取り消して、特定のユーザーまたはユーザーグループにのみ TEMP 権限を明示的に付与します。

IF NOT EXISTS  
指定されたテーブルが既に存在する場合、コマンドはエラーで終了するのではなく、何も変更せずに、テーブルが存在するというメッセージを返すことを示す句。既存のテーブルの内容が、作成予定のテーブルとはまったく異なる可能性があることに注意してください。比較されるのはテーブル名のみです。  
この句は、CREATE TABLE で既存のテーブルを作成しようとしてもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

 *table\$1name*   
作成するテーブルの名前。  
「\$1」で始まるテーブル名を指定すると、そのテーブルは一時テーブルとして作成されます。次に例を示します。  

```
create table #newtable (id int);
```
また、「\$1」を使用してテーブルを参照します。例えば、次のようになります。  

```
select * from #newtable;
```
テーブル名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。Amazon Redshift は、ユーザー定義の一時テーブルや、クエリ処理またはシステムメンテナンス中に Amazon Redshift によって作成された一時テーブルを含む、各ノードタイプのクラスターあたりのテーブル数のクォータを適用します。オプションで、テーブル名は、データベース名およびスキーマ名で修飾することができます。次の例では、データベース名は `tickit`、スキーマ名は `public`、テーブル名は `test` です。  

```
create table tickit.public.test (c1 int);
```
データベースまたはスキーマが存在し、テーブルが作成されていない場合、このステートメントはエラーを返します。システムデータベース `template0`、`template1`、`padb_harvest`、または `sys:internal` にテーブルまたはビューを作成することはできません。  
スキーマ名を指定すると、新しいテーブルはそのスキーマ内に作成されます (作成者がスキーマにアクセス権を持っている場合)。テーブル名は、そのスキーマで一意の名前にする必要があります。スキーマを指定しない場合、現在のデータベーススキーマを使用してテーブルが作成されます。一時テーブルを作成する場合、一時テーブルは特殊なスキーマに作成されるので、スキーマ名を指定することはできません。  
同じ名前の一時テーブルでも、別のセッションで作成される場合は同じデータベース内に同時に存在することができます。これは、テーブルに割り当てられるスキーマが異なるためです。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

 *column\$1name*   
新しいテーブルで作成される列の名前。列名の最大長は 127 バイトです。それより長い名前は 127 バイトまで切り詰められます。最大 4 バイトまで UTF-8 マルチバイト文字を使用できます。1 つのテーブルで定義できる列の最大数は 1,600 です。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  
「横長のテーブル」を作成する場合は、ロードとクエリ処理の結果が即時に表示されるように、列リストが行幅の限度を超えないように注意します。詳細については、「[使用に関する注意事項](#r_CREATE_TABLE_usage)」を参照してください。

 *data\$1type*   
作成する列のデータ型。CHAR および VARCHAR の列の場合、最大長を宣言する代わりに MAX キーワードを使用できます。MAX は、最大長を CHAR では 4096 バイト、VARCHAR では 65535 バイトに設定します。GEOMETRY オブジェクトの最大サイズは 1,048,447 バイトです。  
Amazon Redshift でサポートされているデータ型の詳細については、「[データ型](c_Supported_data_types.md)」を参照してください。

DEFAULT *default\$1expr*   <a name="create-table-default"></a>
列のデフォルトのデータ値を割り当てる句。*default\$1expr* のデータ型は列のデータ型に一致する必要があります。DEFAULT 値は、変数を使用しない式にする必要があります。サブクエリ、現在のテーブルに含まれる他の列の相互参照、およびユーザー定義の関数は使用できません。  
*default\$1expr* 式は、列の値を指定しないすべての INSERT 操作で使用されます。デフォルト値を指定しなかった場合、列のデフォルト値は null です。  
定義済み列リストの COPY 操作で、DEFAULT 値が含まれている列を省略すると、COPY コマンドで *default\$1expr* の値が挿入されます。

IDENTITY(*seed*, *step*)   <a name="identity-clause"></a>
列が IDENTITY 列であることを指定する句。IDENTITY 列には、一意の自動生成値が含まれます。IDENTITY 列のデータ型は、INT または BIGINT にする必要があります。  
`INSERT` または `INSERT INTO [tablename] VALUES()` ステートメントを使用して行を追加する場合、これらの値は、*seed* として指定された値で始まり、*step* として指定された数が増分されます。  
`INSERT INTO [tablename] SELECT * FROM` または `COPY` ステートメントを使用してテーブルをロードすると、データはパラレルにロードされ、ノードスライスに分散されます。ID 値が一意であることを確認するために、Amazon Redshift は ID 値を作成するときにいくつかの値をスキップします。ID 値は一意ですが、順序はソースファイルの順序と一致しない場合があります。

GENERATED BY DEFAULT AS IDENTITY (*seed*、*step*)   <a name="identity-generated-bydefault-clause"></a>
列がデフォルトの IDENTITY 列であることを指定し、一意の値を列に自動的に割り当てることができるようにする句。IDENTITY 列のデータ型は、INT または BIGINT にする必要があります。値のない行を追加する場合、これらの値は、*seed* として指定された値で始まり、*step* として指定された数が増分されます。値の生成方法については、「[IDENTITY](#identity-clause)」を参照してください。  
また、INSERT、UPDATE、または COPY の間に、EXPLICIT\$1IDS なしで値を指定できます。Amazon Redshift は、システムで生成された値を使用する代わりに、その値を使用して ID 列に挿入します。値は、重複、seed より小さい値、または step 値間の値にすることができます。Amazon Redshift は、列値の一意性を確認しません。値を指定しても、システムが生成する次の値には影響しません。  
列に一意性が必要な場合は、重複する値を追加しないでください。代わりに、seed より小さい値または step 値の間にある一意の値を追加します。
デフォルトの identity 列については、次のことに注意してください。  
+ デフォルトの identity 列は NOT NULL です。NULL は挿入できません。
+ 生成された値をデフォルトの identity 列に挿入するには、キーワード `DEFAULT` を使用します。

  ```
  INSERT INTO tablename (identity-column-name) VALUES (DEFAULT);
  ```
+ デフォルトの identity 列の値をオーバーライドしても、次に生成される値には影響しません。
+ ALTER TABLE ADD COLUMN ステートメントでデフォルトの identity 列を追加することはできません。
+ ALTER TABLE APPEND ステートメントを使用して、デフォルトの IDENTITY 列を追加できます。

ENCODE *encoding*   
列の圧縮エンコード。ENCODE AUTO は、テーブルのデフォルトです。Amazon Redshift は、テーブル内のすべての列の圧縮エンコードを自動的に管理します。テーブル内のいずれかの列に圧縮エンコードを指定すると、テーブルは ENCODE AUTO に設定されなくなります。Amazon Redshift は、テーブルにあるすべての列の圧縮エンコードを自動的に管理しないようになりました。テーブルに ENCODE AUTO オプションを指定して、Amazon Redshift がテーブルにあるすべての列の圧縮エンコードを自動的に管理できるようになります。  
  
Amazon Redshift は、圧縮エンコードを指定していない列に、次のように初期圧縮エンコードを自動的に割り当てます。  
+ 一時テーブルのすべての列には RAW 圧縮がデフォルトで割り当てられます。
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、DOUBLE PRECISION、GEOMETRY、もしくは GEOGRAPHY の各データ型で定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR、VARCHAR、または VARBYTE として定義されている列には、LZO 圧縮が割り当てられます。
列を圧縮しない場合は、明示的に RAW エンコードを指定します。
 次の [compression encodings](c_Compression_encodings.md#compression-encoding-list) がサポートされています。  
+ AZ64
+ BYTEDICT
+ DELTA
+ DELTA32K
+ LZO
+ MOSTLY8
+ MOSTLY16
+ MOSTLY32
+ RAW (非圧縮)
+ RUNLENGTH
+ TEXT255
+ TEXT32K
+ ZSTD

DISTKEY  
列がテーブルの分散キーであることを指定するキーワード。テーブル内の 1 つの列のみを分散キーに指定できます。DISTKEY キーワードは列名の後に使用するか、DISTKEY (*column\$1name*) 構文を使用してテーブル定義の一部として使用できます。どちらの方法でも同じ結果が得られます。詳細については、このトピックで後述する DISTSTYLE パラメータを参照してください。  
ディストリビューションキー列のデータ型には、BOOLEAN、REAL、DOUBLE PRECISION、SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ、CHAR、または VARCHAR のいずれかを使用できます。

SORTKEY  
列がテーブルのソートキーであることを指定するキーワード。データをテーブルにロードすると、データはソートキーとして指定された 1 つまたは複数の列に従ってソートされます。列名の後に SORTKEY キーワードを使用して 1 列のソートキーを指定することができます。または、SORTKEY (*column\$1name* [, ...]) 構文を使用して、テーブルのソートキーとして 1 つまたは数の列を指定することができます。この構文では複合ソートキーのみが作成されます。  
1 つのテーブルで、最大 400 の SORTKEY 列を定義できます。  
ソートキー列のデータ型には、BOOLEAN、REAL、DOUBLE PRECISION、SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ、CHAR、または VARCHAR のいずれかを使用できます。

COLLATE \$1 CASE\$1SENSITIVE \$1 CS \$1 CASE\$1INSENSITIVE \$1 CI \$1  
列での文字列の検索または比較において、大文字と小文字を区別するか、区別しないかを指定する句。デフォルト値は、大文字と小文字を区別する、現行のデータベースの設定と同じです。  
COLLATE は、SUPER 列内の CHAR、VARCHAR、文字列値など、文字列ベースのデータ型でのみサポートされています。SUPER データの大文字と小文字を区別しないクエリの詳細については、「[大文字と小文字を区別しないクエリ](query-super.md#case-insensitive-super-queries)」を参照してください。  
データベース照合に関する情報を検索するには、次のコマンドを使用します。  

```
SELECT db_collation();
                     
db_collation
----------------
 case_sensitive
(1 row)
```
CASE\$1SENSITIVE と CS は互換性があり、同じ結果が得られます。同様に、CASE\$1INSENSITIVE と CI は互換性があり、同じ結果が得られます。

NOT NULL \$1 NULL   
NOT NULL は、列に null 値を使用できないことを指定します。NULL はデフォルトであり、列で null 値を使用できることを指定します。IDENTITY 列はデフォルトで NOT NULL として宣言されます。

UNIQUE  
列に一意の値のみを含めることができることを指定するキーワード。一意のテーブル制約の動作は、列制約の動作と同じですが、さらに複数の列に適用される点が異なります。一意のテーブル制約を定義するには、UNIQUE ( *column\$1name* [, ... ] ) 構文を使用します。  
一意の制約は情報提供に使用され、システムで強制されることはありません。

PRIMARY KEY  
列がテーブルのプライマリキーであることを指定するキーワード。列定義を使用してプライマリキーとして定義できるのは 1 列だけです。複数列のプライマリキーを使用してテーブル制約を定義するには、PRIMARY KEY ( *column\$1name* [, ... ] ) 構文を使用します。  
列をプライマリキーに指定すると、スキーマの設計に関するメタデータが提供されます。プライマリキーは、他のテーブルが、行の一意の識別子としてこの列セットに依存している可能性があることを示します。列制約かテーブル制約かにかかわらず、テーブルに指定できるプライマリキーは 1 つです。プライマリキーの制約は、同じテーブルに定義されている一意の制約で指定された列セットとは異なる列セットを指定する必要があります。  
PRIMARY KEY 列は NOT NULL としても定義されます。  
プライマリキーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

References *reftable* [ ( *refcolumn* ) ]  
参照テーブルの行の参照列に含まれている値と一致する値を列に格納する必要があることを意味する、外部キー制約を指定する句。参照列は、参照テーブルの一意の制約またはプライマリキーの制約の列にする必要があります。  
 外部キーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

LIKE *parent\$1table* [ \$1 INCLUDING \$1 EXCLUDING \$1 DEFAULTS ]   <a name="create-table-like"></a>
新しいテーブルで、列名、データ型、NOT NULL 制約を自動的にコピーする既存のテーブルを指定する句。新しいテーブルと親テーブル間に関連付けはなく、親テーブルを変更しても、新しいテーブルに変更は適用されません。コピーした列定義のデフォルトの式は、INCLUDING DEFAULTS を指定した場合にのみコピーされます。デフォルトの動作では、デフォルトの式が除外されるため、新しいテーブルのすべての列は NULL のデフォルト値になります。  
LIKE オプションを指定して作成したテーブルは、プライマリキーと外部キーの制約を継承しません。分散スタイル、ソートキー、BACKUP、NULL のプロパティは LIKE テーブルで継承されますが、CREATE TABLE ..。LIKE ステートメントで明示的に設定することはできません。

BACKUP \$1 YES \$1 NO \$1   <a name="create-table-backup"></a>
テーブルを自動および手動クラスター スナップショットに含めるかどうかを指定する句。  
重要なデータを含まないステージングテーブルなどのテーブルについては、スナップショットの作成やスナップショットからの復元にかかる時間を節約し、Amazon Simple Storage Service のストレージスペースを節約するため、BACKUP NO を指定します。BACKUP NO の設定は、クラスター内の別ノードへのデータの自動レプリケーションには影響しません。そのため、BACKUP NO が指定されたテーブルはノードの障害時に回復されます。デフォルトは BACKUP YES です。  
RA3 でプロビジョニングされたクラスターと Amazon Redshift Serverless ワークグループでは、バックアップ用ではないテーブルはサポートされていません。RA3 クラスターおよびサーバーレスワークグループでバックアップしないとマークされたテーブルは、スナップショットの作成中に常にバックアップされ、スナップショットから復元するときに復元される永続テーブルとして扱われます。バックアップ用ではないテーブルのスナップショットコストを回避するには、スナップショットを作成する前にそれらを切り捨てます。

DISTSTYLE \$1 AUTO \$1 EVEN \$1 KEY \$1 ALL \$1  
テーブル全体のデータディストリビューションスタイルを定義するキーワード。Amazon Redshift は、テーブルに指定されたディストリビューションスタイルに従って、テーブルの行をコンピューティングノードに分散します。デフォルトは AUTO です。  
テーブルにどの分散スタイルを選択するかによって、データベースの全体的なパフォーマンスが左右されます。詳細については、「[クエリ最適化のためのデータのディストリビューション](t_Distributing_data.md)」を参照してください。可能な分散スタイルは次のとおりです。  
+ AUTO: Amazon Redshift がテーブルデータに基づいて最適な分散スタイルを割り当てます。例えば、AUTO 分散スタイルが指定された場合、Amazon Redshift ではまず、ALL 分散スタイルを小さなテーブルに割り当てます。テーブルが大きくなると、Amazon Redshift は分散スタイルを KEY に変更し、プライマリキー (または複合プライマリキーの列) を DISTKEY として選択する場合があります。テーブルが大きくなり、DISTKEY に適した列がない場合、Amazon Redshift は分散スタイルを EVEN に変更します。ディストリビューションスタイルの変更は、ユーザークエリへの影響を最小限に抑え、バックグラウンドで発生します。

  テーブルに適用された分散スタイルを表示するには、PG\$1CLASS システムカタログテーブルに対してクエリを実行します。詳細については、「[分散スタイルの表示](viewing-distribution-styles.md)」を参照してください。
+ EVEN: テーブルのデータは、ラウンドロビン分散方式で、クラスター内のノード全体に均等に分散されます。行 ID は分散を決定するために使用され、およそ同じ行数が各ノードに分散されます。
+ KEY: データは、DISTKEY 列の値で分散されます。結合するテーブルの結合列を分散キーとして設定すると、両方のテーブルの結合列がコンピューティングノードによりコロケーションされます。データがコロケーションされることで、オプティマイザーはより効率的に結合を実行できます。DISTSTYLE KEY を指定する場合は、テーブルに対して、または列定義の一部として、DISTKEY 列に名前を付ける必要があります。詳細については、このトピックで先述した DISTKEY パラメータを参照してください。
+  ALL: テーブル全体のコピーがすべてのノードに分散されます。この分散方式により、結合に必要なすべての列が確実にすべてのノードで使用可能になりますが、ストレージ要件が倍増し、テーブルに関する負荷とメンテナンス時間が増大します。ALL 分散を指定する場合、KEY 分散が適さない特定のディメンションテーブルで使用する場合には実行時間が改善される可能性がありますが、パフォーマンスの改善とメンテナンスコストを比較検討する必要があります。

DISTKEY ( *column\$1name* )  
テーブルの分散キーとして使用する列を指定する制約。DISTKEY キーワードは列名の後に使用するか、DISTKEY (*column\$1name*) 構文を使用してテーブル定義の一部として使用できます。どちらの方法でも同じ結果が得られます。詳細については、このトピックで先述した DISTSTYLE パラメータを参照してください。

[COMPOUND \$1 INTERLEAVED ] SORTKEY (* column\$1name* [,...]) \$1 [ SORTKEY AUTO ]  
テーブルに対して 1 つ以上のソートキーを指定します。データをテーブルにロードすると、データはソートキーとして指定された列に従ってソートされます。列名の後に SORTKEY キーワードを使用して 1 列のソートキーを指定することができます。または、`SORTKEY (column_name [ , ... ] )`構文を使用して、テーブルのソートキーとして 1 つまたは数の列を指定することができます。  
オプションでソート方式として COMPOUND または INTERLEAVED を指定できます。列とともに SORTKEY を指定した場合、デフォルトは COMPOUND です。詳細については、「[ソートキー](t_Sorting_data.md)」を参照してください。  
ソートキーオプションを指定しない場合、デフォルトは AUTO です。  
1 つのテーブルで最大 400 の COMPOUND SORTKEY 列または 8 の INTERLEAVED SORTKEY 列を定義できます。    
AUTO  
Amazon Redshift がテーブルデータに基づいて最適なソートキーを割り当てることを指定します。例えば、AUTO ソートキーが指定されている場合、Amazon Redshift は最初にテーブルにソートキーを割り当てません。ソートキーによってクエリのパフォーマンスが向上すると Amazon Redshift が判断した場合、Amazon Redshift はテーブルのソートキーを変更する可能性があります。テーブルの実際のソートは、自動テーブルソートによって行われます。詳細については、「[自動テーブルソート](t_Reclaiming_storage_space202.md#automatic-table-sort)」を参照してください。  
Amazon Redshift は、既存のソートキーまたはディストリビューションキーを持つテーブルを変更しません。1 つの例外を除き、テーブルに JOIN で使用されたことがないディストリビューションキーがある場合、Amazon Redshift がより適切なキーがあると判断すると、キーが変更される可能性があります。  
テーブルのソートキーを表示するには、SVV\$1TABLE\$1INFO システムカタログビューに対してクエリを実行します。詳細については、「[SVV\$1TABLE\$1INFO](r_SVV_TABLE_INFO.md)」を参照してください。テーブルの Amazon Redshift Advisor のレコメンデーションを表示するには、SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS システムカタログビューをクエリします。詳細については、「[SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md)」を参照してください。Amazon Redshift が実行したアクションを表示するには、SVL\$1AUTO\$1WORKER\$1ACTION システムカタログビューにクエリを実行します。詳細については、「[SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md)」を参照してください。  
COMPOUND  
リストされているすべての列から成る複合キーを使用して、データがリスト順にソートされるように指定します。複合ソートキーは、クエリがソート列の順序に従って行をスキャンする場合に最も便利です。複合キーを使用したソートのパフォーマンス上のメリットは、クエリがセカンダリソート列に依存する状況が減少する点にあります。1 つのテーブルで、最大 400 の COMPOUND SORTKEY 列を定義できます。  
INTERLEAVED  
インターリーブソートキーを使用してデータがソートされるように指定します。インターリーブソートキーには、最大 8 つの列を指定できます。  
インターリーブソートは、ソートキーの各列または列のサブセットに等しい重みを割り当てるため、クエリはソートキーの列の順序に依存しません。クエリが 1 つ以上のセカンダリソート列を使用すると、インターリーブソートによってクエリのパフォーマンスは大幅に向上します。インターリーブソートでは、データのロード操作とバキューム操作にわずかなオーバーヘッドコストがかかります。  
ID 列、日付、タイムスタンプなど、一定間隔で増加する属性を持つ列で、インターリーブソートキーを使用しないでください。

ENCODE AUTO   
Amazon Redshift がテーブル内のすべての列のエンコードタイプを自動的に調整して、クエリのパフォーマンスを最適化できるようにします。ENCODE AUTO は、テーブルの作成時に指定した初期エンコードタイプを保持します。その後、Amazon Redshift が新しいエンコードタイプによってクエリのパフォーマンスが向上すると判断した場合、Amazon Redshift はテーブル列のエンコードタイプを変更できます。テーブルのどの列にもエンコード型を指定しない場合、デフォルトは ENCODE AUTO です。

UNIQUE ( *column\$1name* [,...] )  
テーブルの 1 つまたは複数の列のグループに、一意の値のみを含めることができることを指定する制約。一意のテーブル制約の動作は、列制約の動作と同じですが、さらに複数の列に適用される点が異なります。一意の制約がある場合、NULL 値は等値と見なされません。各一意のテーブル制約は、テーブルに定義されている他の一意のキーまたはプライマリキーで指定された列セットとは異なる列セットを指定する必要があります。  
 一意の制約は情報提供に使用され、システムで強制されることはありません。

PRIMARY KEY ( *column\$1name* [,...] )  
テーブルの 1 つまたは複数の列のグループに、一意の (重複しない) NULL 以外の値のみを含めることができることを指定する制約。列セットをプライマリキーに指定すると、スキーマの設計に関するメタデータも提供されます。プライマリキーは、他のテーブルが、行の一意の識別子としてこの列セットに依存している可能性があることを示します。単一の列制約かテーブル制約かにかかわらず、テーブルに指定できるプライマリキーは 1 つです。プライマリキーの制約は、同じテーブルに定義されている一意の制約で指定された列セットとは異なる列セットを指定する必要があります。  
 プライマリキーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

FOREIGN KEY ( *column\$1name* [, ... ] ) REFERENCES *reftable* [ ( *refcolumn* ) ]   
外部キーの制約を指定する制約。この制約では、新しいテーブルの 1 列以上のグループに、参照テーブルのいずれかの行の参照列の値と一致する値のみを含める必要があります。*refcolumn* を省略すると、*reftable* のプライマリキーが使用されます。参照列は、参照テーブルの一意の制約またはプライマリキーの制約の列にする必要があります。  
外部キーの制約は情報提供にのみ使用されます。プライマリキーの制約がシステムに強制されることはありませんが、プランナーによって使用されます。

## 使用に関する注意事項
<a name="r_CREATE_TABLE_usage"></a>

一意性、プライマリキー、および外部キーの制約は情報提供のみを目的としており、テーブルに値を入れるときに *Amazon Redshift によって強要されるわけではありません*。例えば、依存関係のあるテーブルにデータを挿入する場合、制約に違反していても挿入は成功します。ただし、プライマリキーと外部キーはプランニング時のヒントとして使用されます。アプリケーションの ETL プロセスまたは他の何らかのプロセスによってこれらのキーの整合性が強要される場合は、これらのキーを宣言する必要があります。依存関係のあるテーブルを削除する方法については、「[DROP TABLE](r_DROP_TABLE.md)」を参照してください。

### 制限とクォータ
<a name="r_CREATE_TABLE_usage-limits"></a>

テーブルを作成するときは、次の制限を考慮してください。
+ ノードタイプごとにクラスター内のテーブルの最大数には制限があります。詳細については、「*Amazon Redshift 管理ガイド*」の「[制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。
+ テーブルの最大文字数は 127 です。
+ 1 つのテーブルで定義できる列の最大数は 1,600 です。
+ 1 つのテーブルで定義できる SORTKEY 列の最大数は 400 です。

### 列レベルの設定とテーブルレベルの設定の概要
<a name="r_CREATE_TABLE_usage-summary_of_settings"></a>

 列レベルまたはテーブルレベルで設定できる属性と設定値がいくつかあります。属性または制約を列レベルまたはテーブルレベルで設定して同じ結果が得られる場合もあれば、異なる結果が得られる場合もあります。

 次のリストは、列レベルとテーブルレベルの設定値の概要を示したものです。

DISTKEY  
列レベルで設定されるかテーブルレベルで設定されるかにかかわらず、結果に違いはありません。  
列レベルかテーブルレベルかにかかわらず、DISTKEY が設定されている場合は、DISTSTYLE を KEY に設定するか、まったく設定しない必要があります。DISTSTYLE はテーブルレベルでしか設定できません。

SORTKEY  
列レベルで設定されている場合、SORTKEY は 1 列でなければなりません。SORTKEY がテーブルレベルで設定されている場合は、1 つまたは複数の列で複合ソートキーまたはインターリーブコンポジットソートキーを構成できます。

COLLATE CASE\$1SENSITIVE \$1 COLLATE CASE\$1INSENSITIVE  
Amazon Redshift では、列での大文字と小文字の区別に関する設定の変更はサポートされていません。新しい列をテーブルに追加すると、Amazon Redshift は、大文字と小文字の区別に関するデフォルト値を適用します。Amazon Redshift は、新しい列を追加するときに、COLLATE キーワードをサポートしません。  
データベース照合を使用してデータベースを作成する方法については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。  
COLLATE 関数の詳細については、「[COLLATE 関数](r_COLLATE.md)」を参照してください。

UNIQUE  
列レベルでは、1 つまたは複数のキーを UNIQUE に設定できます。UNIQUE 制約は各列に個別に適用されます。UNIQUE がテーブルレベルで設定されている場合は、1 つまたは複数の列で複合 UNIQUE 制約を構成できます。

PRIMARY KEY  
列レベルで設定されている場合、PRIMARY KEY は 1 列でなければなりません。PRIMARY KEY がテーブルレベルで設定されている場合は、1 つまたは複数の列で複合プライマリキーを構成できます。

外部キー  
FOREIGN KEY が列レベルで設定されるかテーブルレベルで設定されるかにかかわらず、結果に違いはありません。列レベルでは、構文は単に `REFERENCES` *reftable* [ ( *refcolumn* )] になります。

### 受信データの分散
<a name="r_CREATE_TABLE_usage-distribution-of-incoming-data"></a>

受信データのハッシュ分散スキームが、ターゲットテーブルのスキームと同じ場合、データをロードするときに、データを物理的に分散させる必要はありません。例えば、新しいテーブルに分散キーが設定されており、同じキー列で分散されている別のテーブルからデータが挿入される場合、同じノードとスライスを使用してデータが所定の位置にロードされます。ただし、ソーステーブルとターゲットテーブルの両方が EVEN 分散に設定されている場合、データはターゲットテーブルで再分散されます。

### 横長のテーブル
<a name="r_CREATE_TABLE_usage-wide-tables"></a>

非常に横長のテーブルは、作成できても、そのテーブルに対して INSERT や SELECT などのクエリ処理を実行できないことがあります。CHAR のように固定幅の列を持つテーブルの最大幅は、64KB マイナス 1 (つまり 65535 バイト) です。テーブルに VARCHAR 列がある場合は、エラーを返さないで、より大きな幅を宣言できます。VARCHAR 列は、宣言した幅がクエリ処理の制限の算出に関係しないためです。VARCHAR 列に関する有効なクエリ処理の制限は、いくつかの要因に応じて変わります。

テーブルの幅が広すぎて挿入や選択ができない場合は、次のエラーが発生します。

```
ERROR:  8001
DETAIL:  The combined length of columns processed in the SQL statement
exceeded the query-processing limit of 65535 characters (pid:7627)
```

## 例
<a name="r_CREATE_TABLE_usage-examples"></a>

ALTER TABLE コマンドの使用方法を示す例については、「[例](r_CREATE_TABLE_examples.md)」のトピックを参照してください。

# 例
<a name="r_CREATE_TABLE_examples"></a>

次の例は、Amazon Redshift CREATE TABLE ステートメントのさまざまな列とテーブルの属性を示しています。パラメータ定義を含め、CREATE TABLE の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

例の多くは、*TICKIT* サンプルデータセットのテーブルとデータを使用しています。詳細については、「[サンプルデータベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)」を参照してください。

 CREATE TABLE コマンドでは、テーブル名の前にデータベース名とスキーマ名を付けることができます。例えば、`dev_database.public.sales`。データベース名は、接続しているデータベースでなければなりません。別のデータベースにデータベースオブジェクトを作成しようとすると、無効な操作エラーで失敗します。

## 分散キー、複合ソートキー、圧縮を使用してテーブルを作成する
<a name="r_CREATE_TABLE_examples-create-a-table-with-distribution-key"></a>

次の例では、複数の列に圧縮が定義された SALES テーブルを TICKIT データベースに作成します。LISTID は分散キーとして宣言され、LISTID と SELLERID は複数列の複合ソートキーとして宣言されています。このテーブルでは、プライマリキーと外部キーの制約も定義されています。この例のテーブルを作成する前に、制約が存在しない場合は、外部キーによって参照される各列に UNIQUE 制約を追加する必要がある場合があります。

```
create table sales(
salesid integer not null,
listid integer not null,
sellerid integer not null,
buyerid integer not null,
eventid integer not null encode mostly16,
dateid smallint not null,
qtysold smallint not null encode mostly8,
pricepaid decimal(8,2) encode delta32k,
commission decimal(8,2) encode delta32k,
saletime timestamp,
primary key(salesid),
foreign key(listid) references listing(listid),
foreign key(sellerid) references users(userid),
foreign key(buyerid) references users(userid),
foreign key(dateid) references date(dateid))
distkey(listid)
compound sortkey(listid,sellerid);
```

結果は以下のとおりです。

```
schemaname | tablename | column     | type                        | encoding | distkey | sortkey | notnull
-----------+-----------+------------+-----------------------------+----------+---------+---------+--------
public     | sales     | salesid    | integer                     | lzo      | false   |       0 | true
public     | sales     | listid     | integer                     | none     | true    |       1 | true
public     | sales     | sellerid   | integer                     | none     | false   |       2 | true
public     | sales     | buyerid    | integer                     | lzo      | false   |       0 | true
public     | sales     | eventid    | integer                     | mostly16 | false   |       0 | true
public     | sales     | dateid     | smallint                    | lzo      | false   |       0 | true
public     | sales     | qtysold    | smallint                    | mostly8  | false   |       0 | true
public     | sales     | pricepaid  | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | commission | numeric(8,2)                | delta32k | false   |       0 | false
public     | sales     | saletime   | timestamp without time zone | lzo      | false   |       0 | false
```

次の例では、大文字と小文字が区別されない列 col1 を持つテーブル t1 を作成します。

```
create table T1 (
  col1 Varchar(20) collate case_insensitive
 );
            
insert into T1 values ('bob'), ('john'), ('Tom'), ('JOHN'), ('Bob');
```

テーブルに対してクエリを実行します。

```
select * from T1 where col1 = 'John';
   
col1
------
 john
 JOHN
(2 rows)
```

## インターリーブソートキーを使用してテーブルを作成する
<a name="CREATE_TABLE_NEW-create-a-table-using-interleaved-sortkey"></a>

次の例では、インターリーブソートキーを使用して CUSTOMER テーブルを作成しています。

```
create table customer_interleaved (
  c_custkey     	integer        not null,
  c_name        	varchar(25)    not null,
  c_address     	varchar(25)    not null,
  c_city        	varchar(10)    not null,
  c_nation      	varchar(15)    not null,
  c_region      	varchar(12)    not null,
  c_phone       	varchar(15)    not null,
  c_mktsegment      varchar(10)    not null)
diststyle all
interleaved sortkey (c_custkey, c_city, c_mktsegment);
```

## IF NOT EXISTS を使用したテーブルの作成
<a name="CREATE_TABLE_NEW-create-a-table-using-if-not-exists"></a>

 次の例では、CITIES テーブルを作成します。そのテーブルが既に存在する場合は、何もしないでメッセージを返します。

```
create table if not exists cities(
cityid integer not null,
city varchar(100) not null,
state char(2) not null);
```

## ALL 分散を指定したテーブルの作成
<a name="CREATE_TABLE_NEW-create-a-table-with-all-distribution"></a>

 次の例では、ALL 分散を指定して VENUE テーブルを作成します。

```
create table venue(
venueid smallint not null,
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid))
diststyle all;
```

## EVEN 分散を指定したテーブルの作成
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-even-distribution"></a>

次の例では、3 つの列を持つ MYEVENT というテーブルを作成します。

```
create table myevent(
eventid int,
eventname varchar(200),
eventcity varchar(30))
diststyle even;
```

テーブルは均等に分散され、ソートされません。このテーブルに宣言された DISTKEY 列または SORTKEY 列はありません。

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'myevent';
            
  column   |          type          | encoding | distkey | sortkey
-----------+------------------------+----------+---------+---------
 eventid   | integer                | lzo      | f       |       0
 eventname | character varying(200) | lzo      | f       |       0
 eventcity | character varying(30)  | lzo      | f       |       0
(3 rows)
```

## 別のテーブルの LIKE である一時テーブルの作成
<a name="r_CREATE_TABLE_NEW-create-a-temporary-table-that-is-like-another-table"></a>

次の例では、TEMPEVENT という一時テーブルを作成します。このテーブルは EVENT テーブルの列を継承します。

```
create temp table tempevent(like event); 
```

また、このテーブルは、親テーブルの DISTKEY 属性と SORTKEY 属性も継承します。

```
select "column", type, encoding, distkey, sortkey
 from pg_table_def where tablename = 'tempevent';

  column   |            type             | encoding | distkey | sortkey
-----------+-----------------------------+----------+---------+---------
 eventid   | integer                     | none     | t       |       1
 venueid   | smallint                    | none     | f       |       0
 catid     | smallint                    | none     | f       |       0
 dateid    | smallint                    | none     | f       |       0
 eventname | character varying(200)      | lzo      | f       |       0
 starttime | timestamp without time zone | bytedict | f       |       0
(6 rows)
```

## IDENTITY 列があるテーブルの作成
<a name="r_CREATE_TABLE_NEW-create-a-table-with-an-identity-column"></a>

次の例では、VENUE\$1IDENT というテーブルを作成します。このテーブルには、VENUEID という IDENTITY 列があります。この列は 0 から始まり、レコードごとに 1 ずつ増分します。VENUEID は、テーブルのプライマリキーとしても宣言されています。

```
create table venue_ident(venueid bigint identity(0, 1),
venuename varchar(100),
venuecity varchar(30),
venuestate char(2),
venueseats integer,
primary key(venueid));
```

## デフォルトの IDENTITY 列があるテーブルの作成
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-identity-column"></a>

次の例では、`t1`という名前のテーブルを作成します。このテーブルには、`hist_id`という名前の IDENTITY 列と、`base_id`という名前のデフォルトの IDENTITY 列があります。

```
CREATE TABLE t1(
  hist_id BIGINT IDENTITY NOT NULL, /* Cannot be overridden */
  base_id BIGINT GENERATED BY DEFAULT AS IDENTITY NOT NULL, /* Can be overridden */
  business_key varchar(10) ,
  some_field varchar(10)
);
```

テーブルに行を挿入すると、`hist_id`と `base_id` の両方が生成されることがわかります。

```
INSERT INTO T1 (business_key, some_field) values ('A','MM');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
```

2 番目の行を挿入すると、`base_id`のデフォルト値が生成されることがわかります。

```
INSERT INTO T1 (base_id, business_key, some_field) values (DEFAULT, 'B','MNOP');
```

```
SELECT * FROM t1;

 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
```

3 番目の行を挿入すると、`base_id`の値が一意である必要がないことがわかります。

```
INSERT INTO T1 (base_id, business_key, some_field) values (2,'B','MNNN');
```

```
SELECT * FROM t1;
            
 hist_id | base_id | business_key | some_field
---------+---------+--------------+------------
       1 |       1 | A            | MM
       2 |       2 | B            | MNOP
       3 |       2 | B            | MNNN
```

## DEFAULT 列値を指定したテーブルの作成
<a name="r_CREATE_TABLE_NEW-create-a-table-with-default-column-values"></a>

次の例では、各列のデフォルト値を宣言した CATEGORYDEF テーブルを作成します。

```
create table categorydef(
catid smallint not null default 0,
catgroup varchar(10) default 'Special',
catname varchar(10) default 'Other',
catdesc varchar(50) default 'Special events',
primary key(catid));
            
insert into categorydef values(default,default,default,default);
```

```
select * from categorydef;
            
 catid | catgroup | catname |    catdesc
-------+----------+---------+----------------
     0 | Special  | Other   | Special events
(1 row)
```

## DISTSTYLE、DISTKEY、SORTKEY オプション
<a name="r_CREATE_TABLE_NEW-diststyle-distkey-and-sortkey-options"></a>

次の例は、DISTKEY、SORTKEY、DISTSTYLE オプションがどのように機能するかを示しています。この例で、COL1 は分散キーであるため、分散スタイルを KEY に設定するか、何も設定しない必要があります。デフォルトで、テーブルにはソートキーがないため、ソートされません。

```
create table t1(col1 int distkey, col2 int) diststyle key;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't1';

column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | az64     | t       | 0
col2   | integer | az64     | f       | 0
```

次の例では、同じ列が分散キーおよびソートキーとして定義されています。ここでも、分散スタイルを KEY に設定するか、何も設定しない必要があります。

```
create table t2(col1 int distkey sortkey, col2 int);
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't2';
            
column |  type   | encoding | distkey | sortkey
-------+---------+----------+---------+---------
col1   | integer | none     | t       | 1
col2   | integer | az64     | f       | 0
```

次の例では、分散キーに設定されている列はありません。また、COL2 はソートキーに設定され、分散スタイルは ALL に設定されています。

```
create table t3(col1 int, col2 int sortkey) diststyle all;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't3';
            
Column |  Type   | Encoding | DistKey | SortKey
-------+---------+----------+---------+--------
col1   | integer | az64     | f       | 0
col2   | integer | none     | f       | 1
```

次の例では、分散スタイルは EVEN に設定され、ソートキーは明示的に定義されていません。そのため、テーブルは均等に分散されますが、ソートされません。

```
create table t4(col1 int, col2 int) diststyle even;
```

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 't4';
            
             column |  type   |encoding | distkey | sortkey
--------+---------+---------+---------+--------
col1    | integer | az64    | f       | 0
col2    | integer | az64    | f       | 0
```

## ENCODE AUTO オプションを使用してテーブルを作成する
<a name="r_CREATE_TABLE_NEW-create-a-table-with-encode-option"></a>

次の例では、自動圧縮エンコードを使用してテーブル `t1` を作成します。ENCODE AUTO は、どの列にもエンコード型を指定しない場合のテーブルのデフォルトです。

```
create table t1(c0 int, c1 varchar);
```

次の例では、ENCODE AUTO を指定して、自動圧縮エンコードを使用してテーブル `t2` を作成します。

```
create table t2(c0 int, c1 varchar) encode auto;
```

次の例では、ENCODE AUTO を指定して、自動圧縮エンコードを使用してテーブル `t3` を作成します。列 `c0` は、初期エンコードタイプが DELTA で定義されています。別のエンコードがより良いクエリパフォーマンスを提供する場合、Amazon Redshift はエンコードを変更できます。

```
create table t3(c0 int encode delta, c1 varchar) encode auto;
```

次の例では、ENCODE AUTO を指定して、自動圧縮エンコードを使用してテーブル `t4` を作成します。列 `c0` は DELTA の初期エンコードで定義され、列 `c1` は LZO の初期エンコードで定義されます。他のエンコードがより優れたクエリパフォーマンスを提供する場合、Amazon Redshift はこれらのエンコードを変更できます。

```
create table t4(c0 int encode delta, c1 varchar encode lzo) encode auto;
```

# CREATE TABLE AS
<a name="r_CREATE_TABLE_AS"></a>

**Topics**
+ [構文](#r_CREATE_TABLE_AS-synopsis)
+ [パラメータ](#r_CREATE_TABLE_AS-parameters)
+ [CTAS の使用に関する注意事項](r_CTAS_usage_notes.md)
+ [CTAS の例](r_CTAS_examples.md)

クエリに基づいて新しいテーブルを作成します。このテーブルの所有者は、このコマンドを発行したユーザーになります。

新しいテーブルが作成され、コマンドのクエリで定義されたデータがロードされます。テーブルの列には、クエリの出力列に関連付けられた名前とデータ型が指定されます。CREATE TABLE AS (CTAS) コマンドを実行すると、新しいテーブルが作成され、新しいテーブルをロードするクエリが評価されます。

## 構文
<a name="r_CREATE_TABLE_AS-synopsis"></a>

```
CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ]
TABLE table_name
[ ( column_name [, ... ] ) ]
[ BACKUP { YES | NO } ]
[ table_attributes ]
AS query

where table_attributes are:
[ DISTSTYLE { AUTO | EVEN | ALL | KEY } ]
[ DISTKEY( distkey_identifier ) ]
[ [ COMPOUND | INTERLEAVED ] SORTKEY( column_name [, ...] ) ]
```

## パラメータ
<a name="r_CREATE_TABLE_AS-parameters"></a>

LOCAL   
このオプションのキーワードは、ステートメントに指定できますが、Amazon Redshift では効果がありません。

TEMPORARY \$1 TEMP   
一時テーブルを作成します。一時テーブルは、作成したセッションの終了時に削除されます。

 *table\$1name*   
作成するテーブルの名前。  
「\$1」で始まるテーブル名を指定すると、そのテーブルは一時テーブルとして作成されます。次に例を示します。  

```
create table #newtable (id) as select * from oldtable;
```
テーブル名の最大長は 127 バイトです。それより長い名前は 127 文字まで切り詰められます。Amazon Redshift は、ノードタイプごとにクラスターあたりのテーブル数のクォータを適用します。次の表で示すように、テーブル名はデータベース名およびスキーマ名で修飾することができます。  

```
create table tickit.public.test (c1) as select * from oldtable;
```
この例では、`tickit`はデータベース名、`public`はスキーマ名です。このデータベースまたはスキーマが存在しない場合、ステートメントはエラーを返します。  
スキーマ名を指定すると、新しいテーブルはそのスキーマ内に作成されます (作成者がスキーマにアクセス権を持っている場合)。テーブル名は、そのスキーマで一意の名前にする必要があります。スキーマを指定しない場合、現在のデータベーススキーマを使用してテーブルが作成されます。一時テーブルを作成する場合、一時テーブルは特殊なスキーマにあるのでスキーマ名を指定することはできません。  
同じ名前の一時テーブルでも、別のセッションで作成される場合、同じデータベース内に同時に存在することができます。このようなテーブルは別のスキーマに割り当てられます。

 *column\$1name*   
新しいテーブルの列の名前。列名を指定しない場合、列名には、クエリの出力列名が使用されます。式にはデフォルトの列名が使用されます。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

BACKUP \$1 YES \$1 NO \$1   
テーブルを自動および手動クラスター スナップショットに含めるかどうかを指定する句。  
重要なデータを含まないステージングテーブルなどのテーブルについては、スナップショットの作成やスナップショットからの復元にかかる時間を節約し、Amazon Simple Storage Service のストレージスペースを節約するため、BACKUP NO を指定します。BACKUP NO の設定は、クラスター内の別ノードへのデータの自動レプリケーションには影響しません。そのため、BACKUP NO が指定されたテーブルはノードの障害時に回復されます。デフォルトは BACKUP YES です。  
RA3 でプロビジョニングされたクラスターと Amazon Redshift Serverless ワークグループでは、バックアップ用ではないテーブルはサポートされていません。RA3 クラスターおよびサーバーレスワークグループでバックアップしないとマークされたテーブルは、スナップショットの作成中に常にバックアップされ、スナップショットから復元するときに復元される永続テーブルとして扱われます。バックアップ用ではないテーブルのスナップショットコストを回避するには、スナップショットを作成する前にそれらを切り捨てます。

DISTSTYLE \$1 AUTO \$1 EVEN \$1 KEY \$1 ALL \$1  
テーブル全体のデータディストリビューションスタイルを定義するキーワード。Amazon Redshift は、テーブルに指定されたディストリビューションスタイルに従って、テーブルの行をコンピューティングノードに分散します。デフォルトは DISTSTYLE AUTO です。  
テーブルにどの分散スタイルを選択するかによって、データベースの全体的なパフォーマンスが左右されます。詳細については、「[クエリ最適化のためのデータのディストリビューション](t_Distributing_data.md)」を参照してください。  
+ AUTO: Amazon Redshift がテーブルデータに基づいて最適な分散スタイルを割り当てます。テーブルに適用された分散スタイルを表示するには、PG\$1CLASS システムカタログテーブルに対してクエリを実行します。詳細については、「[分散スタイルの表示](viewing-distribution-styles.md)」を参照してください。
+ EVEN: テーブルのデータは、ラウンドロビン分散方式で、クラスター内のノード全体に均等に分散されます。行 ID は分散を決定するために使用され、およそ同じ行数が各ノードに分散されます。これはデフォルトの分散方法です。
+ KEY: データは、DISTKEY 列の値で分散されます。結合するテーブルの結合列を分散キーとして設定すると、両方のテーブルの結合列がコンピューティングノードによりコロケーションされます。データがコロケーションされることで、オプティマイザーはより効率的に結合を実行できます。DISTSTYLE KEY を指定する場合、DISTKEY 列を指定する必要があります。
+  ALL: テーブル全体のコピーがすべてのノードに分散されます。この分散方式により、結合に必要なすべての列が確実にすべてのノードで使用可能になりますが、ストレージ要件が倍増し、テーブルに関する負荷とメンテナンス時間が増大します。ALL 分散を指定する場合、KEY 分散が適さない特定のディメンションテーブルで使用する場合には実行時間が改善される可能性がありますが、パフォーマンスの改善とメンテナンスコストを比較検討する必要があります。

DISTKEY (*column*)  
分散キーの列名または位置番号を指定します。テーブルのオプションの列リストまたはクエリの選択したリストで指定された名前を使用します。または、位置番号を使用します。この番号は、最初に選択された列は 1、2 番目は 2 などと続きます。テーブル内の 1 つの列のみを分散キーに指定できます。  
+ 列を DISTKEY 列として宣言する場合、DISTSTYLE を KEY に設定するか、まったく設定しない必要があります。
+ DISTKEY 列を宣言しない場合、DISTSTYLE を EVEN に設定することができます。
+ DISTKEY または DISTSTYLE を指定しない場合、CTAS は SELECT 句のクエリプランに基づいて新しいテーブルの分散スタイルを決定します。詳細については、「[列属性とテーブル属性の継承](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes)」を参照してください。
同じ列を分散キーおよびソートキーとして定義できます。この方法の場合、該当する列をクエリで結合する列にすると、結合が高速になる傾向があります。

[ COMPOUND \$1 INTERLEAVED ] SORTKEY ( *column\$1name* [, ... ] )  
テーブルに対して 1 つ以上のソートキーを指定します。データをテーブルにロードすると、データはソートキーとして指定された列に従ってソートされます。  
オプションでソート方式として COMPOUND または INTERLEAVED を指定できます。デフォルトは COMPOUND です。詳細については、「[ソートキー](t_Sorting_data.md)」を参照してください。  
1 つのテーブルで最大 400 の COMPOUND SORTKEY 列または 8 の INTERLEAVED SORTKEY 列を定義できます。  
SORTKEY を指定しない場合、CTAS は SELECT 句のクエリプランに基づいて新しいテーブルのソートキーを決定します。詳細については、「[列属性とテーブル属性の継承](r_CTAS_usage_notes.md#r_CTAS_usage_notes-inheritance-of-column-and-table-attributes)」を参照してください。    
COMPOUND  
リストされているすべての列から成る複合キーを使用して、データがリスト順にソートされるように指定します。複合ソートキーは、クエリがソート列の順序に従って行をスキャンする場合に最も便利です。複合キーを使用したソートのパフォーマンス上のメリットは、クエリがセカンダリソート列に依存する状況が減少する点にあります。1 つのテーブルで、最大 400 の COMPOUND SORTKEY 列を定義できます。  
INTERLEAVED  
インターリーブソートキーを使用してデータがソートされるように指定します。インターリーブソートキーには、最大 8 つの列を指定できます。  
インターリーブソートは、ソートキーの各列または列のサブセットに等しい重みを割り当てるため、クエリはソートキーの列の順序に依存しません。クエリが 1 つ以上のセカンダリソート列を使用すると、インターリーブソートによってクエリのパフォーマンスは大幅に向上します。インターリーブソートでは、データのロード操作とバキューム操作にわずかなオーバーヘッドコストがかかります。

AS *query*   
Amazon Redshift がサポートするすべてのクエリ (SELECT ステートメント)。

# CTAS の使用に関する注意事項
<a name="r_CTAS_usage_notes"></a>

## 制限
<a name="r_CTAS_usage_notes-limits"></a>

Amazon Redshift は、ノードタイプごとにクラスターあたりのテーブル数のクォータを適用します。

テーブルの最大文字数は 127 です。

1 つのテーブルで定義できる列の最大数は 1,600 です。

## 列属性とテーブル属性の継承
<a name="r_CTAS_usage_notes-inheritance-of-column-and-table-attributes"></a>

CREATE TABLE AS (CTAS) テーブルは、作成元のテーブルから制約、ID 列、デフォルトの列値、またはプライマリキーを継承しません。

CTAS テーブルの列圧縮エンコードは指定できません。Amazon Redshift では、次のように圧縮エンコードが自動的に割り当てられます。
+ ソートキーとして定義されている列には、RAW 圧縮が割り当てられます。
+ BOOLEAN、REAL、DOUBLE PRECISION、GEOMETRY、もしくは GEOGRAPHY の各データ型で定義されている列には、RAW 圧縮が割り当てられます。
+ SMALLINT、INTEGER、BIGINT、DECIMAL、DATE、TIME、TIMETZ、TIMESTAMP、または TIMESTAMPTZ として定義された列には AZ64 圧縮が割り当てられます。
+ CHAR、VARCHAR、または VARBYTE として定義されている列には、LZO 圧縮が割り当てられます。

詳細については、「[圧縮エンコード](c_Compression_encodings.md)」および「[データ型](c_Supported_data_types.md)」を参照してください。

列エンコーディングを明示的に割り当てるには、[CREATE TABLE](r_CREATE_TABLE_NEW.md) を使用します。

CTAS は、SELECT 句のクエリプランに基づいて新しいテーブルの分散スタイルとソートキーを決定します。

結合、集計、ORDER BY 句、LIMIT 句を含むクエリなど、複雑なクエリの場合、CTAS はクエリプランに基づいてベストエフォートで最適な分散スタイルとソートキーを選択します。

**注記**  
大きいデータセットや複雑なクエリで最良のパフォーマンスを得るために、テストの際には、通常のデータセットを使用することをお勧めします。

多くの場合、クエリプランを調べて、クエリオプティマイザがデータのソートと分散に使用する列 (ある場合) を確認することにより、CTAS が選択する分散キーとソートキーを予測できます。クエリプランの最上位ノードが単一のテーブルからのシンプルなシーケンシャルスキャンである場合 (XN Seq Scan)、CTAS は通常ソーステーブルの分散スタイルとソートキーを使用します。クエリプランの最上位ノードがシーケンシャルスキャン以外である場合 (XN Limit、XN Sort、XN HashAggregate など)、CTAS はクエリプランに基づいてベストエフォートで最適な分散スタイルとソートキーを選択します。

例えば、次のタイプの SELECT 句を使用して 5 つのテーブルを作成するとします。
+ シンプルな SELECT ステートメント 
+ Limit 句 
+ LISTID を使用した ORDER BY 句 
+ QTYSOLD を使用した ORDER BY 句 
+ GROUP BY 句を使用した SUM 集計関数です。

次の例は、各 CTAS ステートメントのクエリプランを示しています。

```
explain create table sales1_simple as select listid, dateid, qtysold from sales;
                           QUERY PLAN
----------------------------------------------------------------
 XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(1 row)


explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100;
                              QUERY PLAN
----------------------------------------------------------------------
 XN Limit  (cost=0.00..1.00 rows=100 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)


explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: listid
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Sort  (cost=1000000016724.67..1000000017155.81 rows=172456 width=8)
   Sort Key: qtysold
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(3 rows)


explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid;
                              QUERY PLAN
----------------------------------------------------------------------
 XN HashAggregate  (cost=3017.98..3226.75 rows=83509 width=8)
   ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=8)
(2 rows)
```

各テーブルのディストリビューションキーとソートキーを表示するには、次に示すように PG\$1TABLE\$1DEF システムカタログテーブルのクエリを実行します。

```
select * from pg_table_def where tablename like 'sales%';

      tablename       |   column   | distkey | sortkey
----------------------+------------+---------+---------
 sales                | salesid    | f       |       0
 sales                | listid     | t       |       0
 sales                | sellerid   | f       |       0
 sales                | buyerid    | f       |       0
 sales                | eventid    | f       |       0
 sales                | dateid     | f       |       1
 sales                | qtysold    | f       |       0
 sales                | pricepaid  | f       |       0
 sales                | commission | f       |       0
 sales                | saletime   | f       |       0
 sales1_simple        | listid     | t       |       0
 sales1_simple        | dateid     | f       |       1
 sales1_simple        | qtysold    | f       |       0
 sales2_limit         | listid     | f       |       0
 sales2_limit         | dateid     | f       |       0
 sales2_limit         | qtysold    | f       |       0
 sales3_orderbylistid | listid     | t       |       1
 sales3_orderbylistid | dateid     | f       |       0
 sales3_orderbylistid | qtysold    | f       |       0
 sales4_orderbyqty    | listid     | t       |       0
 sales4_orderbyqty    | dateid     | f       |       0
 sales4_orderbyqty    | qtysold    | f       |       1
 sales5_groupby       | listid     | f       |       0
 sales5_groupby       | dateid     | f       |       0
 sales5_groupby       | sum        | f       |       0
```

結果の概要を次の表に示します。分かりやすいように、説明プランからコスト、行、幅の詳細を省略しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_CTAS_usage_notes.html)

CTAS ステートメントでは、分散スタイルとソートキーを明示的に指定できます。例えば、次のステートメントは、EVEN 分散を使用してテーブルを作成し、ソートキーとして SALESID を指定します。

```
create table sales_disteven
diststyle even
sortkey (salesid)
as
select eventid, venueid, dateid, eventname
from event;
```

## 圧縮エンコード
<a name="r_CTAS_usage_notes_encoding"></a>

ENCODE AUTO は、テーブルのデフォルトになっています。Amazon Redshift は、テーブル内のすべての列の圧縮エンコードを自動的に管理します。

## 受信データの分散
<a name="r_CTAS_usage_notes-distribution-of-incoming-data"></a>

受信データのハッシュ分散スキームが、ターゲットテーブルのスキームと同じ場合、データをロードするときに、データを物理的に分散させる必要はありません。例えば、新しいテーブルに分散キーが設定されており、同じキー列で分散されている別のテーブルからデータが挿入される場合、同じノードとスライスを使用してデータが所定の位置にロードされます。ただし、ソーステーブルとターゲットテーブルの両方が EVEN 分散に設定されている場合、データはターゲットテーブルで再分散されます。

## 自動 ANALYZE 操作
<a name="r_CTAS_usage_notes-automatic-analyze-operations"></a>

Amazon Redshift は、CTAS コマンドで作成したテーブルを自動的に分析します。最初に作成したとき、これらのテーブルに ANALYZE コマンドを実行する必要はありません。変更する場合は、他のテーブルと同じように分析する必要があります。

# CTAS の例
<a name="r_CTAS_examples"></a>

次の例では、EVENT テーブルに対して EVENT\$1BACKUP というテーブルを作成します。

```
create table event_backup as select * from event;
```

結果のテーブルは、EVENT テーブルから分散キーとソートキーを継承します。

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'event_backup';

column    | type                        | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+--------
catid     | smallint                    | none     | false   |       0
dateid    | smallint                    | none     | false   |       1
eventid   | integer                     | none     | true    |       0
eventname | character varying(200)      | none     | false   |       0
starttime | timestamp without time zone | none     | false   |       0
venueid   | smallint                    | none     | false   |       0
```

次のコマンドでは、EVENT テーブルから 4 つの列を選択して、EVENTDISTSORT という新しいテーブルを作成します。新しいテーブルは EVENTID によって分散され、EVENTID と DATEID によってソートされます。

```
create table eventdistsort
distkey (1)
sortkey (1,3)
as
select eventid, venueid, dateid, eventname
from event;
```

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

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistsort';

column   |          type          | encoding | distkey | sortkey
---------+------------------------+----------+---------+-------
eventid   | integer               | none     | t       | 1
venueid   | smallint              | none     | f       | 0
dateid    | smallint              | none     | f       | 2
eventname | character varying(200)| none     | f       | 0
```

分散キーとソートキーの列名を使用することで、まったく同じテーブルを作成できます。次に例を示します。

```
create table eventdistsort1
distkey (eventid)
sortkey (eventid, dateid)
as
select eventid, venueid, dateid, eventname
from event;
```

次のステートメントは、テーブルに均等に分配適用されますが、明示的なソートキーを定義しません。

```
create table eventdisteven
diststyle even
as
select eventid, venueid, dateid, eventname
from event;
```

EVEN 分散は新しいテーブルで指定されるため、このテーブルは EVENT テーブル (EVENTID) からソートキーを継承しません。新しいテーブルにはソートキーと分散キーがありません。

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdisteven';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+---------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 0
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

次のステートメントでは、均等分散を適用し、ソートキーを定義します。

```
create table eventdistevensort diststyle even sortkey (venueid)
as select eventid, venueid, dateid, eventname from event;
```

 結果のテーブルにはソートキーがありますが、分散キーはありません。

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'eventdistevensort';

column    |          type          | encoding | distkey | sortkey
----------+------------------------+----------+---------+-------
eventid   | integer                | none     | f       | 0
venueid   | smallint               | none     | f       | 1
dateid    | smallint               | none     | f       | 0
eventname | character varying(200) | none     | f       | 0
```

次のステートメントでは、受信データに基づいて別のキー列で EVENT テーブルを再分散します。データは EVENTID 列に基づいてソートされており、SORTKEY 列は定義されません。そのため、テーブルはソートされません。

```
create table venuedistevent distkey(venueid)
as select * from event;
```

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

```
select "column", type, encoding, distkey, sortkey
from pg_table_def where tablename = 'venuedistevent';

 column   |            type             | encoding | distkey | sortkey
----------+-----------------------------+----------+---------+-------
eventid   | integer                     | none     | f       | 0
venueid   | smallint                    | none     | t       | 0
catid     | smallint                    | none     | f       | 0
dateid    | smallint                    | none     | f       | 0
eventname | character varying(200)      | none     | f       | 0
starttime | timestamp without time zone | none     | f       | 0
```

# CREATE TEMPLATE
<a name="r_CREATE_TEMPLATE"></a>

[COPY](r_COPY.md) などの Amazon Redshift コマンドの再利用可能なテンプレートを作成します。テンプレートには、複数のコマンド実行で参照できるよく使用されるパラメータが保存されるため、一貫性が向上し、手動でのパラメータ指定が削減されます。

テンプレートを使用すると、ソースパス、ターゲットテーブル、認可がオペレーションによって異なる場合でも、複数のオペレーションで同じ形式パラメータを繰り返し指定する必要がなくなります。

## 必要な権限
<a name="r_CREATE_TEMPLATE-privileges"></a>

テンプレートを作成するには、次のいずれかが必要です。
+ スーパーユーザー権限
+ テンプレートを作成するスキーマに対する CREATE アクセス許可、またはテンプレートを作成するデータベース内のスキーマに対する CREATE スコープ設定アクセス許可

## 構文
<a name="r_CREATE_TEMPLATE-synopsis"></a>

```
CREATE [ OR REPLACE ] TEMPLATE [database_name.][schema_name.]template_name
FOR COPY [ AS ]
[ [ FORMAT ] [ AS ] data_format ]
[ parameter [ argument ] [ , ... ] ];
```

## パラメータ
<a name="r_CREATE_TEMPLATE-parameters"></a>

 *OR REPLACE*   
同じ名前のテンプレートが指定されたデータベースとスキーマに既に存在する場合、既存のテンプレートが置き換えられます。テンプレートは、COPY など、同じオペレーションタイプを定義する新しいテンプレートでのみ置き換えることができます。テンプレートを置き換えるためには、必要な権限が必要です。

*database\$1name*  
(オプション) テンプレートが作成されるデータベースの名前。指定しない場合、テンプレートは現在のデータベースに作成されます。  
データベースまたはスキーマが存在しない場合は、テンプレートは作成されず、このステートメントはエラーを返します。システムデータベース `template0`、`template1`、`padb_harvest` または `sys:internal` にテンプレートを作成することはできません。

*schema\$1name*  
(オプション) テンプレートが作成されるスキーマの名前。指定しない場合、テンプレートは現在のスキーマに作成されます。  
スキーマ名を指定すると、新しいテンプレートはそのスキーマ内に作成されます (作成者がスキーマにアクセス権を持っている場合)。テンプレート名は、そのスキーマで一意の名前にする必要があります。

*template\$1name*  
作成するテンプレートの名前。オプションで、テンプレート名は、データベース名およびスキーマ名で修飾することができます。次の例では、データベース名は `demo_database`、スキーマ名は `demo_schema`、テンプレート名は `test` です。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。  

```
CREATE TEMPLATE demo_database.demo_schema.test FOR COPY AS CSV;
```

COPY  
テンプレートが作成される Redshift コマンドタイプを指定します。現在、COPY コマンドのみがサポートされています。

[ [ FORMAT ] [ AS ] *data\$1format* ]   
このパラメータはオプションです。これは、COPY オペレーションのデータ形式を指定します。

[ *パラメータ* [ 引数 ]]  
指定された Redshift コマンドの有効なパラメータ。  
例えば、COPY コマンドのテンプレートには以下を含めることができます。  
+ [データ形式パラメータ](copy-parameters-data-format.md)
+ [ファイル圧縮パラメータ](copy-parameters-file-compression.md)
+ [データ変換パラメータ](copy-parameters-data-conversion.md)
+ [データのロード操作](copy-parameters-data-load.md)
サポートされているパラメータの完全なリストについては、「[COPY](r_COPY.md)」コマンドを参照してください。

### 使用に関する注意事項
<a name="create_template-usage-notes"></a>
+ デフォルトでは、すべてのユーザーは PUBLIC スキーマに対して、CREATE 権限と USAGE 権限を所有しています。ユーザーがデータベースの PUBLIC スキーマにオブジェクトを作成できないようにするには、REVOKE コマンドを使用してその権限を削除します。
+ テンプレートとコマンドの両方にパラメータが存在する場合、コマンドパラメータが優先されます。
+ テンプレートはデータベースオブジェクトであり、標準の Redshift オブジェクトの命名規則とアクセス許可ルールに従います。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。
+ テンプレートには、[COPY](r_COPY.md) コマンドのマニフェストファイルの仕様を含めることはできません。

### 制限事項
<a name="create_template-limitations"></a>
+ テンプレートを作成するときは、少なくとも 1 つのパラメータを指定する必要があります。
+ 除外されるパラメータ – ソースパス、ターゲットテーブル、認可の認証情報、マニフェストファイルの仕様などのコマンド固有のパラメータをテンプレートに含めることはできません。これらのパラメータは、実際のコマンドで指定する必要があります。
+ クラスターあたりの最大テンプレート数 – クラスターあたり最大 1,000 個のテンプレートを作成できます。この制限は、クラスター内のすべてのデータベースとスキーマのテンプレートの合計数に適用されます。
+ クロスデータベース参照 – テンプレートはデータベース間で参照できません。
+ データ共有 – テンプレートをデータ共有に含めることはできません。テンプレートは、必要なクラスターごとに個別に作成する必要があります。

## 例
<a name="r_CREATE_TEMPLATE-examples"></a>

次の例では、COPY コマンドのテンプレートを作成します。

```
CREATE TEMPLATE test_schema.demo_template
FOR COPY
AS
FORMAT JSON 'auto'
NULL AS ''
MAXERROR 100;
```

[SHOW TEMPLATE](r_SHOW_TEMPLATE.md) を使用してテンプレートの定義を取得します。

```
SHOW TEMPLATE test_schema.demo_template;
CREATE OR REPLACE TEMPLATE dev.test_schema.demo_template FOR COPY AS FORMAT AS JSON 'auto' NULL '' MAXERROR 100;
```

 [SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md) システムビューをクエリして、テンプレートの詳細を取得します。

```
SELECT * FROM SYS_REDSHIFT_TEMPLATE;

database_name | schema_name | template_name | template_type |        create_time         |     last_modified_time     | owner_id | last_modified_by | template_parameters 
---------------+-------------+---------------+---------------+----------------------------+----------------------------+----------+------------------+---------------------
 dev           | test_schema | demo_template |             1 | 2025-12-17 20:06:01.944171 | 2025-12-17 20:06:01.944171 |        1 |                1 | {
    "JSON": "auto",
    "MAXERROR": 100,
    "NULL": ""
}
```

# CREATE USER
<a name="r_CREATE_USER"></a>

新しいデータベースユーザーを作成します。データベースユーザーは、権限とロールに応じて、データベースでデータを取得したり、コマンドを実行したり、その他のアクションを実行したりできます。このコマンドを実行するには、データベースのスーパーユーザー権限を持つ必要があります。

## 必要な権限
<a name="r_CREATE_USER-privileges"></a>

以下に、CREATE USER に必要な権限を示します。
+ スーパーユーザー
+ CREATE USER の権限を持つユーザー

## 構文
<a name="r_CREATE_USER-synopsis"></a>

```
CREATE USER name [ WITH ]
PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ option [ ... ] ]

where option can be:

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| IN GROUP groupname [, ... ]
| VALID UNTIL 'abstime'
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit
| EXTERNALID external_id
```

## パラメータ
<a name="r_CREATE_USER-parameters"></a>

 *.name*   
作成するユーザーの名前。ユーザー名を `PUBLIC` にすることはできません。有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。

WiTH  
オプションキーワード Amazon Redshift では WITH は無視されます

PASSWORD \$1 '*password*' \$1 '*md5hash*' \$1 '*sha256hash*' \$1 DISABLE \$1  
ユーザーのパスワードを設定します。  
デフォルトでは、ユーザーはパスワードが無効になっていない限り、自分のパスワードを変更できます。ユーザーのパスワードを無効にするには、DISABLE を指定します。ユーザーのパスワードが無効になると、パスワードはシステムから削除され、ユーザーは AWS Identity and Access Management (IAM) ユーザーの一時的認証情報を使用してのみログオンできます。詳細については、「[IAM 認証を使用したデータベースユーザー認証情報の生成](https://docs.aws.amazon.com/redshift/latest/mgmt/generating-user-credentials.html)」を参照してください。スーパーユーザーのみが、パスワードを有効または無効にできます。スーパーユーザーのパスワードを無効にすることはできません。パスワードを有効にするには、[ALTER USER](r_ALTER_USER.md)を実行し、パスワードを指定します。  
パスワードの指定は、クリアテキスト、MD5 ハッシュ文字列、もしくは SHA256 ハッシュ文字列の形式で行うことができます。  
 AWS マネジメントコンソール、AWS CLI、または Amazon Redshift API を使用して新しいクラスターを起動する場合、初期データベースユーザーのパスワードはクリアテキストで指定する必要があります。[ALTER USER](r_ALTER_USER.md) を使用して、パスワードを後で変更できます。
クリアテキストでは、パスワードは以下の制約を満たす必要があります:  
+ 8 から 64 文字の長さにする必要があります。
+ 少なくとも 1 つの大文字、1 つの小文字、および 1 つの数字を使用する必要があります。
+ ASCII 文字 (ASCII コード 33～126) のうち、' (一重引用符)、" (二重引用符)、\$1、/、@ を除く任意の文字を使用できます。
クリアテキストで CREATE USER パスワード パラメータを通過するための安全な代替方法として、パスワードとユーザー名を含む文字列の MD5 ハッシュを指定できます。  
MD5 ハッシュ文字列を指定すると、CREATE USER コマンドが MD5 ハッシュ文字列の有効性を確認しますが、パスワード部分の文字列は検証されません。この場合、データベースにログインするために利用できないパスワード (空の文字列など) を作成することができます。
MD5 パスワードを指定するには、以下のステップに従います:   

1. パスワードとユーザー名を連結します。

   例えば、パスワードが `ez`、ユーザーが `user1` の場合、連結した文字列は `ezuser1` です。

1. 連結した文字列を 32 文字の MD5 ハッシュ文字列に変換します。ハッシュ文字列を作成するために任意の MD5 ユーティリティを使用できます。次の例では、Amazon Redshift [MD5 関数](r_MD5.md) と連結演算子 ( \$1\$1 ) を使用し、32 文字の MD5 ハッシュ文字列を使用しています。

   ```
   select md5('ez' || 'user1');
                           
   md5
   --------------------------------
   153c434b4b77c89e6b94f12c5393af5b
   ```

1. MD5 ハッシュ文字列の前に「`md5`」を連結し、*md5hash* 引数として連結した文字列を指定します。

   ```
   create user user1 password 'md5153c434b4b77c89e6b94f12c5393af5b';
   ```

1. サインイン認証情報を使用してデータベースにログオンします。

   この例では、パスワード `ez` を使用して `user1` としてログオンします。
もう 1 つの安全な方法は、パスワード文字列の SHA-256 ハッシュを指定することです。または、ダイジェストの作成に使用された、独自の有効な SHA-256 ダイジェストと 256 ビットのソルトを指定することもできます。  
+ Digest – ハッシュ関数の出力。
+ Salt – ハッシュ関数の出力のパターンを減らすために、パスワードと組み合わされて、ランダムに生成されたデータ。

```
'sha256|Mypassword'
```

```
'sha256|digest|256-bit-salt'
```
次の例では、Amazon Redshift によりソルトの生成および管理を行っています。  

```
CREATE USER admin PASSWORD 'sha256|Mypassword1';
```
次の例では、ダイジェストの作成に使用された有効な SHA-256 ダイジェストと 256 ビットのソルトが提供されます。  
パスワードを指定して独自のソルトでハッシュするには、次の手順に従います。  

1. 256 ビットのソルトを作成します。ソルトを取得するには、任意の 16 進文字列ジェネレータを使用して 64 文字の文字列を生成します。この例で、ソルトは `c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6` です。

1.  FROM\$1HEX 関数を使用して、ソルトをバイナリに変換します。SHA2 関数にはソルトのバイナリ表現が必要であるためです。次のステートメントをご覧ください。

   ```
   SELECT FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6');
   ```

1.  CONCAT 関数を使用して、パスワードにソルトを追加します。この例で、パスワードは `Mypassword1` です。次のステートメントをご覧ください 

   ```
   SELECT CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6'));
   ```

1. SHA2 関数を使用して、パスワードとソルトの組み合わせからダイジェストを作成します。次のステートメントをご覧ください。

   ```
   SELECT SHA2(CONCAT('Mypassword1',FROM_HEX('c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6')), 0);
   ```

1.  これまでの手順のダイジェストとソルトを使用して、ユーザーを作成します。次のステートメントをご覧ください。

   ```
   CREATE USER admin PASSWORD 'sha256|821708135fcc42eb3afda85286dee0ed15c2c461d000291609f77eb113073ec2|c721bff5d9042cf541ff7b9d48fa8a6e545c19a763e3710151f9513038b0f6c6';
   ```

1. サインイン認証情報を使用してデータベースにログオンします。

    この例では、パスワード `Mypassword1` を使用して `admin` としてログオンします。
ハッシュ関数を指定せずにプレーンテキストによりパスワードを設定した場合は、ユーザーネームをソルトとして使用して MD5 ダイジェストの生成が行われます。

CREATEDB \$1 NOCREATEDB   
CREATEDB オプションを使用すると、新規ユーザーはデータベースを作成できます。デフォルトは NOCREATEDB です。

CREATEUSER \$1 NOCREATEUSER   
CREATEUSER オプションを使用すると、CREATE USER を含め、データベースに関するすべての権限を持つスーパーユーザーが作成されます。デフォルトは NOCREATEUSER です。詳細については、「[スーパーユーザー](r_superusers.md)」を参照してください。

SYSLOG ACCESS \$1 RESTRICTED \$1 UNRESTRICTED \$1  <a name="create-user-syslog-access"></a>
Amazon Redshift のシステムテーブルとビューに対するユーザーのアクセスレベルを指定する句です。  
SYSLOG ACCESS RESTRICTED アクセス許可を持つ通常のユーザーは、ユーザーが表示できるシステムテーブルとビューで自分が生成した行のみを表示できます。デフォルトは RESTRICTED です。  
SYSLOG ACCESS UNRESTRICTED アクセス許可を持つ通常のユーザーは、ユーザーが表示できるシステムテーブルとビューのすべての行 (別のユーザーが生成した行を含む) を表示できます。UNRESTRICTED を指定しても、スーパーユーザーが表示可能なテーブルへのアクセス権が、通常のユーザーに付与されるわけではありません。スーパーユーザーが表示可能なテーブルを表示できるのはスーパーユーザーだけです。  
システムテーブルに対する無制限のアクセス権限を付与されたユーザーは、別のユーザーが生成したデータへの可視性が提供されます。例えば、STL\$1QUERY と STL\$1QUERYTEXT には INSERT、UPDATE、および DELETE ステートメントのフルテキストが含まれており、ユーザーが生成した機密データがこれらに含まれている可能性があります。
SVV\$1TRANSACTIONS のすべての行は、すべてのユーザーが表示可能です。  
詳細については、「[システムテーブルとビューのデータの可視性](cm_chap_system-tables.md#c_visibility-of-data)」を参照してください。

IN GROUP *groupname*   
ユーザーが属する既存のグループ名を指定します。複数のグループ名を指定できます。

VALID UNTIL *abstime*   
VALID UNTIL オプションでは、ユーザーのパスワードが無効になるまでの絶対時間を設定します。デフォルトでは、パスワードには期限がありません。

CONNECTION LIMIT \$1 *limit* \$1 UNLIMITED \$1   
ユーザーが同時に開けるデータベース接続の最大数。この制限はスーパーユーザーには適用されません。同時接続の最大数を許可するには、UNLIMITED キーワードを使用します。データベースごとの接続数の制限が適用される場合もあります。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。デフォルトは UNLIMITED です。現在の接続を確認するには、[STV\$1SESSIONS](r_STV_SESSIONS.md)システムビューに対してクエリを実行します。  
ユーザーとデータベースの両方の接続制限が適用される場合は、ユーザーが接続しようとしたときに、両方の制限内に未使用の接続スロットがなければなりません。

SESSION TIMEOUT *limit*  
セッションが非アクティブまたはアイドル状態を維持する最大時間 (秒) です。指定できる範囲は 60 秒 (1 分) から 1,728,000 秒 (20 日) です。ユーザーに対しセッションタイムアウトが設定されていない場合は、クラスターの設定値が適用されます。詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift のクォータと制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)」を参照してください。  
設定されたセッションタイムアウトは、新しいセッションにのみ適用されます。  
開始時刻、ユーザー名、セッションタイムアウトなど、アクティブなユーザーセッションに関する情報を表示するには、[STV\$1SESSIONS](r_STV_SESSIONS.md)システムビューを参照します。ユーザーセッションの履歴に関する情報を表示するには、[STL\$1SESSIONS](r_STL_SESSIONS.md)ビューを参照します。セッションタイムアウト値など、データベースユーザーに関する情報を取得するには、[SVL\$1USER\$1INFO](r_SVL_USER_INFO.md)ビューを参照します。

EXTERNALID *external\$1id*  
ID プロバイダーに関連付けられているユーザーの識別子。ユーザーはパスワードを無効にする必要があります。詳細については、「[Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。

### 使用に関する注意事項
<a name="create_user-usage-notes"></a>

デフォルトでは、すべてのユーザーは PUBLIC スキーマに対して、CREATE 権限と USAGE 権限を所有しています。ユーザーがデータベースの PUBLIC スキーマにオブジェクトを作成できないようにするには、REVOKE コマンドを使用してその権限を削除します。

IAM 認証情報を使用してデータベースのユーザー認証情報を作成する場合、一時的認証情報を使用してのみログオンできるスーパーユーザーを作成することをお勧めします。スーパーユーザーのパスワードを無効にすることはできませんが、ランダムに生成された MD5 ハッシュ文字列を使って不明なパスワードを作成することはできます。

```
create user iam_superuser password 'md5A1234567890123456780123456789012' createuser;
```

二重引用符で囲まれた*ユーザーネーム*の大文字と小文字は、`enable_case_sensitive_identifier`設定オプションの設定にかかわらず、常に保持されます。詳細については、「[enable\$1case\$1sensitive\$1identifier](r_enable_case_sensitive_identifier.md)」を参照してください。

## 例
<a name="r_CREATE_USER-examples"></a>

次のコマンドでは、パスワード (abcD1234)、データベース作成権限、接続制限 (30) の dbuser という名前のユーザーを作成します。

```
create user dbuser with password 'abcD1234' createdb connection limit 30;
```

 PG\$1USER\$1INFO カタログテーブルに対してクエリを実行し、データベースユーザーに関する詳細を表示します。

```
select * from pg_user_info;
         
 usename   | usesysid | usecreatedb | usesuper | usecatupd | passwd   | valuntil | useconfig | useconnlimit
-----------+----------+-------------+----------+-----------+----------+----------+-----------+-------------
 rdsdb     |        1 | true        | true     | true      | ******** | infinity |           |
 adminuser |      100 | true        | true     | false     | ******** |          |           | UNLIMITED
 dbuser    |      102 | true        | false    | false     | ******** |          |           | 30
```

次の例では、アカウントのパスワードは 2017 年 6 月 10 日まで有効です。

```
create user dbuser with password 'abcD1234' valid until '2017-06-10';
```

 次の例では、特殊文字を含む、大文字と小文字が区別されるパスワードを持つユーザーを作成します。

```
create user newman with password '@AbC4321!';
```

 MD5 パスワードにバックスラッシュ (「\$1」) を使用するには、ソースとなる文字列のバックスラッシュをバックスラッシュでエスケープします。次の例では、`slashpass`という名前のユーザーを作成し、バックスラッシュ一つ ( '`\`') をパスワードとして使用しています。

```
select md5('\\'||'slashpass');
         
md5
--------------------------------
0c983d1a624280812631c5389e60d48c
```

md5 パスワードでユーザーを作成します。

```
create user slashpass password 'md50c983d1a624280812631c5389e60d48c';
```

次の例では、アイドルセッションのタイムアウトを 120 秒に設定しながら、`dbuser`という名前のユーザーを作成します。

```
CREATE USER dbuser password 'abcD1234' SESSION TIMEOUT 120;
```

次の例では、`bob` という名前のユーザーを作成します。名前空間は `myco_aad` です。これはサンプルのみです。コマンドを正常に実行するには、ID プロバイダーが登録されている必要があります。詳細については、「[Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。

```
CREATE USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

# CREATE VIEW
<a name="r_CREATE_VIEW"></a>

データベースにビューを作成します。このビューは物理的にマテリアライズされません。ビューを定義するクエリは、ビューがクエリで参照されるたびに実行されます。外部テーブルでビューを作成するには、WITH NO SCHEMA BINDING 句を含めます。

標準ビューを作成するには、基礎となるテーブルまたは基礎となるビューへのアクセスが必要です。標準ビューにクエリを実行するには、ビュー自体に対する選択のアクセス許可が必要ですが、基礎となるテーブルに対する選択のアクセス許可は必要ありません。別のスキーマのテーブルまたはビューを参照するビューを作成する場合や、マテリアライズドビューを参照するビューを作成する場合は、使用許可が必要です。遅延バインドビューにクエリを実行するには、遅延バインドビュー自体に対する選択のアクセス許可が必要です。また、遅延バインドビューの所有者が、参照先のオブジェクト (テーブル、ビュー、またはユーザー定義関数) に対する選択のアクセス許可を持っていることも確認します。遅延バインドビューの詳細については、「[使用に関する注意事項](#r_CREATE_VIEW_usage_notes)」を参照してください。

## 必要なアクセス許可
<a name="r_CREATE_VIEW-privileges"></a>

CREATE VIEW を使用するには、次のいずれかのアクセス許可が必要です。
+ CREATE [ OR REPLACE ] VIEW を使用してビューを作成するには
  + スーパーユーザー
  + CREATE [ REPLACE ] VIEW アクセス許可のあるユーザー
+ CREATE OR REPLACE VIEW を使用して既存のビューを置き換えるには
  + スーパーユーザー
  + CREATE [ OR REPLACE ] VIEW アクセス許可のあるユーザー
  + ビューの所有者

ユーザーがユーザー定義関数を組み込んだビューにアクセスしたい場合は、その関数に対する EXECUTE アクセス許可が必要です。

## 構文
<a name="r_CREATE_VIEW-synopsis"></a>

```
CREATE [ OR REPLACE ] VIEW name [ ( column_name [, ...] ) ] AS query
[ WITH NO SCHEMA BINDING ]
```

## パラメータ
<a name="r_CREATE_VIEW-parameters"></a>

OR REPLACE   
同じ名前のビューが既に存在する場合、ビューは置換されます。同じ列名をデータタイプを使用して同一の列セットを生成する新しいクエリでは、ビューの置換のみが可能です。CREATE OR REPLACE VIEW は、操作が完了するまで、読み書きのためにビューをロックします。  
ビューが置き換えられると、所有権や付与された権限などの他のプロパティが保持されます。

 *.name*   
ビューの名前。スキーマ名を指定すると (`myschema.myview` など)、指定したスキーマを使用してビューが作成されます。指定しない場合、現在のスキーマにビューが作成されます。ビュー名は、同じスキーマ内の他のビューやテーブルと異なる名前にする必要があります。  
「\$1」で始まるビュー名を指定したビューは、現在のセッションでのみ表示される一時ビューとして作成されます。  
有効な名前の詳細については、「[名前と識別子](r_names.md)」を参照してください。システムデータベース template0、template1、padb\$1harvest、または sys:internal にテーブルまたはビューを作成することはできません。

 *column\$1name*   
ビューの列に使用されるオプションの名前リスト。列名を指定しない場合、列名はクエリから取得されます。1 つの画面で定義できる列の最大数は 1,600 です。

 *query*()   
テーブルに評価されるクエリ (SELECT ステートメントのフォーム)。このテーブルでは、ビューの列と行を定義します。

 WITH NO SCHEMA BINDING   
テーブルやユーザー定義関数など、基盤となるデータベースオブジェクトにバインドされていないことを示す句。その結果、ビューと参照先のオブジェクト間には依存関係がありません。参照先のオブジェクトが存在しない場合でも、ビューを作成できます。依存関係がないため、ビューに影響を与えることなく参照先のオブジェクトを削除または変更できます。Amazon Redshift は、ビューがクエリされるまで依存関係をチェックしません。再帰的なテーブル共通式 (rCTE) は、遅延バインドビューではサポートされていません。遅延バインドビューの詳細を表示するには、[PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md) 関数を実行します。  
WITH NO SCHEMA BINDING 句を含める場合、SELECT ステートメントで参照されるテーブルとビューは、スキーマ名で修飾する必要があります。スキーマは、参照されるテーブルが存在しない場合でも、ビューを作成するときに存在している必要があります。例えば、次のステートメントはエラーを返します。  

```
create view myevent as select eventname from event
with no schema binding;
```
次のステートメントは正常に実行されます。  

```
create view myevent as select eventname from public.event
with no schema binding;
```

**注記**  
ビューの更新、ビューへの挿入、ビューからの削除を行うことはできません。

## 使用に関する注意事項
<a name="r_CREATE_VIEW_usage_notes"></a>



### 遅延バインドビュー
<a name="r_CREATE_VIEW_late-binding-views"></a>

遅延バインドビューは、ビューのクエリが行われるまで、基礎となるデータベースオブジェクト (テーブルや他のビュー) などをチェックしません。その結果、ビューを削除して再作成することなく、基礎となるオブジェクトを変更または削除できます。基礎となるオブジェクトを削除した場合、遅延バインドビューへのクエリは失敗します。遅延バインドビューへのクエリで、存在しない基盤となるオブジェクトの列を参照している場合、クエリは失敗します。

 遅延バインドビューの基礎となるテーブルまたはビューを削除し、再作成した場合、デフォルトのアクセス権限を持つ新しいオブジェクトが作成されます。ビューにクエリを実行するユーザー用に、基盤オブジェクトへのアクセス許可の付与が必要になる場合があります。

遅延バインドビューを作成するには、WITH NO SCHEMA BINDING 句を含めます。次の例では、スキーマバインドなしでビューを作成します。

```
create view event_vw as select * from public.event
with no schema binding;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | eventname     | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

次の例は、ビューを再作成せずに基礎となるテーブルを変更できることを示しています。

```
alter table event rename column eventname to title;
```

```
select * from event_vw limit 1;
            
eventid | venueid | catid | dateid | title         | starttime
--------+---------+-------+--------+---------------+--------------------
      2 |     306 |     8 |   2114 | Boris Godunov | 2008-10-15 20:00:00
```

遅延バインドビューでのみ Amazon Redshift Spectrum の外部テーブルを参照できます。遅延バインドビューの 1 つのアプリケーションは、Amazon Redshift と Redshift Spectrum テーブルの両方をクエリできます。例えば、[UNLOAD](r_UNLOAD.md) コマンドを使用して古いデータを Amazon S3 にアーカイブすることができます。次に、Amazon S3 のデータを参照する Redshift Spectrum 外部テーブルを作成し、両方のテーブルをクエリするビューを作成します。次の例では、UNION ALL 句を使用して、Amazon Redshift `SALES` テーブルと Redshift Spectrum `SPECTRUM.SALES` テーブルを結合します。

```
create view sales_vw as
select * from public.sales
union all
select * from spectrum.sales
with no schema binding;
```

`SPECTRUM.SALES` など、Redshift Spectrum 外部テーブルの作成の詳細については、[Amazon Redshift Spectrum の開始方法](c-getting-started-using-spectrum.md)参照してください。

**重要**  
遅延バインディングビューから標準ビューを作成すると、その標準ビューの定義には、作成時点における遅延バインディングビューの定義 (遅延バインディングビューの所有者など) が含まれます。基になる遅延バインディングビューに変更を加えても、標準ビューを再作成しない限り、その変更は標準ビューには反映されません。そのため、標準ビューに対してクエリを実行すると、常に、その標準ビューの作成時点の遅延バインディングビューの定義と所有者がアクセス許可の確認に使用されます。

遅延バインドビューの最新の定義を参照するように標準ビューを更新するには、標準ビューの作成に使用した最初のビュー定義で CREATE OR REPLACE VIEW を実行します。

次の例では、遅延バインドビューから標準ビューを作成します。

```
create view sales_vw_lbv as 
select * from public.sales 
with no schema binding;

show view sales_vw_lbv;
                            Show View DDL statement
--------------------------------------------------------------------------------
 create view sales_vw_lbv as select * from public.sales with no schema binding;
(1 row)

create view sales_vw as 
select * from sales_vw_lbv;

show view sales_vw;
                                               Show View DDL statement
---------------------------------------------------------------------------------------------------------------------
 SELECT sales_vw_lbv.price, sales_vw_lbv."region" FROM (SELECT sales.price, sales."region" FROM sales) sales_vw_lbv;
(1 row)
```

標準ビューの DDL ステートメントに示されている遅延バインドビューは、標準ビューの作成時に定義され、後で遅延バインドビューに変更を加えても更新されないことに注意してください。

## 例
<a name="r_CREATE_VIEW-examples"></a>

サンプルコマンドでは、*TICKIT* データベースと呼ばれるオブジェクトとデータのサンプルセットを使用しています。詳細については、「[サンプルデータベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)」を参照してください。

次のコマンドでは、EVENT というテーブルから *myevent* というビューを作成します。

```
create view myevent as select eventname from event
where eventname = 'LeAnn Rimes';
```

次のコマンドでは、USERS というテーブルから *myuser* というビューを作成します。

```
create view myuser as select lastname from users;
```

次のコマンドでは、USERS というテーブルから *myuser* というビューを作成または置換します。

```
create or replace view myuser as select lastname from users;
```

次の例では、スキーマバインドなしでビューを作成します。

```
create view myevent as select eventname from public.event
with no schema binding;
```

# DEALLOCATE
<a name="r_DEALLOCATE"></a>

準備済みステートメントの割り当てを解除します。

## 構文
<a name="r_DEALLOCATE-synopsis"></a>

```
DEALLOCATE [PREPARE] plan_name
```

## パラメータ
<a name="r_DEALLOCATE-parameters"></a>

PREPARE   
このキーワードはオプションであり、無視されます。

 *plan\$1name*   
割り当てを解除する準備済みステートメントの名前。

## 使用に関する注意事項
<a name="r_DEALLOCATE_usage_notes"></a>

DEALLOCATE は、以前に準備した SQL ステートメントの割り当てを解除するために使用されます。準備済みステートメントの割り当てを明示的に解除しない場合、現在のセッションの終了時に割り当てが解除されます。準備済みステートメントの詳細については、「[PREPARE](r_PREPARE.md)」を参照してください。

## 以下の資料も参照してください。
<a name="r_DEALLOCATE-see-also"></a>

 [EXECUTE](r_EXECUTE.md), [PREPARE](r_PREPARE.md) 

# DECLARE
<a name="declare"></a>

新しいカーソルを定義します。カーソルを使用して、大きなクエリセットの結果から、一度で数行を取得します。

カーソルの最初の行が取得されると、必要に応じて、結果セット全体がリーダーノード、メモリ内、またはディスク上にマテリアライズされます。大きな結果セットにカーソルを使用すると、パフォーマンスが低下する可能性があるため、可能な限り、別の方法を使用することをお勧めします。詳細については、「[カーソルを使用するときのパフォーマンスに関する考慮事項](#declare-performance)」を参照してください。

カーソルは、トランザクションブロック内で宣言する必要があります。1 つのセッションで、同時に開くことができるカーソルは 1 つのみです。

詳細については、「[FETCH](fetch.md)」、「[CLOSE](close.md)」を参照してください。

## 構文
<a name="declare-synopsis"></a>

```
DECLARE cursor_name CURSOR FOR query
```

## パラメータ
<a name="declare-parameters"></a>

*cursor\$1name*   
新しいカーソルの名前。

 *query*()   
カーソルを作成する SELECT ステートメント。

## DECLARE CURSOR の使用に関する注意事項
<a name="declare-usage"></a>

クライアントアプリケーションが ODBC 接続を使用し、クエリで作成される結果セットが大きすぎてメモリが足りなくなる場合、カーソルを使用して、結果セットをクライアントアプリケーションに渡すことができます。カーソルを使用すると、結果セット全体がリーダーノードでマテリアライズされ、クライアントが少しずつ結果を取得できるようになります。

**注記**  
ODBC for Microsoft Windows でカーソルを有効にするには、Amazon Redshift で使用する ODBC DSN で [**Use Declare/Fetch (宣言/フェッチを使用)**] オプションを有効にします。マルチノードクラスターでは、ラウンドトリップを最小限に抑えるために、ODBC キャッシュサイズを設定し、ODBC DSN オプションダイアログの [**Cache Size (キャッシュサイズ)**] フィールドを 4,000 以上に設定することをお勧めします。単一ノードクラスターでは、キャッシュサイズを 1,000 に設定します。

カーソルを使用すると、パフォーマンスが低下する可能性があるため、可能な限り、別の方法を使用することをお勧めします。詳細については、「[カーソルを使用するときのパフォーマンスに関する考慮事項](#declare-performance)」を参照してください。

Amazon Redshift のカーソルは、次の制限付きでサポートされています。
+ 1 つのセッションで、同時に開くことができるカーソルは 1 つのみです。
+ カーソルはトランザクション内 (BEGIN ... END) で使用する必要があります。
+ すべてのカーソルの累積結果セットの最大サイズは、クラスターノードタイプに基づいて制限されます。より大きな結果セットが必要な場合は、XL または 8XL ノード構成にサイズ変更できます。

  詳細については、「[カーソルの制約](#declare-constraints)」を参照してください。

## カーソルの制約
<a name="declare-constraints"></a>

カーソルの最初の行が取得されると、結果セット全体がリーダーノードにマテリアライズされます。結果セットをメモリに格納できない場合、必要に応じてディスクに書き込まれます。リーダーノードの整合性を保護するために、Amazon Redshift はクラスターのノードタイプに基づいてすべてのカーソルの結果セットのサイズに制約を適用します。

次の表に、各タイプのクラスターノードの結果セットの最大合計サイズを示します。結果セットの最大サイズの単位は、メガバイトです。


| ノードの種類 | クラスターあたりの最大結果セット (MB) | 
| --- | --- | 
|   DC2 Large 複数ノード   | 192,000 | 
|   DC2 Large 単一ノード   | 8,000 | 
|   DC2 8XL 複数ノード   | 3,200,000 | 
|   RA3 16XL 複数ノード   | 14,400,000 | 
|   RA3 4XL 複数ノード   | 3,200,000 | 
|   RA3 XLPLUS 複数ノード   | 1,000,000 | 
|   RA3 XLPLUS シングルノード   | 64,000 | 
|   RA3 LARGE 複数ノード   | 240,000 | 
|   RA3 LARGE 単一ノード   | 8,000 | 
| Amazon Redshift Serverless | 150,000 | 

クラスターのアクティブなカーソル設定を表示するには、スーパーユーザー権限で [STV\$1CURSOR\$1CONFIGURATION](r_STV_CURSOR_CONFIGURATION.md) システムテーブルに対してクエリを実行します。アクティブなカーソルの状態を表示するには、[STV\$1ACTIVE\$1CURSORS](r_STV_ACTIVE_CURSORS.md)システムテーブルに対してクエリを実行します。ユーザーは自分のカーソルの行のみを表示できますが、スーパーユーザーはすべてのカーソルを表示できます。

## カーソルを使用するときのパフォーマンスに関する考慮事項
<a name="declare-performance"></a>

カーソルによって結果セット全体がリーダーノードでマテリアライズされてから、結果をクライアントに返す処理が始まるため、非常に大きな結果セットにカーソルを使用すると、パフォーマンスが低下する可能性があります。非常に大きな結果セットには、カーソルを使用しないことを強くお勧めします。アプリケーションが ODBC 接続を使用する場合など、状況によっては、カーソルのみが実行可能な解決策の場合があります。ただし、可能な限り、次の代替方法を使用することをお勧めします。
+ [UNLOAD](r_UNLOAD.md) を使用して大きなテーブルをエクスポートします。UNLOAD を使用すると、複数のコンピューティングノードが同時に機能し、Amazon Simple Storage Service のデータファイルに直接データを転送します。詳細については、「[Amazon Redshift でのデータのアンロード](c_unloading_data.md)」を参照してください。
+ クライアントアプリケーションで JDBC の fetch size パラメータを設定します。JDBC 接続を使用し、クライアント側のメモリ不足エラーが発生する場合、JDBC の fetch size パラメータを設定することで、ユーザーが少量の結果セットを取得するように指定できます。詳細については、「[JDBC フェッチサイズパラメータの設定](set-the-JDBC-fetch-size-parameter.md)」を参照してください。

## DECLARE CURSOR の例
<a name="declare-example"></a>

次の例では、LOLLAPALOOZA というカーソルを宣言し、Lollapalooza イベントの売り上げ情報を選択した後、カーソルを使用して結果セットから行を取得します。

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

次の例では、テーブルのすべての結果を refcursor でループ処理しています。

```
CREATE TABLE tbl_1 (a int, b int);
INSERT INTO tbl_1 values (1, 2),(3, 4);

CREATE OR REPLACE PROCEDURE sp_cursor_loop() AS $$
DECLARE
    target record;
    curs1 cursor for select * from tbl_1;
BEGIN
    OPEN curs1;
    LOOP
        fetch curs1 into target;
        exit when not found;
        RAISE INFO 'a %', target.a;
    END LOOP;
    CLOSE curs1;
END;
$$ LANGUAGE plpgsql;

CALL sp_cursor_loop();
         
SELECT message 
   from svl_stored_proc_messages 
   where querytxt like 'CALL sp_cursor_loop()%';
         
  message
----------
      a 1
      a 3
```

# DELETE
<a name="r_DELETE"></a>

テーブルから行を削除します。

**注記**  
単一 SQL ステートメントの最大サイズは 16 MB です。

## 構文
<a name="r_DELETE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
DELETE [ FROM ] { table_name | materialized_view_name }
    [ { USING } table_name, ... ]
    [ WHERE condition ]
```

## パラメータ
<a name="r_DELETE-parameters"></a>

WITH 句  
1 つ以上の *common-table-expressions* を指定する任意の句。「[WITH 句](r_WITH_clause.md)」を参照してください。

FROM  
FROM キーワードは、USING 句が指定されている場合を除き、オプションです。ステートメント `delete from event;` と `delete event;` は、EVENT テーブルからすべての行を削除する操作と同じです。  
テーブルからすべての行を削除するには、テーブルに対して [TRUNCATE](r_TRUNCATE.md) を実行します。TRUNCATE は DELETE よりもはるかに効率的であり、VACUUM および ANALYZE を必要としません。ただし、TRUNCATE では、その操作を実行するトランザクションがコミットされることに注意してください。

 *table\$1name*   
一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルで DELETE 権限を持つユーザーのみが、テーブルから行を削除できます。  
大きなテーブルで制限のない削除操作を実行するには、TRUNCATE コマンドを使用します。「[TRUNCATE](r_TRUNCATE.md)」を参照してください。  
テーブルから多数の行を削除した後:  
+ ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
+ テーブルを分析して、クエリプランナーの統計情報を更新します。

 *materialized\$1view\$1name*   
マテリアライズドビュー。DELETE ステートメントは、[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)に使用されるマテリアライズドビューで機能します。マテリアライズドビューの所有者またはマテリアライズドビューに対する DELETE 権限を持つユーザーのみが、マテリアライズドビューから行を削除できます。  
ユーザーに IGNORE RLS 権限が付与されていない行レベルセキュリティ (RLS) ポリシーでは、ストリーミング取り込みに使用されるマテリアライズドビューで DELETE を実行することはできません。ただし、例外として、DELETE を実行するユーザーに IGNORE RLS が付与されていれば、DELETE は正常に実行されます。詳細については、「[RLS ポリシーの所有権と管理](https://docs.aws.amazon.com/redshift/latest/dg/t_rls_ownership.html)」を参照してください。

USING *table\$1name*, ..。  
USING キーワードは、WHERE 句の条件で追加のテーブルを参照するときに、テーブルリストを導入するために使用されます。例えば、次のステートメントでは、EVENT テーブルと SALES テーブルに対する結合条件を満たす EVENT テーブルから、すべての行を削除します。FROM リストで、SALES テーブル名を明示的に指定する必要があります。  

```
delete from event using sales where event.eventid=sales.eventid;
```
USING 句でターゲットテーブル名を繰り返すと、DELETE 操作が自己結合を実行します。USING 構文で同じクエリを書く代わりに、WHERE 句でサブクエリを使用することもできます。

WHERE *condition*   
削除対象を、条件を満たす行に制限するオプションの句。例えば、列に対する制限条件、結合条件、クエリ結果に基づく条件などがあります。クエリでは、DELETE コマンドのターゲットではないテーブルを参照できます。次に例を示します。  

```
delete from t1
where col1 in(select col2 from t2);
```
条件を指定しない場合、テーブルのすべての行が削除されます。

## 使用に関する注意事項
<a name="r_DELETE-usage"></a>
+ DELETE オペレーションは、次のいずれかに接続された Amazon Redshift ストリーミングマテリアライズドビューで実行されると、排他的ロックを保持します。
  +  1 つの Amazon Kinesis Data Streams 
  +  1 つの Amazon Managed Streaming for Apache Kafka トピック 
  +  Confluent Cloud Kafka トピックなど、サポートされている外部ストリーム 

  詳細については、「[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)」を参照してください。

## 例
<a name="r_DELETE-examples"></a>

CATEGORY テーブルからすべての行を削除します。

```
delete from category;
```

CATEGORY テーブルから CATID 値が 0～9 の行を削除します。

```
delete from category
where catid between 0 and 9;
```

LISTING テーブルから、SELLERID 値が SALES テーブルに存在しない行を削除します。

```
delete from listing
where listing.sellerid not in(select sales.sellerid from sales);
```

次の 2 つのクエリはいずれも、EVENT テーブルへの結合と CATID に対する追加の制限に基づいて、CATEGORY テーブルから 1 行を削除します。

```
delete from category
using event
where event.catid=category.catid and category.catid=9;
```

```
delete from category
where catid in
(select category.catid from category, event
where category.catid=event.catid and category.catid=9);
```

次のクエリは、`mv_cities` マテリアライズドビューからすべての行を削除します。この例で使用しているマテリアライズドビュー名はサンプルです。

```
delete from mv_cities;
```

# DESC DATASHARE
<a name="r_DESC_DATASHARE"></a>

ALTER DATASHARE を使用して追加されたデータ共有内にあるデータベースオブジェクトのリストを表示します。Amazon Redshift には、名前、データベース、スキーマ、テーブル、ビュー、関数のタイプが表示されます。

データ共有オブジェクトに関する追加情報は、システムビューを使用して確認できます。詳細については、「[SVV\$1DATASHARE\$1OBJECTS](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARE_OBJECTS.html)」および「[SVV\$1DATASHARES](https://docs.aws.amazon.com/redshift/latest/dg/r_SVV_DATASHARES.html)」を参照してください。

## 構文
<a name="r_DESC_DATASHARE-synopsis"></a>

```
DESC DATASHARE datashare_name [ OF [ ACCOUNT account_id ] NAMESPACE namespace_guid ]
```

## パラメータ
<a name="r_DESC_DATASHARE-parameters"></a>

 *datashare\$1name*   
データ共有の名前。

NAMESPACE *namespace\$1guid*   
データ共有が使用する名前空間を指定する値。DESC DATAHSARE をコンシューマークラスターの管理者として実行する場合は、NAMESPACE パラメータを指定して、インバウンドのデータ共有を表示します。

ACCOUNT *account\$1id*  
データ共有が属しているアカウントを指定する値。

## 使用に関する注意事項
<a name="r_DESC_DATASHARE-usage"></a>

コンシューマーマアカウントの管理者として、DESC DATASHARE を実行して AWS アカウント内でインバウンドのデータ共有を確認する場合は、NAMESPACE オプションを指定します。DESC DATASHARE を実行して AWS アカウント全体でインバウンドのデータ共有を確認する場合は、ACCOUNT オプションと NAMESPACE オプションを指定します。

## 例
<a name="r_DESC_DATASHARE-examples"></a>

次の例では、プロデューサクラスターのアウトバウンドデータ共有の情報を表示します。

```
DESC DATASHARE salesshare;

producer_account |          producer_namespace           | share_type  | share_name   | object_type |        object_name           |  include_new
-----------------+---------------------------------------+-------------+--------------+-------------+------------------------------+--------------
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | TABLE       | public.tickit_sales_redshift |
 123456789012    | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d  | OUTBOUND    |  salesshare  | SCHEMA      | public                       |   t
```

次の例では、コンシューマークラスターのインバウンドデータ共有の情報を表示します。

```
DESC DATASHARE salesshare of ACCOUNT '123456789012' NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

 producer_account |          producer_namespace          | share_type | share_name | object_type |         object_name          |  include_new
------------------+--------------------------------------+------------+------------+-------------+------------------------------+--------------
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | table       | public.tickit_sales_redshift |
 123456789012     | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND    | salesshare | schema      | public                       |
(2 rows)
```

# DESC ID プロバイダー
<a name="r_DESC_IDENTITY_PROVIDER"></a>

ID プロバイダーに関する情報を表示します。スーパーユーザーのみが ID プロバイダーを記述できます。

## 構文
<a name="r_DESC_IDENTITY_PROVIDER-synopsis"></a>

```
DESC IDENTITY PROVIDER identity_provider_name
```

## パラメータ
<a name="r_DESC_IDENTITY_PROVIDER-parameters"></a>

 *identity\$1provider\$1name*   
ID プロバイダーの名前。

## 例
<a name="r_DESC_IDENTITY_PROVIDER-examples"></a>

以下の例では、ID プロバイダーに関する情報を表示します。

```
DESC IDENTITY PROVIDER azure_idp;
```

サンプル出力。

```
  uid   |   name    | type  |              instanceid              | namespc |                                                                                                                                                 params                                                                                                                                                  | enabled
--------+-----------+-------+--------------------------------------+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------
 126692 | azure_idp | azure | e40d4bb2-7670-44ae-bfb8-5db013221d73 | aad     | {"issuer":"https://login.microsoftonline.com/e40d4bb2-7670-44ae-bfb8-5db013221d73/v2.0", "client_id":"871c010f-5e61-4fb1-83ac-98610a7e9110", "client_secret":'', "audience":["https://analysis.windows.net/powerbi/connector/AmazonRedshift", "https://analysis.windows.net/powerbi/connector/AWSRDS"]} | t
(1 row)
```

# DETACH MASKING POLICY
<a name="r_DETACH_MASKING_POLICY"></a>

既にアタッチされている動的データマスキングポリシーを列からデタッチします。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールは、マスキングポリシーをデタッチできます。

## 構文
<a name="r_DETACH_MASKING_POLICY-synopsis"></a>

```
DETACH MASKING POLICY
{
  policy_name ON table_name
  | database_name.policy_name ON database_name.schema_name.table_name
}
( output_column_names )
FROM { user_name | ROLE role_name | PUBLIC };
```

## パラメータ
<a name="r_DETACH_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
デタッチするマスキングポリシーの名前。

database\$1name  
ポリシーとリレーションが作成されるデータベースの名前。ポリシーとリレーションは同じデータベースに存在する必要があります。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

schema\$1name  
リレーションが属するスキーマの名前。

 *table\$1name*   
マスキングポリシーをデタッチするテーブルの名前。

*output\$1column\$1names*   
マスキングポリシーがアタッチされた列の名前。

*user\$1name*   
マスキングポリシーがアタッチしされたユーザーの名前。  
1 回の DETACH MASKING POLICY ステートメントで設定できるのは、user\$1name、role\$1name、PUBLIC のいずれか 1 つのみです。

*role\$1name*   
マスキングポリシーがアタッチされたロールの名前。  
1 回の DETACH MASKING POLICY ステートメントで設定できるのは、user\$1name、role\$1name、PUBLIC のいずれか 1 つのみです。

*PUBLIC*   
ポリシーがテーブル内のすべてのユーザーにアタッチされたことを示します。  
1 回の DETACH MASKING POLICY ステートメントで設定できるのは、user\$1name、role\$1name、PUBLIC のいずれか 1 つのみです。

Amazon Redshift フェデレーティッドアクセス許可カタログでの DETACH MASKING POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

# DETACH RLS POLICY
<a name="r_DETACH_RLS_POLICY"></a>

テーブルの行レベルのセキュリティポリシーをテーブルで 1 つ以上のユーザーまたはロールからデタッチします。

スーパーユーザーとユーザー、または `sys:secadmin` ロールを持つロールはポリシーをデタッチできます。

## 構文
<a name="r_DETACH_RLS_POLICY-synopsis"></a>

```
DETACH RLS POLICY
{
  policy_name ON [TABLE] table_name [, ...]
  | database_name.policy_name ON [TABLE] database_name.schema_name.table_name [, ...]
}
FROM { user_name | ROLE role_name | PUBLIC } [, ...];
```

## パラメータ
<a name="r_DETACH_RLS_POLICY-parameters"></a>

 *policy\$1name*   
ポリシーの名前。

database\$1name  
ポリシーとリレーションが作成されるデータベースの名前。ポリシーとリレーションは同じデータベースに存在する必要があります。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

schema\$1name  
リレーションが属するスキーマの名前。

table\$1name  
行レベルのセキュリティポリシーがアタッチされているリレーション。

FROM \$1 *user\$1name* \$1 ROLE *role\$1name* \$1 PUBLIC\$1 [, ...]  
ポリシーを指定した 1 つ以上のユーザーまたはロールからデタッチするかどうか指定します。

Amazon Redshift フェデレーティッドアクセス許可カタログでの DETACH RLS POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

## 使用に関する注意事項
<a name="r_DETACH_RLS_POLICY-usage"></a>

DETACH RLS POLICY ステートメントを使用するとき、次の点に注意してください。
+ ポリシーを、関係、ユーザー、ロール、パブリックからデタッチできます。

## 例
<a name="r_DETACH_RLS_POLICY-examples"></a>

次の例では、ロールからテーブルのポリシーをデタッチします。

```
DETACH RLS POLICY policy_concerts ON tickit_category_redshift FROM ROLE analyst, ROLE dbadmin;
```

# DROP DATABASE
<a name="r_DROP_DATABASE"></a>

データベースを削除します。

トランザクションブロック (BEGIN ... END) 内で DROP DATABASE を実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

## 構文
<a name="r_DROP_DATABASE-synopsis"></a>

```
DROP DATABASE database_name [ FORCE ]
```

## パラメータ
<a name="r_DROP_DATABASE-parameters"></a>

 *database\$1name*   
削除するデータベースの名前。dev、padb\$1harvest、template0、template1、sys:internal の各データベースを削除することはできません。また、現在のデータベースも削除できません。  
外部データベースを削除するには、外部スキーマを削除します。詳細については、「[DROP SCHEMA](r_DROP_SCHEMA.md)」を参照してください。

 FORCE   
FORCE を指定すると、DROP DATABASE はデータベースを削除する前にアクティブな接続の終了を試みます。すべてのアクティブな接続がタイムアウト内に正常に終了すると、削除が進行します。すべての接続が終了しない場合、コマンドはエラーをスローします。

## DROP DATABASE 使用に関する注意事項
<a name="r_DROP_DATABASE_usage"></a>

DROP DATABASE ステートメントを使用する際には、次の点を考慮してください。
+ 一般的に、AWS Data Exchangeデータ共有が含まれるデータベースを DROP DATABASE ステートメントを使用してドロップすることはお勧めしません。この操作を行うと、データ共有に対する AWS アカウント のアクセス権が失われます。このタイプの変更を実行すると、AWS Data Exchangeのデータ製品での使用条件に違反する可能性があります。

  次に、AWS Data Exchangeデータ共有を含むデータベースが削除された場合に発生するエラーの例を示します。

  ```
  DROP DATABASE test_db;
  ERROR:   Drop of database test_db that contains ADX-managed datashare(s) requires session variable datashare_break_glass_session_var to be set to value 'ce8d280c10ad41'
  ```

  データベースの削除を許可するには、次の変数を設定した後に、DROP DATABASE 文を再度実行します。

  ```
  SET datashare_break_glass_session_var to 'ce8d280c10ad41';
  ```

  ```
  DROP DATABASE test_db;
  ```

  この場合、Amazon Redshift は 1 回限り有効なランダム値を生成し、この値によりセッション変数の設定を行うことで、AWS Data Exchangeデータ共有を含むデータベースでの DROP DATABASE の使用を許可します。

## 例
<a name="r_DROP_DATABASE-examples"></a>

次の例では、TICKIT\$1TEST という名前のデータベースを削除します。

```
drop database tickit_test;
```

# DROP DATASHARE
<a name="r_DROP_DATASHARE"></a>

データ共有を削除します。このコマンドを元に戻すことはできません。

データ共有を削除できるのは、スーパーユーザーまたはデータ共有の所有者だけです。

## 必要な権限
<a name="r_DROP_DATASHARE-privileges"></a>

DROP DATASHAREに必要な権限を以下に示します。
+ スーパーユーザー
+ DROP DATASHARE の権限を持つユーザー
+ データ共有の所有者

## 構文
<a name="r_DROP_DATASHARE-synopsis"></a>

```
DROP DATASHARE datashare_name;
```

## パラメータ
<a name="r_DROP_DATASHARE-parameters"></a>

 *datashare\$1name*   
削除するデータ共有の名前。

## DROP DATASHARE の使用に関する注意事項
<a name="r_DROP_DATASHARE_usage"></a>

DROP DATASHARE ステートメントを使用する際には、次の点を考慮してください。
+ 一般的に、AWS Data Exchangeデータ共有を DROP DATASHARE ステートメントを使用してドロップすることはお勧めしません。この操作を行うと、データ共有に対する AWS アカウント のアクセス権が失われます。このタイプの変更を実行すると、AWS Data Exchangeのデータ製品での使用条件に違反する可能性があります。

  次に、AWS Data Exchangeデータ共有を削除した際に発生するエラーの例を示します。

  ```
  DROP DATASHARE salesshare;
  ERROR:  Drop of ADX-managed datashare salesshare requires session variable datashare_break_glass_session_var to be set to value '620c871f890c49'
  ```

  AWS Data Exchange データ共有の削除を許可するには、次の変数を設定した後、DROP DATASHARE ステートメントを再度実行します。

  ```
  SET datashare_break_glass_session_var to '620c871f890c49';
  ```

  ```
  DROP DATASHARE salesshare;
  ```

  この場合、Amazon Redshift は 1 回限り有効なランダム値を生成し、この値でセッション変数を設定することで、AWS Data Exchangeデータ共有での DROP DATASHARE 使用を許可します。

## 例
<a name="r_DROP_DATASHARE-examples"></a>

次の例では、`salesshare`という名前のデータ共有を削除します。

```
DROP DATASHARE salesshare;
```

# DROP EXTERNAL VIEW
<a name="r_DROP_EXTERNAL_VIEW"></a>

データベースから外部ビューを削除します。外部ビューを削除すると、そのビューが関連付けられているすべての SQL エンジン (Amazon Athena や Amazon EMR Spark など) からそのビューが削除されます。このコマンドを元に戻すことはできません。Data Catalog ビューの詳細については、「[AWS Glue Data Catalog のビュー](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)」を参照してください。

## 構文
<a name="r_DROP_EXTERNAL_VIEW-synopsis"></a>

```
DROP EXTERNAL VIEW schema_name.view_name [ IF EXISTS ]
{catalog_name.schema_name.view_name | awsdatacatalog.dbname.view_name | external_schema_name.view_name}
```

## パラメータ
<a name="r_DROP_EXTERNAL_VIEW-parameters"></a>

 *schema\$1name.view\$1name*   
AWS Glue データベースにアタッチされているスキーマ。その後にビューの名前が続きます。

IF EXISTS  
ビューが存在する場合にのみ、ビューを削除します。

catalog\$1name.schema\$1name.view\$1name \$1 awsdatacatalog.dbname.view\$1name \$1 external\$1schema\$1name.view\$1name  
ビューを削除するときに使用するスキーマの表記法。AWS Glue Data Catalog、作成した Glue データベース、または作成した外部スキーマを使用するように指定できます。詳細については、「[CREATE DATABASE](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_DATABASE.html)」と「[CREATE EXTERNAL SCHEMA ](https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)」を参照してください。

 *query\$1definition*   
Amazon Redshift がビューを変更するために実行する SQL クエリの定義。

## 例
<a name="r_DROP_EXTERNAL_VIEW-examples"></a>

次の例では、sample\$1schema.glue\$1data\$1catalog\$1view という名前のデータカタログビューを削除します。

```
DROP EXTERNAL VIEW sample_schema.glue_data_catalog_view IF EXISTS
```

# DROP FUNCTION
<a name="r_DROP_FUNCTION"></a>

データベースからユーザー定義関数 (UDF) を削除します。複数の関数が同じ名前でありながら異なる署名を持つことがあるため、関数の署名またはデータタイプの引数のリストを指定する必要があります。Amazon Redshift ビルトイン関数は削除できません。

このコマンドを元に戻すことはできません。

## 必要な権限
<a name="r_DROP_FUNCTION-privileges"></a>

以下に、DROP FUNCTION に必要な権限を示します。
+ スーパーユーザー
+ DROP FUNCTION の権限を持つユーザー
+ 関数の所有者

## 構文
<a name="r_DROP_FUNCTION-synopsis"></a>

```
DROP FUNCTION name
( [arg_name] arg_type   [, ...] )
[ CASCADE | RESTRICT ]
```

## パラメータ
<a name="r_DROP_FUNCTION-parameters"></a>

 *.name*   
削除する関数の名前。

 *arg\$1name*   
入力引数の名前。引数データタイプのみが関数の識別を決定するために必要となるため、DROP FUNCTION は引数名を無視します。

 *arg\$1type*   
入力引数のデータタイプ。最大 32 までのデータタイプのカンマ区切りリストを指定できます。

 CASCADE   
ビューなど、関数に依存するオブジェクトを自動的に削除することを指定するキーワード。  
関数に依存しないビューを作成するには、ビュー定義に WITH NO SCHEMA BINDING 句を含めます。詳細については、「[CREATE VIEW](r_CREATE_VIEW.md)」を参照してください。

 RESTRICT   
関数に依存するオブジェクトが、その関数を削除せず、メッセージを返すように指定するキーワード。この動作がデフォルトです。

## 例
<a name="r_DROP_FUNCTION-examples"></a>

次の例では、`f_sqrt`名の関数を削除します。

```
drop function f_sqrt(int);
```

依存性がある関数を削除するためには、次の例に示すように、CASCADE オプションを使用します。

```
drop function f_sqrt(int)cascade;
```

# DROP GROUP
<a name="r_DROP_GROUP"></a>

ユーザーグループを削除します。このコマンドを元に戻すことはできません。このコマンドでは、グループ内の個々のユーザーは削除されません。

個々のユーザーの削除については、DROP USER を参照してください。

## 構文
<a name="r_DROP_GROUP-synopsis"></a>

```
DROP GROUP name
```

## パラメータ
<a name="r_DROP_GROUP-parameter"></a>

 *.name*   
削除するユーザーグループの名前。

## 例
<a name="r_DROP_GROUP-example"></a>

次の例では、`guests` ユーザーグループを削除します。

```
DROP GROUP guests;
```

グループがオブジェクトに対して特権を持っている場合、そのグループを削除することはできません。このようなグループを削除しようとすると、以下のエラーが発生します。

```
ERROR: group "guests" can't be dropped because the group has a privilege on some object
```

グループが特定のオブジェクトに対して特権を持っている場合、グループを削除する前に、その特権を削除する必要があります。`guests` グループが権限を持っているオブジェクトを見つけるには、次の例を使用します。この例で使用されているメタデータビューの詳細については、「[SVV\$1RELATION\$1PRIVILEGES](https://docs.aws.amazon.com//redshift/latest/dg/r_SVV_RELATION_PRIVILEGES.html)」を参照してください。

```
SELECT DISTINCT namespace_name, relation_name, identity_name, identity_type 
FROM svv_relation_privileges
WHERE identity_type='group' AND identity_name='guests';

+----------------+---------------+---------------+---------------+
| namespace_name | relation_name | identity_name | identity_type |
+----------------+---------------+---------------+---------------+
| public         | table1        | guests        | group         |
+----------------+---------------+---------------+---------------+
| public         | table2        | guests        | group         |
+----------------+---------------+---------------+---------------+
```

次の例は、`public`ユーザーグループから `guests` スキーマ内のすべてのテーブルに対するすべての特権を削除してから、グループを削除します。

```
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM GROUP guests;
DROP GROUP guests;
```

# DROP ID プロバイダー
<a name="r_DROP_IDENTITY_PROVIDER"></a>

ID プロバイダーを削除する。このコマンドを元に戻すことはできません。スーパーユーザーのみが ID プロバイダーを削除できます。

## 構文
<a name="r_DROP_IDENTITY_PROVIDER-synopsis"></a>

```
DROP IDENTITY PROVIDER identity_provider_name [ CASCADE ]
```

## パラメータ
<a name="r_DROP_IDENTITY_PROVIDER-parameter"></a>

 *identity\$1provider\$1name*   
削除する ID プロバイダーの名前。

 CASCADE   
削除すると、ID プロバイダーにアタッチされているユーザーおよびロールを削除されます。

## 例
<a name="r_DROP_IDENTITY_PROVIDER-example"></a>

次の例では、*oauth\$1provider* ID プロバイダーを削除します。

```
DROP IDENTITY PROVIDER oauth_provider;
```

ID プロバイダーを削除すると、一部のユーザーはログインできないか、ID プロバイダーを使用するように構成されたクライアントツールを使用できない場合があります。

# DROP LIBRARY
<a name="r_DROP_LIBRARY"></a>

データベースからカスタム Python ライブラリを削除します。ライブラリの所有者またはスーパーユーザーのみがライブラリを削除できます。

DROP LIBRARY は、トランザクションブロック内で実行することはできません (BEGIN… END)。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

このコマンドを元に戻すことはできません。DROP LIBRARY コマンドは、即座にコミットします。ライブラリに依存する UDF が同時に実行されている場合、UDF がトランザクション内で実行されていても、UDF は失敗する場合があります。

詳細については、「[ライブラリを作成する](r_CREATE_LIBRARY.md)」を参照してください。

## 必要な権限
<a name="r_DROP_LIBRARY-privileges"></a>

以下に、DROP LIBRARY に必要な権限を示します。
+ スーパーユーザー
+ DROP LIBRARY の権限を持つユーザー
+ ライブラリの所有者

## 構文
<a name="r_DROP_LIBRARY-synopsis"></a>

```
DROP LIBRARY library_name
```

## パラメータ
<a name="r_DROP_LIBRARY-parameters"></a>

 *library\$1name*   
ライブラリの名前。

# DROP MASKING POLICY
<a name="r_DROP_MASKING_POLICY"></a>

すべてのデータベースから動的データマスキングポリシーを削除します。1 つ以上のテーブルにアタッチされているマスキングポリシーを削除することはできません。動的データマスキングの詳細については、「[動的データマスキング](t_ddm.md)」を参照してください。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールは、マスキングポリシーを削除できます。

## 構文
<a name="r_DROP_MASKING_POLICY-synopsis"></a>

```
DROP MASKING POLICY { policy_name | database_name.policy_name };
```

## パラメータ
<a name="r_DROP_MASKING_POLICY-parameters"></a>

 *policy\$1name*   
削除するマスキングポリシーの名前。

database\$1name  
ポリシーを削除するデータベースの名前。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

Amazon Redshift フェデレーティッドアクセス許可カタログでの DROP MASKING POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

# DROP MODEL
<a name="r_DROP_MODEL"></a>

データベースからモデルを削除します。モデルの所有者またはスーパーユーザーのみがモデルを削除できます。

DROP MODEL は、このモデルから派生したすべての関連する予測関数、モデルに関連するすべての Amazon Redshift アーティファクト、およびモデルに関連するすべての Amazon S3 データも削除します。モデルが Amazon SageMaker AI でトレーニングを受けている間、DROP MODEL はこれらのオペレーションをキャンセルします。

このコマンドを元に戻すことはできません。DROP MODEL コマンドは、即座にコミットします。

## 必要なアクセス許可
<a name="r_DROP_MODEL-privileges"></a>

DROP MODEL に必要なアクセス許可を以下に示します。
+ スーパーユーザー
+ DROP MODEL のアクセス許可を持つユーザー
+ モデルの所有者
+ スキーマの所有者

## 構文
<a name="r_DROP_MODEL-synopsis"></a>

```
DROP MODEL [ IF EXISTS ] model_name
```

## パラメータ
<a name="r_DROP_MODEL-parameters"></a>

 *IF EXISTS*   
指定されたスキーマが既に存在する場合、コマンドは何も変更しないで、スキーマが存在するというメッセージを返す必要があることを示す句。

 *model\$1name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

## 例
<a name="r_DROP_MODEL-examples"></a>

次の例では、モデル demo\$1ml.customer\$1churn を削除します。

```
DROP MODEL demo_ml.customer_churn
```

# DROP MATERIALIZED VIEW
<a name="materialized-view-drop-sql-command"></a>

マテリアライズドビューを削除します。

マテリアライズドビューの詳細については、「[Amazon Redshift でのマテリアライズドビュー](materialized-view-overview.md)」を参照してください。

## 構文
<a name="mv_DROP_MATERIALIZED_VIEW-synopsis"></a>

```
DROP MATERIALIZED VIEW [ IF EXISTS ] mv_name [, ... ] [ CASCADE | RESTRICT ]
```

## パラメータ
<a name="mv_DROP_MATERIALIZED_VIEW-parameters"></a>

IF EXISTS  
名前付きマテリアライズドビューが存在するかどうかをチェックすることを指定する句。マテリアライズドビューが存在しない場合、`DROP MATERIALIZED VIEW`コマンドは、エラーメッセージを返します。この句は、スクリプトの記述中に、存在しないマテリアライズドビューを削除した場合にスクリプトが失敗しないようにするために有用です。

*mv\$1name*  
削除するマテリアライズドビューの名前。

CASCADE  
その他のビューなど、マテリアライズドビューが依存するオブジェクトを自動的に削除することを示す句。

RESTRICT  
ビューに依存するオブジェクトがある場合、マテリアライズドビューを削除しないことを示す句。これがデフォルトです。

## 使用に関する注意事項
<a name="mv_DROP_MATERIALIZED_VIEW-usage"></a>

マテリアライズドビューの所有者だけが、そのビューで `DROP MATERIALIZED VIEW` を使用できます。スーパーユーザーや DROP 権限を特別に付与されたユーザーはこの例外となる場合があります。

マテリアライズドビューの drop ステートメントを記述し、一致する名前のビューが存在すると、DROP VIEW を使用するように指示するエラーが発生します。`DROP MATERIALIZED VIEW IF EXISTS` を使用する場合でもエラーが発生します。

## 例
<a name="mv_DROP_MATERIALIZED_VIEW-examples"></a>

次の例では、マテリアライズドビュー `tickets_mv` を削除します。

```
DROP MATERIALIZED VIEW tickets_mv;
```

# DROP PROCEDURE
<a name="r_DROP_PROCEDURE"></a>

プロシージャを削除します。プロシージャを削除するには、プロシージャ名と入力引数のデータタイプ (署名) の両方が必要です。必要に応じて、OUT 引数も含めて、完全な引数のデータタイプを指定できます。プロシージャの署名を検索するには、[SHOW PROCEDURE](r_SHOW_PROCEDURE.md) コマンドを使用します。プロシージャの署名の詳細については、「[PG\$1PROC\$1INFO](r_PG_PROC_INFO.md)」を参照してください。

## 必要な権限
<a name="r_DROP_PROCEDURE-privileges"></a>

以下に、DROP PROCEDURE に必要な権限を示します。
+ スーパーユーザー
+ DROP PROCEDURE の権限を持つユーザー
+ プロシージャの所有者

## 構文
<a name="r_DROP_PROCEDURE-synopsis"></a>

```
DROP PROCEDURE sp_name ( [ [ argname ] [ argmode ] argtype [, ...] ] )
```

## パラメータ
<a name="r_DROP_PROCEDURE-parameters"></a>

 *sp\$1name*   
削除するプロシージャの名前。

 *argname*   
入力引数の名前。プロシージャの識別に必要なのは引数データタイプのみであるため、DROP PROCEDURE は引数名を無視します。

 *argmode*   
引数のモード。IN、OUT、INOUT のいずれかです。OUT 引数は、ストアドプロシージャの識別に使用されないため、省略可能です。

 *argtype*   
入力引数のデータタイプ。サポートされているデータ型のリストについては、「[データ型](c_Supported_data_types.md)」を参照してください。

## 例
<a name="r_DROP_PROCEDURE-examples"></a>

次の例では、`quarterly_revenue`というストアドプロシージャを削除します。

```
DROP PROCEDURE quarterly_revenue(volume INOUT bigint, at_price IN numeric,result OUT int);
```

# DROP RLS POLICY
<a name="r_DROP_RLS_POLICY"></a>

すべてのデータベースにあるすべてのテーブルの行レベルのセキュリティポリシーを削除します。

スーパーユーザーと sys:secadmin ロールを持つユーザーまたはロールはポリシーを削除できます。

## 構文
<a name="r_DROP_RLS_POLICY-synopsis"></a>

```
DROP RLS POLICY [ IF EXISTS ] 
{ policy_name | database_name.policy_name }
[ CASCADE | RESTRICT ]
```

## パラメータ
<a name="r_DROP_RLS_POLICY-parameters"></a>

 *IF EXISTS*   
指定されたポリシーが既に存在するかどうか示す句。

 *policy\$1name*   
ポリシーの名前。

database\$1name  
ポリシーを削除するデータベースの名前。データベースは、接続されたデータベースでも、Amazon Redshift フェデレーティッドアクセス許可をサポートするデータベースでもかまいません。

 *CASCADE*   
ポリシーを削除する前に、アタッチされているすべてのテーブルからポリシーを自動的にデタッチすることを示す句。

 *RESTRICT*   
ポリシーが一部のテーブルにアタッチされている場合、ポリシーを削除しないことを示す句。これがデフォルトです。

Amazon Redshift フェデレーティッドアクセス許可カタログでの DROP RLS POLICY の使用については、[Amazon Redshift フェデレーティッドアクセス許可によるアクセスコントロールの管理](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html)についての記事を参照してください。

## 例
<a name="r_DROP_RLS_POLICY-examples"></a>

次の例では、行レベルのセキュリティポリシーを削除します。

```
DROP RLS POLICY policy_concerts;
```

# DROP ROLE
<a name="r_DROP_ROLE"></a>

データベースからロールを削除します。ロールを削除できるのは、そのロールを作成した所有者、WITH ADMIN オプションを使用しているユーザー、またはスーパーユーザーのみです。

ユーザーに付与されているロールや、別のロールが依存しているロールを削除することはできません。

## 必要な権限
<a name="r_DROP_ROLE-privileges"></a>

以下に、DROP ROLE に必要な権限を示します。
+ スーパーユーザー
+ ロールを作成した所有者ユーザー、または WITH ADMIN OPTION の権限があるロールを付与された所有者ユーザー。

## 構文
<a name="r_DROP_ROLE-synopsis"></a>

```
DROP ROLE role_name [ FORCE | RESTRICT ] 
```

## パラメータ
<a name="r_DROP_ROLE-parameters"></a>

*role\$1name*  
ロールの名前。

[ FORCE \$1 RESTRICT ]  
デフォルトの設定は RESTRICT です。削除しようとしたロールが別のロールを継承している場合、Amazon Redshift はエラーをスローします。ロールの割り当てが存在する場合、その割り当てをすべて削除するには FORCE を使用します。

## 例
<a name="r_DROP_ROLE-examples"></a>

次の例では、ロール `sample_role` を削除しています。

```
DROP ROLE sample_role FORCE;
```

次の例では、デフォルトの RESTRICT オプションを使用してユーザーに付与されたロール sample\$1role1 の削除を試みます。

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
DROP ROLE sample_role1;
ERROR:  cannot drop this role since it has been granted on a user
```

このようにユーザーに付与された sample\$1role1 を正常に削除するには、FORCE オプションを使用します。

```
DROP ROLE sample_role1 FORCE;
```

次の例では、別の (デフォルトの RESTRICT オプションを使用している) ロールからの依存関係がある、ロール sample\$1role2 を削除しようと試みます。

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO sample_role2;
DROP ROLE sample_role2;
ERROR:  cannot drop this role since it depends on another role
```

依存する別のロールを持つ sample\$1role2 を正常に削除するには、FORCE オプションを使用します。

```
DROP ROLE sample_role2 FORCE;
```

# DROP SCHEMA
<a name="r_DROP_SCHEMA"></a>

スキーマを削除します。外部スキーマの場合は、そのスキーマに関連付けられている外部データベースも削除できます。このコマンドを元に戻すことはできません。

## 必要な権限
<a name="r_DROP_SCHEMA-privileges"></a>

DROP SCHEMA に必要な権限を以下に示します。
+ スーパーユーザー
+ スキーマの所有者
+ DROP SCHEMA の権限を持つユーザー

## 構文
<a name="r_DROP_SCHEMA-synopsis"></a>

```
DROP SCHEMA [ IF EXISTS ] name [, ...]
[ DROP EXTERNAL DATABASE ]
[ CASCADE | RESTRICT ]
```

## パラメータ
<a name="r_DROP_SCHEMA-parameters"></a>

IF EXISTS  
指定されたスキーマが存在しない場合、コマンドはエラーで終了するのではなく、何も変更しないで、スキーマが存在しないというメッセージを返すことを示す句。  
この句は、存在しないスキーマに対して DROP SCHEMA を実行してもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

 *.name*   
削除するスキーマの名前。複数のスキーマ名をカンマで区切って指定できます。

 DROP EXTERNAL DATABASE   
外部スキーマが削除された場合、その外部スキーマに関連付けられている外部データベースがあれば、それを削除することを示す句。外部データベースが存在しない場合、コマンドは外部データベースが存在しないことを示すメッセージを返します。複数の外部スキーマが削除されると、指定されたスキーマに関連付けられているすべてのデータベースが削除されます。  
外部データベースにテーブルなどの依存オブジェクトが含まれている場合は、CASCADE オプションを指定して、その依存オブジェクトも削除します。  
外部データベースを削除すると、そのデータベースに関連付けられている他の外部スキーマにおいても、そのデータベースが削除されます。そのデータベースを使用する他の外部スキーマで定義されているテーブルも削除されます。  
DROP EXTERNAL DATABASE は、HIVE メタストアに格納されている外部データベースをサポートしません。

CASCADE  
スキーマ内のすべてのオブジェクトを自動的に削除することを示すキーワード。DROP EXTERNAL DATABASE が指定されると、外部データベース内のすべてのオブジェクトも削除されます。

RESTRICT  
スキーマまたは外部データベースにオブジェクトが含まれている場合は、スキーマまたは外部データベースを削除しないことを示すキーワード。この動作がデフォルトです。

## 例
<a name="r_DROP_SCHEMA-example"></a>

次の例では、S\$1SALES というスキーマを削除します。この例では、オブジェクトを含むスキーマが削除されないように安全策として RESTRICT を使用しています。この場合、スキーマを削除する前にスキーマオブジェクトを削除する必要があります。

```
drop schema s_sales restrict;
```

次の例では、S\$1SALES というスキーマと、そのスキーマに依存するすべてのオブジェクトを削除します。

```
drop schema s_sales cascade;
```

次の例では、S\$1SALES スキーマが存在する場合は削除し、存在しない場合は何もせずにメッセージを返します。

```
drop schema if exists s_sales;
```

次の例では、S\$1SPECTRUM という名前の外部スキーマとそれに関連付けられている外部データベースを削除します。この例では RESTRICT を使用しているため、スキーマとデータベースにオブジェクトが含まれている場合は、スキーマとデータベースが削除されません。この場合、スキーマとデータベースを削除する前に依存オブジェクトを削除する必要があります。

```
drop schema s_spectrum drop external database restrict;
```

次の例では、複数のスキーマとそれらに関連付けられている外部データベースを、依存オブジェクトとともに削除します。

```
drop schema s_sales, s_profit, s_revenue drop external database cascade;
```

# DROP TABLE
<a name="r_DROP_TABLE"></a>

データベースからテーブルを削除します。

テーブルを削除せずに、テーブルの行を空にする場合、DELETE または TRUNCATE コマンドを使用します。

DROP TABLE を使用すると、ターゲットテーブルに存在する制約が削除されます。1 つの DROP TABLE コマンドで複数のテーブルを削除できます。

外部テーブルに対しての DROP TABLE は、トランザクション内 (BEGIN … END) で実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

DROP 権限がグループに付与される例を見つけるには、「GRANT [例](r_GRANT-examples.md)」を参照してください。

## 必要な権限
<a name="r_DROP_TABLE-privileges"></a>

DROP TABLE に必要な権限を以下に示します。
+ スーパーユーザー
+ DROP TABLE の権限を持つユーザー
+ スキーマに対する USAGE 権限を持つテーブル所有者

## 構文
<a name="r_DROP_TABLE-synopsis"></a>

```
DROP TABLE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
```

## パラメータ
<a name="r_DROP_TABLE-parameters"></a>

IF EXISTS  
指定されたテーブルが存在しない場合、コマンドはエラーで終了するのではなく、何も変更しないで、テーブルが存在しないというメッセージを返すことを示す句。  
この句は、存在しないテーブルに対して DROP TABLE を実行してもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

 *.name*   
削除するテーブルの名前。

CASCADE  
ビューなどのテーブルに依存するオブジェクトを自動的に削除することを示す句。  
ビューやテーブルなど、他のデータベースオブジェクトに依存しないビューを作成するには、ビュー定義に WITH NO SCHEMA BINDING 句を含めます。詳細については、「[CREATE VIEW](r_CREATE_VIEW.md)」を参照してください。

RESTRICT   
テーブルに依存するオブジェクトがある場合、テーブルを削除しないことを示す句。この動作がデフォルトです。

## 例
<a name="r_DROP_TABLE-examples"></a>

 **依存するオブジェクトがないテーブルの削除** 

次の例では、依存するオブジェクトがない FEEDBACK というテーブルを作成して、削除します。

```
create table feedback(a int);

drop table feedback;
```

 ビューまたは他のテーブルによって参照される列がテーブルに含まれている場合は、次のようなメッセージが Amazon Redshift に表示されます。

```
Invalid operation: cannot drop table feedback because other objects depend on it
```

 **つのテーブルの同時削除** 

次のコマンドセットでは、FEEDBACK テーブルと BUYERS テーブルを作成し、1 つのコマンドで両方のテーブルを削除します。

```
create table feedback(a int);

create table buyers(a int);

drop table feedback, buyers;
```

 **依存関係を持つテーブルの削除** 

次の手順では、CASCADE スイッチを使用して、FEEDBACK というテーブルを削除する方法について説明します。

まず、CREATE TABLE コマンドを使用して、FEEDBACK という単純なテーブルを作成します。

```
create table feedback(a int);
```

 次に、CREATE VIEW コマンドを使用して、テーブル FEEDBACK に依存する FEEDBACK\$1VIEW というビューを作成します。

```
create view feedback_view as select * from feedback;
```

 次の例では、テーブル FEEDBACK を削除し、ビュー FEEDBACK\$1VIEW も削除します。これは、FEEDBACK\$1VIEW がテーブル FEEDBACK に依存しているためです。

```
drop table feedback cascade;
```

 **テーブルの依存関係の表示** 

テーブルの依存関係を返すには、次の例を使用します。*my\$1schema* と *my\$1table* を独自のスキーマとテーブルに置き換えます。

```
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;
```

*my\$1table* とその依存関係を削除するには、次の例を使用します。この例では、削除されたテーブルのすべての依存関係も返されます。

```
DROP TABLE my_table CASCADE;
         
SELECT dependent_ns.nspname as dependent_schema
, dependent_view.relname as dependent_view 
, source_ns.nspname as source_schema
, source_table.relname as source_table
, pg_attribute.attname as column_name
FROM pg_depend 
JOIN pg_rewrite ON pg_depend.objid = pg_rewrite.oid 
JOIN pg_class as dependent_view ON pg_rewrite.ev_class = dependent_view.oid 
JOIN pg_class as source_table ON pg_depend.refobjid = source_table.oid 
JOIN pg_attribute ON pg_depend.refobjid = pg_attribute.attrelid 
    AND pg_depend.refobjsubid = pg_attribute.attnum 
JOIN pg_namespace dependent_ns ON dependent_ns.oid = dependent_view.relnamespace
JOIN pg_namespace source_ns ON source_ns.oid = source_table.relnamespace
WHERE 
source_ns.nspname = 'my_schema'
AND source_table.relname = 'my_table'
AND pg_attribute.attnum > 0 
ORDER BY 1,2
LIMIT 10;

+------------------+----------------+---------------+--------------+-------------+
| dependent_schema | dependent_view | source_schema | source_table | column_name |
+------------------+----------------+---------------+--------------+-------------+
```

 **IF EXISTS を使用したテーブルの削除** 

次の例では、FEEDBACK テーブルが存在する場合は削除し、存在しない場合は何もしないでメッセージを返します。

```
drop table if exists feedback;
```

# DROP TEMPLATE
<a name="r_DROP_TEMPLATE"></a>

データベースからテンプレートを削除します。

## 必要な権限
<a name="r_DROP_TEMPLATE-privileges"></a>

テンプレートを削除するには、次のいずれかが必要です。
+ スーパーユーザー権限
+ テンプレートを含むスキーマの DROP TEMPLATE 権限と USAGE 権限

## 構文
<a name="r_DROP_TEMPLATE-synopsis"></a>

```
DROP TEMPLATE [database_name.][schema_name.]template_name;
```

## パラメータ
<a name="r_DROP_TEMPLATE-parameters"></a>

 *database\$1name*   
(オプション) テンプレートが作成されるデータベースの名前。指定しない場合は、現在のデータベースが使用されます。

 *schema\$1name*   
(オプション) テンプレートが作成されるスキーマの名前。指定しない場合は、現在の検索パスでテンプレートが検索されます。

 *template\$1name*   
削除するテンプレートの名前。次の例では、データベース名は `demo_database`、スキーマ名は `demo_schema`、テンプレート名は `test` です。  

```
DROP TEMPLATE demo_database.demo_schema.test;
```

## 例
<a name="r_DROP_TEMPLATE-examples"></a>

次の例では、テンプレート test\$1template を現在のスキーマから削除します。

```
DROP TEMPLATE test_template;
```

次の例では、テンプレート test\$1template をスキーマ test\$1schema から削除します。

```
DROP TEMPLATE test_schema.test_template;
```

# DROP USER
<a name="r_DROP_USER"></a>

データベースからユーザーを削除します。1 つの DROP USER コマンドで複数のユーザーを削除できます。このコマンドを実行するには、データベースのスーパーユーザーであるか、DROP USER アクセス許可が必要です。

## 構文
<a name="r_DROP_USER-synopsis"></a>

```
DROP USER [ IF EXISTS ] name [, ... ]
```

## パラメータ
<a name="r_DROP_USER-parameters"></a>

IF EXISTS  
指定したユーザーが存在しない場合、コマンドはエラーで終了せずに、何も変更しないで、ユーザーが存在しない旨のメッセージを返すことを示す句。  
この句は、存在しないユーザーに対して DROP USER を実行してもスクリプトがエラーにならないため、スクリプトを実行する際に便利です。

 *.name*   
削除するユーザーの名前。各ユーザー名をコンマで区切って、複数のユーザーを指定できます。

## 使用に関する注意事項
<a name="r_DROP_USER-notes"></a>

`rdsdb` という名前のユーザーまたはデータベースの管理者ユーザー (通常は、`awsuser` または `admin` という名前) は削除できません。

スキーマ、データベース、テーブル、ビューなどのデータベースオブジェクトを所有するユーザーと、データベース、テーブル、列、またはグループに対して権限を持っているユーザーは削除できません。このようなユーザーを削除しようとすると、以下のいずれかのエラーが発生します。

```
ERROR: user "username" can't be dropped because the user owns some object [SQL State=55006]

ERROR: user "username" can't be dropped because the user has a privilege on some object [SQL State=55006]
```

データベースユーザーが所有するオブジェクトを検索する方法の詳細については、*ナレッジセンター*の「[How do I resolve the "user cannot be dropped" error in Amazon Redshift?](https://repost.aws/knowledge-center/redshift-user-cannot-be-dropped)」(Amazon Redshift の「ユーザーを削除できません」エラーを解決する方法を教えてください) を参照してください。

**注記**  
Amazon Redshift は、ユーザーを削除する前に、現在のデータベースのみを確認します。ユーザーがデータベースオブジェクトを所有しているか、別のデータベースのオブジェクトの権限を持っている場合、DROP USER はエラーを返しません。別のデータベースのオブジェクトを所有しているユーザーを削除すると、それらのオブジェクトの所有者は「不明」に変更されます。

ユーザーがオブジェクトを所有する場合は、元のユーザーを削除する前に、まずオブジェクトを削除するか、所有者を別のユーザーに変更します。ユーザーがオブジェクトに対する権限を持つ場合は、ユーザーを削除する前に、まずその権限を削除します。次の例は、ユーザーを削除する前にオブジェクトの削除、所有者の変更、および権限の取り消しを行います。

```
drop database dwdatabase;
alter schema dw owner to dwadmin;
revoke all on table dwtable from dwuser;
drop user dwuser;
```

## 例
<a name="r_DROP_USER-examples"></a>

次の例では、paulo というユーザーを削除します。

```
drop user paulo;
```

次の例では、paulo と martha という 2 人のユーザーを削除します。

```
drop user paulo, martha;
```

次の例では、paulo というユーザーが存在する場合はそれを削除し、存在しない場合は何もしないでメッセージを返します。

```
drop user if exists paulo;
```

# DROP VIEW
<a name="r_DROP_VIEW"></a>

データベースからビューを削除します。1 つの DROP VIEW コマンドで複数のビューを削除できます。このコマンドを元に戻すことはできません。

## 必要な権限
<a name="r_DROP_VIEW-privileges"></a>

DROP VIEW に必要な権限を以下に示します。
+ スーパーユーザー
+ DROP VIEW の権限を持つユーザー
+ ビューの所有者

## 構文
<a name="r_DROP_VIEW-synopsis"></a>

```
DROP VIEW [ IF EXISTS ] name [, ... ] [ CASCADE | RESTRICT ] 
```

## パラメータ
<a name="r_DROP_VIEW-parameters"></a>

IF EXISTS  
指定されたビューが存在しない場合、コマンドはエラーで終了するのではなく、何も変更しないで、ビューが存在しないというメッセージを返すことを示す句。  
この句は、存在しないビューに対して DROP VIEW を実行してもスクリプトが失敗しないため、スクリプトを作成する際に便利です。

 *.name*   
削除するビューの名前。

CASCADE  
その他のビューなど、ビューに依存するオブジェクトを自動的に削除することを示す句。  
ビューやテーブルなど、他のデータベースオブジェクトに依存しないビューを作成するには、ビュー定義に WITH NO SCHEMA BINDING 句を含めます。詳細については、「[CREATE VIEW](r_CREATE_VIEW.md)」を参照してください。  
CASCADE を含めることで、データベースオブジェクトの削除数が 10 以上になった場合、データベースクライアントはすべての削除されたオブジェクトをサマリー結果に一覧表示しない可能性があることに注意してください。この原因は、通常、SQL クライアントツールには、返される結果に対するデフォルトの制限があるためです。

RESTRICT  
ビューに依存するオブジェクトがある場合、ビューを削除しないことを示す句。この動作がデフォルトです。

## 例
<a name="r_DROP_VIEW-examples"></a>

次の例では、*event* というビューを削除します。

```
drop view event;
```

依存するオブジェクトがあるビューを削除するには、CASCADE オプションを使用します。例えば、EVENT というテーブルを使用するとします。次に、以下の例に示すように、CREATE VIEW コマンドを使用して、EVENT テーブルの eventview ビューを作成します。

```
create view eventview as
select dateid, eventname, catid
from event where catid = 1;
```

ここで *myeventview* という 2 つ目のビューを作成します。このビューは、最初のビュー *eventview* に基づいています。

```
create view myeventview as
select eventname, catid
from eventview where eventname <> ' ';
```

この時点で、*eventview* および *myeventview* という 2 つのビューが作成されています。

*myeventview* ビューは、親が *eventview* である子ビューです。

*eventview* ビューを削除するために使用するコマンドは、次のコマンドであることは明白です。

```
drop view eventview;
```

しかしこの場合、このコマンドを実行すると、次のエラーが返されます。

```
drop view eventview;
ERROR: can't drop view eventview because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too.
```

この問題を回避するために、(エラーメッセージの指示に従って) 次のコマンドを実行します。

```
drop view eventview cascade;
```

今度は *eventview* と *myeventview* の両方が正常に削除されました。

次の例では、*eventview* というビューが存在する場合はそれを削除し、存在しない場合は何もせずにメッセージを返します。

```
drop view if exists eventview;
```

# END
<a name="r_END"></a>

現在のトランザクションをコミットします。COMMIT コマンドと同じ機能です。

詳細については、「[COMMIT](r_COMMIT.md)」を参照してください。

## 構文
<a name="r_END-synopsis"></a>

```
END [ WORK | TRANSACTION ]
```

## パラメータ
<a name="r_END-parameters"></a>

WORK  
オプションキーワード

TRANSACTION  
オプションキーワード。WORK と TRANSACTION は同義語です。

## 例
<a name="r_END-examples"></a>

次の例はすべて、トランザクションブロックを終了し、トランザクションをコミットします。

```
end;
```

```
end work;
```

```
end transaction;
```

Amazon Redshift では、次のどのコマンドを実行しても、トランザクションブロックが終了し、変更がコミットされます。

# EXECUTE
<a name="r_EXECUTE"></a>

事前に準備したステートメントを実行します。

## 構文
<a name="r_EXECUTE-synopsis"></a>

```
EXECUTE plan_name [ (parameter [, ...]) ]
```

## パラメータ
<a name="r_EXECUTE-parameters"></a>

 *plan\$1name*   
実行される準備済みステートメントの名前です。

 * パラメータ*   
準備済みステートメントに対するパラメータの実際の値。準備済みステートメントを作成した PREPARE コマンドで、このパラメータの位置に指定されているデータ型と互換性がある型の値に評価される式にする必要があります。

## 使用に関する注意事項
<a name="r_EXECUTE_usage_notes"></a>

EXECUTE は、事前に準備したステートメントを実行するために使用されます。準備されたステートメントの存在期間は 1 つのセッションのみに限られるため、準備済みステートメントは、その時点のセッションより前に実行した PREPARE ステートメントで作成しておく必要があります。

前の PREPARE ステートメントでいくつかのパラメータを指定した場合、互換性のあるパラメータセットを EXECUTE ステートメントに渡す必要があります。そうしないと、Amazon Redshift からエラーが返されます。関数とは異なり、準備済みステートメントは、指定したパラメータの種類または数によって過負荷になることはありません。準備済みステートメントの名前は、データベースセッション内で一意にする必要があります。

準備済みステートメントに対して EXECUTE コマンドを発行すると、Amazon Redshift は (指定されたパラメータ値に基づいてパフォーマンスを改善するように) 必要に応じてクエリ実行計画を修正してから、その準備済みステートメントを実行することがあります。また、準備済みステートメントを新しく実行するたびに、EXECUTE ステートメントを使用して指定した異なるパラメータ値に基づいて、Amazon Redshift はクエリ実行計画を修正することがあります。Amazon Redshift が特定の EXECUTE ステートメントに対して選択したクエリ実行計画を確認するには、[EXPLAIN](r_EXPLAIN.md) コマンドを使用します。

準備済みステートメントの作成と使用の例と詳細については、「[PREPARE](r_PREPARE.md)」を参照してください。

## 以下の資料も参照してください。
<a name="r_EXECUTE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [PREPARE](r_PREPARE.md) 

# EXPLAIN
<a name="r_EXPLAIN"></a>

クエリを実行せずに、クエリステートメントの実行計画を表示します。クエリ分析ワークフローの詳細については、「[クエリ分析ワークフロー](c-query-analysis-process.md)」を参照してください。

## 構文
<a name="r_EXPLAIN-synopsis"></a>

```
EXPLAIN [ VERBOSE ] query
```

## パラメータ
<a name="r_EXPLAIN-parameters"></a>

VERBOSE   
クエリプランの概要だけでなく、詳細情報を表示します。

 *query*()   
説明を表示するクエリステートメント。SELECT、INSERT、CREATE TABLE AS、UPDATE、DELETE クエリステートメントを指定できます。

## 使用に関する注意事項
<a name="r_EXPLAIN-usage-notes"></a>

EXPLAIN のパフォーマンスは、一時テーブルの作成にかかる時間の影響を受けることがあります。例えば、共通のサブ式の最適化を使用するクエリでは、EXPLAIN の出力を返すために、一時テーブルを作成し、分析する必要があります。クエリプランは、一時テーブルのスキーマと統計情報に依存します。そのため、このようなクエリの EXPLAIN コマンドには、予測よりも長い実行時間がかかる可能性があります。

EXPLAIN は次のコマンドのみに使用できます。
+ SELECT
+ SELECT INTO
+ CREATE TABLE AS
+ INSERT
+ UPDATE
+ DELETE

データ定義言語 (DDL) やデータベース操作などのその他の SQL コマンドに対して使用した場合、EXPLAIN コマンドは失敗します。

Amazon Redshift は EXPLAIN 出力の相対単位コストを使用してクエリプランを選択します。Amazon Redshift は、さまざまなリソース見積もりのサイズを比較してプランを決定します。

## クエリプランと実行ステップ
<a name="r_EXPLAIN-query-planning-and-execution-steps"></a>

各 Amazon Redshift クエリステートメントの実行計画では、クエリの実行と計算を複数のステップとテーブル操作に分割し、クエリの最終的な結果セットを作成します。クエリの計画については、「[クエリ処理](c-query-processing.md)」を参照してください。

次の表では、ユーザーが実行のために送信するクエリの実行計画を作成するときに、Amazon Redshift で使用できるステップの概要を説明します。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_EXPLAIN.html)

## RLS に EXPLAIN を使う
<a name="r_EXPLAIN-RLS"></a>

クエリに行レベルセキュリティ (RLS) ポリシーの対象となるテーブルが含まれている場合、EXPLAIN は特別な RLS SecureScan ノードを表示します。Amazon Redshift は、同じノードタイプを STL\$1EXPLAIN システムテーブルにも記録します。EXPLAIN は、dim\$1tbl に適用される RLS 述語を明らかにしません。RLS SecureScan ノードタイプは、現在のユーザーには見えない追加の操作が実行プランに含まれていることを示す指標として機能します。

次の例は、RLS SecureScan ノードを示しています。

```
EXPLAIN
SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                               QUERY PLAN
------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   ->  *XN* *RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)*
         Filter: ((k_dim / 10) > 0)
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

RLS の対象となるクエリプランの完全な調査を可能にするため、Amazon Redshift は EXPLAIN RLS のシステム許可を提供します。この許可を付与されたユーザーは、RLS 述語も含む完全なクエリプランを検査できます。

次の例は、RLS SecureScan ノードの下に追加の Seq Scan にも RLS ポリシー述語 (k\$1dim > 1) が含まれることを示しています。

```
EXPLAIN SELECT D.cint
FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k
WHERE F.k_dim / 10 > 0;
                                   QUERY PLAN
---------------------------------------------------------------------------------
 XN Hash Join DS_DIST_ALL_NONE  (cost=0.08..0.25 rows=1 width=4)
   Hash Cond: ("outer".k_dim = "inner"."k")
   *->  XN RLS SecureScan f  (cost=0.00..0.14 rows=2 width=4)
         Filter: ((k_dim / 10) > 0)*
         ->  *XN* *Seq Scan on fact_tbl rls_table  (cost=0.00..0.06 rows=5 width=8)
               Filter: (k_dim > 1)*
   ->  XN Hash  (cost=0.07..0.07 rows=2 width=8)
         ->  XN Seq Scan on dim_tbl d  (cost=0.00..0.07 rows=2 width=8)
               Filter: (("k" / 10) > 0)
```

EXPLAIN RLS 許可がユーザーに付与されている間、Amazon Redshift は RLS 述語を含む完全なクエリプランを STL\$1EXPLAIN システムテーブルに記録します。この許可が付与されていない間に実行されるクエリは、RLS 内部情報なしでログ記録されます。EXPLAIN RLS 許可を付与または削除しても、Amazon Redshift が以前のクエリで STL\$1EXPLAIN にログ記録した内容は変更されません。

### AWS Lake Formation-RLS による Redshift の保護関係
<a name="r_EXPLAIN_RLS-LF"></a>

次の例は、LF SecureScan ノードを示しています。このノードを使用して、Lake Formation と RLS の関係を表示できます。

```
EXPLAIN
SELECT *
FROM lf_db.public.t_share
WHERE a > 1;
QUERY PLAN
---------------------------------------------------------------
XN LF SecureScan t_share  (cost=0.00..0.02 rows=2 width=11)
(2 rows)
```

## 例
<a name="r_EXPLAIN-examples"></a>

**注記**  
これらの例では、出力例は Amazon Redshift の設定によって変わります。

次の例は、EVENT テーブルと VENUE テーブルから EVENTID、EVENTNAME、VENUEID、および VENUENAME を選択するクエリのクエリプランを返します。

```
explain
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(5 rows)
```

次の例では、同じクエリで詳細な出力のクエリプランを返します。

```
explain verbose
select eventid, eventname, event.venueid, venuename
from event, venue
where event.venueid = venue.venueid;
```

```
                                QUERY PLAN
--------------------------------------------------------------------------
{HASHJOIN
:startup_cost 2.52
:total_cost 58653620.93
:plan_rows 8712
:plan_width 43
:best_pathkeys <>
:dist_info DS_DIST_OUTER
:dist_info.dist_keys (
TARGETENTRY
{
VAR
:varno 2
:varattno 1
...

XN Hash Join DS_DIST_OUTER  (cost=2.52..58653620.93 rows=8712 width=43)
Hash Cond: ("outer".venueid = "inner".venueid)
->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=23)
->  XN Hash  (cost=2.02..2.02 rows=202 width=22)
->  XN Seq Scan on venue  (cost=0.00..2.02 rows=202 width=22)
(519 rows)
```

次の例では、CREATE TABLE AS (CTAS) ステートメントのクエリプランを返します。

```
explain create table venue_nonulls as
select * from venue
where venueseats is not null;

QUERY PLAN
-----------------------------------------------------------
XN Seq Scan on venue  (cost=0.00..2.02 rows=187 width=45)
Filter: (venueseats IS NOT NULL)
(2 rows)
```

# FETCH
<a name="fetch"></a>

カーソルを使用して行を取得します。カーソルの宣言について詳しくは、「[DECLARE](declare.md)」を参照してください。

FETCH は、カーソル内の現在の位置に基づいて行を取得します。カーソルを作成すると、最初の行の前に位置が設定されます。FETCH 後は、最後に取得した行にカーソル位置が設定されます。使用できる最後の行まで FETCH を実行すると (FETCH ALL の後など)、カーソル位置は最後の行の後になります。

FORWARD 0 では、現在の行を取得し、カーソルを移動しません。つまり、最後に取得した行を取得します。カーソル位置が最初の行の前、または最後の行の後の場合、行は返されません。

カーソルの最初の行が取得されると、必要に応じて、結果セット全体がリーダーノード、メモリ内、またはディスク上にマテリアライズされます。大きな結果セットにカーソルを使用すると、パフォーマンスが低下する可能性があるため、可能な限り、別の方法を使用することをお勧めします。詳細については、「[カーソルを使用するときのパフォーマンスに関する考慮事項](declare.md#declare-performance)」を参照してください。

詳細については、「[DECLARE](declare.md)」、「[CLOSE](close.md)」を参照してください。

## 構文
<a name="fetch-synopsis"></a>

```
FETCH [ NEXT | ALL | {FORWARD [ count | ALL ] } ] FROM cursor
```

## パラメータ
<a name="fetch-parameters"></a>

NEXT  
次の行を取得します。これがデフォルト値です。

ALL  
残りのすべての行を取得します (FORWARD ALL と同じです)。単一ノードクラスターでは、ALL はサポートされません。

FORWARD [ *count* \$1 ALL ]   
次の *count* の行、または残りのすべての行を取得します。`FORWARD 0` は、現在の行を取得します。単一ノードクラスターでは、数値の最大値は `1000` です。単一ノードクラスターでは、FORWARD ALL はサポートされません。

*cursor*   
新しいカーソルの名前。

## FETCH の例
<a name="fetch-example"></a>

次の例では、LOLLAPALOOZA というカーソルを宣言し、Lollapalooza イベントの売り上げ情報を選択した後、カーソルを使用して結果セットから行を取得します。

```
-- Begin a transaction

begin;

-- Declare a cursor

declare lollapalooza cursor for
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Lollapalooza';

-- Fetch the first 5 rows in the cursor lollapalooza:

fetch forward 5 from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-05-01 19:00:00 |   92.00000000 |       3
 Lollapalooza | 2008-11-15 15:00:00 |  222.00000000 |       2
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       3
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       4
 Lollapalooza | 2008-04-17 15:00:00 |  239.00000000 |       1
(5 rows)

-- Fetch the next row:

fetch next from lollapalooza;

  eventname   |      starttime      | costperticket | qtysold
--------------+---------------------+---------------+---------
 Lollapalooza | 2008-10-06 14:00:00 |  114.00000000 |       2

-- Close the cursor and end the transaction:

close lollapalooza;
commit;
```

# GRANT
<a name="r_GRANT"></a>

ユーザーまたはユーザーグループのアクセス許可を定義します。

アクセス許可には、テーブルとビューのデータの読み取り、データの書き込み、テーブルの作成、テーブルの削除などのアクセスオプションが含まれます。このコマンドを使用して、テーブル、データベース、スキーマ、関数、プロシージャ、言語、または列に対する特定のアクセス許可を付与します。データベースオブジェクトからアクセス許可を削除するには、[REVOKE](r_REVOKE.md) コマンドを使用します。

アクセス許可には、以下のデータ共有プロデューサーのアクセスオプションも含まれます。
+  コンシューマー名前空間とアカウントへのデータ共有のアクセス許可を付与する。
+  データ共有にオブジェクトを追加したり、データ共有からオブジェクトを削除したりすることでデータ共有を変更するアクセス許可を付与する。
+  コンシューマー名前空間をデータ共有に追加または削除することでデータ共有を共有するアクセス許可を付与する。

データ共有コンシューマーのアクセスオプションは次のとおりです。
+ データ共有から作成されたデータベース、またはそのようなデータベースを指す外部スキーマへのフルアクセスをユーザーに付与する。
+ ローカルデータベースオブジェクトと同様に、データ共有から作成されたデータベースに対するオブジェクトレベルのアクセス許可をユーザーに付与する。このレベルのアクセス許可を付与するには、データ共有からデータベースを作成するときに WITH PERMISSIONS 句を使用する必要があります。詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

データ共有のアクセス許可については、「[データ共有に付与できるアクセス許可](permissions-datashares.md)」を参照してください。

アクセス許可には、次の Amazon Redshift フェデレーティッドアクセス許可カタログも含まれます。
+ ユーザーにテーブルレベルの許可を付与します。
+ テーブル、ビュー、マテリアライズドビューにきめ細かな列レベルのアクセス許可を付与します。
+ ユーザーとロールにスコープ付きアクセス許可を付与します。
+ Amazon Redshift フェデレーティッドアクセス許可カタログに対するデータベースレベルのアクセス許可の付与。

Amazon Redshift フェデレーティッドアクセス許可カタログのアクセス許可の管理の詳細については、「[Amazon Redshift フェデレーティッドアクセス許可カタログでのアクセスコントロールの管理GRANT、REVOKE](federated-permissions-managing-access.md)」を参照してください。Amazon Redshift フェデレーティッドアクセス許可カタログでサポートされている許可/取り消し構文の詳細については、「[GRANT、REVOKE](https://docs.aws.amazon.com/redshift/latest/dg/federated-permissions-managing-access.html#federated-permissions-managing-access-grant-revoke)」を参照してください。

アクセス許可には、AWS IAM アイデンティティセンター フェデレーションユーザーの CONNECT 権限も含まれます。この権限により、管理者は、Amazon Redshift フェデレーティッドアクセス許可が有効になっている各 Amazon Redshift ワークグループまたはクラスターで、きめ細かなアクセス許可を通じてユーザーアクセスを制御できます。Amazon Redshift 管理者は、Amazon Redshift ワークグループに直接接続するためのアクセス権を持つ AWS IAM アイデンティティセンター フェデレーションユーザー (複数可) またはグループ (複数可) を指定し、各ワークグループまたはクラスターでの AWS IAM アイデンティティセンター ユーザーアクセスをきめ細かく制御できます。

また、ロールを付与してデータベースアクセス許可を管理したり、データに関連してユーザーが実行できる操作を制御したりすることもできます。ロールを定義し、ユーザーにロールを割り当てることで、ユーザーを CREATE TABLE コマンドと INSERT コマンドのみに制限するなど、ユーザーが実行できるアクションを制限できます。CREATE ROLE コマンドの詳細については、「[CREATE ROLE](r_CREATE_ROLE.md)」を参照してください。Amazon Redshift にはシステム定義のロールがいくつかあり、これらを使用してユーザーに特定のアクセス許可を付与することもできます。詳細については、「[Amazon Redshift でのシステム定義のロール](r_roles-default.md)」を参照してください。

ON SCHEMA 構文を使用するデータベースユーザーおよびユーザーグループには、外部スキーマに対する USAGE 権限の GRANT (付与) または REVOKE (取り消し) のみを行うことができます。AWS Lake Formation で ON EXTERNAL SCHEMA を使用する場合は、AWS Identity and Access Management(IAM) ロールに対して、アクセス許可の GRANT (付与) および REVOKE (取り消し) のみを行うことができます。アクセス許可のリストについては、構文を参照してください。

ストアドプロシージャの場合、付与できるアクセス許可は EXCUTE のみです。

トランザクションブロック (BEGIN ... END) 内で GRANT を (外部リソースで) 実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

データベースに対してどのアクセス許可がユーザーに付与されているかを確認するには、[HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md) を使用します。スキーマに対してどのアクセス許可がユーザーに付与されているかを確認するには、[HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md) を使用します。テーブルに対してどのアクセス許可がユーザーに付与されているかを確認するには、[HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md) を使用します。

## 構文
<a name="r_GRANT-synopsis"></a>



```
GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
    ON DATABASE db_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] }
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT USAGE
    ON LANGUAGE language_name [, ...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]             

GRANT { { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE [database_name.][schema_name.]template_name [,...]
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### テーブルの列レベルのアクセス許可の付与
<a name="grant-column-level"></a>

Amazon Redshift テーブルとビューに対する列レベルのアクセス許可の構文を次に示します。

```
GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }

     TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### ASSUMEROLE アクセス許可の付与
<a name="grant-assumerole-permissions"></a>

指定されたロールを持つユーザーおよびグループに付与される ASSUMEROLE アクセス許可の構文を次に示します。ASSUMEROLE 権限の使用を開始する際は、「[ASSUMEROLE アクセス許可を付与するための使用上の注意事項](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)」を参照してください。

```
GRANT ASSUMEROLE
       ON { 'iam_role' [, ...] | default | ALL }
       TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
       FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]
```

### Redshift Spectrum と Lake Formation の統合に関するアクセス許可の付与
<a name="grant-spectrum-integration-with-lf-syntax"></a>

以下に、Redshift Spectrum と Lake Formation の統合構文を示します。

```
GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]

GRANT { { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ]

GRANT { { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]
```

### データ共有アクセス許可の付与
<a name="grant-datashare-syntax"></a>

**プロデューサー側のデータ共有のアクセス許可**  
以下は、GRANT を使用してユーザーまたはロールに ALTER または SHARE アクセス許可を付与するための構文です。ユーザーは ALTER アクセス許可でデータ共有を変更したり、SHARE アクセス許可でコンシューマーに使用を許可したりできます。ALTER と SHARE は、データ共有に対してユーザーおよびロールに付与できる唯一のアクセス許可です。

```
GRANT { ALTER | SHARE } ON DATASHARE datashare_name
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

以下は、Amazon Redshift のデータ共有アクセス許可について GRANT を使用するための構文です。USAGE アクセス許可を使用して、データ共有へのアクセスをコンシューマーに付与します。ユーザーまたはユーザーグループに、このアクセス許可を付与することはできません。このアクセス許可は、GRANT ステートメントの WITH GRANT OPTION もサポートしていません。このタイプの GRANT ステートメントを実行できるのは、以前に FOR データ共有に付与された SHARE アクセス許可を持つユーザーまたはユーザーグループのみです。

```
GRANT USAGE
    ON DATASHARE datashare_name
    TO NAMESPACE 'namespaceGUID' | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]
```

以下は、Lake Formation アカウントにデータ共有の使用を許可する方法の例です。

```
GRANT USAGE ON DATASHARE salesshare TO ACCOUNT '123456789012' VIA DATA CATALOG;
```

**コンシューマー側のデータ共有のアクセス許可**  
以下は、データ共有から作成された特定のデータベースまたはスキーマに対する GRANT データ共有の使用許可の構文です。

データ共有から作成されたデータベースにコンシューマーがアクセスするために必要なその他のアクセス許可は、データ共有からデータベースを作成するために使用された CREATE DATABASE コマンドが WITH PERMISSIONS 句を使用したかどうかによって異なります。CREATE DATABASE コマンドと WITH PERMISSIONS 句の詳細については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

**WITH PERMISSIONS 句を使用せずに作成されたデータベース**  
WITH PERMISSIONS 句を使用せずにデータ共有から作成されたデータベースに USAGE を付与する場合、共有データベースのオブジェクトに対して個別にアクセス許可を付与する必要はありません。WITH PERMISSIONS 句を使用せずにデータ共有から作成されたデータベースに対して使用を許可されたエンティティは、自動的にデータベース内のすべてのオブジェクトにアクセスできます。

**WITH PERMISSIONS 句を使用して作成されたデータベース**  
WITH PERMISSIONS 句を使用してデータ共有から共有データベースを作成したデータベースに USAGE を付与する場合、コンシューマ側の ID には、共有データベース内のデータベースオブジェクトにアクセスするために、そのデータベースオブジェクトに関連するアクセス許可が付与されている必要があります。ローカルデータベースオブジェクトに対するアクセス許可を付与する場合と同様です。データ共有から作成されたデータベース内のオブジェクトにアクセス許可を付与するには、3 つの部分からなる構文 `database_name.schema_name.object_name` を使用します。共有データベース内の共有スキーマを指す外部スキーマのオブジェクトにアクセス許可を付与するには、2 つの部分からなる構文 `schema_name.object_name` を使用します。

```
GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
    TO { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### スコープ付きアクセス許可の付与
<a name="grant-scoped-syntax"></a>

スコープ設定アクセス許可を使用すると、データベースまたはスキーマ内の特定タイプのすべてのオブジェクトに対するアクセス許可をユーザーまたはロールに付与できます。スコープ設定アクセス許可を持つユーザーやロールは、データベースまたはスキーマ内の現在および将来のすべてのオブジェクトに対して指定されたアクセス許可を持ちます。

データベースレベルのスコープ付きアクセス許可の範囲は、[SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) で確認できます。スキーマレベルのスコープ付きアクセス許可の範囲は、[SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md) で確認できます。

スコープ設定アクセス許可の詳細については、「[スコープ設定アクセス許可](t_scoped-permissions.md)」を参照してください。

以下は、ユーザーとロールにスコープ付きアクセス許可を付与するための構文です。

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT 
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name} [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name | } [, ...]

GRANT USAGE
FOR LANGUAGES IN
{DATABASE db_name}
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]  

GRANT { { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]

GRANT { { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]
```

スコープ設定アクセス許可では、関数とプロシージャのアクセス許可が区別されないことに注意してください。例えば、次のステートメントは、スキーマ `Sales_schema` 内の関数とプロシージャの両方に対する `EXECUTE` アクセス許可を `bob` に付与します。

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

### 機械学習アクセス許可の付与
<a name="grant-model-syntax"></a>

以下は、Amazon Redshift での機械学習モデルアクセス許可の構文です。

```
GRANT CREATE MODEL
    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    TO { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### ロールアクセス許可の付与
<a name="grant-roles"></a>

以下に、Amazon Redshift でロールのアクセス許可を付与する際の構文を示します。

```
GRANT { ROLE role_name } [, ...] TO { { user_name [ WITH ADMIN OPTION ] } | ROLE role_name }[, ...]
```

以下に、Amazon Redshift でシステムのアクセス許可を付与する際の構文を示します。ユーザーではなく、ロールにのみアクセス許可を付与できることに注意してください。

```
GRANT
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG | ACCESS SYSTEM TABLE
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE |
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL |
    IGNORE RLS | EXPLAIN RLS | 
    EXPLAIN MASKING }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
TO ROLE role_name [, ...]
```

### セキュリティポリシーの説明アクセス許可の付与
<a name="grant-row-level-security"></a>

次の内容は、EXPLAIN プランのクエリにおけるセキュリティポリシーフィルタを説明する許可を付与する構文です。可能なセキュリティポリシーには、行レベルのセキュリティポリシーと動的データマスキングポリシーが含まれます。

```
GRANT EXPLAIN { RLS | MASKING } TO ROLE rolename 
```

次の内容は、クエリの行レベルのセキュリティポリシーをバイパスする許可を付与する構文です。この構文は、動的データマスキングポリシーには適用されません。

```
GRANT IGNORE RLS TO ROLE rolename 
```

次の内容は、特定のセキュリティポリシーにルックアップテーブルアクセス許可を付与する構文です。可能なセキュリティポリシーには、行レベルのセキュリティポリシーと動的データマスキングポリシーが含まれます。

```
GRANT SELECT ON [ TABLE ] table_name [, ...]
TO { RLS | MASKING } POLICY policy_name [, ...]
```

### 接続許可の付与
<a name="grant-connection-permissions"></a>

以下は、AWS IAM アイデンティティセンター フェデレーションユーザー (またはグループ) にワークグループ/クラスターに接続するためのアクセス許可を付与するための構文です。

```
GRANT CONNECT [ON WORKGROUP]
TO [USER] <prefix>:<username> | ROLE <prefix>:<rolename> | PUBLIC;
```

## パラメータ
<a name="r_GRANT-parameters"></a>

SELECT   <a name="grant-select"></a>
SELECT ステートメントを使用して、テーブルまたはビューからデータを選択するアクセス許可を付与します。UPDATE 操作または DELETE 操作で既存の列値を参照するには、SELECT アクセス許可も必要です。

INSERT   <a name="grant-insert"></a>
INSERT ステートメントまたは COPY ステートメントを使用して、データをテーブルにロードするアクセス許可を付与します。

UPDATE   <a name="grant-update"></a>
UPDATE ステートメントを使用して、テーブル列を更新するアクセス許可を付与します。UPDATE 操作には SELECT アクセス許可も必要です。これは、更新する行、または列の新しい値を計算する行を決定するには、テーブルの列を参照する必要があるためです。

DELETE  <a name="grant-delete"></a>
テーブルからデータ行を削除するアクセス許可を付与します。DELETE 操作には、SELECT 権限も必要です。これは、削除する行を決定するには、テーブルの列を参照する必要があるためです。

DROP  <a name="grant-drop"></a>
データベースオブジェクトに応じて、次のアクセス許可をユーザーまたはロールに付与します。  
+  テーブルの場合、DROP はテーブルまたはビューを削除するアクセス許可を付与します。詳細については、「[DROP TABLE](r_DROP_TABLE.md)」を参照してください。
+  データベースの場合、DROP はデータベースを削除するアクセス許可を付与します。詳細については、「[DROP DATABASE](r_DROP_DATABASE.md)」を参照してください。
+  スキーマの場合、DROP はスキーマを削除するアクセス許可を付与します。詳細については、「[DROP SCHEMA](r_DROP_SCHEMA.md)」を参照してください。

REFERENCES   <a name="grant-references"></a>
外部キー制約を作成するアクセス許可を付与します。参照されるテーブルと参照するテーブルの両方について、このアクセス許可を付与する必要があります。そうしないと、ユーザーは制約を作成できません。

ALTER  <a name="grant-alter"></a>
データベースオブジェクトに応じて、次のアクセス許可をユーザーまたはユーザーグループに付与します。  
+ テーブルの場合、ALTER はテーブルまたはビューを変更するアクセス許可を付与します。詳細については、「[ALTER TABLE](r_ALTER_TABLE.md)」を参照してください。
+ データベースの場合、ALTER はデータベースを変更するアクセス許可を付与します。詳細については、「[ALTER DATABASE](r_ALTER_DATABASE.md)」を参照してください。
+ スキーマの場合、ALTER はスキーマを変更するアクセス許可を付与します。詳細については、「[ALTER SCHEMA](r_ALTER_SCHEMA.md)」を参照してください。
+ 外部テーブルの場合、ALTER は Lake Formation で有効になっている AWS Glue Data Catalog 内のテーブルを変更するアクセス許可を付与します。この許可は、Lake Formation を使用する場合にのみ適用されます。

TRUNCATE  <a name="grant-truncate"></a>
テーブルを切り捨てるアクセス許可を付与します。このアクセス許可がない場合、テーブルの所有者またはスーパーユーザーだけがテーブルを切り捨てることができます。TRUNCATE コマンドの詳細については、「[TRUNCATE](r_TRUNCATE.md)」を参照してください。

ALL [ PRIVILEGES ]   <a name="grant-all"></a>
指定したユーザーまたはロールに、使用可能なすべてのアクセス許可を一度に付与します。PRIVILEGES キーワードはオプションです。  
GRANT ALL ON SCHEMA では、外部スキーマに対する CREATE アクセス許可は付与されません。  
Lake Formation で有効になっている AWS Glue Data Catalog のテーブルに対して、ALL アクセス許可を付与することができます。この場合、個々のアクセス許可 (SELECT、ALTER など) は、データカタログに記録されます。  
 Amazon Redshift は、ルールおよび TRIGGER アクセス許可をサポートしていません。詳細については、「[サポートされていない PostgreSQL 機能](c_unsupported-postgresql-features.md)」を参照してください。

ASSUMEROLE  <a name="assumerole"></a>
指定したロールを持つユーザー、ロール、またはグループに対し、COPY、UNLOAD、EXTERNAL FUNCTION、および CREATE MODEL コマンドを実行するアクセス許可を付与します。指定したコマンドを実行すると、ユーザー、ロール、またはグループがこのロールを引き受けます。ASSUMEROLE アクセス許可の使用を開始する際は、「[ASSUMEROLE アクセス許可を付与するための使用上の注意事項](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)」を参照してください。

ON [ TABLE ] *table\$1name*   <a name="grant-on-table"></a>
テーブルまたはビューに対する、指定されたアクセス許可を付与します。TABLE キーワードはオプションです。1 つのステートメントで、複数のテーブルとビューを列挙できます。

ON ALL TABLES IN SCHEMA *schema\$1name*   <a name="grant-all-tables"></a>
参照されるスキーマ内のすべてのテーブルおよびビューに対する、指定されたアクセス許可を付与します。

( *column\$1name* [,...] ) ON TABLE *table\$1name*   <a name="grant-column-level-privileges"></a>
Amazon Redshift テーブルまたはビューの指定された列に対する、指定されたアクセス許可をユーザー、グループ、または PUBLIC に付与します。

(*column\$1list*) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table-column"></a>
参照されるスキーマの Lake Formation テーブルの指定された列について、IAM ロールに、指定されたアクセス許可を付与します。

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="grant-external-table"></a>
参照されるスキーマの指定された Lake Formation テーブルについて、指定されたアクセス許可を IAM ロールに付与します。

ON EXTERNAL SCHEMA *schema\$1name*   <a name="grant-external-schema"></a>
参照されるスキーマについて、指定されたアクセス許可を IAM ロールに付与します。

ON *iam\$1role*   <a name="grant-iam_role"></a>
指定されたアクセス許可を IAM ロールに付与します。

TO *username*   <a name="grant-to"></a>
アクセス許可を受け取るユーザーを示します。

TO IAM\$1ROLE *iam\$1role*   <a name="grant-to-iam-role"></a>
アクセス許可を受け取る IAM ロールを示します。

WITH GRANT OPTION   <a name="grant-with-grant"></a>
アクセス許可を受け取るユーザーが、他のユーザーにも同じアクセス許可を付与できることを示します。WITH GRANT OPTION をグループや PUBLIC に付与することはできません。

ROLE *role\$1name*   <a name="grant-role"></a>
ロールにアクセス許可を付与します。

GROUP *group\$1name*   <a name="grant-group"></a>
ユーザーグループにアクセス許可を付与します。カンマ区切りのリストを使用して、複数のユーザーグループを指定することができます。

PUBLIC   <a name="grant-public"></a>
指定されたアクセス許可を、後で作成されるユーザーを含め、すべてのユーザーに付与します。PUBLIC は、常にすべてのユーザーを含むグループを表します。各ユーザーのアクセス許可は、PUBLIC に付与されたアクセス許可、ユーザーが属するグループに付与されたアクセス許可、およびユーザーに個別に付与されたアクセス許可のすべてで構成されます。  
PUBLIC を Lake Formation EXTERNAL TABLE に付与すると、Lake Formation の *everyone* グループにアクセス許可が付与されます。

CONNECT [ON WORKGROUP] TO \$1 [USER] <prefix>:<username> \$1 ROLE <prefix>:<rolename> \$1 PUBLIC \$1  
ワークグループまたはクラスターを AWS IAM アイデンティティセンター フェデレーションユーザーまたはグループに接続するアクセス許可を付与します。文字列は ID プロバイダーを識別します。PUBLIC に付与されると、アクセス許可は後で作成されたユーザーを含め、すべての AWS IAM アイデンティティセンター フェデレーションユーザーに適用されます。このアクセス許可は、ワークグループまたはクラスターで Amazon Redshift フェデレーティッドアクセス許可が有効になっている場合にのみ適用されます。

CREATE   <a name="grant-create"></a>
データベースオブジェクトに応じて、次のアクセス許可をユーザーまたはユーザーグループに付与します。  
+ データベースの場合、CREATE はデータベース内にスキーマを作成することをユーザーに許可します。
+ スキーマの場合、CREATE はスキーマ内にオブジェクトを作成することをユーザーに許可します。オブジェクトの名前を変更するには、CREATE アクセス許可を持ち、名前を変更するオブジェクトを所有している必要があります。
+ CREATE ON SCHEMA は、Amazon Redshift Spectrum 用の外部スキーマではサポートされていません。外部スキーマの外部テーブルの使用を許可するには、アクセスする必要のあるユーザーに USAGE ON SCHEMA を付与します。外部スキーマの所有者またはスーパーユーザーのみが外部スキーマ内に外部テーブルを作成できます。外部スキーマの所有者を移行するには、「[ALTER SCHEMA](r_ALTER_SCHEMA.md)」を使用して所有者を変更します。

TEMPORARY \$1 TEMP   <a name="grant-temporary"></a>
指定されたデータベースに一時テーブルを作成するアクセス許可を付与します。Amazon Redshift Spectrum クエリを実行するには、データベースユーザーがデータベースに一時テーブルを作成するアクセス権限を持っている必要があります。  
デフォルトでは、PUBLIC グループの自動メンバーシップにより、一時テーブルを作成するアクセス許可がユーザーに付与されます。一時テーブルを作成するアクセス許可をユーザーから削除するには、PUBLIC グループから TEMP アクセス許可を取り消します。次に、一時テーブルを作成する権限を、特定のユーザーまたはユーザーグループに明示的に付与します。

ON DATABASE *db\$1name*   <a name="grant-database"></a>
データベースに対する、指定されたアクセス許可を付与します。

USAGE   <a name="grant-usage"></a>
特定のスキーマに対する USAGE アクセス許可を付与します。これにより、そのスキーマ内のオブジェクトにユーザーがアクセスできるようになります。ローカルの Amazon Redshift スキーマでは、これらのオブジェクトに対する特定のアクションを個別に許可する必要があります (例: テーブルに対する SELECT または UPDATE アクセス許可)。デフォルトでは、PUBLIC スキーマに対して、すべてのユーザーが CREATE および USAGE アクセス許可を持ちます。  
 ON SCHEMA 構文を使用して外部スキーマに USAGE を許可する場合は、外部スキーマのオブジェクトに対して個別にアクションを許可する必要はありません。対応するカタログアクセス許可は、外部スキーマオブジェクトに対する詳細なアクセス許可を制御します。

ON SCHEMA *schema\$1name*   <a name="grant-schema"></a>
スキーマに対する、指定されたアクセス許可を付与します。  
GRANT CREATE ON SCHEMA および GRANT ALL ON SCHEMA の CREATE アクセス許可は、Amazon Redshift Spectrum 外部スキーマではサポートされていません。外部スキーマの外部テーブルの使用を許可するには、アクセスする必要のあるユーザーに USAGE ON SCHEMA を付与します。外部スキーマの所有者またはスーパーユーザーのみが外部スキーマ内に外部テーブルを作成できます。外部スキーマの所有者を移行するには、「[ALTER SCHEMA](r_ALTER_SCHEMA.md)」を使用して所有者を変更します。

EXECUTE ON ALL FUNCTIONS IN SCHEMA *schema\$1name*  <a name="grant-all-functions"></a>
参照されるスキーマ内のすべての関数に対する指定されたアクセス許可を付与します。  
Amazon Redshift は、pg\$1catalog 名前空間で定義された pg\$1proc 組み込みエントリの GRANT または REVOKE ステートメントをサポートしていません。

EXECUTE ON PROCEDURE *procedure\$1name*   <a name="grant-procedure"></a>
特定のストアドプロシージャに対する EXECUTE アクセス許可を付与します。ストアドプロシージャ名は重複する場合があるため、プロシージャの引数リストを含める必要があります。詳細については、「[ストアドプロシージャの名前付け](stored-procedure-naming.md)」を参照してください。

EXECUTE ON ALL PROCEDURES IN SCHEMA *schema\$1name*  <a name="grant-all-procedures"></a>
参照されるスキーマ内のすべてのストアドプロシージャに対する指定されたアクセス許可を付与します。

USAGE ON LANGUAGE *language\$1name*   
言語に対する USAGE アクセス許可を付与します。  
2025 年 11 月 1 日以降、Amazon Redshift は新しい Python UDF の作成をサポートしなくなります。既存の Python UDF は、2026 年 6 月 30 日まで引き続き機能します。2026 年 7 月 1 日以降、Amazon Redshift は Python UDF をサポートしなくなります。2025 年 11 月 1 日より前に既存の Python UDF を Lambda UDF に移行することをお勧めします。Lambda UDF の作成と使用については、「[スカラー Lambda UDF](udf-creating-a-lambda-sql-udf.md)」を参照してください。既存の Python UDF を Lambda UDF に変換する方法については、[ブログ記事](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)を参照してください。
USAGE ON LANGUAGE アクセス許可は、[CREATE FUNCTION](r_CREATE_FUNCTION.md) コマンドを実行してユーザー定義関数 (UDF) を作成するために必要です。詳細については、「[UDF のセキュリティとアクセス許可](udf-security-and-privileges.md)」を参照してください。  
USAGE ON LANGUAGE は、[CREATE PROCEDURE](r_CREATE_PROCEDURE.md) コマンドを実行してストアドプロシージャを作成するために必要です。詳細については、「[ストアドプロシージャのセキュリティおよび権限](stored-procedure-security-and-privileges.md)」を参照してください。  
Python UDF の場合、`plpythonu`を使用します。SQL UDF の場合、`sql`を使用します。ストアドプロシージャの場合、`plpgsql`を使用します。

ON COPY JOB *job\$1name*  <a name="on-copy-job"></a>
コピージョブに対する、指定されたアクセス許可を付与します。

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]   <a name="grant-for"></a>
アクセス許可が付与される SQL コマンドを指定します。ALL を指定することで、COPY、UNLOAD、EXTERNAL FUNCTION、および CREATE MODEL ステートメントに対するアクセス許可を付与できます。この句は、ASSUMEROLE アクセス許可の付与にのみ適用されます。

ALTER  
データ共有にオブジェクトを追加または削除したり、プロパティ PUBLICACCESSIBLE を設定したりするために、ALTER アクセス許可をユーザーに付与します。詳細については、「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

SHARE  
データコンシューマーをデータ共有に追加するためのアクセス許可をユーザーとユーザーグループに付与します。このアクセス許可は、特定のコンシューマー (アカウントまたは名前空間) がクラスターからデータ共有にアクセスできるようにするために必要です。コンシューマーは、グローバル一意識別子 (GUID) で指定されたものと同じか異なるクラスター名前空間を持つ、同じあるいは異なる AWS アカウントに置くことができます。

ON DATASHARE *datashare\$1name*   <a name="grant-datashare"></a>
参照されるデータ共有に対する指定されたアクセス許可を付与します。コンシューマーアクセスコントロールの粒度については、「[Amazon Redshift の異なるレベルでのデータ共有](datashare-overview.md#granularity)」を参照してください。

USAGE  
同じアカウント内のコンシューマーアカウントまたは名前空間に USAGE が付与されると、アカウント内の特定のコンシューマアカウントまたは名前空間は、読み込み専用でデータ共有およびデータ共有のオブジェクトにアクセスできます。

TO NAMESPACE 'clusternamespace GUID'  
コンシューマーがデータ共有に対する指定されたアクセス許可を受け取ることができる同じアカウント内の名前空間を示します。名前空間には 128 ビットの英数字 GUID を使用します。

TO ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]  
コンシューマーがデータ共有に対する指定されたアクセス許可を受け取ることができる別のアカウントの数を示します。「VIA DATA CATALOG」を指定すると、データ共有の使用を Lake Formation のアカウントに許可することになります。このパラメータを省略すると、クラスターを所有するアカウントに使用を許可することになります。

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="grant-datashare"></a>
指定されたデータ共有に作成される、指定されたデータベースに対して指定された使用アクセス許可を付与します。

ON SCHEMA* shared\$1schema*   <a name="grant-datashare"></a>
指定されたデータ共有に作成される指定されたスキーマに対する指定されたアクセス許可を付与します。

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
アクセス許可を付与するデータベースオブジェクトを指定します。IN に続くパラメータは、付与されるアクセス許可の範囲を定義します。

CREATE MODEL  
特定のユーザーまたはユーザーグループに CREATE MODEL アクセス許可を付与します。

ON MODEL *model\$1name*  
特定のモデルに対する EXECUTE アクセス許可を付与します。

ACCESS CATALOG  
ロールがアクセスできるオブジェクトの関連メタデータを表示するアクセス許可を付与します。

\$1 role \$1 [, ...]  
別のロール、ユーザー、または PUBLIC に付与されるロール。  
PUBLIC は、常にすべてのユーザーを含むグループを表します。各ユーザーのアクセス許可は、PUBLIC に付与されたアクセス許可、ユーザーが属するグループに付与されたアクセス許可、およびユーザーに個別に付与されたアクセス許可のすべてで構成されます。

TO \$1 \$1 *user\$1name* [ WITH ADMIN OPTION ] \$1 \$1 role \$1[, ...]  
指定されたロールを、(WITH ADMIN OPTION を使用するか、別のロールを持つ、あるいは PUBLIC である) 指定されたユーザーに付与します。  
WITH ADMIN OPTION 句は、ロールが付与されるすべてのユーザーに対し、そのロールに付与されているすべての管理オプションを提供します。

EXPLAIN \$1 RLS \$1 MASKING \$1 TO ROLE *rolename*  
EXPLAIN プランにおけるクエリのセキュリティポリシーフィルターを説明するアクセス許可をロールに付与します。RLS は、行レベルのセキュリティポリシーフィルターを説明するアクセス許可を付与します。MASKING は、動的データマスキングポリシーフィルターを説明するアクセス許可を付与します。

IGNORE RLS TO ROLE *rolename*   
クエリの行レベルのセキュリティポリシーをバイパスするアクセス許可をロールに付与します。

TO \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
アクセス許可を受け取るセキュリティポリシーを示します。TO RLS POLICY は、行レベルのセキュリティポリシーを示します。TO MASKING POLICY は、動的データマスキングポリシーを示します。

## 使用に関する注意事項
<a name="r_GRANT-usage-notes-link"></a>

GRANT の使用上の注意事項の詳細については、「[使用に関する注意事項](r_GRANT-usage-notes.md)」を参照してください。

## 例
<a name="r_GRANT-examples-link"></a>

GRANT の使用方法の例については、「[例](r_GRANT-examples.md)」を参照してください。

# 使用に関する注意事項
<a name="r_GRANT-usage-notes"></a>

オブジェクトに対する権限を付与するには、次の条件のうち 1 つを満たす必要があります。
+ オブジェクトの所有者であること。
+ スーパーユーザーであること。
+ そのオブジェクトと権限に関する付与権限があること。

例えば、次のコマンドは、employees テーブルに対する SELECT コマンドの実行と、他のユーザーに対する同じ権限の付与と取り消しの両方をユーザー HR に許可します。

```
grant select on table employees to HR with grant option;
```

HR は、SELECT 以外のオペレーションに関する権限や employees 以外のテーブルに関する権限を付与することはできません。

別の例として、次のコマンドは、employees テーブルに対する ALTER コマンドの実行と、他のユーザーに対する同じ権限の付与と取り消しの両方をユーザー HR に許可します。

```
grant ALTER on table employees to HR with grant option;
```

HR は、ALTER 以外のオペレーションに関する権限や employees 以外のテーブルに関する権限を付与することはできません。

ビューに対する権限が付与されていても、その基礎となるテーブルに対する権限を持っていることにはなりません。同様に、スキーマに対する権限が付与されていても、スキーマ内のテーブルに対する権限を持っていることにはなりません。または、基となるテーブルに対するアクセス権を明示的に付与します。

AWS Lake Formation テーブルに権限を付与するには、テーブルの外部スキーマに関連付けられた IAM ロールに、外部テーブルに権限を付与する権限が必要です。次の例では、IAM ロール `myGrantor` に関連付けられた外部スキーマを作成します。IAM ロール `myGrantor` には、他のユーザーにアクセス許可を付与するアクセス許可があります。GRANT コマンドは、外部スキーマに関連付けられている IAM ロール `myGrantor` のアクセス許可を使用して、IAM ロール `myGrantee` にアクセス許可を付与します。

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
grant select
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

IAM ロールにすべての権限を付与すると、関連する Lake Formation が有効なデータカタログで個々の権限が付与されます。例えば、次の GRANT ALL を実行すると、付与された個々の権限 (SELECT、ALTER、DROP、DELETE、および INSERT) が Lake Formation コンソールに表示されます。

```
grant all
on external table mySchema.mytable
to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

スーパーユーザーは、オブジェクトの権限を設定する GRANT コマンドと REVOKE コマンドに関係なく、すべてのオブジェクトにアクセスできます。

## 列レベルのアクセスコントロールの使用上の注意
<a name="r_GRANT-usage-notes-clp"></a>

次の使用上の注意は、Amazon Redshift テーブルとビューに対する列レベルの権限に適用されます。これらの注意事項はテーブルに関して説明しています。例外を明示的に記述しない限り、ビューにも同じ注意事項が適用されます。
+ Amazon Redshift テーブルの場合、列レベルで SELECT 権限と UPDATE 権限のみを付与できます。Amazon Redshift ビューの場合、列レベルで SELECT 権限のみを付与できます。
+ ALL キーワードは、テーブルの列レベルの GRANT のコンテキストで使用される場合に組み合わされる SELECT 権限および UPDATE 権限のシノニムです。
+ テーブル内のすべての列に対する SELECT アクセス許可がない場合、SELECT \$1 操作を実行すると、アクセス権がある列のみが返されます。ビューを使用する場合、SELECT \$1 オペレーションはビュー内のすべての列にアクセスしようとします。すべての列へのアクセス許可がない場合、これらのクエリはアクセス拒否エラーで失敗します。
+ 以下の場合、SELECT \$1 はアクセス可能な列のみに展開されません。
  + SELECT \$1 を使用してアクセス可能な列のみを含む通常のビューを作成することはできません。
  + SELECT \$1 を使用してアクセス可能な列のみを含むマテリアライズドビューを作成することはできません。
+ テーブルまたはビューに対する SELECT 権限または UPDATE 権限がある状態で列を追加した場合、テーブルまたはビューに対するすべての列、したがってそのすべての列に対する権限がまだあります。
+ テーブルの所有者またはスーパーユーザーのみが、列レベルの権限を付与できます。
+ WITH GRANT OPTION 句は、列レベルの権限をサポートしていません。
+ テーブルレベルと列レベルの両方で同じ権限を保持することはできません。例えば、ユーザー `data_scientist` は、テーブル `employee` に対する SELECT 権限と、列 `employee.department` に対する SELECT 権限の両方を保持することはできません。テーブルとテーブル内の列に同じ権限を付与する場合は、次の結果を考慮してください。
  + ユーザーがテーブルでテーブルレベルの権限を持っている場合、列レベルで同じ権限を付与しても効果はありません。
  + ユーザーがテーブルでテーブルレベルの権限を持っている場合に、テーブルの 1 つ以上の列に対して同じ権限を取り消すと、エラーが返されます。代わりに、テーブルレベルで権限を取り消します。
  + ユーザーが列レベルの権限を持っている場合、テーブルレベルで同じ権限を付与するとエラーが返されます。
  + ユーザーが列レベルの権限を持っている場合に、テーブルレベルで同じ権限を取り消すと、テーブルのすべての列に対する列の権限とテーブルの権限の両方が取り消されます。
+ 遅延バインディングビューで列レベルの権限を付与することはできません。
+ マテリアライズドビューを作成するには、ベーステーブルに対するテーブルレベルの SELECT 権限が必要です。特定の列に対する列レベルの権限がある場合でも、それらの列にのみマテリアライズドビューを作成することはできません。ただし、通常のビューと同様に、マテリアライズドビューの列に SELECT 権限を付与できます。
+ 列レベルの権限の付与を検索するには、[PG\$1ATTRIBUTE\$1INFO](r_PG_ATTRIBUTE_INFO.md) ビューを使用します。

## ASSUMEROLE アクセス許可を付与するための使用上の注意事項
<a name="r_GRANT-usage-notes-assumerole"></a>

以下の使用上の注意は、Amazon Redshift での ASSUMEROLE アクセス許可の付与に適用されます。

ASSUMEROLE アクセス許可を使用して、COPY、UNLOAD、EXTERNAL FUNCTION、CREATE MODEL などのコマンドに対する、データベースユーザー、ロール、またはグループの IAM ロールのアクセス許可を制御します。IAM ロールについて、ユーザー、ロール、またはグループに ASSUMEROLE アクセス許可を付与すると、そのユーザー、ロール、またはグループは、そのロールを引き受けてコマンドを実行できます。ASSUMEROLE アクセス許可により、必要に応じて適切なコマンドへのアクセス権を付与することができます。

データベースのスーパーユーザーのみが、ユーザー、ロール、およびグループに対して ASSUMEROLE アクセス許可を付与したり取り消したりできます。スーパーユーザーは、常に ASSUMEROLE アクセス許可を保持します。

ユーザー、ロール、およびグループが ASSUMEROLE アクセス許可を使用できるようにするには、スーパーユーザーは次の 2 つのアクションを実行します。
+ クラスターで次のステートメントを 1 回実行します。

  ```
  revoke assumerole on all from public for all;
  ```
+ 適切なコマンドについて、ユーザー、ロール、およびグループに ASSUMEROLE アクセス許可を付与します。

ASSUMEROLE アクセス許可を付与するときに、ON 句でロールチェーンを指定できます。コンマを使用して、ロールチェーン内のロールを区切ります (例: `Role1,Role2,Role3`)。ASSUMEROLE アクセス許可を付与するときにロールチェーンが指定された場合、ASSUMEROLE アクセス許可によって付与された操作を実行するときにロールチェーンを指定する必要があります。ASSUMEROLE アクセス許可によって付与された操作を実行するときに、ロールチェーン内の個々のロールを指定することはできません。例えば、ユーザー、ロール、またはグループにロールチェーン `Role1,Role2,Role3` が付与されている場合、`Role1` のみを指定してオペレーションを実行することはできません。

ユーザーが COPY、UNLOAD、EXTERNAL FUNCTION、または CREATE MODEL 操作の実行を試みた場合、ASSUMEROLE アクセス許可が付与されていないと、次のようなメッセージが表示されます。

```
ERROR:  User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY 
```

ASSUMEROLE アクセス許可を通じて IAM ロールおよびコマンドへのアクセスが付与されたユーザーを一覧表示するには、「[HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md)」を参照してください。指定したユーザーに付与された IAM ロールとコマンドのアクセス許可を一覧表示するには、「[PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md)」を参照してください。指定した IAM ロールへのアクセスが許可されたユーザー、ロール、およびグループを一覧表示するには、「[PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md)」を参照してください。

## 機械学習アクセス許可の付与に関する使用上の注意事項
<a name="r_GRANT-usage-notes-create-model"></a>

ML 関数に関連するアクセス許可を直接付与または取り消すことはできません。ML 関数は ML モデルに属し、アクセス許可はモデルを通じて制御されます。代わりに、ML モデルに関連するアクセス許可を付与することができます。次の例は、モデル `customer_churn` に関連付けられた ML 関数を実行するアクセス許可をすべてのユーザーに付与する方法を示しています。

```
GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;
```

ML モデル `customer_churn` に対するすべてのアクセス許可をユーザーに付与することもできます。

```
GRANT ALL on MODEL customer_churn TO ml_user;
```

スキーマに ML 関数がある場合、その ML 関数が既に `GRANT EXECUTE ON MODEL` を通じて `EXECUTE` アクセス許可を持っている場合でも、ML 関数に関連する `EXECUTE` アクセス許可の付与は失敗します。`CREATE MODEL` コマンドを使用して ML 関数を個別のスキーマに保持するときには、個別のスキーマを使用することをお勧めします。次の例は、その方法を示しています。

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# 例
<a name="r_GRANT-examples"></a>

 次の例では、SALES テーブルに対する SELECT 権限をユーザーに付与します。`fred`

```
grant select on table sales to fred;
```

次の例では、QA\$1TICKIT スキーマのすべてのテーブルに対する SELECT 権限をユーザー `fred` に付与します。

```
grant select on all tables in schema qa_tickit to fred;
```

次の例では、スキーマ QA\$1TICKIT に対するすべてのスキーマ権限をユーザーグループ QA\$1USERS に付与します。スキーマに対する権限は CREATE と USAGE です。USAGE は、スキーマ内のオブジェクトに対するアクセス権限をユーザーに付与しますが、それらのオブジェクトに対する INSERT や SELECT などの権限は付与しません。各オブジェクトに対する権限を個別に付与します。

```
create group qa_users;
grant all on schema qa_tickit to group qa_users;
```

次の例では、グループ QA\$1USERS のすべてのユーザーに対して、QA\$1TICKIT スキーマの SALES テーブルに対するすべての権限を付与します。

```
grant all on table qa_tickit.sales to group qa_users;
```

次の例では、グループ QA\$1USERS と RO\$1USERS のすべてのユーザーに対して、QA\$1TICKIT スキーマ内の SALES テーブルに対するすべての権限を付与します。

```
grant all on table qa_tickit.sales to group qa_users, group ro_users;
```

次の例では、グループ QA\$1USERS のすべてのユーザーに対して、QA\$1TICKIT スキーマの SALES テーブルに対する DROP 権限を付与します。

```
grant drop on table qa_tickit.sales to group qa_users;>
```

次の一連のコマンドは、スキーマに対するアクセス権限があっても、スキーマ内のテーブルに対する権限は付与されていないことを示しています。

```
create user schema_user in group qa_users password 'Abcd1234';
create schema qa_tickit;
create table qa_tickit.test (col1 int);
grant all on schema qa_tickit to schema_user;

set session authorization schema_user;
select current_user;


current_user
--------------
schema_user
(1 row)


select count(*) from qa_tickit.test;


ERROR: permission denied for relation test [SQL State=42501]


set session authorization dw_user;
grant select on table qa_tickit.test to schema_user;
set session authorization schema_user;
select count(*) from qa_tickit.test;


count
-------
0
(1 row)
```

次の一連のコマンドは、ビューに対するアクセス権限があっても、基礎となるテーブルに対するアクセス権限は付与されていないことを示しています。VIEW\$1USER というユーザーには VIEW\$1DATE に関するすべての権限が付与されていますが、DATE テーブルから選択することはできません。

```
create user view_user password 'Abcd1234';
create view view_date as select * from date;
grant all on view_date to view_user;
set session authorization view_user;
select current_user;


current_user
--------------
view_user
(1 row)


select count(*) from view_date;


count
-------
365
(1 row)


select count(*) from date;


ERROR:  permission denied for relation date
```

次の例では、`cust_profile`テーブルの `cust_name` 列と `cust_phone` 列に対する SELECT 権限をユーザー `user1` に付与します。

```
grant select(cust_name, cust_phone) on cust_profile to user1;
```

次の例では、`cust_name`列と `cust_phone` 列に対する SELECT 権限、そして `cust_profile` テーブルの `cust_contact_preference` 列に対する UPDATE 権限を `sales_group` グループに付与します。

```
grant select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile to group sales_group;
```

次の例では、ALL キーワードを使用して、テーブル `cust_profile` に対する SELECT および UPDATE 権限の両方を `sales_admin` グループに付与します。

```
grant ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile to group sales_admin;
```

次の例では、`cust_profile_vw`ビューの `cust_name` 列に対する SELECT 権限を `user2` ユーザーに付与します。

```
grant select(cust_name) on cust_profile_vw to user2;
```

## データ共有へのアクセス許可を付与する例
<a name="r_GRANT-examples-datashare"></a>

次の例は、データ共有から作成された特定のデータベースまたはスキーマに対する GRANT データ共有の使用許可を示しています。

次の例では、プロデューサー側の管理者が `salesshare` データ共有に対する USAGE アクセス許可を指定された名前空間に付与しています。

```
GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

次の例では、コンシューマー側の管理者が`sales_db` に対する USAGE アクセス許可を `Bob` に付与しています。

```
GRANT USAGE ON DATABASE sales_db TO Bob;
```

次の例では、コンシューマー側の管理者が `sales_schema` スキーマに対する GRANT USAGE アクセス許可を `Analyst_role` ロールに付与しています。`sales_schema`は sales\$1db を指す外部スキーマです。

```
GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

この時点で、`Bob` と `Analyst_role` は、`sales_schema` と `sales_db` のすべてデータベースオブジェクトにアクセスできます。

次の例は、共有データベース内のオブジェクトに追加のオブジェクトレベルのアクセス許可を付与する方法を示しています。これらの追加のアクセス許可は、共有データベースの作成に使用された CREATE DATABASE コマンドで WITH PERMISSIONS 句が使用された場合にのみ必要です。CREATE DATABASE コマンドで WITH PERMISSIONS を使用しなかった場合、共有データベースに USAGE を付与すると、そのデータベース内のすべてのオブジェクトへのフルアクセスが付与されます。

```
GRANT SELECT ON sales_db.sales_schema.tickit_sales_redshift to Bob;
```

## スコープ付きアクセス許可を付与する例
<a name="r_GRANT-examples-scoped"></a>

次の例では、`Sales_db` データベース内の現在および将来のすべてのスキーマの使用を `Sales` ロールに付与します。

```
GRANT USAGE FOR SCHEMAS IN DATABASE Sales_db TO ROLE Sales;
```

次の例では、`Sales_db` データベース内の現在および将来のすべてのテーブルに対する SELECT アクセス許可をユーザー `alice` に付与し、また `Sales_db` のテーブルに対するスコープ付きアクセス許可を他のユーザーに付与する許可を `alice` に付与します。

```
GRANT SELECT FOR TABLES IN DATABASE Sales_db TO alice WITH GRANT OPTION;
```

次の例では、`Sales_schema` スキーマ内の関数に対する EXECUTE アクセス許可をユーザー `bob` に付与します。

```
GRANT EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema TO bob;
```

次の例では、`ShareDb` データベースの `ShareSchema` スキーマ内のすべてのテーブルに対するすべてのアクセス許可を `Sales` ロールに付与します。スキーマを指定するとき、2 つの部分からなる形式 `database.schema` を使用してスキーマのデータベースを指定できます。

```
GRANT ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema TO ROLE Sales;
```

次の例では、前の例と同じです。2 つの部分からなる形式を使用する代わりに、`DATABASE` キーワードを使用してデータベースを指定できます。

```
GRANT ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb TO ROLE Sales;
```

## ASSUMEROLE 権限を付与する例
<a name="r_GRANT-examples-assumerole"></a>

次に、ASSUMEROLE 権限を付与する例を示します。

以下に、ユーザーおよびグループに対して ASSUMEROLE 権限の使用を有効にするために、スーパーユーザーがクラスター上で 1 回実行する必要のある、REVOKE ステートメントの例を示します。次に、スーパーユーザーはユーザーおよびグループに対し、適切なコマンドを使用するための ASSUMEROLE 権限を付与します。ユーザーおよびグループに対する ASSUMEROLE 権限の使用を有効にする方法については、「[ASSUMEROLE アクセス許可を付与するための使用上の注意事項](r_GRANT-usage-notes.md#r_GRANT-usage-notes-assumerole)」を参照してください。

```
revoke assumerole on all from public for all;
```

次の例では、IAM ロール `Redshift-S3-Read` が COPY オペレーションを実行するための ASSUMEROLE 権限をユーザー `reg_user1` に付与します。

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-S3-Read'
to reg_user1 for copy;
```

次の例では、IAM ロールチェーン `RoleA`、`RoleB` が UNLOAD オペレーションを実行するための ASSUMEROLE 権限をユーザー `reg_user1` に付与します。

```
grant assumerole
on 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB'
to reg_user1
for unload;
```

以下は、IAM ロールチェーン `RoleA`、`RoleB`を使用した UNLOAD コマンドの例です。

```
unload ('select * from venue limit 10')
to 's3://companyb/redshift/venue_pipe_'
iam_role 'arn:aws:iam::123456789012:role/RoleA,arn:aws:iam::210987654321:role/RoleB';
```

次の例では、IAM ロール `Redshift-Exfunc` が外部関数を作成するための ASSUMEROLE 権限を、ユーザー `reg_user1` に対し付与しています。

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-Exfunc'
to reg_user1 for external function;
```

次の例では、IAM ロール `Redshift-model` が機械学習モデルを作成するための ASSUMEROLE 権限を、ユーザー `reg_user1` に対し付与しています。

```
grant assumerole on 'arn:aws:iam::123456789012:role/Redshift-ML'
to reg_user1 for create model;
```

## ROLE 権限を付与する例
<a name="r_GRANT-examples-role"></a>

次の例では、user1 にロール sample\$1role1 を付与しています。

```
CREATE ROLE sample_role1;
GRANT ROLE sample_role1 TO user1;
```

次の例では、WITH ADMIN OPTION を使用して sample\$1role1 を user1 に付与します。さらに user1 の現在のセッションを設定した上で、user1 から user2 に sample\$1role1 を付与しています。

```
GRANT ROLE sample_role1 TO user1 WITH ADMIN OPTION;
SET SESSION AUTHORIZATION user1;
GRANT ROLE sample_role1 TO user2;
```

次の例では、sample\$1role1 を sample\$1role2 に付与します。

```
GRANT ROLE sample_role1 TO ROLE sample_role2;
```

次の例では、sample\$1role2 を sample\$1role3 および sample\$1role4 に付与します。次に、sample\$1role3 を sample\$1role1 に付与しようと試みています。

```
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2;
ERROR: cannot grant this role, a circular dependency was detected between these roles
```

次の例では、CREATE USER のシステム権限を sample\$1role1 に付与しています。

```
GRANT CREATE USER TO ROLE sample_role1;
```

次の例では、システム定義のロール `sys:dba` を user1 に付与します。

```
GRANT ROLE sys:dba TO user1;
```

次の例では、循環依存関係を利用して、sample\$1role3 を sample\$1role2 に付与することを試みます。

```
CREATE ROLE sample_role3;
GRANT ROLE sample_role2 TO ROLE sample_role3;
GRANT ROLE sample_role3 TO ROLE sample_role2; -- fail
ERROR:  cannot grant this role, a circular dependency was detected between these roles
```

# INSERT
<a name="r_INSERT_30"></a>

**Topics**
+ [構文](#r_INSERT_30-synopsis)
+ [パラメータ](#r_INSERT_30-parameters)
+ [使用に関する注意事項](#r_INSERT_30_usage_notes)
+ [INSERT の例](c_Examples_of_INSERT_30.md)

新しい行をテーブルに挿入します。VALUES 構文を使用して 1 行、VALUES 構文を使用して複数行、クエリの結果で定義された 1 つまたは複数の行を挿入できます (INSERT INTO ... SELECT)。

**注記**  
大量のデータをロードする場合は [COPY](r_COPY.md) コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを向上させるには、INSERT INTO SELECT または [CREATE TABLE AS](r_CREATE_TABLE_AS.md) を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「[Amazon Redshift でのデータのロード](t_Loading_data.md)」を参照してください。

**注記**  
単一 SQL ステートメントの最大サイズは 16 MB です。

## 構文
<a name="r_INSERT_30-synopsis"></a>

```
INSERT INTO table_name [ ( column [, ...] ) ]
{DEFAULT VALUES |
VALUES ( { expression | DEFAULT } [, ...] )
[, ( { expression | DEFAULT } [, ...] )
[, ...] ] |
query }
```

## パラメータ
<a name="r_INSERT_30-parameters"></a>

 *table\$1name*   
一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルに対して INSERT 権限を持つユーザーのみが行を挿入できます。*query* 句を使用して行を挿入する場合、クエリで指定したテーブルに対して SELECT 権限を持っている必要があります。  
INSERT (外部テーブル) を使用して、SELECT クエリの結果を外部カタログの既存のテーブルに挿入します。詳細については、「[INSERT (外部テーブル)](r_INSERT_external_table.md)」を参照してください。

 *column*   
テーブルの 1 つまたは複数の列に値を挿入できます。ターゲットの列名は、任意の順序で列挙できます。列リストを指定しない場合、挿入する値は、CREATE TABLE ステートメントで宣言した順序で、テーブルの列に対応している必要があります。挿入する値の数が、テーブルの列数よりも少ない場合、最初の *n* 列がロードされます。  
宣言されたデフォルト値または NULL 値が、INSERT ステートメントに含まれない列に (暗黙的または明示的に) ロードされます。

DEFAULT VALUES   
テーブルの作成時に、テーブルの列にデフォルト値が割り当てられた場合、これらのキーワードを使用して、デフォルト値の全体を構成する行を挿入します。いずれかの列がデフォルト値ではない場合、それらの列には NULL が挿入されます。いずれかの列が NOT NULL と宣言されている場合、INSERT ステートメントはエラーを返します。

VALUES   
このキーワードを使用して、1 つまたは複数の行を挿入します。各行は 1 つまたは複数の値で構成されます。各行の VALUES リストは、列リストに対応する必要があります。複数の行を挿入する場合、式リストの間はカンマで区切ります。VALUES キーワードは繰り返さないでください。複数行の INSERT ステートメントのすべての VALUES には、同じ数の値が含まれている必要があります。

 *expression*   
1 つの値、または 1 つの値に評価される式。各値は、挿入される列のデータ型と互換性がある必要があります。可能な場合、データ型が列に宣言されているデータ型と一致しない値は、互換性のあるデータ型に自動的に変換されます。次に例を示します。  
+ 10 進値の `1.1` は `1` として INT に挿入されます。
+ 10 進値の `100.8976` は `100.90` として DEC (5,2) 列に挿入されます。
値を互換性のあるデータ型に明示的に変換するには、式に型変換構文を含めます。例えば、テーブル T1 の列 COL1 が CHAR(3) 列の場合。  

```
insert into t1(col1) values('Incomplete'::char(3));
```
このステートメントは、列に値 `Inc` を挿入します。  
1 行の INSERT VALUES ステートメントの場合、式としてスカラーサブクエリを使用できます。サブクエリの結果は適切な列に挿入されます。  
複数行の INSERT VALUES ステートメントでは、式にサブクエリを使用できません。

DEFAULT   
このキーワードを使用して、テーブル作成時の定義に従って列のデフォルト値を挿入します。列のデフォルト値が存在しない場合、NULL が挿入されます。NOT NULL の制約がある列に CREATE TABLE ステートメントで割り当てられた明示的なデフォルト値がない場合、それらの列にデフォルト値を挿入することはできません。

 *query*()   
クエリを定義して、1 つまたは複数の行をテーブルに挿入します。クエリで生成されたすべての行がテーブルに挿入されます。クエリは、テーブルの列と互換性がある列リストを返す必要がありますが、列名が一致する必要はありません。

## 使用に関する注意事項
<a name="r_INSERT_30_usage_notes"></a>

**注記**  
大量のデータをロードする場合は [COPY](r_COPY.md) コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを向上させるには、INSERT INTO SELECT または [CREATE TABLE AS](r_CREATE_TABLE_AS.md) を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「[Amazon Redshift でのデータのロード](t_Loading_data.md)」を参照してください。

挿入される値のデータ形式は、CREATE TABLE 定義で指定されたデータ形式と一致する必要があります。

 テーブルに新しく多数の行を挿入した後: 
+ ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
+ テーブルを分析して、クエリプランナーの統計情報を更新します。

値が DECIMAL 列に挿入され、指定されたスケールを超えると、必要に応じて、ロードされる値は切り上げられます。例えば、`20.259`という値を DECIMAL(8,2) に挿入すると、ソートされた値は `20.26` になります。

GENERATED BY DEFAULT AS IDENTITY 列を追加できます。GENERATED BY DEFAULT AS IDENTITY として定義された列を、指定した値で更新できます。詳細については、「[GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause)」を参照してください。

# INSERT の例
<a name="c_Examples_of_INSERT_30"></a>

TICKIT データベースの CATEGORY テーブルには、次の行が含まれています。

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
     1 | Sports   | MLB       | Major League Baseball
     2 | Sports   | NHL       | National Hockey League
     3 | Sports   | NFL       | National Football League
     4 | Sports   | NBA       | National Basketball Association
     5 | Sports   | MLS       | Major League Soccer
     6 | Shows    | Musicals  | Musical theatre
     7 | Shows    | Plays     | All non-musical theatre
     8 | Shows    | Opera     | All opera and light opera
     9 | Concerts | Pop       | All rock and pop music concerts
    10 | Concerts | Jazz      | All jazz singers and bands
    11 | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

 CATEGORY テーブルと同様のスキーマを持つ CATEGORY\$1STAGE テーブルを作成します。ただし、列のデフォルト値を定義します。

```
create table category_stage
(catid smallint default 0,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');
```

次の INSERT ステートメントでは、CATEGORY テーブルのすべての行を選択し、CATEGORY\$1STAGE テーブルに挿入します。

```
insert into category_stage
(select * from category);
```

クエリを囲むかっこはオプションです。

このコマンドは、CATEGORY\$1STAGE テーブルに新しい行を挿入します。各列には順番に値が指定されます。

```
insert into category_stage values
(12, 'Concerts', 'Comedy', 'All stand-up comedy performances');
```

特定の値とデフォルトの値を組み合わせた新しい行を挿入できます。

```
insert into category_stage values
(13, 'Concerts', 'Other', default);
```

次のクエリを実行して、挿入される行を返します。

```
select * from category_stage
where catid in(12,13) order by 1;

 catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
    12 | Concerts | Comedy  | All stand-up comedy performances
    13 | Concerts | Other   | General
(2 rows)
```

次の例は、複数行の INSERT VALUES ステートメントを示しています。最初の例では、2 行について特定の CATID 値を挿入し、両方の行の他の列にはデフォルト値を挿入します。

```
insert into category_stage values
(14, default, default, default),
(15, default, default, default);

select * from category_stage where catid in(14,15) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
    14 | General  | General | General
    15 | General  | General | General
(2 rows)
```

次の例では、特定の値とデフォルトの値の多様な組み合わせを使用して 3 つの行を挿入します。

```
insert into category_stage values
(default, default, default, default),
(20, default, 'Country', default),
(21, 'Concerts', 'Rock', default);

select * from category_stage where catid in(0,20,21) order by 1;
 catid | catgroup | catname | catdesc
-------+----------+---------+---------
     0 | General  | General | General
    20 | General  | Country | General
    21 | Concerts | Rock    | General
(3 rows)
```

この例の最初にある一連の VALUES は、単一列の INSERT ステートメントに DEFAULT VALUES を指定した場合と同じ結果を提供します。

次の例では、テーブルに IDENTITY 列がある場合の INSERT の動作を示します。まず、CATEGORY テーブルの新しいバージョンを作成してから、CATEGORY よりこのテーブルに行を挿入します。

```
create table category_ident
(catid int identity not null,
catgroup varchar(10) default 'General',
catname varchar(10) default 'General',
catdesc varchar(50) default 'General');


insert into category_ident(catgroup,catname,catdesc)
select catgroup,catname,catdesc from category;
```

CATID IDENTITY 列には、整数値を指定して挿入できないことに注意してください。IDENTITY 列の値は、自動的に生成されます。

次の例は、複数行の INSERT VALUES ステートメントでは、式としてサブクエリを使用できないことを示しています。

```
insert into category(catid) values
((select max(catid)+1 from category)),
((select max(catid)+2 from category));

ERROR: can't use subqueries in multi-row VALUES
```

次の例は、`WITH SELECT` 句を使用して `venue` テーブルからのデータが入力されたテンポラリテーブルへの挿入を示しています。`venue` テーブルの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

まず、テンポラリテーブル `#venuetemp` を作成します。

```
CREATE TABLE #venuetemp AS SELECT * FROM venue;
```

`#venuetemp` テーブル内の行を一覧表示します。

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756	
...
```

`WITH SELECT` 句を使用して `#venuetemp` テーブルに重複する行を 10 行挿入します。

```
INSERT INTO #venuetemp (WITH venuecopy AS (SELECT * FROM venue) SELECT * FROM venuecopy ORDER BY 1 LIMIT 10);
```

`#venuetemp` テーブル内の行を一覧表示します。

```
SELECT * FROM #venuetemp ORDER BY venueid;
         
venueid | venuename                | venuecity  | venuestate| venueseats
--------+--------------------------+------------+-----------+------------
1        Toyota Park                Bridgeview   IL          0	
1        Toyota Park                Bridgeview   IL          0	
2        Columbus Crew Stadium      Columbus     OH          0	
2        Columbus Crew Stadium      Columbus     OH          0	
3        RFK Stadium                Washington   DC          0
3        RFK Stadium                Washington   DC          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
4        CommunityAmerica Ballpark  Kansas City  KS          0	
5        Gillette Stadium           Foxborough   MA          68756
5        Gillette Stadium           Foxborough   MA          68756
...
```

# INSERT (外部テーブル)
<a name="r_INSERT_external_table"></a>

SELECT クエリの結果を、AWS Glue、AWS Lake Formation、Apache Hive メタストアなどの外部カタログの既存の外部テーブルに挿入します。CREATE EXTERNAL SCHEMA コマンドに使用されるのと同じ AWS Identity and Access Management (IAM) ロールを使用して、外部カタログおよび Amazon S3 とのやり取りを行います。

パーティション分割されていないテーブルの場合、INSERT (外部テーブル) コマンドは、指定されたテーブルプロパティとファイル形式に基づいて、テーブルで定義された Amazon S3 の場所にデータを書き込みます。

パーティション分割されたテーブルの場合、INSERT (外部テーブル) は、テーブルで指定されたパーティションキーに従って、Amazon S3 の場所にデータを書き込みます。また、INSERT オペレーションの完了後、新しいパーティションを外部カタログに自動的に登録します。

トランザクションブロック (BEGIN ... END) 内で INSERT を (外部テーブル) 実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。

## 構文
<a name="r_INSERT_external_table-synopsis"></a>

```
INSERT INTO external_schema.table_name
{ select_statement }
```

## パラメータ
<a name="r_INSERT_external_table-parameters"></a>

 *external\$1schema.table\$1name*   
既存の外部スキーマと挿入するターゲット外部テーブルの名前。

 *select\$1statement*   
クエリを定義して 1 つ以上の行を外部テーブルに挿入するステートメント。クエリによって生成されるすべての行は、テーブル定義に基づいて、テキストまたは Parquet 形式で Amazon S3 に書き込まれます。クエリは、外部テーブルの列のデータ型と互換性のある列リストを返す必要があります。ただし、列名は一致する必要はありません。

## 使用に関する注意事項
<a name="r_INSERT_external_table_usage_notes"></a>

SELECT クエリの列数は、データ列とパーティション列の合計と同じであることが必要です。各データ列の場所とデータ型は、外部テーブルのものと一致する必要があります。パーティション列の場所は、CREATE EXTERNAL TABLE コマンドで定義されたのと同じ順序で、SELECT クエリの最後にあることが必要です。列名は一致する必要はありません。

場合によっては、AWS Glueデータカタログまたは Hive メタストアに対して INSERT (外部テーブル) コマンドを実行する必要があります。AWS Glue の場合、外部スキーマの作成に使用される IAM ロールには、Amazon S3 と AWS Glue に対する読み取りと書き込みの両方のアクセス許可が必要です。AWS Lake Formation カタログを使用する場合、この IAM ロールが新しい Lake Formation テーブルの所有者になります。この IAM ロールには、少なくとも以下のアクセス許可が必要です。
+ 外部テーブルに対する SELECT、INSERT、UPDATE アクセス許可
+ 外部テーブルの Amazon S3 パスに対するデータの場所のアクセス許可

ファイル名が必ず一意になるように、Amazon Redshift ではデフォルトで、Amazon S3 にアップロードされる各ファイルの名前に以下の形式が使用されます。

`<date>_<time>_<microseconds>_<query_id>_<slice-number>_part_<part-number>.<format>`.

例: 「`20200303_004509_810669_1007_0001_part_00.parquet`」。

INSERT (外部テーブル) コマンドを実行するときは、以下の点を考慮してください。
+ PARQUET または TEXTFILE 以外の形式の外部テーブルはサポートされていません。
+ このコマンドは、'write.parallel'、'write.maxfilesize.mb'、'compression\$1type'、'serialization.null.format' などの既存のテーブルプロパティをサポートしています。これらの値を更新するには、ALTER TABLE SET TABLE PROPERTIES コマンドを実行します。
+ 'numRows' テーブルプロパティは、INSERT オペレーションの最後に向かって自動的に更新されます。テーブルプロパティは、CREATE EXTERNAL TABLE AS オペレーションによって作成されていない場合、テーブルに定義または追加する必要があります。
+ LIMIT 句は、外側の SELECT クエリではサポートされていません。代わりに、ネストされた LIMIT 句を使用してください。
+ [STL\$1UNLOAD\$1LOG](r_STL_UNLOAD_LOG.md) テーブルを使用して、各 INSERT (外部テーブル) オペレーションによって Amazon S3 に書き込まれたファイルを追跡できます。
+ Amazon Redshift は、INSERT (外部テーブル) に対する Amazon S3 の標準暗号化のみをサポートします。

## INSERT (外部テーブル) の例
<a name="c_Examples_of_INSERT_external_table"></a>

以下の例では、SELECT ステートメントの結果を外部テーブルに挿入します。

```
INSERT INTO spectrum.lineitem
SELECT * FROM local_lineitem;
```

以下の例では、静的パーティション分割を使用して、SELECT ステートメントの結果をパーティション分割された外部テーブルに挿入します。パーティション列は SELECT ステートメントでハードコーディングされています。パーティション列はクエリの最後にあることが必要です。

```
INSERT INTO spectrum.customer
SELECT name, age, gender, 'May', 28 FROM local_customer;
```

以下の例では、動的パーティション分割を使用して、SELECT ステートメントの結果をパーティション分割された外部テーブルに挿入します。パーティション列はハードコーディングされていません。データは自動的に、既存のパーティションフォルダに追加されるか、または新しいパーティションが追加された場合は新しいフォルダに追加されます。

```
INSERT INTO spectrum.customer
SELECT name, age, gender, month, day FROM local_customer;
```

# LOCK
<a name="r_LOCK"></a>

データベーステーブルへのアクセスを制限します。このコマンドは、トランザクションブロック内で実行されている場合のみ意味を持ちます。

LOCK コマンドは、「ACCESS EXCLUSIVE」モードでテーブルレベルのロックを取得し、必要に応じて、競合するロックが解放されるまで待機します。このように明示的にテーブルをロックすると、他のトランザクションやセッションからテーブルへの読み書きを実行しようとした場合、その操作で待機状態が発生します。あるユーザーが作成した明示的テーブルロックは、別のユーザーがそのテーブルからデータを選択したり、そのテーブルにデータをロードすることを一時的に禁止します。LOCK コマンドを含んでいるトランザクションが終了すると、ロックは解放されます。

制限が緩いテーブルロックは、書き込み操作など、テーブルを参照するコマンドによって黙示的に取得されます。例えば、テーブルからデータを読み取ろうとした際に、別のユーザーがテーブルを更新していた場合、読み込もうとしたデータは、既に確定しているデータのスナップショットになります。(クエリがシリアライズ可能な分離ルールに違反しているときは、クエリが停止する場合もあります。) 「[同時書き込み操作を管理する](c_Concurrent_writes.md)」を参照してください。

DROP TABLE や TRUNCATE など、一部の DDL 操作は排他的ロックを生成します。このような操作により、データの読み取りが禁止されます。

ロックの競合が発生すると、Amazon Redshift はエラーメッセージを表示して、競合するトランザクションを開始したユーザーに警告します。ロックの競合が発生したトランザクションは停止されます。ロックの競合が発生すると、Amazon Redshift は必ず [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md) テーブルにエントリを書き込みます。

## 構文
<a name="section_r_LOCK-synopsis"></a>

```
LOCK [ TABLE ] table_name [, ...]
```

## パラメータ
<a name="parameters"></a>

TABLE   
オプションキーワード

 *table\$1name*   
ロックするテーブルの名前。テーブル名のカンマ区切りリストを使って、複数のテーブルをロックできます。ビューをロックすることはできません。

## 例
<a name="example2"></a>

```
begin;

lock event, sales;

...
```

# MERGE
<a name="r_MERGE"></a>

ソーステーブルの行を条件付きでターゲットテーブルにマージします。従来、これは複数の insert、update、delete ステートメントを別々に使用することによってのみ実現していました。MERGE で組み合わせることができる操作の詳細については、「[UPDATE](https://docs.aws.amazon.com/redshift/latest/dg/r_UPDATE.html)」、「[DELETE](https://docs.aws.amazon.com/redshift/latest/dg/r_DELETE.html)」、「[INSERT](https://docs.aws.amazon.com/redshift/latest/dg/r_INSERT_30.html)」を参照してください。

## 構文
<a name="r_MERGE-synopsis"></a>

```
MERGE INTO target_table 
USING source_table [ [ AS ] alias ] 
ON match_condition 
[ WHEN MATCHED THEN { UPDATE SET col_name = { expr } [,...] | DELETE }
WHEN NOT MATCHED THEN INSERT [ ( col_name [,...] ) ] VALUES ( { expr } [, ...] ) |
REMOVE DUPLICATES ]
```

## パラメータ
<a name="r_MERGE-parameters"></a>

 *target\$1table*  
MERGE ステートメントがマージされる一時または永続テーブル。

 *source\$1table*  
target\$1table にマージする行を提供する一時または永続テーブル。source\$1table は、Spectrum テーブルにすることもできます。****

 *alias*  
*source\$1table* の一時的な代替名。  
このパラメータはオプションです。*alias* の先頭に AS を付けることもできます。

 *match\$1condition*  
ソーステーブルの列とターゲットテーブルの列の間に等しい述語を指定します。これを使用して、*source\$1table* の行が *target\$1table* の行と一致するかどうかを判断します。条件が満たされると、MERGE はその行に対して *matched\$1clause* を実行します。それ以外の場合は、MERGE はその行に対して *not\$1matched\$1clause* を実行します。

WHEN MATCHED  
 ソース行とターゲット行の一致条件が True と評価された場合に実行するアクションを指定します。UPDATE アクションまたは DELETE アクションのいずれかを指定できます。

UPDATE  
 *target\$1table* 内の一致した行を更新します。指定した *col\$1name* の値のみが更新されます。

DELETE  
 *target\$1table* 内の一致した行を削除します。

WHEN NOT MATCHED  
 一致条件が False または Unknown と評価された場合に実行するアクションを指定します。この句には INSERT 挿入アクションのみを指定できます。

INSERT  
 match\$1condition に従って、target\$1table のどの行とも一致しない source\$1table の target\$1table 行に挿入します。********ターゲットの *col\$1name* は、任意の順序でリストできます。*col\$1name* の値を指定しない場合、デフォルトの順序は、テーブルのすべての列が宣言した順序になります。

 *col\$1name*  
修正する 1 つまたは複数の列名。ターゲット列を指定する際にテーブル名を含めないでください。

 *\$1 expr*  
*col\$1name* の新しい値を定義する式。

 REMOVE DUPLICATES  
MERGE コマンドを簡易モードで実行することを指定します。簡易モードには次の要件があります。  
+  *target\$1table* と *source\$1table* は、列数が同じで、列タイプに互換性があり、列の順序が同じである必要があります。
+  MERGE コマンドから WHEN 句、UPDATE 句、INSERT 句を省略します。
+  MERGE コマンドで REMOVE DUPLICATES 句を使用します。
簡易モードの場合、MERGE は次の操作を行います。  
+  *source\$1table* と一致する *target\$1table* 内の行は、*source\$1table* の値と一致するように更新されます。
+  *target\$1table* と一致しない *source\$1table* 内の行は、*target\$1table* に挿入されます。
+  *target\$1table* 内の複数の行が *source\$1table* 内の同じ行と一致する場合、重複する行は削除されます。Amazon Redshift は 1 つの行を保持し、それを更新します。*source\$1table* 内の行と一致しない重複行は変更されません。
REMOVE DUPLICATES を使用すると、WHEN MATCHED や WHEN NOT MATCHED を使用するよりもパフォーマンスが向上します。*target\$1table* と *source\$1table* に互換性があり、*target\$1table* に重複業を保持する必要がない場合は、REMOVE DUPLICATES を使用することをお勧めします。

## 使用に関する注意事項
<a name="r_MERGE_usage_notes"></a>
+ MERGE ステートメントを実行するには、*source\$1table* と *target\$1table* の両方の所有者であるか、それらのテーブルの SELECT 権限を持っている必要があります。さらに、MERGE ステートメントに含まれるオペレーションに応じて、*target\$1table* の UPDATE、DELETE、および INSERT 権限が必要です。
+  *target\$1table* をシステムテーブル、カタログテーブル、または外部テーブルにすることはできません。
+  *source\$1table* と *target\$1table* を同じテーブルにすることはできません。
+  MERGE ステートメントで WITH 句を使用することはできません。
+  *target\$1table* 内の行を *source\$1table* 内の複数の行と一致させることはできません。

  次の例を考えます。

  ```
  CREATE TABLE target (id INT, name CHAR(10));
  CREATE TABLE source (id INT, name CHAR(10));
  
  INSERT INTO target VALUES (1, 'Bob'), (2, 'John');
  INSERT INTO source VALUES (1, 'Tony'), (1, 'Alice'), (3, 'Bill');
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  
  MERGE INTO target USING source ON target.id = source.id
  WHEN MATCHED THEN DELETE
  WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);
  ERROR: Found multiple matches to update the same tuple.
  ```

  ID 値が `1` の `source` テーブルに複数の行があるため、どちらの MERGE ステートメントでも操作は失敗します。
+  *match\$1condition* と *expr* はSUPER 型の列を部分的に参照することはできません。例えば、SUPER 型のオブジェクトが配列または構造体である場合、その列の個々の要素を *match\$1condition* や *expr* に使用することはできませんが、列全体を使用することはできます。

  次の例を考えます。

  ```
  CREATE TABLE IF NOT EXISTS target (key INT, value SUPER);
  CREATE TABLE IF NOT EXISTS source (key INT, value SUPER);
  
  INSERT INTO target VALUES (1, JSON_PARSE('{"key": 88}'));
  INSERT INTO source VALUES (1, ARRAY(1, 'John')), (2, ARRAY(2, 'Bill'));
  
  MERGE INTO target USING source ON target.key = source.key
  WHEN matched THEN UPDATE SET value = source.value[0]
  WHEN NOT matched THEN INSERT VALUES (source.key, source.value[0]);
  ERROR: Partial reference of SUPER column is not supported in MERGE statement.
  ```

  SUPER 型の詳細については、「[SUPER 型](https://docs.aws.amazon.com/redshift/latest/dg/r_SUPER_type.html)」を参照してください。
+ *source\$1table* が大きい場合は、*target\$1table* と *source\$1table* の両方の結合列を分散キーとして定義するとパフォーマンスが向上する可能性があります。
+ REMOVE DUPLICATES 句を使用するには、*target\$1table* に対する SELECT、INSERT、および DELETE アクセス許可が必要です。
+  source\$1table はビューまたはサブクエリです。**次に、source\$1table が重複する行を削除するサブクエリである MERGE ステートメントの例を示します。**

  ```
  MERGE INTO target
  USING (SELECT id, name FROM source GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```
+ ターゲットを、同じ MERGE ステートメントのサブクエリのデータソースにすることはできません。例えば、次の SQL コマンドの場合、サブクエリが `source` でなく `target` を参照しているため、「ERROR: Source view/subquery in Merge statement cannot reference target table」(エラー: Merge ステートメントのソースのビューまたはサブクエリはターゲットテーブルを参照できません) というエラーが返されます。

  ```
  MERGE INTO target
  USING (SELECT id, name FROM target GROUP BY 1, 2) as my_source
  ON target.id = my_source.id
  WHEN MATCHED THEN UPDATE SET id = my_source.id, name = my_source.name
  WHEN NOT MATCHED THEN INSERT VALUES (my_source.id, my_source.name);
  ```

## 例
<a name="sub-examples-merge"></a>

次の例では、2 つのテーブルを作成し、それらに対して MERGE オペレーションを実行して、ターゲットテーブルの一致する行を更新し、一致しない行を挿入します。次に、ソーステーブルに別の値を挿入し、別の MERGE オペレーションを実行します。今度は、一致する行を削除して、ソーステーブルから新しい行を挿入します。

まず、ソーステーブルとターゲットテーブルを作成してデータを入力します。

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (101, 'Bob'), (102, 'John'), (103, 'Susan');
INSERT INTO source VALUES (102, 'Tony'), (103, 'Alice'), (104, 'Bill');

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | John
 103 | Susan
(3 rows)

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
(3 rows)
```

次に、ソーステーブルをターゲットテーブルにマージし、ターゲットテーブルを一致する行で更新し、一致しない行をソーステーブルから挿入します。

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN UPDATE SET id = source.id, name = source.name
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 102 | Tony
 103 | Alice
 104 | Bill
(4 rows)
```

なお、ID 値が 102 と 103 の行は、ターゲットテーブルの名前値と一致するように更新されます。また、ID 値が 104 で名前値が Bill の新しい行がターゲットテーブルに挿入されます。

次に、ソーステーブルに新しい行を挿入します。

```
INSERT INTO source VALUES (105, 'David');

SELECT * FROM source;
 id  |    name
-----+------------
 102 | Tony
 103 | Alice
 104 | Bill
 105 | David
(4 rows)
```

最後に、MERGE オペレーションを実行して、ターゲットテーブルから一致する行を削除し、一致しない行を挿入します。

```
MERGE INTO target USING source ON target.id = source.id
WHEN MATCHED THEN DELETE
WHEN NOT MATCHED THEN INSERT VALUES (source.id, source.name);

SELECT * FROM target;
 id  |    name
-----+------------
 101 | Bob
 105 | David
(2 rows)
```

ID 値が 102、103、104 の行がターゲットテーブルから削除され、ID 値が 105 で名前値が David の新しい行がターゲットテーブルに挿入されます。

次の例は、REMOVE DUPLICATES 句を使用した MERGE コマンドの簡略化された構文を示しています。

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (11, 'Alice'), (23, 'Bill');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
11 | Alice
23 | David
22 | Clarence
(4 rows)
```

次の例は、source\$1table に一致する行がある場合に、target\$1table から重複する行を削除する、REMOVE DUPLICATES 句を使用した MERGE コマンドの簡素化された構文を示しています。****

```
CREATE TABLE target (id INT, name CHAR(10));
CREATE TABLE source (id INT, name CHAR(10));

INSERT INTO target VALUES (30, 'Tony'), (30, 'Daisy'), (11, 'Alice'), (23, 'Bill'), (23, 'Nikki');
INSERT INTO source VALUES (23, 'David'), (22, 'Clarence');

MERGE INTO target USING source ON target.id = source.id REMOVE DUPLICATES;

SELECT * FROM target;
id | name
---+------------
30 | Tony
30 | Daisy
11 | Alice
23 | David
22 | Clarence
(5 rows)
```

MERGE の実行後、*target\$1table* には ID 値 23 の行が 1 つのみになります。*source\$1table* には ID 値 30 の行がなかったため、*target\$1table* には ID 値 30 の 2 つの重複行が残ります。

## 関連情報
<a name="r_MERGE-see-also"></a>

 [INSERT](r_INSERT_30.md), [UPDATE](r_UPDATE.md), [DELETE](r_DELETE.md) 

# PREPARE
<a name="r_PREPARE"></a>

実行用のステートメントを準備します。

PREPARE によって、準備済みステートメントが作成されます。PREPARE ステートメントを実行すると、指定されたステートメント (SELECT、INSERT、UPDATE、または DELETE) が解析、再出力、および計画されます。準備済みステートメントに対して EXECUTE コマンドを発行すると、Amazon Redshift は (指定したパラメータ値に基づいてパフォーマンスを改善するように) 必要に応じてクエリ実行計画を修正してから、その準備済みステートメントを実行することがあります。

## 構文
<a name="r_PREPARE-synopsis"></a>

```
PREPARE plan_name [ (datatype [, ...] ) ] AS statement
```

## パラメータ
<a name="r_PREPARE-parameters"></a>

 *plan\$1name*   
この特定の準備済みステートメントに付けられた任意の名前。この名前は単一セッション内で一意でなければならず、以降は事前に準備済みのステートメントの実行、またはその割当解除に使われます。

 *datatype*   
準備済みステートメントに対するパラメータのデータ型。準備済みステートメント自体のパラメータを参照するには、\$11、\$12 など (最大 \$132767) を使用します。

 * ステートメント*   
SELECT、INSERT、UPDATE または DELETE の任意のステートメント。

## 使用に関する注意事項
<a name="r_PREPARE_usage_notes"></a>

準備済みステートメントでは、パラメータ (ステートメントの実行時にステートメントに代入される値) を使用できます。準備済みステートメントにパラメータを含めるには、PREPARE ステートメントにデータ型のリストを提供し、準備するステートメント自体で、\$11、\$12 などの表記を使って位置によりパラメータを参照します。パラメータの最大数は 32767 です。このステートメントを実行する際に、EXECUTE ステートメントでこれらのパラメータの実際の値を指定します。詳細については、「[EXECUTE](r_EXECUTE.md)」を参照してください。

準備済みステートメントは、現在のセッションの有効期間中のみ有効です。セッションが終了すると、準備済みステートメントは破棄されるため、再使用する場合は、作り直す必要があります。これは、単一の準備済みステートメントを複数の同時データベースクライアントで使用することはできないことも意味します。ただし、各クライアントは独自の準備済みステートメントを作成して使用することができます。準備済みステートメントは、DEALLOCATE コマンドを使って、手動で削除できます。

単一のセッションを使用して多数の類似したステートメントを実行する場合に、準備済みステートメントは、パフォーマンス面での最大のメリットをもたらします。前述したように、準備済みステートメントを新たに実行するたびに、Amazon Redshift は指定されたパラメータ値に基づいてパフォーマンスを向上させるため、クエリの実行計画を修正することがあります。Amazon Redshift が特定の EXECUTE ステートメントに選択したクエリ実行計画を確認するには、[EXPLAIN](r_EXPLAIN.md) コマンドを使用します。

クエリの計画と、クエリの最適化のために Amazon Redshift が収集した統計情報の詳細については、「[ANALYZE](r_ANALYZE.md) コマンド」を参照してください。

## 例
<a name="sub-examples-prepare"></a>

一時テーブルを作成し、INSERT ステートメントを準備した上でそれを実行します。

```
DROP TABLE IF EXISTS prep1;
CREATE TABLE prep1 (c1 int, c2 char(20));
PREPARE prep_insert_plan (int, char)
AS insert into prep1 values ($1, $2);
EXECUTE prep_insert_plan (1, 'one');
EXECUTE prep_insert_plan (2, 'two');
EXECUTE prep_insert_plan (3, 'three');
DEALLOCATE prep_insert_plan;
```

SELECT ステートメントを準備して実行します。

```
PREPARE prep_select_plan (int)
AS select * from prep1 where c1 = $1;
EXECUTE prep_select_plan (2);
EXECUTE prep_select_plan (3);
DEALLOCATE prep_select_plan;
```

## 以下の資料も参照してください。
<a name="r_PREPARE-see-also"></a>

 [DEALLOCATE](r_DEALLOCATE.md), [EXECUTE](r_EXECUTE.md) 

# REFRESH MATERIALIZED VIEW
<a name="materialized-view-refresh-sql-command"></a>

マテリアライズドビューの更新

マテリアライズドビューを作成する際、そのコンテンツには、その時点での基となるデータベーステーブルまたはテーブルの状態が反映されます。アプリケーションが基となるテーブルにあるデータを変更しても、マテリアライズドビューのデータは変更されません。

マテリアライズドビューのデータは、`REFRESH MATERIALIZED VIEW` ステートメントを使用して随時更新できます。このステートメントを使用する際は、Amazon Redshift は、ベーステーブルまたはテーブルで行われた変更を特定し、特定した変更をマテリアライズドビューに適用します。

マテリアライズドビューの詳細については、「[Amazon Redshift でのマテリアライズドビュー](materialized-view-overview.md)」を参照してください。

## 構文
<a name="mv_REFRESH_MATERIALIZED_VIEW-synopsis"></a>

```
REFRESH MATERIALIZED VIEW mv_name [ RESTRICT | CASCADE ]
```

## パラメータ
<a name="mv_REFRESH_MATERIALIZED_VIEW-parameters"></a>

*mv\$1name*  
更新するマテリアライズドビューの名前。

RESTRICT  
オプションキーワード 指定されたマテリアライズドビューを更新しますが、依存するマテリアライズドビューは更新しません。RESTRICT も CASCADE も指定しない場合のデフォルト。

CASCADE  
オプションキーワード 指定したマテリアライズドビューとそのすべての依存マテリアライズドビューを更新します。

## 使用に関する注意事項
<a name="mv_REFRESH_MARTERIALIZED_VIEW_usage"></a>

マテリアライズドビューの所有者のみが、そのマテリアライズドビューに対して `REFRESH MATERIALIZED VIEW` のオペレーションを実行できます。さらに、`REFRESH MATERIALIZED VIEW`を正常に実行するには、所有者が基となるベーステーブルに対する SELECT 権限を持っている必要があります。

`REFRESH MATERIALIZED VIEW` コマンドは、独自のトランザクションとして実行されます。Amazon Redshift トランザクションのセマンティクスに従って、ベーステーブルの、どのデータが `REFRESH` コマンドに表示されるか、または `REFRESH` コマンドによって加えられた変更が Amazon Redshift で実行中の他のトランザクションにいつ表示されるかを判断します。
+ 増分マテリアライズドビューの場合、`REFRESH MATERIALIZED VIEW`はコミット済みのベーステーブル行のみを使用します。したがって、同じトランザクション内のデータ操作言語 (DML) ステートメントの後に更新操作が実行された場合、その DML ステートメントの変更は更新のために表示されません。
+ マテリアライズドビューの完全更新の場合、`REFRESH MATERIALIZED VIEW`は、通常の Amazon Redshift トランザクションセマンティクスに従って、更新トランザクションに表示されるすべてのベーステーブル行を表示します。
+ 入力引数型よっては、マテリアライズドビューの増分リフレッシュが Amazon Redshift でサポートされています。特定の入力引数型を持つ次の関数です。DATE (タイムスタンプ)、DATE\$1PART (日付、時刻、間隔、time-tz)、DATE\$1TRUNC (タイムスタンプ、間隔)。
+ 増分更新は、ベーステーブルがデータ共有内にあるマテリアライズドビューでサポートされます。
+ リモートデータ共有クラスターからの共有マテリアライズドビューの更新は、他のマテリアライズドビュー、Spectrum テーブル、異なる Redshift クラスターまたは UDF で定義されたテーブルのリファレンスを含むマテリアライズドビューではサポートされていません。このようなマテリアライズドビューは、ローカル (プロデューサー) クラスターから更新できます。

Amazon Redshift の一部のオペレーションは、マテリアライズドビューに影響します。こうしたオペレーションの中には、マテリアライズドビューを定義するクエリで増分更新のための SQL 機能のみが使用されている場合でも、`REFRESH MATERIALIZED VIEW`オペレーションによってマテリアライズドビューが完全に再計算されるものがあります。次に例を示します。
+ マテリアライズドビューが更新されない場合、バックグラウンドでのバキューム操作がブロックされることがあります。内部でしきい値の期間を定義したら、バキュームの実行が許可されます。バキュームを操作すると、依存するマテリアライズドビューは、次の更新時に (増分更新であっても) 再計算する対象としてマークされます。VACUUM の詳細については、「[VACUUM](r_VACUUM_command.md)」を参照してください。イベントとステータス変更の詳細については、「[STL\$1MV\$1STATE](r_STL_MV_STATE.md)」を参照してください。
+ ベーステーブルで実行されるユーザー操作には、次に REFRESH が実行された際に、マテリアライズドビューが完全に再計算されるように強制するものがあります。このような操作の例としては、手動で呼び出された VACUUM、従来のサイズ変更、ALTER DISTKEY 操作、ALTER SORTKEY 操作、および切り捨て操作があります。自動オペレーションでは、次に REFRESH オペレーションが実行されたときにマテリアライズドビューが完全に再計算されることもあります。例えば、auto-vacuum delete オペレーションでは、完全な再計算が発生する可能性があります。イベントとステータス変更の詳細については、「[STL\$1MV\$1STATE](r_STL_MV_STATE.md)」を参照してください。

## カスケード更新
<a name="mv_REFRESH_MATERIALIZED_VIEW_cascading"></a>

CASCADE オプションは、指定したマテリアライズドビューとそのすべての依存マテリアライズドビューを依存関係の順に更新します。ベースの MV からトップの MV へと (トポロジ順) に更新します。これにより、一連のネストされたマテリアライズドビューを 1 つのコマンドで更新できます。

RESTRICT オプション (RESTRICT も CASCADE も指定しない場合のデフォルト) は、指定したマテリアライズドビューのみを更新します。

CASCADE を使用すると、以下のルールが適用されます。
+ マテリアライズドビューの所有者またはスーパーユーザーのみが `REFRESH MATERIALIZED VIEW ... CASCADE` コマンドを実行できます。
+ カスケード内のマテリアライズドビューのいずれかを更新できない場合、カスケードオペレーション全体が停止します。

カスケード更新機能は、ローカルおよびストリーミングマテリアライズドビューの上にネストされた MV でのみサポートされます。Spectrum やデータ共有などの他のソースタイプを持つマテリアライズドビューは、カスケードモードではサポートされません。CASCADE は、すべてネストされた MV に対して 1 つのトランザクションで更新を実行します。

## データ共有内のマテリアライズドビューの増分更新
<a name="mv_REFRESH_MATERIALIZED_VIEW_datashare"></a>

 Amazon Redshift は、ベーステーブルを共有している場合、コンシューマーデータ共有でのマテリアライズドビューの自動更新と増分更新をサポートしています。増分更新は、Amazon Redshift が前回の更新後に発生したベーステーブルの変更を特定し、マテリアライズドビューの対応するレコードのみを更新する操作です。この動作の詳細については、「[CREATE MATERIALIZED VIEW](https://docs.aws.amazon.com/redshift/latest/dg/materialized-view-create-sql-command.html#mv_CREATE_MARTERIALIZED_VIEW_datashare)」を参照してください。

## 増分更新の制約事項
<a name="mv_REFRESH_MARTERIALIZED_VIEW_limitations"></a>

Amazon Redshift では、現在のところ、次の SQL 要素のいずれかを使用してクエリで定義されたマテリアライズドビューの増分更新はサポートされていません。
+ OUTER JOIN (右、左、またはフル)。
+ 集合演算: UNION、INTERSECT、EXCEPT、MINUS。
+ サブクエリと集計関数で発生するか、または GROUP BY 句がクエリに存在する場合、またはターゲットのマテリアライズドビューにソートキーが含まれる場合は、UNION ALL。
+ 集計関数は、MEDIAN、PERCENTILE\$1CONT、LISTAGG、STDDEV\$1SAMP、STDDEV\$1POP、APPROXIMATE COUNT、APPROXIMATE PERCENTILE、およびビット単位の集計関数です。
**注記**  
COUNT、SUM、MIN、MAX、および AVG 集計関数がサポートされています。
+ DISTINCT COUNT、DISTINCT SUM などの DISTINCT 集計関数。
+ ウィンドウ関数。
+ 共通部分式の最適化など、クエリの最適化に一時テーブルを使用するクエリ。
+ サブクエリ
+ マテリアライズドビューを定義するクエリで以下の形式を参照する外部テーブル。
  +  Delta Lake 
  +  Hudi 

  上記以外のフォーマットを使用して定義されたマテリアライズドビューでは、増分更新がサポートされます。詳細については、「[Amazon Redshift Spectrum の外部データレイクテーブルのマテリアライズドビュー外部データレイクテーブルのマテリアライズドビュー](materialized-view-external-table.md)」を参照してください。
+ 日時関数、RANDOM、STABLE 以外のユーザー定義関数など、可変関数。
+ ゼロ ETL 統合の増分更新に関する制限については、「[Amazon Redshift とのゼロ ETL 統合を使用する場合の考慮事項](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl.reqs-lims.html)」を参照してください。
+ 複数のデータベースからのテーブルへのアクセス。

VACUUM などのバックグラウンド操作がマテリアライズドビューの更新オペレーションに与える影響など、マテリアライズドビューの制限の詳細については、[使用に関する注意事項](#mv_REFRESH_MARTERIALIZED_VIEW_usage) を参照してください。

## 例
<a name="mv_REFRESH_MARTERIALIZED_VIEW_examples"></a>

次の例では、マテリアライズドビュー `tickets_mv` を更新します。

```
REFRESH MATERIALIZED VIEW tickets_mv;
```

次の例では、`products_mv` マテリアライズドビューとそのすべての依存マテリアライズドビューを更新します。

```
REFRESH MATERIALIZED VIEW products_mv CASCADE; 
```

# RESET
<a name="r_RESET"></a>

設定パラメータの値をデフォルト値に戻します。

指定した単一のパラメータ、またはすべてのパラメータを同時にリセットできます。単一のパラメータを指定値に設定するには、[SET](r_SET.md)コマンドを使用します。パラメータの現在の値を表示するには、[SHOW](r_SHOW.md)コマンドを使用します。

## 構文
<a name="r_RESET-synopsis"></a>

```
RESET { parameter_name | ALL }
```

次のステートメントは、セッションコンテキスト変数の値を NULL に設定します。

```
RESET { variable_name | ALL }
```

## パラメータ
<a name="r_RESET-parameters"></a>

 *parameter\$1name*   
リセットするパラメータの名前。パラメータの詳細については、「[サーバー設定の変更](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings)」を参照してください。

すべて   
すべてのセッションコンテキスト変数を含む、すべてのランタイムパラメータをリセットします。

*変数*   
リセットする変数の名前。RESET の値がセッションコンテキスト変数の場合、Amazon Redshift はその値を NULL に設定します。

## 例
<a name="r_RESET-examples"></a>

次の例では、`query_group`パラメータをデフォルト値にリセットします。

```
reset query_group;
```

次の例では、すべてのランタイムパラメータをデフォルト値にリセットします。

```
reset all;
```

次の例では、コンテキスト変数をリセットします。

```
RESET app_context.user_id;
```

# REVOKE
<a name="r_REVOKE"></a>

テーブルの作成、削除、または更新を行うためのアクセス許可をユーザーまたはロールから削除します。

ON SCHEMA 構文を使用するデータベースユーザーおよびロールには、外部スキーマに対する USAGE アクセス許可の GRANT (付与) または REVOKE (取り消し) のみを行うことができます。AWS Lake Formation で ON EXTERNAL SCHEMA を使用する場合は、AWS Identity and Access Management(IAM) ロールに対して、アクセス許可の GRANT (付与) および REVOKE (取り消し) のみを行うことができます。アクセス許可のリストについては、構文を参照してください。

ストアドプロシージャの場合、USAGE ON LANGUAGE `plpgsql` アクセス許可はデフォルトで PUBLIC に付与されます。EXECUTE ON PROCEDURE アクセス許可は、デフォルトで所有者とスーパーユーザーにのみ付与されます。

REVOKE コマンドで、削除するアクセス許可を指定します。アクセス許可を付与するには、[GRANT](r_GRANT.md) コマンドを使用します。

## 構文
<a name="r_REVOKE-synopsis"></a>

```
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | ALTER | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] }
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | TEMPORARY | TEMP | ALTER } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE db_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
EXECUTE
    ON FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { EXECUTE } [,...] | ALL [ PRIVILEGES ] }
    ON PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
USAGE
    ON LANGUAGE language_name [, ...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
[ RESTRICT ]

REVOKE [GRANT OPTION FOR] 
{ { ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
    ON COPY JOB job_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]    

REVOKE [GRANT OPTION FOR]
{ { ALTER | DROP | USAGE } [,...] | ALL [ PRIVILEGES ] }
    ON TEMPLATE template_name [,...]
    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### テーブルの列レベルのアクセス許可の取り消し
<a name="revoke-column-level"></a>

Amazon Redshift テーブルとビューに対する列レベルのアクセス許可の構文を次に示します。

```
REVOKE { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) }
     ON { [ TABLE ] table_name [, ...] }
     FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
     [ RESTRICT ]
```

### ASSUMEROLE アクセス許可の取り消し
<a name="revoke-assumerole-permissions"></a>

以下に、指定されたロールを持つユーザーおよびグループから ASSUMEROLE アクセス許可を取り消すための構文を示します。

```
REVOKE ASSUMEROLE
    ON { 'iam_role' [, ...]  | default | ALL }
    FROM { user_name | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL }
```

### Lake Formation の Redshift Spectrum のアクセス許可の取り消し
<a name="revoke-spectrum-integration-with-lf-permissions"></a>

以下に、Redshift Spectrum と Lake Formation の統合構文を示します。

```
REVOKE [ GRANT OPTION FOR ]
{ SELECT | ALL [ PRIVILEGES ] } ( column_list )
    ON EXTERNAL TABLE schema_name.table_name
    FROM { IAM_ROLE iam_role } [, ...]

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | ALTER | DROP | DELETE | INSERT }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL TABLE schema_name.table_name [, ...]
    FROM { { IAM_ROLE iam_role } [, ...] | PUBLIC }

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | ALTER | DROP }  [, ...] | ALL [ PRIVILEGES ] }
    ON EXTERNAL SCHEMA schema_name [, ...]
    FROM { IAM_ROLE iam_role } [, ...]
```

### データ共有アクセス許可の取り消し
<a name="revoke-datashare-permissions"></a>

**プロデューサー側のデータ共有のアクセス許可**  
以下は、REVOKE を使用してユーザーまたはロールから ALTER または SHARE アクセス許可を削除するための構文です。アクセス許可が取り消されたユーザーは、データ共有を変更したり、コンシューマーに使用を許可したりできなくなります。

```
REVOKE { ALTER | SHARE } ON DATASHARE datashare_name
 FROM { username [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

以下は、REVOKE を使用してデータ共有へのコンシューマのアクセスを削除するための構文です。

```
REVOKE USAGE
 ON DATASHARE datashare_name
 FROM NAMESPACE 'namespaceGUID' [, ...] | ACCOUNT 'accountnumber' [ VIA DATA CATALOG ] [, ...]
```

以下は、Lake Formation アカウントからデータ共有の使用を取り消す例です。

```
REVOKE USAGE ON DATASHARE salesshare FROM ACCOUNT '123456789012' VIA DATA CATALOG;
```

**コンシューマー側のデータ共有のアクセス許可**  
以下は、データ共有から作成された特定のデータベースまたはスキーマに対するデータ共有使用許可の REVOKE 構文です。WITH PERMISSIONS 句で作成されたデータベースから使用許可を取り消しても、基礎となるオブジェクトに付与されたオブジェクトレベルの許可を含め、ユーザーまたはロールに付与した追加の許可は取り消されません。そのユーザーまたはロールに使用許可を再付与しても、使用を取り消す前に持っていた追加の権限はすべて保持されます。

```
REVOKE USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema}
 FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
```

### スコープ付きアクセス許可の取り消し
<a name="revoke-scoped-permissions"></a>

スコープ設定アクセス許可を使用すると、データベースまたはスキーマ内の特定タイプのすべてのオブジェクトに対するアクセス許可をユーザーまたはロールに付与できます。スコープ設定アクセス許可を持つユーザーやロールは、データベースまたはスキーマ内の現在および将来のすべてのオブジェクトに対して指定されたアクセス許可を持ちます。

データベースレベルのスコープ付きアクセス許可の範囲は、[SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) で確認できます。スキーマレベルのスコープ付きアクセス許可の範囲は、[SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md) で確認できます。

スコープ設定アクセス許可の詳細については、「[スコープ設定アクセス許可](t_scoped-permissions.md)」を参照してください。

以下は、ユーザーとロールからスコープ付きアクセス許可を取り消すための構文です。

```
REVOKE [ GRANT OPTION ] 
{ CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }
FOR SCHEMAS IN
DATABASE db_name 
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ]
{ { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }
FOR TABLES IN
{ SCHEMA schema_name [ DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR FUNCTIONS IN 
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] { EXECUTE | ALL [ PRIVILEGES ] }
FOR PROCEDURES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]

REVOKE [ GRANT OPTION ] USAGE
FOR LANGUAGES IN
DATABASE db_name
FROM { username | ROLE role_name } [, ...]  

REVOKE [GRANT_OPTION] 
{ { CREATE | ALTER | DROP} [,...] | ALL [ PRIVILEGES ] }
FOR COPY JOBS 
IN DATABASE db_name
FROM { username [ WITH GRANT OPTION ] | ROLE role_name } [, ...]      

REVOKE [ GRANT OPTION ]
{ {ALTER | DROP  | USAGE } [,...] | ALL [ PRIVILEGES ] }
FOR TEMPLATES IN
{ SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
FROM { username | ROLE role_name } [, ...]
```

スコープ設定アクセス許可では、関数とプロシージャのアクセス許可が区別されないことに注意してください。例えば、次のステートメントは、スキーマ `Sales_schema` で `bob` の関数とプロシージャの両方に対する `EXECUTE` アクセス許可を取り消します。

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

### 機械学習アクセス許可の取り消し
<a name="revoke-model-permissions"></a>

以下は、Amazon Redshift での機械学習モデルアクセス許可の構文です。

```
REVOKE [ GRANT OPTION FOR ]
    CREATE MODEL FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON MODEL model_name [, ...]

    FROM { username | ROLE role_name | GROUP group_name | PUBLIC } [, ...]
    [ RESTRICT ]
```

### ロールアクセス許可の取り消し
<a name="revoke-roles"></a>

以下に、Amazon Redshift でロールのアクセス許可を取り消すための構文を示します。

```
REVOKE [ ADMIN OPTION FOR ] { ROLE role_name } [, ...] FROM { user_name } [, ...]
```

```
REVOKE { ROLE role_name } [, ...] FROM { ROLE role_name } [, ...]
```

以下に、Amazon Redshift でシステムのアクセス許可を取り消すための構文を示します。

```
REVOKE
  {
    { CREATE USER | DROP USER | ALTER USER |
    CREATE SCHEMA | DROP SCHEMA |
    ALTER DEFAULT PRIVILEGES |
    ACCESS CATALOG |
    CREATE TABLE | DROP TABLE | ALTER TABLE |
    CREATE OR REPLACE FUNCTION | CREATE OR REPLACE EXTERNAL FUNCTION |
    DROP FUNCTION |
    CREATE OR REPLACE PROCEDURE | DROP PROCEDURE |
    CREATE OR REPLACE VIEW | DROP VIEW |
    CREATE MODEL | DROP MODEL |
    CREATE DATASHARE | ALTER DATASHARE | DROP DATASHARE |
    CREATE LIBRARY | DROP LIBRARY |
    CREATE ROLE | DROP ROLE
    TRUNCATE TABLE
    VACUUM | ANALYZE | CANCEL }[, ...]
  }
  | { ALL [ PRIVILEGES ] }
FROM { ROLE role_name } [, ...]
```

### セキュリティポリシーのアクセス許可の取り消し
<a name="revoke-role-level"></a>

次の内容は、EXPLAIN プランのクエリにおけるセキュリティポリシーフィルタを説明する許可を取り消す構文です。可能なセキュリティポリシーには、行レベルのセキュリティポリシーと動的データマスキングポリシーが含まれます。

```
REVOKE EXPLAIN { RLS | MASKING } FROM ROLE rolename 
```

次の内容は、クエリの行レベルのセキュリティポリシーをバイパスする許可を取り消す構文です。

```
REVOKE IGNORE RLS FROM ROLE rolename 
```

次の内容は、指定されたセキュリティポリシーから SELECT 許可を取り消す構文です。可能なセキュリティポリシーには、行レベルのセキュリティポリシーと動的データマスキングポリシーが含まれます。

```
REVOKE SELECT ON [ TABLE ] table_name [, ...]
            FROM { RLS | MASKING } POLICY policy_name [, ...]
```

## パラメータ
<a name="r_REVOKE-parameters"></a>

GRANT OPTION FOR   
他のユーザーに特定の許可を付与するオプションのみを取り消し、許可自体は取り消しません。グループや PUBLIC の GRANT OPTION を取り消すことはできません。

SELECT   
SELECT ステートメントを使用して、テーブルやビューからデータを選択する許可を取り消します。

INSERT   
INSERT ステートメントまたは COPY ステートメントを使用して、データをテーブルにロードする許可を取り消します。

UPDATE   
UPDATE ステートメントを使用して、テーブル列を更新する許可を取り消します。

DELETE   
テーブルからデータ行を削除する許可を取り消します。

REFERENCES   
外部キー制限を作成する許可を取り消します。参照先テーブルと参照元テーブルの両方で、この許可を取り消してください。

TRUNCATE  
テーブルを切り捨てるアクセス許可を取り消します。このアクセス許可がない場合、テーブルの所有者またはスーパーユーザーだけがテーブルを切り捨てることができます。TRUNCATE コマンドの詳細については、「[TRUNCATE](r_TRUNCATE.md)」を参照してください。

ALL [ PRIVILEGES ]   
指定されたユーザーまたはグループから、使用可能なすべての許可を一括で取り消します。PRIVILEGES キーワードはオプションです。  
 Amazon Redshift は、ルールおよび TRIGGER アクセス許可をサポートしていません。詳細については、「[サポートされていない PostgreSQL 機能](c_unsupported-postgresql-features.md)」を参照してください。

ALTER  
データベースオブジェクトに応じて、ユーザーまたはユーザーグループから以下のアクセス許可を取り消します。  
+ テーブルの場合、ALTER はテーブルまたはビューを変更するアクセス許可を取り消します。詳細については、「[ALTER TABLE](r_ALTER_TABLE.md)」を参照してください。
+ データベースの場合、ALTER はデータベースを変更するアクセス許可を取り消します。詳細については、「[ALTER DATABASE](r_ALTER_DATABASE.md)」を参照してください。
+ スキーマの場合、ALTER はスキーマの変更を取り消すことを許可します。詳細については、「[ALTER SCHEMA](r_ALTER_SCHEMA.md)」を参照してください。
+ 外部テーブルの場合、ALTER は、Lake Formation で有効になっている AWS Glue Data Catalog 内のテーブルを変更するアクセス許可を取り消します。この許可は、Lake Formation を使用する場合にのみ適用されます。

DROP  
データベースオブジェクトに応じて、ユーザーまたはロールが持つ以下のアクセス許可を取り消します。  
+  テーブルの場合、DROP はテーブルまたはビューを削除するアクセス許可を取り消します。詳細については、「[DROP TABLE](r_DROP_TABLE.md)」を参照してください。
+  データベースの場合、DROP はデータベースを削除するアクセス許可を取り消します。詳細については、「[DROP DATABASE](r_DROP_DATABASE.md)」を参照してください。
+  スキーマの場合、DROP はスキーマを削除するアクセス許可を取り消します。詳細については、「[DROP SCHEMA](r_DROP_SCHEMA.md)」を参照してください。

ASSUMEROLE  <a name="assumerole"></a>
指定したロールを持つユーザー、ロール、またはグループから COPY、UNLOAD、EXTERNAL FUNCTION、または CREATE MODEL コマンドを実行するアクセス許可を取り消します。

ON [ TABLE ] *table\$1name*   
テーブルまたはビューに関して、指定された許可を取り消します。TABLE キーワードはオプションです。

ON ALL TABLES IN SCHEMA *schema\$1name*   
参照されたスキーマ内のすべてのテーブルに指定された許可を取り消します。

( *column\$1name* [,...] ) ON TABLE *table\$1name*   <a name="revoke-column-level-privileges"></a>
Amazon Redshift テーブルまたはビューの指定した列のユーザー、グループ、または PUBLIC から指定された許可を取り消します。

(*column\$1list*) ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table-column"></a>
参照されるスキーマで、Lake Formation テーブルの指定された列の IAM ロールから、指定された許可を取り消します。

ON EXTERNAL TABLE *schema\$1name.table\$1name*   <a name="revoke-external-table"></a>
参照されるスキーマの指定された Lake Formation テーブルの IAM ロールから、指定された許可を取り消します。

ON EXTERNAL SCHEMA *schema\$1name*   <a name="revoke-external-schema"></a>
参照されるスキーマの IAM ロールから、指定された許可を取り消します。

FROM IAM\$1ROLE *iam\$1role*   <a name="revoke-from-iam-role"></a>
許可が取り消される IAM ロールを示します。

ROLE *role\$1name*   
指定されたロールからアクセス許可を取り消します。

GROUP *group\$1name*   
指定されたユーザーグループから許可を取り消します。

PUBLIC   
すべてのユーザーから、指定された許可を取り消します。PUBLIC は、常にすべてのユーザーを含むグループを表します。各ユーザーのアクセス許可は、PUBLIC に付与されたアクセス許可、ユーザーが属するグループに付与されたアクセス許可、およびユーザーに個別に付与されたアクセス許可のすべてで構成されます。  
Lake Formation 外部テーブルから PUBLIC を取り消すと、Lake Formation の *everyone* グループからアクセス許可が取り消されます。

CREATE   
データベースオブジェクトに応じて、ユーザーまたはグループから以下のアクセス許可を取り消します。  
+ データベースでは、REVOKE の CREATE 句を使用してユーザーがデータベース内でスキーマを作成することを阻止します。
+ スキーマでは、REVOKE の CREATE 句を使用してユーザーがスキーマ内でオブジェクトを作成することを阻止します。オブジェクトの名前を変更するには、CREATE アクセス許可を持ち、名前を変更するオブジェクトを所有している必要があります。
デフォルトでは、PUBLIC スキーマに対して、すべてのユーザーが CREATE と USAGE アクセス許可を持ちます。

TEMPORARY \$1 TEMP   
指定されたデータベースに一時テーブルを作成するアクセス許可を取り消します。  
デフォルトでは、PUBLIC グループの自動メンバーシップにより、一時テーブルを作成するアクセス許可がユーザーに付与されます。ユーザーが一時テーブルを作成するためのアクセス許可を削除するには、PUBLIC グループから TEMP アクセス許可を取り消してから、特定のユーザーまたはユーザーのグループに対して、一時テーブルを作成するアクセス許可を明示的に付与します。

ON DATABASE *db\$1name*   
指定されたデータベースに関するアクセス許可を取り消します。

USAGE   
特定のスキーマ内のオブジェクトに対する USAGE アクセス許可を取り消します。ユーザーはこれらのオブジェクトにアクセスできなくなります。これらのオブジェクトに関する特定のアクションは、個別に取り消す必要があります (関数に対する EXECUTE アクセス許可など)。  
デフォルトでは、PUBLIC スキーマに対して、すべてのユーザーが CREATE と USAGE アクセス許可を持ちます。

ON SCHEMA *schema\$1name*   
指定されたスキーマに関するアクセス許可を取り消します。スキーマアクセス許可を使用して、テーブルの作成を制御できます。データベースの CREATE アクセス許可は、スキーマの作成だけを制御します。

RESTRICT   
ユーザーが直接付与したアクセス許可だけを取り消します。この動作がデフォルトです。

EXECUTE ON PROCEDURE *procedure\$1name*   
特定のストアドプロシージャに対する EXECUTE アクセス許可を取り消します。ストアドプロシージャ名は重複する場合があるため、プロシージャの引数リストを含める必要があります。詳細については、「[ストアドプロシージャの名前付け](stored-procedure-naming.md)」を参照してください。

EXECUTE ON ALL PROCEDURES IN SCHEMA *procedure\$1name*   
参照されるスキーマ内のすべてのプロシージャに対する指定されたアクセス許可を取り消します。

USAGE ON LANGUAGE *language\$1name*   
言語に対する USAGE アクセス許可を取り消します。Python ユーザー定義関数 (UDF) の場合、`plpythonu`を使用します。SQL UDF の場合、`sql`を使用します。ストアドプロシージャの場合、`plpgsql`を使用します。  
UDF を作成するには、SQL または `plpythonu` (Python) 用の言語に対する使用のアクセス権限が必要です。デフォルトでは、USAGE ON LANGUAGE SQL は PUBLIC に付与されます。ただし、特定のユーザーやグループに対しては USAGE ON LANGUAGE PLPYTHONU を明示的に付与する必要があります。  
SQL の使用を取り消すには、最初に PUBLIC に対して使用を取り消します。次に、SQL UDF の作成を許可された特定のユーザーやグループにのみ、SQL の使用を許可します。次の例では、最初に PUBLIC に対して SQL の使用を取り消し、次にユーザーグループ `udf_devs` に使用を許可します。  

```
revoke usage on language sql from PUBLIC;
grant usage on language sql to group udf_devs;
```
詳細については、「[UDF のセキュリティとアクセス許可](udf-security-and-privileges.md)」を参照してください。  
ストアドプロシージャの使用を取り消すには、最初に PUBLIC に対して使用を取り消します。次に、SQL UDF の作成を許可された特定のユーザーやグループにのみ、`plpgsql`の使用を許可します。詳細については、「[ストアドプロシージャのセキュリティおよび権限](stored-procedure-security-and-privileges.md)」を参照してください。

ON COPY JOB *job\$1name*  <a name="on-copy-job-revoke"></a>
コピージョブに対する、指定されたアクセス許可を取り消します。

FOR \$1 ALL \$1 COPY \$1 UNLOAD \$1 EXTERNAL FUNCTION \$1 CREATE MODEL \$1 [, ...]  <a name="revoke-for"></a>
アクセス許可を取り消す SQL コマンドを指定します。ALL を指定することで、COPY、UNLOAD、EXTERNAL FUNCTION、および CREATE MODEL ステートメントに対するアクセス許可を取り消すことができます。この句は、ASSUMEROLE アクセス許可の取り消しにのみ適用されます。

ALTER  
データ共有を所有していないユーザーまたはユーザーグループがデータ共有を変更できるようにする、ユーザーまたはユーザーグループの ALTER アクセス許可を取り消します。このアクセス許可は、データ共有にオブジェクトを追加または削除したり、プロパティ PUBLICACCESSIBLE を設定したりするために必要です。詳細については、「[ALTER DATASHARE](r_ALTER_DATASHARE.md)」を参照してください。

SHARE  
データ共有にコンシューマーをするための、ユーザーおよびユーザーグループのアクセス許可を取り消します。特定のコンシューマークラスターからデータ共有にアクセスするのを停止するには、このアクセス許可を取り消す必要があります。

ON DATASHARE *datashare\$1name *  
参照されるデータ共有に対する指定されたアクセス許可を付与します。

FROM ユーザーネーム  
アクセス許可を失うユーザーを示します。

FROM GROUP *group\$1name*  
アクセス許可を失うユーザーグループを示します。

WITH GRANT OPTION  
アクセス許可を失うユーザーが、他のユーザーの同じアクセス許可を取り消すことができることを示します。グループや PUBLIC の WITH GRANT OPTION を取り消すことはできません。

USAGE  
同じアカウント内のコンシューマーアカウントまたは名前空間に対して USAGE が取り消された場合、アカウント内の指定されたコンシューマーアカウントまたは名前空間は、読み込み専用でデータ共有およびデータ共有のオブジェクトにアクセスできません。  
USAGE アクセス許可を取り消すと、コンシューマーからのデータ共有へのアクセス権が取り消されます。

FROM NAMESPACE 'clusternamespace GUID'  
データ共有へのアクセス許可を失うコンシューマーと同じアカウントの名前空間を示します。名前空間は、128 ビットの英数字のグローバル一意識別子 (GUID) を使用します。

FROM ACCOUNT 'accountnumber' [ VIA DATA CATALOG ]  
データ共有へのアクセス許可を失うコンシューマーと別のアカウントのアカウント番号を示します。「VIA DATA CATALOG」を指定すると、データ共有の使用を Lake Formation のアカウントから取り消すことになります。アカウント番号を省略すると、クラスターを所有するアカウントから取り消すことになります。

ON DATABASE *shared\$1database\$1name> [, ...]*   <a name="revoke-datashare"></a>
指定されたデータ共有に作成された指定されたデータベースに対する指定された使用アクセス許可を取り消します。

ON SCHEMA* shared\$1schema*   <a name="revoke-datashare"></a>
指定されたデータ共有に作成された指定されたスキーマに対する指定されたアクセス許可を取り消します。

FOR \$1 SCHEMAS \$1 TABLES \$1 FUNCTIONS \$1 PROCEDURES \$1 LANGUAGES \$1 COPY JOBS\$1 IN   
アクセス許可を取り消すデータベースオブジェクトを指定します。IN に続くパラメータは、取り消されたアクセス許可のスコープを定義します。

CREATE MODEL  
指定されたデータベースに機械学習モデルを作成する CREATE MODEL アクセス許可を取り消します。

ON MODEL *model\$1name*  
特定のモデルについての EXECUTE アクセス許可を取り消します。

ACCESS CATALOG  
ロールがアクセスできるオブジェクトの関連メタデータを表示するアクセス許可を取り消します。

[ ADMIN OPTION FOR ] \$1 role \$1 [, ...]  
指定された (WITH ADMIN OPTION を使用している) ユーザーから取り消すロール。

FROM \$1 role \$1 [, ...]  
取り消すために指定したロールが付与されているロール。

EXPLAIN \$1 RLS \$1 MASKING \$1 FROM ROLE *rolename*  
EXPLAIN プランにおけるクエリのセキュリティポリシーフィルターを説明するアクセス許可をロールから取り消します。RLS は、行レベルのセキュリティポリシーフィルターを説明するアクセス許可を取り消します。MASKING は、動的データマスキングポリシーフィルターを説明するアクセス許可を取り消します。

IGNORE RLS FROM ROLE *rolename*   
ロールからのクエリの行レベルのセキュリティポリシーをバイパスするアクセス許可を取り消します。

FROM \$1 RLS \$1 MASKING \$1 POLICY *policy\$1name*  
アクセス許可を失うユーザーを示します。TO RLS POLICY は、行レベルのセキュリティポリシーを示します。TO MASKING POLICY は、動的データマスキングポリシーを示します。

## 使用に関する注意事項
<a name="r_REVOKE-usage-notes-link"></a>

REVOKE の使用上の注意事項の詳細については、「[使用に関する注意事項](r_REVOKE-usage-notes.md)」を参照してください。

## 例
<a name="r_REVOKE-examples-link"></a>

REVOKE の使用方法の例については、「[例](r_REVOKE-examples.md)」を参照してください。

# 使用に関する注意事項
<a name="r_REVOKE-usage-notes"></a>

オブジェクトから権限を取り消すには、次の条件のうち 1 つを満たす必要があります。
+ オブジェクトの所有者であること。
+ スーパーユーザーであること。
+ そのオブジェクトと権限に関する付与権限があること。

  例えば、次のコマンドは、employees テーブルに対する SELECT コマンドの実行と、他のユーザーに対する同じ権限の付与と取り消しの両方をユーザー HR に許可します。

  ```
  grant select on table employees to HR with grant option;
  ```

  HR は、SELECT 以外のオペレーションに関する権限や employees 以外のテーブルに関する権限を取り消すことはできません。

スーパーユーザーは、オブジェクトの権限を設定する GRANT コマンドと REVOKE コマンドに関係なく、すべてのオブジェクトにアクセスできます。

PUBLIC は、常にすべてのユーザーを含むグループを表します。デフォルトでは、PUBLIC スキーマに対して、PUBLIC のすべてのメンバーが CREATE 特権および USAGE 特権を持ちます。PUBLIC スキーマのすべてのユーザーのアクセス許可を制限するには、まず PUBLIC スキーマの PUBLIC からすべてのアクセス許可を取り消し、次に特定のユーザーまたはグループに権限を付与します。次の例では、PUBLIC スキーマのテーブル作成権限を管理します。

```
revoke create on schema public from public;
```

Lake Formation テーブルから権限を取り消すには、テーブルの外部スキーマに関連付けられた IAM ロールに、外部テーブルから許可を取り消す権限が必要です。次の例では、IAM ロール `myGrantor` に関連付けられた外部スキーマを作成します。IAM ロール `myGrantor` には、他のユーザーからアクセス許可を取り消すアクセス許可があります。REVOKE コマンドは、外部スキーマに関連付けられている IAM ロール `myGrantor` のアクセス許可を使用して、IAM ロール `myGrantee` のアクセス許可を取り消します。

```
create external schema mySchema
from data catalog
database 'spectrum_db'
iam_role 'arn:aws:iam::123456789012:role/myGrantor'
create external database if not exists;
```

```
revoke select
on external table mySchema.mytable
from iam_role 'arn:aws:iam::123456789012:role/myGrantee';
```

**注記**  
Lake Formation で有効になっている AWS Glue Data Catalog の `ALL` アクセス許可が、IAM ロールにもある場合は、この `ALL` アクセス許可は取り消されません。`SELECT` アクセス許可のみ取り消されます。Lake Formation アクセス許可は、Lake Formation コンソールで表示することができます。

## ASSUMEROLE アクセス許可を取り消すための使用上の注意事項
<a name="r_REVOKE-usage-notes-assumerole"></a>

以下の使用上の注意は、Amazon Redshift で ASSUMEROLE 権限を取り消す場合に適用されます。

データベースのスーパーユーザーのみが、ユーザーおよびグループの ASSUMEROLE 権限を取り消すことができます。スーパーユーザーは、常に ASSUMEROLE 権限を保持します。

ユーザーおよびグループに対して ASSUMEROLE 権限の使用を有効にするために、スーパーユーザーはクラスター上で次のステートメントを 1 回実行します。ユーザーおよびグループに ASSUMEROLE 権限を付与する前に、スーパーユーザーはクラスター上で次のステートメントを 1 回実行する必要があります。

```
revoke assumerole on all from public for all;
```

## 機械学習アクセス許可の取り消しに関する使用上の注意事項
<a name="r_REVOKE-usage-notes-create-model"></a>

ML 関数に関連するアクセス許可を直接付与または取り消すことはできません。ML 関数は ML モデルに属し、アクセス許可はモデルを通じて制御されます。代わりに、ML モデルに関連するアクセス許可を取り消すことができます。次の例は、モデル `customer_churn` に関連付けられたすべてのユーザーから実行アクセス許可を取り消す方法を示しています。

```
REVOKE EXECUTE ON MODEL customer_churn FROM PUBLIC;
```

ML モデル `customer_churn` に対するすべてのアクセス許可をユーザーから取り消すこともできます。

```
REVOKE ALL on MODEL customer_churn FROM ml_user;
```

スキーマに ML 関数がある場合、その ML 関数が既に `GRANT EXECUTE ON MODEL` を通じて `EXECUTE` アクセス許可を持っている場合でも、ML 関数に関連する `EXECUTE` アクセス許可の付与または取り消しは失敗します。`CREATE MODEL` コマンドを使用して ML 関数を個別のスキーマに保持するときには、個別のスキーマを使用することをお勧めします。次の例は、その方法を示しています。

```
CREATE MODEL ml_schema.customer_churn
FROM customer_data
TARGET churn
FUNCTION ml_schema.customer_churn_prediction
IAM_ROLE default
SETTINGS (
 S3_BUCKET 'amzn-s3-demo-bucket'
);
```

# 例
<a name="r_REVOKE-examples"></a>

次の例では、SALES テーブルに関する INSERT 権限を GUESTS ユーザーグループから取り消します。このコマンドを実行すると、GUESTS のメンバーは、INSERT コマンドを使って SALES テーブルにデータをロードすることができなくなります。

```
revoke insert on table sales from group guests;
```

次の例では、QA\$1TICKIT スキーマのすべてのテーブルに対する SELECT 権限をユーザー `fred` から取り消します。

```
revoke select on all tables in schema qa_tickit from fred;
```

次の例では、SELECT 権限をユーザー `bobr` のビューから取り消します。

```
revoke select on table eventview from bobr;
```

次の例では、TICKIT データベースで一時テーブルを作成する権限をすべてのユーザーから取り消します。

```
revoke temporary on database tickit from public;
```

次の例では、`cust_profile`テーブルの `cust_name` 列 と `cust_phone` 列に対する SELECT 権限をユーザー `user1` から取り消します。

```
revoke select(cust_name, cust_phone) on cust_profile from user1;
```

次の例では、`sales_group`グループから、`cust_profile`テーブルの `cust_name` 列と `cust_phone` 列に対する SELECT 権限と `cust_contact_preference` 列に対する UPDATE 権限を取り消します。

```
revoke select(cust_name, cust_phone), update(cust_contact_preference) on cust_profile from group sales_group;
```

次の例では、ALL キーワードを使用して、`sales_admin`グループ `cust_profile` テーブルの 3 つの列に対する SELECT 権限と UPDATE 権限の両方を取り消す方法を説明します。

```
revoke ALL(cust_name, cust_phone,cust_contact_preference) on cust_profile from group sales_admin;
```

次の例では、`cust_profile_vw`ビューの `cust_name` 列に対する SELECT 権限を `user2` ユーザーから取り消す方法を説明します。

```
revoke select(cust_name) on cust_profile_vw from user2;
```

## データ共有経由で作成されたデータベースから USAGE アクセス許可を取り消す例
<a name="r_REVOKE-examples-datashare"></a>

次の例では、`13b8833d-17c6-4f16-8fe4-1a018f5ed00d` 名前空間から `salesshare` データ共有へのアクセスを取り消します。

```
REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

次の例では、`sales_db` に対する USAGE アクセス許可を `Bob` から取り消します。

```
REVOKE USAGE ON DATABASE sales_db FROM Bob;
```

次の例では、`sales_schema` に対する USAGE アクセス許可を `Analyst_role` から REVOKE します。

```
REVOKE USAGE ON SCHEMA sales_schema FROM ROLE Analyst_role;
```

## スコープ付きアクセス許可を取り消す例
<a name="r_REVOKE-examples-scoped"></a>

次の例では、`Sales_db` データベース内の現在および将来のすべてのスキーマの使用を `Sales` ロールから取り消します。

```
REVOKE USAGE FOR SCHEMAS IN DATABASE Sales_db FROM ROLE Sales;
```

次の例では、`Sales_db` データベース内の現在および将来のすべてのテーブルに対する SELECT アクセス許可をユーザー `alice` に付与する権限を取り消します。`alice` は `Sales_db` 内のすべてのテーブルへのアクセスを保持します。

```
REVOKE GRANT OPTION SELECT FOR TABLES IN DATABASE Sales_db FROM alice;
```

次の例では、`Sales_schema` スキーマ内の関数の EXECUTE アクセス許可をユーザー `bob` から削除します。

```
REVOKE EXECUTE FOR FUNCTIONS IN SCHEMA Sales_schema FROM bob;
```

次の例では、`ShareDb` データベースの `ShareSchema` スキーマ内のすべてのテーブルに対するすべてのアクセス許可を `Sales` ロールから削除します。スキーマを指定するとき、2 つの部分からなる形式 `database.schema` を使用してスキーマのデータベースを指定することもできます。

```
REVOKE ALL FOR TABLES IN SCHEMA ShareDb.ShareSchema FROM ROLE Sales;
```

次の例では、前の例と同じです。2 つの部分からなる形式を使用する代わりに、`DATABASE` キーワードを使用してスキーマのデータベースを指定できます。

```
REVOKE ALL FOR TABLES IN SCHEMA ShareSchema DATABASE ShareDb FROM ROLE Sales;
```

## AssumeROLE 権限を取り消す例
<a name="r_REVOKE-examples-assumerole"></a>

次に、ASSUMEROLE 権限を取り消す例を示します。

スーパーユーザーは、クラスターで次のステートメントを 1 回実行することによって、ユーザーおよびグループに対して ASSUMEROLE 権限の使用を有効にする必要があります。

```
revoke assumerole on all from public for all;
```

次のステートメントは、すべてのオペレーションのすべてのロールについて、ユーザー reg\$1user1 からの ASSUMEROLE 権限を取り消します。

```
revoke assumerole on all from reg_user1 for all;
```

## ROLE 権限を取り消す例
<a name="r_REVOKE-examples-role"></a>

次の例では、sample\$1role1 を sample\$1role2 から取り消します。

```
CREATE ROLE sample_role2;
GRANT ROLE sample_role1 TO ROLE sample_role2;
REVOKE ROLE sample_role1 FROM ROLE sample_role2;
```

次の例では、user1 からシステム権限を取り消します。

```
GRANT ROLE sys:DBA TO user1;
REVOKE ROLE sys:DBA FROM user1;
```

次の例では、user1 から sample\$1role1 と sample\$1role2 を取り消します。

```
CREATE ROLE sample_role1;
CREATE ROLE sample_role2;
GRANT ROLE sample_role1, ROLE sample_role2 TO user1;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM user1;
```

次の例では、ADMIN OPTION を指定して user1 から sample\$1role2 を取り消します。

```
GRANT ROLE sample_role2 TO user1 WITH ADMIN OPTION;
REVOKE ADMIN OPTION FOR ROLE sample_role2 FROM user1;
REVOKE ROLE sample_role2 FROM user1;
```

次の例では、sample\$1role5 から sample\$1role1 と sample\$1role2 を取り消します。

```
CREATE ROLE sample_role5;
GRANT ROLE sample_role1, ROLE sample_role2 TO ROLE sample_role5;
REVOKE ROLE sample_role1, ROLE sample_role2 FROM ROLE sample_role5;
```

次の例では、sample\$1role1 のシステム権限、CREATE SCHEMA および DROP SCHEMA を取り消します。

```
GRANT CREATE SCHEMA, DROP SCHEMA TO ROLE sample_role1;
REVOKE CREATE SCHEMA, DROP SCHEMA FROM ROLE sample_role1;
```

# ROLLBACK
<a name="r_ROLLBACK"></a>

現在のトランザクションを停止し、そのトランザクションで実行されたすべての更新を破棄します。

このコマンドは、[ABORT](r_ABORT.md)コマンドと同じ機能を実行します。

## 構文
<a name="r_ROLLBACK-synopsis"></a>

```
ROLLBACK [ WORK | TRANSACTION ]
```

## パラメータ
<a name="r_ROLLBACK-parameters"></a>

WORK  
オプションキーワード このキーワードは、ストアドプロシージャ内ではサポートされていません。

TRANSACTION  
オプションキーワード WORK と TRANSACTION は同義語です。ストアドプロシージャ内ではいずれもサポートされていません。

ストアドプロシージャ内での ROLLBACK の使用方法については、[トランザクションの管理](stored-procedure-transaction-management.md)を参照してください。

## 例
<a name="r_ROLLBACK-example"></a>

次の例では、テーブルを作成し、データがそのテーブルに挿入されるトランザクションを開始します。次に ROLLBACK コマンドを実行すると、データ挿入がロールバックされ、テーブルは空の状態になります。

次のコマンドを実行すると、MOVIE\$1GROSS という名前のテーブルが作成されます。

```
create table movie_gross( name varchar(30), gross bigint );
```

次のコマンドセットを実行すると、2 つのデータ行をテーブルに挿入するトランザクションが開始されます。

```
begin;

insert into movie_gross values ( 'Raiders of the Lost Ark', 23400000);

insert into movie_gross values ( 'Star Wars', 10000000 );
```

その後、次のコマンドを実行すると、テーブルからデータが選択され、挿入が正常に実行されたことが示されます。

```
select * from movie_gross;
```

コマンド出力に、両方の行が正常に挿入されたことが示されます。

```
name           |  gross
-------------------------+----------
Raiders of the Lost Ark | 23400000
Star Wars               | 10000000
(2 rows)
```

このコマンドはデータ変更を、トランザクションの開始時点までロールバックします。

```
rollback;
```

テーブルからデータを選択すると、空のテーブルが表示されます。

```
select * from movie_gross;

name | gross
------+-------
(0 rows)
```

# SELECT
<a name="r_SELECT_synopsis"></a>

テーブル、ビュー、およびユーザー定義関数から行を返します。

**注記**  
単一 SQL ステートメントの最大サイズは 16 MB です。

## 構文
<a name="r_SELECT_synopsis-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

**Topics**
+ [構文](#r_SELECT_synopsis-synopsis)
+ [WITH 句](r_WITH_clause.md)
+ [SELECT リスト](r_SELECT_list.md)
+ [EXCLUDE column\$1list](r_EXCLUDE_list.md)
+ [FROM 句](r_FROM_clause30.md)
+ [WHERE 句](r_WHERE_clause.md)
+ [GROUP BY 句](r_GROUP_BY_clause.md)
+ [HAVING 句](r_HAVING_clause.md)
+ [QUALIFY 句](r_QUALIFY_clause.md)
+ [UNION、INTERSECT、または EXCEPT](r_UNION.md)
+ [ORDER BY 句](r_ORDER_BY_clause.md)
+ [CONNECT BY 句](r_CONNECT_BY_clause.md)
+ [サブクエリの例](r_Subquery_examples.md)
+ [相関性のあるサブクエリ](r_correlated_subqueries.md)

# WITH 句
<a name="r_WITH_clause"></a>

WITH 句は、クエリ内の SELECT リストに先行するオプション句です。WITH 句は、1 つまたは複数の common\$1table\$1expressions** を定義します。各共通テーブル式 (CTE) は、ビュー定義に似ている一時テーブルを定義します。これらの一時テーブルは、FROM 句で参照できます。それらは、所属するクエリが実行されている間にのみ使用されます。WITH 句内の各 CTE は、テーブル名、列名のオプションリスト、およびテーブルに対して評価を実行するクエリ表現 (SELECT ステートメント) を指定します。一時テーブル名を定義しているのと同じクエリ式の FROM 句で一時テーブル名を参照すると、CTE は再帰的になります。

WITH 句のサブクエリは、単一のクエリ実行中に、使用可能なテーブルを効率的に定義します。SELECT ステートメントの本文内でサブクエリを使用することで、すべてのケースで同じ結果を実現できますが、WITH 句のサブクエリの方が、読み書きが簡単になることがあります。可能な場合は、複数回参照される、WITH 句のサブクエリは、一般的な副次式として最適化されます。つまり、一度 WITH サブクエリを評価すると、その結果を再利用することができるということです。(一般的な副次式は、WITH 句内で定義される副次式に制限されない点に注意してください。)

## 構文
<a name="r_WITH_clause-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
```

ここで、*common\$1table\$1expression* は、非再帰的または再帰的のいずれかになります。非再帰形式は次のとおりです。

```
CTE_table_name [ ( column_name [, ...] ) ] AS ( query )
```

以下は、*common\$1table\$1expression* の再帰形式です。

```
CTE_table_name (column_name [, ...] ) AS ( recursive_query )
```

## パラメータ
<a name="r_WITH_clause-parameters"></a>

 RECURSIVE   
クエリを再帰的な CTE として識別するキーワード。WITH 句で定義された *common\$1table\$1expression* が再帰的である場合、このキーワードは必須です。WITH 句に複数の再帰的な CTE が含まれている場合でも、WITH キーワードの直後に RECURSIVE キーワードを指定できるのは 1 回だけです。一般に、再帰的な CTE は、2 つの部分で構成される UNION ALL サブクエリです。

 *common\$1table\$1expression*   
[FROM 句](r_FROM_clause30.md) で参照できる一時テーブルを定義し、それが属するクエリの実行中にのみ使用されます。

 CTE\$1table\$1name**   
WITH 句のサブクエリの結果を定義する一時テーブルの一意な名前。単一の WITH 句内で重複する名前を使用することはできません。各サブクエリには、[FROM 句](r_FROM_clause30.md)で参照可能なテーブル名を付ける必要があります。

 *column\$1name*   
 WITH 句サブクエリの出力列名を、カンマで区切ったリスト。指定された列名の数は、サブクエリで定義した列数以下でなければなりません。非再帰的な CTE の場合、*column\$1name* 句はオプションです。再帰的な CTE の場合、*column\$1name* リストが必要です。

 *query*()   
 Amazon Redshift がサポートする任意の SELECT クエリ。「[SELECT](r_SELECT_synopsis.md)」を参照してください。

 *recursive\$1query*   
2 つの SELECT サブクエリから構成される UNION ALL クエリ。  
+ 最初の SELECT サブクエリには、同じ *CTE\$1table\$1name* への再帰リファレンスがありません。再帰の最初のシードである結果セットを返します。この部分は、初期メンバーまたはシードメンバーと呼ばれます。
+ 2 番目の SELECT サブクエリは、FROM 句で同じ *CTE\$1table\$1name* を参照します。これは、再帰メンバーと呼びます。*recursive\$1query* には、*recursive\$1query* を終了するための WHERE 条件が含まれています。

## 使用に関する注意事項
<a name="r_WITH_clause-usage-notes"></a>

次の SQL ステートメントで WITH 句を使用できます。
+ SELECT 
+ SELECT INTO
+ CREATE TABLE AS
+ CREATE VIEW
+ DECLARE
+ EXPLAIN
+ INSERT INTO...SELECT 
+ PREPARE
+ UPDATE (WHERE 句のサブクエリ内。サブクエリで再帰的な CTE を定義することはできません。再帰的な CTE は、UPDATE 句の前に配置する必要があります)。
+ DELETE

WITH 句を含んでいるクエリの FROM 句が、WITH 句によって定義されたテーブルを参照していない場合、含まれている WITH 句は無視された上でクエリは通常どおり実行されます。

WITH 句のサブクエリで定義されたテーブルは、WITH 句が開始した SELECT クエリの範囲でのみ参照可能です。例えば、このようなテーブルは、SELECT リスト、WHERE 句、または HAVING 句内のサブクエリの FROM 句で参照できます。サブクエリ内で WITH 句を使用し、メインクエリまたは別のサブクエリの FROM 句でそのテーブルを参照することはできません。このクエリパターンを使用すると、WITH 句のテーブルに対して、`relation table_name doesn't exist`という形式のエラーメッセージが発生します。

WITH 句のサブクエリ内で、別の WITH 句を指定することはできません。

WITH 句のサブクエリによって定義されたテーブルに対して、前方参照を作成することはできません。例えば次のクエリでは、テーブル W1 の定義内でテーブル W2 への前方参照を設定しているため、エラーが帰されます。

```
with w1 as (select * from w2), w2 as (select * from w1)
select * from sales;
ERROR:  relation "w2" does not exist
```

WITH 句のサブクエリは、SELECT INTO ステートメントを構成できません。しかし、SELECT INTO ステートメント内で WITH 句を使用することは可能です。

## 再帰的なテーブル共通式
<a name="r_WITH_clause-recursive-cte"></a>

再帰*共通テーブル式 (CTE)* はそれ自体を参照する CTE です。再帰的な CTE は、従業員とマネージャー間のレポート関係を示す組織図などの階層データのクエリに役立ちます。「[例: 再帰的な CTE](#r_WITH_clause-recursive-cte-example)」を参照してください。

もう 1 つの一般的な用途は、製品が多くのコンポーネントで構成され、各コンポーネント自体も他のコンポーネントまたはサブアセンブリで構成されている場合のマルチレベルの部品表です。

再帰クエリの 2 番目の SELECT サブクエリに WHERE 句を含めることで、再帰の深さを制限する必要があります。例については、「[例: 再帰的な CTE](#r_WITH_clause-recursive-cte-example)」を参照してください。この制限を行わない場合は、次のようなエラーが発生する可能性があります。
+ `Recursive CTE out of working buffers.`
+ `Exceeded recursive CTE max rows limit, please add correct CTE termination predicates or change the max_recursion_rows parameter.`

**注記**  
`max_recursion_rows` は、無限再帰ループを防ぐために再帰 CTE が返すことができる最大行数を設定するパラメータです。これをデフォルトよりも大きな値に変更しないことをお勧めします。これにより、クエリの無限再帰の問題がクラスター内で過剰なスペースを占有することを防ぎます。

 再帰的な CTE の結果に対するソート順と制限を指定できます。再帰的な CTE の最終結果に、group by オプションと distinct オプションを含めることができます。

サブクエリ内で、WITH RECURSIVE 句を指定することはできません。*recursive\$1query* メンバーには、order by 句または limit 句を含めることはできません。

## 例
<a name="r_WITH_clause-examples"></a>

次の例では、WITH 句を含む最もシンプルなケースを示します。VENUECOPY という名前の WITH クエリは、VENUE テーブルからすべての行を選択します。次にメインクエリでは、VENUECOPY からすべての行を選択します。VENUECOPY テーブルは、このクエリの有効期間中だけ存在します。

```
with venuecopy as (select * from venue)
select * from venuecopy order by 1 limit 10;
```

```
 venueid |         venuename          |    venuecity    | venuestate | venueseats
---------+----------------------------+-----------------+------------+------------
1 | Toyota Park                | Bridgeview      | IL         |          0
2 | Columbus Crew Stadium      | Columbus        | OH         |          0
3 | RFK Stadium                | Washington      | DC         |          0
4 | CommunityAmerica Ballpark  | Kansas City     | KS         |          0
5 | Gillette Stadium           | Foxborough      | MA         |      68756
6 | New York Giants Stadium    | East Rutherford | NJ         |      80242
7 | BMO Field                  | Toronto         | ON         |          0
8 | The Home Depot Center      | Carson          | CA         |          0
9 | Dick's Sporting Goods Park | Commerce City   | CO         |          0
v     10 | Pizza Hut Park             | Frisco          | TX         |          0
(10 rows)
```

次の例では、VENUE\$1SALES と TOP\$1VENUES という名前の 2 つのテーブルを生成する WITH 句を示します。2 番目の WITH 句テーブルは最初のテーブルから選択します。次に、メインクエリブロックの WHERE 句には、TOP\$1VENUES テーブルを制約するサブクエリが含まれています。

```
with venue_sales as
(select venuename, venuecity, sum(pricepaid) as venuename_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
group by venuename, venuecity),

top_venues as
(select venuename
from venue_sales
where venuename_sales > 800000)

select venuename, venuecity, venuestate,
sum(qtysold) as venue_qty,
sum(pricepaid) as venue_sales
from sales, venue, event
where venue.venueid=event.venueid and event.eventid=sales.eventid
and venuename in(select venuename from top_venues)
group by venuename, venuecity, venuestate
order by venuename;
```

```
        venuename       |   venuecity   | venuestate | venue_qty | venue_sales
------------------------+---------------+------------+-----------+-------------
August Wilson Theatre   | New York City | NY         |      3187 |  1032156.00
Biltmore Theatre        | New York City | NY         |      2629 |   828981.00
Charles Playhouse       | Boston        | MA         |      2502 |   857031.00
Ethel Barrymore Theatre | New York City | NY         |      2828 |   891172.00
Eugene O'Neill Theatre  | New York City | NY         |      2488 |   828950.00
Greek Theatre           | Los Angeles   | CA         |      2445 |   838918.00
Helen Hayes Theatre     | New York City | NY         |      2948 |   978765.00
Hilton Theatre          | New York City | NY         |      2999 |   885686.00
Imperial Theatre        | New York City | NY         |      2702 |   877993.00
Lunt-Fontanne Theatre   | New York City | NY         |      3326 |  1115182.00
Majestic Theatre        | New York City | NY         |      2549 |   894275.00
Nederlander Theatre     | New York City | NY         |      2934 |   936312.00
Pasadena Playhouse      | Pasadena      | CA         |      2739 |   820435.00
Winter Garden Theatre   | New York City | NY         |      2838 |   939257.00
(14 rows)
```

次の 2 つの例は、WITH 句サブクエリに基づいた、テーブル参照の範囲に関するルールをデモンストレーションしています。最初のクエリは実行されますが、2 番目のクエリは予想どおりのエラーが発生して失敗します。最初のクエリには、メインクエリの SELECT リスト内に WITH 句サブクエリが存在します。WITH 句によって定義されるテーブル (HOLIDAYS) は、SELECT リストのサブクエリの FROM 句で参照されます。

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join date on sales.dateid=date.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

caldate   | daysales | dec25sales
-----------+----------+------------
2008-12-25 | 70402.00 |   70402.00
2008-12-31 | 12678.00 |   70402.00
(2 rows)
```

2 番目のクエリは SELECT リストのサブクエリ内だけでなく、メインクエリ内の HOLIDAYS テーブルを参照しようとしたため、失敗しました。メインクエリの参照は範囲外です。

```
select caldate, sum(pricepaid) as daysales,
(with holidays as (select * from date where holiday ='t')
select sum(pricepaid)
from sales join holidays on sales.dateid=holidays.dateid
where caldate='2008-12-25') as dec25sales
from sales join holidays on sales.dateid=holidays.dateid
where caldate in('2008-12-25','2008-12-31')
group by caldate
order by caldate;

ERROR:  relation "holidays" does not exist
```

## 例: 再帰的な CTE
<a name="r_WITH_clause-recursive-cte-example"></a>

次に示すのは、John に直接的または間接的に報告する従業員を返す再帰的な CTE の例です。再帰クエリには、再帰の深さを 4 レベル未満に制限する WHERE 句が含まれています。

```
--create and populate the sample table
  create table employee (
  id int,
  name varchar (20),
  manager_id int
  );
  
  insert into employee(id, name, manager_id)  values
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
  
--run the recursive query
  with recursive john_org(id, name, manager_id, level) as
( select id, name, manager_id, 1 as level
  from employee
  where name = 'John'
  union all
  select e.id, e.name, e.manager_id, level + 1 as next_level
  from employee e, john_org j
  where e.manager_id = j.id and level < 4
  )
 select distinct id, name, manager_id from john_org order by manager_id;
```

以下は、クエリの結果です。

```
    id        name      manager_id
  ------+-----------+--------------
   101    John           100
   102    Jorge          101
   103    Kwaku          101
   110    Liu            101
   201    Sofía          102
   106    Mateo          102
   110    Nikki          103
   104    Paulo          103
   105    Richard        103
   120    Saanvi         104
   200    Shirley        104
   205    Zhang          104
```

以下は、John が所属する部門の組織図です。

![\[John が所属する部門の組織図。\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/images/org-chart.png)


# SELECT リスト
<a name="r_SELECT_list"></a>

**Topics**
+ [構文](#r_SELECT_list-synopsis)
+ [パラメータ](#r_SELECT_list-parameters)
+ [使用に関する注意事項](#r_SELECT_list_usage_notes)
+ [例](#r_SELECT_list-examples)

SELECT リストは、クエリが返す列、機能、および式を指定します。このリストは、クエリの出力を表しています。

SQL 関数の詳細については、「[SQL 関数リファレンス](c_SQL_functions.md)」を参照してください。式の詳細については、「[条件式](c_conditional_expressions.md)」を参照してください。

## 構文
<a name="r_SELECT_list-synopsis"></a>

```
SELECT
[ TOP number ]
[ ALL | DISTINCT ] * | expression [ AS column_alias ] [, ...]
```

## パラメータ
<a name="r_SELECT_list-parameters"></a>

TOP *number*   
TOP は引数として正の整数を取り、クライアントに返される行数を定義します。TOP 句に関する動作は、LIMIT 句に関する動作と同じです。返される行の数は固定されていますが、行のセットは固定されていません。一貫した行のセットを返すには、TOP または LIMIT を ORDER BY 句と組み合わせて使用します。

ALL   
DISTINCT を指定しない場合、デフォルトの動作を定義する冗長キーワード。`SELECT ALL *` は、`SELECT *`と同じ意味です (すべての列のすべての行を選択し、重複を維持します)。

DISTINCT   
1 つまたは複数の列の一致する値に基づいて、結果セットから重複する行を削除するオプション。  
アプリケーションが無効な外部キーまたはプライマリキーを許可する場合、クエリが不正な結果を返す可能性があります。例えば、プライマリキー列に含まれるすべての値が一意でない場合、SELECT DISTINCT クエリが重複した行を返すことがあります。詳細については、「[テーブル制約の定義](https://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html)」を参照してください。

\$1 (アスタリスク)   
テーブルのコンテンツ全体を返します (すべての列とすべての行)。

 *expression*   
クエリによって参照されるテーブル内に存在する 1 つまたは複数の列から構成される式。式には、SQL 関数を含めることができます。次に例を示します。  

```
avg(datediff(day, listtime, saletime))
```

AS *column\$1alias*   
最終的な結果セットに使われる列のテンポラリ名。AS キーワードはオプションです。次に例を示します。  

```
avg(datediff(day, listtime, saletime)) as avgwait
```
シンプルな列名ではない式に対して、エイリアスを指定しない場合、結果セットはその列に対してデフォルト名を適用します。  
エイリアスは、ターゲットリストで定義された直後に認識されます。同じターゲットリストで、その後に定義されている他の式でエイリアスを使用できます。以下に示しているのはこのポリシーの例です。  

```
select clicks / impressions as probability, round(100 * probability, 1) as percentage from raw_data;
```
エイリアスの側面参照の利点は、同じターゲットリストでより複雑な式を構築するときに、エイリアスの式を繰り返す必要がないことです。Amazon Redshift がこの種類の参照を解析するときは、前に定義されたエイリアスをインライン展開します。`FROM` 句に定義された名前が、以前にエイリアスを作成した式と同じである列がある場合、`FROM`句の列が優先されます。例えば、上記のクエリで、テーブルの raw\$1data に「probability」という名前の列がある場合、ターゲットリストの 2 番目の式の「probability」は、エイリアス名「probability」ではなく列を参照します。

## 使用に関する注意事項
<a name="r_SELECT_list_usage_notes"></a>

TOP は SQL 式です。LIMIT 動作に対する選択肢を提供します。TOP と LIMIT を同じクエリで使用することはできません。

## 例
<a name="r_SELECT_list-examples"></a>

次の例では、SALES テーブルから 10 行を返します。クエリは TOP 句を使用していますが、ORDER BY 句が指定されていないため、予想できない行セットが返されます。

```
select top 10 *
from sales;
```

次のクエリは機能的には同じですが、TOP 句の代わりに LIMIT 句を使用します。

```
select *
from sales
limit 10;
```

次の例では、TOP 句を使用して、SALES テーブルから最初の 10 行を QTYSOLD 列の降順にソートして返します。

```
select top 10 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
8 |      574
8 |      718
8 |      868
8 |     2663
8 |     3396
8 |     3726
8 |     5250
8 |     6216
(10 rows)
```

次の例では、SALES テーブルから、最初の 2 つの QTYSOLD 値と SELLERID 値を、QTYSOLD 列をソートして返します。

```
select top 2 qtysold, sellerid
from sales
order by qtysold desc, sellerid;

qtysold | sellerid
--------+----------
8 |      518
8 |      520
(2 rows)
```

次の例は、CATEGORY テーブルからの異なるカテゴリグループのリストを示しています。

```
select distinct catgroup from category
order by 1;

catgroup
----------
Concerts
Shows
Sports
(3 rows)

--the same query, run without distinct
select catgroup from category
order by 1;

catgroup
----------
Concerts
Concerts
Concerts
Shows
Shows
Shows
Sports
Sports
Sports
Sports
Sports
(11 rows)
```

次の例では、2008 年 12 月の週の数の独自セットを返します。DISTINCT 句がないと、このステートメントは 31 行、つまりその月の各日に対して 1 行を返します。

```
select distinct week, month, year
from date
where month='DEC' and year=2008
order by 1, 2, 3;

week | month | year
-----+-------+------
49 | DEC   | 2008
50 | DEC   | 2008
51 | DEC   | 2008
52 | DEC   | 2008
53 | DEC   | 2008
(5 rows)
```



# EXCLUDE column\$1list
<a name="r_EXCLUDE_list"></a>

EXCLUDE column\$1list は、クエリ結果から除外される列を指定します。EXCLUDE オプションは、多くの列を含む*ワイド*テーブルから一部の列のみを除外する場合に役立ちます。

**Topics**
+ [構文](#r_EXCLUDE_list-synopsis)
+ [パラメータ](#r_EXCLUDE_list-parameters)
+ [例](#r_EXCLUDE_list-examples)

## 構文
<a name="r_EXCLUDE_list-synopsis"></a>

```
EXCLUDE column_list
```

## パラメータ
<a name="r_EXCLUDE_list-parameters"></a>

 *column\$1list*   
クエリによって参照されるテーブルに存在する 1 つ以上の列名のカンマ区切りリスト。*column\$1list* は、必要に応じてかっこで囲むことができます。除外リストには列名のみを含めることができ、式 (`upper(col1)` など) やアスタリスク (\$1) はサポートされていません。  

```
column-name, ... | ( column-name, ... )
```
例えば、次のようになります。  

```
SELECT * EXCLUDE col1, col2 FROM tablea;
```

```
SELECT * EXCLUDE (col1, col2) FROM tablea;
```

## 例
<a name="r_EXCLUDE_list-examples"></a>

次の例では、salesid、listid、sellerid、buyerid、eventid、dateid、qtysold、pricepaid、commission、および saletime 列を含む SALES テーブルを使用しています。SALES テーブルの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

次の例では、SALES テーブルから行を返しますが、SALETIME 列は除外します。

```
SELECT * EXCLUDE saletime FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

次の例では、SALES テーブルから行を返しますが、QTYSOLD 列と SALETIME 列は除外します。

```
SELECT * EXCLUDE (qtysold, saletime) FROM sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 482        |  72.3	
...
```

次の例では、SALES テーブルから行を返すビューを作成しますが、SALETIME 列は除外します。

```
CREATE VIEW sales_view AS SELECT * EXCLUDE saletime FROM sales;
SELECT * FROM sales_view;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

次の例では、除外されていない列のみを選択して一時テーブルに格納します。

```
SELECT * EXCLUDE saletime INTO TEMP temp_sales FROM sales;
SELECT * FROM temp_sales;

salesid | listid  | sellerid | buyerid | eventid | dateid  | qtysold  | pricepaid  | commission
--------+---------+----------+---------+---------+---------+----------+------------+-----------
150314  | 173969  | 48680    | 816     | 8762    | 1827    | 2        | 688        | 103.2	
8325    | 8942    | 23600    | 1078    | 2557    | 1828    | 5        | 525        |  78.75	
46807   | 52711   | 34388    | 1047    | 2046    | 1828    | 2        | 482        |  72.3	
...
```

# FROM 句
<a name="r_FROM_clause30"></a>

クエリ内の FROM 句は、データの選択下のテーブル参照 (テーブル、ビュー、サブクエリ) を一覧表示します。複数のテーブル参照が一覧表示されている場合、FROM 句または WHERE 句のいずれかの適切な構文を使って、テーブル参照を結合する必要があります。結合基準を指定していない場合、クエリはクロス結合 (デカルト積) として処理されます。

**Topics**
+ [構文](#r_FROM_clause30-synopsis)
+ [パラメータ](#r_FROM_clause30-parameters)
+ [使用に関する注意事項](#r_FROM_clause_usage_notes)
+ [PIVOT と UNPIVOT の例](r_FROM_clause-pivot-unpivot-examples.md)
+ [JOIN 句の例](r_Join_examples.md)
+ [UNNEST の例](r_FROM_clause-unnest-examples.md)

## 構文
<a name="r_FROM_clause30-synopsis"></a>

```
FROM table_reference [, ...]
```

ここで *table\$1reference* は、次のいずれかになります。

```
with_subquery_table_name [ table_alias ]
table_name [ * ] [ table_alias ]
( subquery ) [ table_alias ]
table_reference [ NATURAL ] join_type table_reference
   [ ON join_condition | USING ( join_column [, ...] ) ]
table_reference  join_type super_expression 
   [ ON join_condition ]
table_reference PIVOT ( 
   aggregate(expr) [ [ AS ] aggregate_alias ]
   FOR column_name IN ( expression [ AS ] in_alias [, ...] )
) [ table_alias ]
table_reference UNPIVOT [ INCLUDE NULLS | EXCLUDE NULLS ] ( 
   value_column_name 
   FOR name_column_name IN ( column_reference [ [ AS ]
   in_alias ] [, ...] )
) [ table_alias ]
UNPIVOT expression AS value_alias [ AT attribute_alias ]
( super_expression.attribute_name ) AS value_alias [ AT index_alias ]
UNNEST ( column_reference )
  [AS] table_alias ( unnested_column_name )
UNNEST ( column_reference ) WITH OFFSET
  [AS] table_alias ( unnested_column_name, [offset_column_name] )
```

オプションの *table\$1alias* を使用して、テーブルと複雑なテーブル参照 (および必要に応じてその列) に、次のような一時名を付けることができます。

```
[ AS ] alias [ ( column_alias [, ...] ) ]
```

## パラメータ
<a name="r_FROM_clause30-parameters"></a>

 *with\$1subquery\$1table\$1name*   
[WITH 句](r_WITH_clause.md) のサブクエリで定義されるテーブル。

 *table\$1name*   
テーブルまたはビューの名前。

 *alias*   
テーブルまたはビューの一時的な代替名。エイリアスは、サブクエリから生成されたテーブルに対して提供する必要があります。他のテーブル参照では、エイリアスはオプションです。AS キーワードは常にオプションです。テーブルエイリアスは、WHERE 句など、クエリの別の部分のテーブルを識別するため、便利なショートカットを提供します。次に例を示します。  

```
select * from sales s, listing l
where s.listid=l.listid
```

 *column\$1alias*   
テーブルまたはビュー内の列に対する一時的な代替名。

 *subquery*   
テーブルに対して評価を実行するクエリ式。テーブルは、クエリの有効期間中のみ存在し、通常は名前またはエイリアス**が与えられます。ただし、エイリアスは必須ではありません。また、サブクエリから生成されたテーブルに対して、列名を定義することもできます。サブクエリの結果を他のテーブルに結合する場合、および列をクエリ内のどこかで選択または拘束する場合、列のエイリアスの命名は重要です。  
サブクエリには ORDER BY 句が含まれることがありますが、LIMIT または OFFSET 句も併せて指定しない場合、この句には効力がありません。

NATURAL   
2 つのテーブル内で同じ名前を付けられた列のペアをすべて結合列として、自動的に使用する結合を定義します。明示的な結合条件は必要ありません。例えば、CATEGORY と EVENT の両方のテーブルに CATID という名前の列が存在する場合、これらのテーブルの NATURAL 結合は CATID 列による結合です。  
NATURAL 結合を指定しても、結合対象のテーブルに同じ名前の列ペアが存在しない場合、クエリはデフォルト設定のクロス結合になります。

 *join\$1type*   
以下のいずれかの結合タイプを指定します。  
+ [INNER] JOIN 
+ LEFT [OUTER] JOIN 
+ RIGHT [OUTER] JOIN 
+ FULL [OUTER] JOIN 
+ CROSS JOIN 
クロス結合は非限定の結合で、2 つの表のデカルト積を返します。  
内部結合と外部結合は限定結合です。これらの結合は、FROM 句の ON または USING 構文、または WHERE 句条件を使った (Natural 結合での) 黙示的な結合です。  
内部結合は、結合条件、また結合列のリストに基づいて、一致する行だけを返します。外部結合は、同等の内部結合が返すすべての行に加え、「左側の」表、「右側の」表、または両方の表から一致しない行を返します。左の表は最初に一覧表示された表で、右の表は 2 番目に一覧表示された表です。一致しない行には、出力列のギャップを埋めるため、NULL が含まれます。

ON join\$1condition**   
結合列を ON キーワードに続く条件として記述する、結合タイプの指定。次に例を示します。  

```
sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
```

USING ( join\$1column** [, ...] )   
結合列をかっこで一覧表示する結合の指定タイプ。複数の結合列を指定する場合、カンマによって区切ります。USING キーワードは、リストより前に指定する必要があります。例えば、次のようになります。  

```
sales join listing
using (listid,eventid)
```

PIVOT  
表形式のデータを読みやすい形式で表現するために、出力を行から列に変更します。出力が複数の列にわたって水平に表されます。PIVOT は、(集計式を使用して出力形式を指定する)集計が含まれる GROUP BY クエリに似ています。ただし GROUP BY とは対照的に、結果は行ではなく列で返されます。  
PIVOT および UNPIVOT を使用してクエリする方法の例については、「[PIVOT と UNPIVOT の例](r_FROM_clause-pivot-unpivot-examples.md)」をご確認ください。

UNPIVOT  
*UNPIVOT による列から行への変換* – この演算子は、入力テーブルまたはクエリ結果の結果列を行に変換して、出力を読みやすくします。UNPIVOT は、入力列のデータを 2 つの結果列 (name 列と value 列) として統合します。name 列には、入力の列名が行エントリとして格納されています。value 列には、集計の結果など、入力列の値が含まれます。例えばこれは、さまざまなカテゴリについての項目数などです。  
*UNPIVOT (SUPER) によるオブジェクトのピボット解除* – オブジェクトのピボット解除を実行できます。ここで、*expression* は別の FROM 句項目を参照する SUPER 式です。詳細については、「[オブジェクトのピボット解除](query-super.md#unpivoting)」を参照してください。また、JSON 形式のデータなど、半構造化データをクエリする方法を示す例も含まれています。

*super\$1expression*  
有効な SUPER 式。Amazon Redshift は、指定された属性の値ごとに 1 行を返します。SUPER データ型の詳細については、「[SUPER タイプ](r_SUPER_type.md)」を参照してください。ネストされていない SUPER 値の詳細については、「[ネストされていないクエリ](query-super.md#unnest)」を参照してください。

*attribute\$1name*  
SUPER 式の属性の名前。

*index\$1alias*  
SUPER 式内の値の位置を示すインデックスのエイリアス。

UNNEST  
ネストされた構造 (通常は SUPER 配列) を、ネストされていない要素を含む列に展開します。SUPER データのネスト解除の詳細については、「[半構造化データのクエリ](query-super.md)」を参照してください。例については「[UNNEST の例](r_FROM_clause-unnest-examples.md)」を参照してください。

*unnested\$1column\$1name*  
ネストされていない要素を含む列の名前。

UNNEST ... WITH OFFSET  
オフセット列をネストされていない出力に追加します。オフセットは配列内の各要素のゼロベースのインデックスを表します。このバリアントは、配列内の要素の位置を確認する場合に便利です。SUPER データのネスト解除の詳細については、「[半構造化データのクエリ](query-super.md)」を参照してください。例については「[UNNEST の例](r_FROM_clause-unnest-examples.md)」を参照してください。

*offset\$1column\$1name*  
オフセット列のカスタム名。インデックス列を出力に表示する方法を明示的に定義できます。このパラメータはオプションです。デフォルトでは、オフセット列名は `offset_col` です。

## 使用に関する注意事項
<a name="r_FROM_clause_usage_notes"></a>

列を結合するには、データ型に互換性がなければなりません。

NATURAL または USING 結合は、中間結果セットの結合列の各ペアの一方だけを保持します。

ON 構文を使った結合は、中間結果セットの両方の結合列を保持します。

「[WITH 句](r_WITH_clause.md)」も参照してください。

# PIVOT と UNPIVOT の例
<a name="r_FROM_clause-pivot-unpivot-examples"></a>

PIVOT と UNPIVOT は FROM 句のパラメータで、クエリ出力をそれぞれ行から列、列から行にローテーションします。クエリ結果は読みやすい表形式で示されます。次の例では、テストデータとクエリを使用してその使用方法を示します。

これらのパラメータおよび他のパラメータの詳細については、「[FROM 句](https://docs.aws.amazon.com/redshift/latest/dg/r_FROM_clause30.html)」を参照してください。

## PIVOT の例
<a name="r_FROM_clause-pivot-examples"></a>

サンプルテーブルとデータをセットアップし、それを使用して後続のサンプルクエリを実行します。

```
CREATE TABLE part (
    partname varchar,
    manufacturer varchar,
    quality int,
    price decimal(12, 2)
);

INSERT INTO part VALUES ('prop', 'local parts co', 2, 10.00);
INSERT INTO part VALUES ('prop', 'big parts co', NULL, 9.00);
INSERT INTO part VALUES ('prop', 'small parts co', 1, 12.00);

INSERT INTO part VALUES ('rudder', 'local parts co', 1, 2.50);
INSERT INTO part VALUES ('rudder', 'big parts co', 2, 3.75);
INSERT INTO part VALUES ('rudder', 'small parts co', NULL, 1.90);

INSERT INTO part VALUES ('wing', 'local parts co', NULL, 7.50);
INSERT INTO part VALUES ('wing', 'big parts co', 1, 15.20);
INSERT INTO part VALUES ('wing', 'small parts co', NULL, 11.80);
```

`price` で `AVG` を集計した `partname` の PIVOT。

```
SELECT *
FROM (SELECT partname, price FROM part) PIVOT (
    AVG(price) FOR partname IN ('prop', 'rudder', 'wing')
);
```

このクエリでは次の出力が生成されます。

```
  prop   |  rudder  |  wing
---------+----------+---------
 10.33   | 2.71     | 11.50
```

前の例では、結果が列に変換されています。次の例は、平均価格を列ではなく行で返す `GROUP BY` クエリを示しています。

```
SELECT partname, avg(price)
FROM (SELECT partname, price FROM part)
WHERE partname IN ('prop', 'rudder', 'wing')
GROUP BY partname;
```

このクエリでは次の出力が生成されます。

```
 partname |  avg
----------+-------
 prop     | 10.33
 rudder   |  2.71
 wing     | 11.50
```

`manufacturer` を暗黙の列として扱う `PIVOT` の例。

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) FOR quality IN (1, 2, NULL)
);
```

このクエリでは次の出力が生成されます。

```
 manufacturer      | 1  | 2  | null
-------------------+----+----+------
 local parts co    | 1  | 1  |  1
 big parts co      | 1  | 1  |  1
 small parts co    | 1  | 0  |  2
```

 `PIVOT` 定義で参照されていない入力テーブルの列は、結果テーブルに暗黙的に追加されます。前出の例での `manufacturer` 列が、これに当てはまります。またこの例からは、`NULL`が `IN` 演算子で有効な値であることもわかります。

`PIVOT`上記の例の では、を含む下記のクエリと同様の情報を返します。`GROUP BY`相違点は、列 `2` と manufacturer `small parts co` に対し、`PIVOT` が値 `0` を返していることです。`GROUP BY` クエリには対応する行が含まれていません。行が特定の列に入力するデータを持たない場合、ほとんどのケースで `PIVOT` は `NULL` を挿入します。ただし、カウント集計は `NULL` を返さないので、`0` がデフォルト値として使用されます。

```
SELECT manufacturer, quality, count(*)
FROM (SELECT quality, manufacturer FROM part)
WHERE quality IN (1, 2) OR quality IS NULL
GROUP BY manufacturer, quality
ORDER BY manufacturer;
```

このクエリでは次の出力が生成されます。

```
 manufacturer        | quality | count
---------------------+---------+-------
 big parts co        |         |     1
 big parts co        |       2 |     1
 big parts co        |       1 |     1
 local parts co      |       2 |     1
 local parts co      |       1 |     1
 local parts co      |         |     1
 small parts co      |       1 |     1
 small parts co      |         |     2
```

 PIVOT 演算子は、集計式および `IN` 演算子の各値に関して、オプションのエイリアスを受け入れます。エイリアスは、列名をカスタマイズするために使用されます。集計のエイリアスがない場合は、`IN`リストのエイリアスのみが使用されます。それ以外の場合は、集計のエイリアスが列名に (名前を区切るために) アンダースコアとともに追加されます。

```
SELECT *
FROM (SELECT quality, manufacturer FROM part) PIVOT (
    count(*) AS count FOR quality IN (1 AS high, 2 AS low, NULL AS na)
);
```

このクエリでは次の出力が生成されます。

```
 manufacturer      | high_count  | low_count | na_count
-------------------+-------------+-----------+----------
 local parts co    |           1 |         1 |        1
 big parts co      |           1 |         1 |        1
 small parts co    |           1 |         0 |        2
```

次のサンプルテーブルとデータを設定し、これらを使用して後続のサンプルクエリを実行します。データは、複数のホテルの予約日を表しています。

```
CREATE TABLE bookings (
    booking_id int,
    hotel_code char(8),
    booking_date date,
    price decimal(12, 2)
);

INSERT INTO bookings VALUES (1, 'FOREST_L', '02/01/2023', 75.12);
INSERT INTO bookings VALUES (2, 'FOREST_L', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (3, 'FOREST_L', '02/04/2023', 85.54);

INSERT INTO bookings VALUES (4, 'FOREST_L', '02/08/2023', 75.00);
INSERT INTO bookings VALUES (5, 'FOREST_L', '02/11/2023', 75.00);
INSERT INTO bookings VALUES (6, 'FOREST_L', '02/14/2023', 90.00);

INSERT INTO bookings VALUES (7, 'FOREST_L', '02/21/2023', 60.00);
INSERT INTO bookings VALUES (8, 'FOREST_L', '02/22/2023', 85.00);
INSERT INTO bookings VALUES (9, 'FOREST_L', '02/27/2023', 90.00);

INSERT INTO bookings VALUES (10, 'DESERT_S', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (11, 'DESERT_S', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (12, 'DESERT_S', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (13, 'DESERT_S', '02/05/2023', 75.00);
INSERT INTO bookings VALUES (14, 'DESERT_S', '02/06/2023', 34.00);
INSERT INTO bookings VALUES (15, 'DESERT_S', '02/09/2023', 85.00);

INSERT INTO bookings VALUES (16, 'DESERT_S', '02/12/2023', 23.00);
INSERT INTO bookings VALUES (17, 'DESERT_S', '02/13/2023', 76.00);
INSERT INTO bookings VALUES (18, 'DESERT_S', '02/14/2023', 85.00);

INSERT INTO bookings VALUES (19, 'OCEAN_WV', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (20, 'OCEAN_WV', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (21, 'OCEAN_WV', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (22, 'OCEAN_WV', '02/06/2023', 75.00);
INSERT INTO bookings VALUES (23, 'OCEAN_WV', '02/09/2023', 34.00);
INSERT INTO bookings VALUES (24, 'OCEAN_WV', '02/12/2023', 85.00);

INSERT INTO bookings VALUES (25, 'OCEAN_WV', '02/13/2023', 23.00);
INSERT INTO bookings VALUES (26, 'OCEAN_WV', '02/14/2023', 76.00);
INSERT INTO bookings VALUES (27, 'OCEAN_WV', '02/16/2023', 85.00);

INSERT INTO bookings VALUES (28, 'CITY_BLD', '02/01/2023', 98.00);
INSERT INTO bookings VALUES (29, 'CITY_BLD', '02/02/2023', 75.00);
INSERT INTO bookings VALUES (30, 'CITY_BLD', '02/04/2023', 85.00);

INSERT INTO bookings VALUES (31, 'CITY_BLD', '02/12/2023', 75.00);
INSERT INTO bookings VALUES (32, 'CITY_BLD', '02/13/2023', 34.00);
INSERT INTO bookings VALUES (33, 'CITY_BLD', '02/17/2023', 85.00);

INSERT INTO bookings VALUES (34, 'CITY_BLD', '02/22/2023', 23.00);
INSERT INTO bookings VALUES (35, 'CITY_BLD', '02/23/2023', 76.00);
INSERT INTO bookings VALUES (36, 'CITY_BLD', '02/24/2023', 85.00);
```

 このサンプルクエリでは、予約レコードを集計し、週ごとの合計を示します。各週の終了日が列名になります。

```
SELECT * FROM
    (SELECT
       booking_id,
       (date_trunc('week', booking_date::date) + '5 days'::interval)::date as enddate,
       hotel_code AS "hotel code"
FROM bookings
) PIVOT (
    count(booking_id) FOR enddate IN ('2023-02-04','2023-02-11','2023-02-18') 
);
```

このクエリでは次の出力が生成されます。

```
 hotel code | 2023-02-04  | 2023-02-11 | 2023-02-18
------------+-------------+------------+----------
 FOREST_L   |           3 |          2 |        1
 DESERT_S   |           4 |          3 |        2
 OCEAN_WV   |           3 |          3 |        3
 CITY_BLD   |           3 |          1 |        2
```

 Amazon Redshift は、複数の列を組み合わせたクロス集計をサポートしていません。ただし、次のようなクエリを使用して、PIVOT による集計と同様に、行データを列に変換できます。ここでは、前の例と同じ予約サンプルデータを使用します。

```
SELECT 
  booking_date,
  MAX(CASE WHEN hotel_code = 'FOREST_L' THEN 'forest is booked' ELSE '' END) AS FOREST_L,
  MAX(CASE WHEN hotel_code = 'DESERT_S' THEN 'desert is booked' ELSE '' END) AS DESERT_S,
  MAX(CASE WHEN hotel_code = 'OCEAN_WV' THEN 'ocean is booked' ELSE '' END)  AS OCEAN_WV
FROM bookings
GROUP BY booking_date
ORDER BY booking_date asc;
```

サンプルクエリを実行すると、予約されたホテルを示す短いフレーズの横に予約日が表示されます。

```
 booking_date  | forest_l         | desert_s         | ocean_wv
---------------+------------------+------------------+--------------------
 2023-02-01    | forest is booked | desert is booked |  ocean is booked
 2023-02-02    | forest is booked | desert is booked |  ocean is booked
 2023-02-04    | forest is booked | desert is booked |  ocean is booked
 2023-02-05    |                  | desert is booked |        
 2023-02-06    |                  | desert is booked |
```

`PIVOT` の使用に関する注意事項を以下に示します。
+ `PIVOT` を適用可能なのはテーブル、サブクエリ、および共通テーブル式 (CTE) です。`JOIN` 式、再帰的 CTE、`PIVOT`、および `UNPIVOT` 式のいずれにも `PIVOT` を適用することはできません。さらに、ネストされていない `SUPER` 式、ならびに Redshift Spectrum のネストされたテーブルもサポートされません。
+  `PIVOT` では `COUNT`、`SUM`、`MIN`、`MAX`、および `AVG` 集計関数がサポートされています。
+ `PIVOT` 集計式は、サポートされた集計関数に対する呼び出しである必要があります。集計の上位にある複雑な式はサポートされていません。集計引数には、`PIVOT`入力テーブル以外のテーブルへの参照を含めることはできません。親クエリに対する相関参照もサポートされません。集計引数にはサブクエリを含めることができます。これらは内部的に相関させることも、`PIVOT` 入力テーブル上で相関させることもできます。
+  `PIVOT IN` リスト値は、列参照またはサブクエリにすることはできません。各値は、`FOR`列参照と型互換である必要があります。
+  `IN` リスト値にエイリアスがない場合には、`PIVOT` によりデフォルトの列名が生成されます。`IN` 値が 'abc' や 5 などの定数の場合、デフォルトの列名自体も定数となります。いずれの複雑な式でも、列名は Amazon Redshift で標準のデフォルト名 (`?column?` など) になります。

## UNPIVOT の例
<a name="r_FROM_clause-unpivot-examples"></a>

サンプルデータを設定し、それを使用して後続の例を実行します。

```
CREATE TABLE count_by_color (quality varchar, red int, green int, blue int);

INSERT INTO count_by_color VALUES ('high', 15, 20, 7);
INSERT INTO count_by_color VALUES ('normal', 35, NULL, 40);
INSERT INTO count_by_color VALUES ('low', 10, 23, NULL);
```

`UNPIVOT`red、green、blue の入力列で を実行します。

```
SELECT *
FROM (SELECT red, green, blue FROM count_by_color) UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

このクエリでは次の出力が生成されます。

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |  23
 blue  |   7
 blue  |  40
```

デフォルトでは、入力列の `NULL` 値はスキップされ、これに対する結果行は生成されません。

次に、`INCLUDE NULLS`を含む `UNPIVOT` の例を示します。

```
SELECT *
FROM (
    SELECT red, green, blue
    FROM count_by_color
) UNPIVOT INCLUDE NULLS (
    cnt FOR color IN (red, green, blue)
);
```

その出力を次に示します。

```
 color | cnt
-------+-----
 red   |  15
 red   |  35
 red   |  10
 green |  20
 green |
 green |  23
 blue  |   7
 blue  |  40
 blue  |
```

`INCLUDING NULLS` パラメータが設定されている場合には、`NULL`入力値は結果行を生成します。

暗黙の列として `quality` を含む `The following query shows UNPIVOT`。

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red, green, blue)
);
```

このクエリでは次の出力が生成されます。

```
 quality | color | cnt
---------+-------+-----
 high    | red   |  15
 normal  | red   |  35
 low     | red   |  10
 high    | green |  20
 low     | green |  23
 high    | blue  |   7
 normal  | blue  |  40
```

`UNPIVOT` 定義で参照されていない入力テーブルの列は、結果テーブルに暗黙的に追加されます。この例での `quality` 列が、これに当てはまります。

次に、`IN`リスト内の値のためのエイリアスを含む `UNPIVOT` の例を示します。

```
SELECT *
FROM count_by_color UNPIVOT (
    cnt FOR color IN (red AS r, green AS g, blue AS b)
);
```

前述のクエリでは、次の出力が生成されます。

```
 quality | color | cnt
---------+-------+-----
 high    | r     |  15
 normal  | r     |  35
 low     | r     |  10
 high    | g     |  20
 low     | g     |  23
 high    | b     |   7
 normal  | b     |  40
```

`UNPIVOT` 演算子は、`IN`リストの各値に関するオプションのエイリアスを受け入れます。各エイリアスでは、それぞれの `value` 列にあるデータをカスタマイズできますます。

以下に、`UNPIVOT`の使用に関する注意事項を示します。
+ `UNPIVOT` を適用可能なのはテーブル、サブクエリ、および共通テーブル式 (CTE) です。`JOIN` 式、再帰的 CTE、`PIVOT`、および `UNPIVOT` 式のいずれにも `UNPIVOT` を適用することはできません。さらに、ネストされていない `SUPER` 式、ならびに Redshift Spectrum のネストされたテーブルもサポートされません。
+ `UNPIVOT IN` リストには、入力テーブルの列への参照のみを含める必要があります。`IN` リスト列には、その全体との互換性がある共通の型が必要です。`UNPIVOT` 値列には、下記の共通の型があります。`UNPIVOT` 名前列の型は `VARCHAR` です。
+ `IN` リストの値がエイリアスを持たない場合、`UNPIVOT`では、デフォルト値として列名が使用されます。

# JOIN 句の例
<a name="r_Join_examples"></a>

SQL JOIN 句は、共通のフィールドに基づいて 2 つ以上のテーブルのデータを結合するために使用されます。結果は、指定した結合方法によって変わる場合もあります。JOIN 句の詳細については、「[パラメータ](r_FROM_clause30.md#r_FROM_clause30-parameters)」を参照してください。

次の例では、`TICKIT`サンプルデータのデータを使用します。データベーススキーマの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。サンプルデータをロードする方法については、「Amazon Redshift 入門ガイド」の「[データのロード](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html)」を参照してください。**

次のクエリは、LISTING テーブルと SALES テーブル間の内部結合です (JOIN キーワードを除く)。ここで、LISTING テーブルの LISTID は 1～5 です。このクエリは、LISTING テーブル (左のテーブル) と SALES テーブル (右のテーブル) の LISTID 列の値と一致します。結果は、LISTID 1、4、および 5 が基準に一致することを示しています。

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing, sales
where listing.listid = sales.listid
and listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

次のクエリは左外部結合です。左と右の外部結合は、もう一方のテーブルに一致するものが見つからない場合に、結合したどちらかのテーブルの値を保持します。左のテーブルと右のテーブルは、構文に一覧表示されている最初と 2 番目のテーブルです。NULL 値は、結果セットの「ギャップ」を埋めるために使われます。このクエリは、LISTING テーブル (左のテーブル) と SALES テーブル (右のテーブル) の LISTID 列の値と一致します。結果は、LISTID 2 および 3 にセールスがないことを示しています。

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing left outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

次のクエリは右外部結合です。このクエリは、LISTING テーブル (左のテーブル) と SALES テーブル (右のテーブル) の LISTID 列の値と一致します。結果は、LISTID 1、4、および 5 が基準に一致することを示しています。

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing right outer join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

次のクエリは完全結合です。完全結合は、もう一方のテーブルに一致するものが見つからない場合に、結合したテーブルの値を保持します。左のテーブルと右のテーブルは、構文に一覧表示されている最初と 2 番目のテーブルです。NULL 値は、結果セットの「ギャップ」を埋めるために使われます。このクエリは、LISTING テーブル (左のテーブル) と SALES テーブル (右のテーブル) の LISTID 列の値と一致します。結果は、LISTID 2 および 3 にセールスがないことを示しています。

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     2 | NULL   | NULL
     3 | NULL   | NULL
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

次のクエリは完全結合です。このクエリは、LISTING テーブル (左のテーブル) と SALES テーブル (右のテーブル) の LISTID 列の値と一致します。セールスがない行 (LISTID 2 および 3) のみが結果に表示されます。

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from listing full join sales on sales.listid = listing.listid
where listing.listid between 1 and 5
and (listing.listid IS NULL or sales.listid IS NULL)
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     2 | NULL   | NULL
     3 | NULL   | NULL
```

次の例は、ON 句を含む内部結合です。この場合、NULL 行は返されません。

```
select listing.listid, sum(pricepaid) as price, sum(commission) as comm
from sales join listing
on sales.listid=listing.listid and sales.eventid=listing.eventid
where listing.listid between 1 and 5
group by 1
order by 1;

listid | price  |  comm
-------+--------+--------
     1 | 728.00 | 109.20
     4 |  76.00 |  11.40
     5 | 525.00 |  78.75
```

次のクエリは、LISTING テーブルと SALES テーブルのクロス結合またはデカルト結合で、結果を制限する述語が使用されています。このクエリは、両方のテーブルの LISTID 1、2、3、4、および 5 について、SALES テーブルと LISTING テーブルの LISTID 列の値と一致します。結果は、20 行が基準に一致することを示しています。

```
select sales.listid as sales_listid, listing.listid as listing_listid
from sales cross join listing
where sales.listid between 1 and 5
and listing.listid between 1 and 5
order by 1,2;

sales_listid | listing_listid
-------------+---------------
1            | 1
1            | 2
1            | 3
1            | 4
1            | 5
4            | 1
4            | 2
4            | 3
4            | 4
4            | 5
5            | 1
5            | 1
5            | 2
5            | 2
5            | 3
5            | 3
5            | 4
5            | 4
5            | 5
5            | 5
```

次の例は、2 つのテーブル間の自然結合です。この場合、listid、sellerid、eventid、および dateid の各列は、両方のテーブルで同じ名前とデータ型を持つため、結合列として使用されます。結果は 5 行に制限されます。

```
select listid, sellerid, eventid, dateid, numtickets
from listing natural join sales
order by 1
limit 5;

listid | sellerid  | eventid | dateid | numtickets
-------+-----------+---------+--------+-----------
113    | 29704     | 4699    | 2075   | 22
115    | 39115     | 3513    | 2062   | 14
116    | 43314     | 8675    | 1910   | 28
118    | 6079      | 1611    | 1862   | 9
163    | 24880     | 8253    | 1888   | 14
```

次の例は、USING 句が含まれている 2 つのテーブル間の結合です。この場合、listid と eventid の各列が結合列として使用されます。結果は 5 行に制限されます。

```
select listid, listing.sellerid, eventid, listing.dateid, numtickets
from listing join sales
using (listid, eventid)
order by 1
limit 5;

listid | sellerid | eventid | dateid | numtickets
-------+----------+---------+--------+-----------
1      | 36861    | 7872    | 1850   | 10
4      | 8117     | 4337    | 1970   | 8
5      | 1616     | 8647    | 1963   | 4
5      | 1616     | 8647    | 1963   | 4
6      | 47402    | 8240    | 2053   | 18
```

次のクエリは、FROM 句の 2 つのサブクエリを内部結合したものです。このクエリは、イベント (コンサートとショー) の異なるカテゴリのチケットの販売数と売れ残り数を検出します。この FROM 句サブクエリはテーブル**サブクエリです。これらは、複数の列と行を返すことができます。

```
select catgroup1, sold, unsold
from
(select catgroup, sum(qtysold) as sold
from category c, event e, sales s
where c.catid = e.catid and e.eventid = s.eventid
group by catgroup) as a(catgroup1, sold)
join
(select catgroup, sum(numtickets)-sum(qtysold) as unsold
from category c, event e, sales s, listing l
where c.catid = e.catid and e.eventid = s.eventid
and s.listid = l.listid
group by catgroup) as b(catgroup2, unsold)

on a.catgroup1 = b.catgroup2
order by 1;

catgroup1 |  sold  | unsold
----------+--------+--------
Concerts  | 195444 |1067199
Shows     | 149905 | 817736
```

# UNNEST の例
<a name="r_FROM_clause-unnest-examples"></a>

UNNEST は FROM 句のパラメータで、ネストされたデータを、データのネストされていない要素を保持する列に展開します。データのネスト解除の詳細については、「[半構造化データのクエリ](query-super.md)」を参照してください。

次のステートメントは、製品 ID の配列を含む `products` 列を含む `orders` テーブルを作成して入力します。このセクションの例では、このテーブルのサンプルデータを使用します。

```
CREATE TABLE orders (
    order_id INT,
    products SUPER
);

-- Populate table
INSERT INTO orders VALUES
(1001, JSON_PARSE('[
        {
            "product_id": "P456",
            "name": "Monitor",
            "price": 299.99,
            "quantity": 1,
            "specs": {
                "size": "27 inch",
                "resolution": "4K"
            }
        }
    ]
')),
(1002, JSON_PARSE('
    [
        {
            "product_id": "P567",
            "name": "USB Cable",
            "price": 9.99,
            "quantity": 3
        },
        {
            "product_id": "P678",
            "name": "Headphones",
            "price": 159.99,
            "quantity": 1,
            "specs": {
                "type": "Wireless",
                "battery_life": "20 hours"
            }
        }
    ]
'));
```

以下は、PartiQL 構文を使用してサンプルデータでクエリをネスト解除する例です。

## OFFSET 列のない配列のネスト解除
<a name="r_FROM_clause-unnest-examples-no-offset"></a>

次のクエリは、製品列の SUPER 配列をネスト解除します。各行は `order_id` の注文品目を表します。

```
SELECT o.order_id, unnested_products.product
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(3 rows)
```

次のクエリでは、各注文で最も高価な製品を見つけます。

```
SELECT o.order_id, MAX(unnested_products.product)
FROM orders o, UNNEST(o.products) AS unnested_products(product);

 order_id |                                                           product                                                           
----------+-----------------------------------------------------------------------------------------------------------------------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}}
(2 rows)
```

## 暗黙的な OFFSET 列を持つ配列のネスト解除
<a name="r_FROM_clause-unnest-examples-implicit-offset"></a>

次のクエリでは、`UNNEST ... WITH OFFSET` パラメータを使用して、注文配列内の各製品のゼロベースの位置を表示します。

```
SELECT o.order_id, up.product, up.offset_col
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product);

 order_id |                                                           product                                                           | offset_col 
----------+-----------------------------------------------------------------------------------------------------------------------------+------------
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |          0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |          0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |          1
(3 rows)
```

ステートメントはオフセット列のエイリアスを指定していないため、Amazon Redshift はデフォルトで `offset_col` という名前を付けます。

## 明示的な OFFSET 列を持つ配列のネスト解除
<a name="r_FROM_clause-unnest-examples-explicit-offset"></a>

次のクエリでも、`UNNEST ... WITH OFFSET` パラメータを使用して注文配列内の製品を表示します。このクエリが前の例のクエリと違う点は、オフセット列に明示的にエイリアス `idx` という名前を付けることです。

```
SELECT o.order_id, up.product, up.idx
FROM orders o, UNNEST(o.products) WITH OFFSET AS up(product, idx);

 order_id |                                                           product                                                           | idx 
----------+-----------------------------------------------------------------------------------------------------------------------------+-----
     1001 | {"product_id":"P456","name":"Monitor","price":299.99,"quantity":1,"specs":{"size":"27 inch","resolution":"4K"}}             |   0
     1002 | {"product_id":"P567","name":"USB Cable","price":9.99,"quantity":3}                                                          |   0
     1002 | {"product_id":"P678","name":"Headphones","price":159.99,"quantity":1,"specs":{"type":"Wireless","battery_life":"20 hours"}} |   1
(3 rows)
```

# WHERE 句
<a name="r_WHERE_clause"></a>

WHERE 句には、テーブルの結合またはテーブル内の列への述語の適用のいずれかを実行する条件が含まれています。テーブルは、WHERE 句または FROM 句のいずれかの適切な構文を使うことで結合できます。外部結合基準は、FROM 句で指定する必要があります。

## 構文
<a name="r_WHERE_clause-synopsis"></a>

```
[ WHERE condition ]
```

## *condition*
<a name="r_WHERE_clause-synopsis-condition"></a>

結合条件やテーブル列に関する述語など、ブール値結果に関する検索条件 次の例は有効な join の条件です。

```
sales.listid=listing.listid
sales.listid<>listing.listid
```

次の例は、テーブル内の列の有効な条件です。

```
catgroup like 'S%'
venueseats between 20000 and 50000
eventname in('Jersey Boys','Spamalot')
year=2008
length(catdesc)>25
date_part(month, caldate)=6
```

条件は単純にすることも複雑することもできます。複雑な条件の場合、かっこを使って、論理ユニットを分離します。次の例では、結合条件をかっこによって囲みます。

```
where (category.catid=event.catid) and category.catid in(6,7,8)
```

## 使用に関する注意事項
<a name="r_WHERE_clause_usage_notes"></a>

WHERE 句でエイリアスを使って、SELECT リスト式を参照することができます。

WHERE 句内の集計関数の結果を制限することはできません。その目的には、HAVING 句を使用してください。

WHERE 句内で制限されている列は、FROM 句内のテーブル参照から生成する必要があります。

## 例
<a name="r_SELECT_synopsis-example"></a>

次のクエリは、SALES テーブルと EVENT テーブルの結合条件、EVENTNAME 列に関する述語、STARTTIME 列に関する 2 つの述語など、複数の WHERE 句制限の組み合わせを使用します。

```
select eventname, starttime, pricepaid/qtysold as costperticket, qtysold
from sales, event
where sales.eventid = event.eventid
and eventname='Hannah Montana'
and date_part(quarter, starttime) in(1,2)
and date_part(year, starttime) = 2008
order by 3 desc, 4, 2, 1 limit 10;

eventname    |      starttime      |   costperticket   | qtysold
----------------+---------------------+-------------------+---------
Hannah Montana | 2008-06-07 14:00:00 |     1706.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |     1658.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1479.00000000 |       3
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       1
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       2
Hannah Montana | 2008-06-07 14:00:00 |     1163.00000000 |       4
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       1
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       2
Hannah Montana | 2008-05-01 19:00:00 |      497.00000000 |       4
(10 rows)
```

# WHERE 句の Oracle スタイルの外部結合
<a name="r_WHERE_oracle_outer"></a>

Oracle との互換性を目的として、Amazon Redshift は WHERE 句結合条件での Oracle の外部結合演算子 (\$1) をサポートします。この演算子は、外部結合条件の定義でのみ使用することを意図しています。他のコンテキストで使用しないでください。この演算子をその他の目的に使用すると、ほとんどの場合、メッセージを表示せずに無視します。

外部結合は、同等の内部結合が返す行と同じ行をすべて返します。それに加え、1 つまたは両方のテーブルから一致しない行も返します。FROM 句では、left、right、full の外部結合を指定できます。WHERE 句では、left または right の外部結合だけを指定できます。

TABLE1 と TABLE2 を外部結合し、TABLE1 (左側の外部結合) から一致しない行を返すには、FROM 句内で `TABLE1 LEFT OUTER JOIN TABLE2` を指定するか、WHERE 句内で TABLE2 からのすべての結合列に (\$1) 演算子を適用します。TABLE2 と一致する行がない TABLE1 のすべての行の場合、TABLE2 からの列を含む SELECT リスト式に対するクエリ結果には Null が含まれます。

TABLE1 と一致する行がない TABLE2 のすべての行に対して同じ動作を生成するには、FROM 句で `TABLE1 RIGHT OUTER JOIN TABLE2` を指定するか、WHERE 句内で TABLE1 からのすべての結合列に (\$1) 演算子を適用します。

## 基本構文
<a name="r_WHERE_oracle_outer-basic-syntax"></a>

```
[ WHERE {
[ table1.column1 = table2.column1(+) ]
[ table1.column1(+) = table2.column1 ]
}
```

最初の条件は、以下と同等です。

```
from table1 left outer join table2
on table1.column1=table2.column1
```

2 番目の条件は、以下と同等です。

```
from table1 right outer join table2
on table1.column1=table2.column1
```

**注記**  
ここに示す構文は、結合列の 1 ペアを介した等価結合のシンプルなケースを示しています。ただし、他のタイプの比較条件と結合列の複数のペアも有効です。

例えば、次の WHERE 句は、列の 2 つのペアを介して、外部結合を定義します。(\$1) 演算子は、両方の条件の同じテーブルにアタッチする必要があります。

```
where table1.col1 > table2.col1(+)
and table1.col2 = table2.col2(+)
```

## 使用に関する注意事項
<a name="r_WHERE_oracle_outer_usage_notes"></a>

可能な場合は、WHERE 句の (\$1) 演算子の代わりに、標準の FROM 句 Outer JOIN 構文を使用してください。(\$1) 演算子を含んでいるクエリは、次の規則に依存します。
+ (\$1) 演算子は WHERE 句内と、テーブルまたはビューから列への参照でのみ使用できます。
+ 式に (\$1) 演算子を適用することはできません。ただし、式に (\$1) 演算子を使用する列を含めることはできます。例えば、次の結合条件は、構文エラーを返します。

  ```
  event.eventid*10(+)=category.catid
  ```

  ただし、次の結合条件は有効です。

  ```
  event.eventid(+)*10=category.catid
  ```
+ FROM 句結合構文も含むクエリブロック内で (\$1) 演算子を使用することはできません。
+ 2 つのテーブルを複数の結合条件を介して結合する場合、(\$1) 演算子をこれらの条件のすべてで使用するか、すべてで使用しないことが必要です。構文スタイルが混在する結合は、内部結合として実行され、警告は出力されません。
+ 外部クエリ内のテーブルを内部クエリによって生成されたテーブルに結合する場合、(\$1) 演算子は外部結合を生成しません。
+ (\$1) 演算子を使って、テーブルを自分自身に外部結合するには、FROM 句内でテーブルエイリアスを定義し、結合条件でそのエイリアスを参照する必要があります。

  ```
  select count(*)
  from event a, event b
  where a.eventid(+)=b.catid;
  
  count
  -------
  8798
  (1 row)
  ```
+ (\$1) 演算子を含む結合条件を、OR 条件または IN 条件と組み合わせることはできません。次に例を示します。

  ```
  select count(*) from sales, listing
  where sales.listid(+)=listing.listid or sales.salesid=0;
  ERROR:  Outer join operator (+) not allowed in operand of OR or IN.
  ```
+  3 つ以上のテーブルを外部結合する WHERE 句では、(\$1) 演算子は指定されたテーブルに一度して適用できません。次の例では、2 つの連続する結合で (\$1) 演算子を使って SALES テーブルを参照することはできません。

  ```
  select count(*) from sales, listing, event
  where sales.listid(+)=listing.listid and sales.dateid(+)=date.dateid;
  ERROR:  A table may be outer joined to at most one other table.
  ```
+  WHERE 句の外部結合条件で TABLE2 からの列を定数と比較する場合、(\$1) 演算子を列に適用します。演算子を含めない場合、TABLE1 から外部結合された行 (制限された行に対して null を含んでいる行) は削除されます。以下の「例」のセクションを参照してください。

## 例
<a name="r_WHERE_oracle_outer-examples"></a>

次の結合クエリは、LISTID 列を介した SALES テーブルと LISTING テーブルの左外部結合を指定します。

```
select count(*)
from sales, listing
where sales.listid = listing.listid(+);

count
--------
172456
(1 row)
```

次の同等クエリは同じ結果を提供しますが、FROM 句結合構文を使用します。

```
select count(*)
from sales left outer join listing on sales.listid = listing.listid;

count
--------
172456
(1 row)
```

すべての一覧が販売に含まれるわけではないため、SALES テーブルに LISTING テーブル内のすべてのリストのレコードが含まれているわけではありません。次のクエリでは、SALES と LISTING を外部結合し、SALES テーブルが指定されたリスト ID に対して販売がないことをレポートした場合でも、LISTING からの行を返します。SALES テーブルから生成された PRICE と COMM 列には、一致しない行の結果セットにヌルが格納されています。

```
select listing.listid, sum(pricepaid) as price,
sum(commission) as comm
from listing, sales
where sales.listid(+) = listing.listid and listing.listid between 1 and 5
group by 1 order by 1;

listid | price  |  comm
--------+--------+--------
1 | 728.00 | 109.20
2 |        |
3 |        |
4 |  76.00 |  11.40
5 | 525.00 |  78.75
(5 rows)
```

WHERE 句の結合演算子を使用する場合、FROM 句のテーブルの順番は問題になりません。

WHERE 句のより複雑な外部結合条件の例としては、2 つのテーブル列間の比較*と*定数との比較による条件のケースがあります。

```
where category.catid=event.catid(+) and eventid(+)=796;
```

(\$1) 演算子は 2 つの場所で使用されることに注意してください。1 つ目はテーブル間の等価比較、2 つ目は EVENTID 列への条件の比較においてです。この構文の結果は、EVENTID に関する制限が評価される際、外部結合された行に保存されます。EVENTID 制限から (\$1) 演算子を削除すると、クエリはこの制限を、外部結合条件ではなく、フィルタとして処理します。この場合、EVENTID にヌルが格納されている外部結合された行は、結果セットから削除されます。

ここに、この動作を表現する完全なクエリを示します。

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid(+)=796;

catname | catgroup | eventid
-----------+----------+---------
Classical | Concerts |
Jazz | Concerts |
MLB | Sports   |
MLS | Sports   |
Musicals | Shows    | 796
NBA | Sports   |
NFL | Sports   |
NHL | Sports   |
Opera | Shows    |
Plays | Shows    |
Pop | Concerts |
(11 rows)
```

FROM 句構文を使用した同等クエリは次のとおりです。

```
select catname, catgroup, eventid
from category left join event
on category.catid=event.catid and eventid=796;
```

このクエリの WHERE 句バージョンから 2 番目の (\$1) 演算子を削除した場合、1 行だけが返されます (`eventid=796` となる行)。

```
select catname, catgroup, eventid
from category, event
where category.catid=event.catid(+) and eventid=796;

catname | catgroup | eventid
-----------+----------+---------
Musicals | Shows    | 796
(1 row)
```

# GROUP BY 句
<a name="r_GROUP_BY_clause"></a>

GROUP BY 句は、クエリのグループ化列を特定します。これは、指定しているすべての列で同じ値を持つ行をグループ化するために使用されます。列が指定されている順序は関係ありません。結果として、共通の値を持つ行のセットがそれぞれ 1 つのグループ行に結合されます。GROUP BY を使用して、出力の重複を排除し、グループごとに集計を計算します。クエリが SUM、AVG、COUNT などの標準関数を使って集計する場合、グループ化列を宣言する必要があります。詳細については、「[集計関数](c_Aggregate_Functions.md)」を参照してください。

## 構文
<a name="r_GROUP_BY_clause-syntax"></a>

```
[ GROUP BY  expression [, ...] | ALL | aggregation_extension  ]
```

ここで、*aggregation\$1extension* は次のいずれかです。

```
GROUPING SETS ( () | aggregation_extension [, ...] ) |
ROLLUP ( expr [, ...] ) |
CUBE ( expr [, ...] )
```

## パラメータ
<a name="r_GROUP_BY_clause-parameters"></a>

 *expression*  
列または式のリストは、クエリの SELECT リストの非集計式のリストと一致する必要があります。例えば、次のシンプルなクエリを考慮してみます。  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by listid, eventid
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```
このクエリでは、選択されたリストは 2 つの集計式で構成されています。最初の式は SUM 関数を使用し、2 番目の式は COUNT 関数を使用します。残りの 2 つの例 (LISTID と EVENTID) は、グループ化列として宣言する必要があります。  
GROUP BY 句の式は、序数を使用することで、SELECT リストを参照することもできます。例えば、前の例は、次のように短縮できます。  

```
select listid, eventid, sum(pricepaid) as revenue,
count(qtysold) as numtix
from sales
group by 1,2
order by 3, 4, 2, 1
limit 5;

listid | eventid | revenue | numtix
-------+---------+---------+--------
89397  |      47 |   20.00 |      1
106590 |      76 |   20.00 |      1
124683 |     393 |   20.00 |      1
103037 |     403 |   20.00 |      1
147685 |     429 |   20.00 |      1
(5 rows)
```

すべて  
ALL は、SELECT リストで指定しているすべての列のうち、集計される列を除くものをグループ化することを示します。例えば、次のクエリを考えてみましょう。このクエリは、GROUP BY 句で個別に指定しなくても、`col1` と `col2` でグループ化します。`col3` 列は `SUM` 関数の引数であるため、グループ化されません。  

```
SELECT col1, col2 sum(col3) FROM testtable GROUP BY ALL
```
SELECT リストの列を EXCLUDE で除外した場合、GROUP BY ALL 句はその特定の列に基づいて結果をグループ化しません。  

```
SELECT * EXCLUDE col3 FROM testtable GROUP BY ALL
```

 * *aggregation\$1extension* *   
集計拡張機能 GROUPING SETS、ROLLUP、CUBE を使用すると、1 つのステートメントで複数の GROUP BY オペレーションを実行できます。集計拡張機能および関連する関数の詳細については、「[集計拡張機能](r_GROUP_BY_aggregation-extensions.md)」を参照してください。

## 例
<a name="r_GROUP_BY_clause-examples"></a>

次の例では、salesid、listid、sellerid、buyerid、eventid、dateid、qtysold、pricepaid、commission、および saletime 列を含む SALES テーブルを使用しています。SALES テーブルの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

次の例のクエリは、`GROUP BY` 句で個別に指定しなくても、`salesid` と `listid` でグループ化します。`qtysold` 列は `SUM` 関数の引数であるため、グループ化されません。

```
SELECT salesid, listid, sum(qtysold) FROM sales GROUP BY ALL;

salesid | listid  | sum
--------+---------+------
33095   | 36572   | 2	
88268   | 100813  | 4	
110917  | 127048  | 1	
...
```

次の例のクエリは、SELECT リストでいくつかの列を除外しているため、GROUP BY ALL は salesid と listid のみをグループ化します。

```
SELECT * EXCLUDE sellerid, buyerid, eventid, dateid, qtysold, pricepaid, commission, saletime 
FROM sales GROUP BY ALL;

salesid | listid 
--------+---------
33095   | 36572   	
88268   | 100813 	
110917  | 127048 	
...
```

# 集計拡張機能
<a name="r_GROUP_BY_aggregation-extensions"></a>

Amazon Redshift では、1 つのステートメントで複数の GROUP BY オペレーションの処理を実行するための集計拡張機能をサポートしています。

 集計拡張機能の例では、ある電子機器会社の売上データを格納する `orders` テーブルを使用しています。`orders` は以下を使用して作成できます。

```
CREATE TABLE ORDERS (
    ID INT,
    PRODUCT CHAR(20),
    CATEGORY CHAR(20),
    PRE_OWNED CHAR(1),
    COST DECIMAL
);

INSERT INTO ORDERS VALUES
    (0, 'laptop',       'computers',    'T', 1000),
    (1, 'smartphone',   'cellphones',   'T', 800),
    (2, 'smartphone',   'cellphones',   'T', 810),
    (3, 'laptop',       'computers',    'F', 1050),
    (4, 'mouse',        'computers',    'F', 50);
```

## *GROUPING SETS*
<a name="r_GROUP_BY_aggregation-extensions-grouping-sets"></a>

 1 つのステートメントで 1 つ以上のグループ化セットを計算します。グループ化セットとは、1 つの GROUP BY 句のセットで、クエリの結果セットをグループ化できる 0 個以上の列のセットです。GROUP BY GROUPING SETS は、異なる列でグループ化された 1 つの結果セットに対して UNION ALL クエリを実行することに相当します。例えば、GROUP BY GROUPING SETS((a), (b)) は、GROUP BY a UNION ALL GROUP BY b と同等です。

 次の例では、製品のカテゴリと販売された製品の種類の両方に従ってグループ化された注文テーブルの製品のコストを返します。

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(category, product);

       category       |       product        | total
----------------------+----------------------+-------
 computers            |                      |  2100
 cellphones           |                      |  1610
                      | laptop               |  2050
                      | smartphone           |  1610
                      | mouse                |    50

(5 rows)
```

## *ROLLUP*
<a name="r_GROUP_BY_aggregation-extensions-rollup"></a>

 前の列が後続の列の親と見なされる階層を前提としています。ROLLUP は、指定された列ごとにデータをグループ化し、グループ化された行に加えて、グループ化列の全レベルの合計を表す追加の小計行を返します。例えば、GROUP BY ROLLUP((a), (b)) を使用すると、b が a のサブセクションであると仮定して、最初に a でグループ化された結果セットを返し、次に b でグループ化された結果セットを返すことができます。また、ROLLUP では、列をグループ化せずに結果セット全体を含む行を返します。

GROUP BY ROLLUP((a), (b)) は、GROUP BY GROUPING SETS((a,b), (a), ()) と同等です。

次の例では、最初にカテゴリ別にグループ化された注文テーブルの製品のコストを返し、次にカテゴリが細分化された製品を返します。

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY ROLLUP(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      |                      |  3710
(6 rows)
```

## *CUBE*
<a name="r_GROUP_BY_aggregation-extensions-cube"></a>

 指定した列ごとにデータをグループ化し、グループ化された行に加えて、グループ化列の全レベルの合計を表す追加の小計行を返します。CUBE は ROLLUP と同じ行を返しますが、ROLLUP の対象とならないグループ列のすべての組み合わせで小計行を追加します。例えば、GROUP BY CUBE ((a), (b)) を使用すると、b が a のサブセクションであると仮定して、最初に a でグループ化された結果セットを返し、次に b でグループ化された結果セット、さらに b のみでグループ化された結果セットを返すことができます。また、CUBE では、列をグループ化せずに結果セット全体を含む行を返します。

GROUP BY CUBE((a), (b)) は GROUP BY GROUPING SETS((a, b), (a), (b), ()) と同等です。

次の例では、最初にカテゴリ別にグループ化された注文テーブルの製品のコストを返し、次にカテゴリが細分化された製品を返します。前述の ROLLUP の例とは異なり、このステートメントはグループ化列のすべての組み合わせの結果を返します。

```
SELECT category, product, sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 1,2;

       category       |       product        | total
----------------------+----------------------+-------
 cellphones           | smartphone           |  1610
 cellphones           |                      |  1610
 computers            | laptop               |  2050
 computers            | mouse                |    50
 computers            |                      |  2100
                      | laptop               |  2050
                      | mouse                |    50
                      | smartphone           |  1610
                      |                      |  3710
(9 rows)
```

## *GROUPING/GROUPING\$1ID functions*
<a name="r_GROUP_BY_aggregation-extentions-grouping"></a>

 ROLLUP と CUBE は、小計行を示す NULL 値を結果セットに追加します。例えば、GROUP BY ROLLUP((a), (b)) は、b グループ列の値が NULL である行を 1 つ以上返し、それらが a グループ列のフィールドの小計であることを示します。これらの NULL 値は、返されるタプルの形式を満たすためにのみ機能します。

 それ自体に NULL 値が格納されているリレーションに対して ROLLUP と CUBE を使用して GROUP BY オペレーションを実行すると、同じグループ化列を持つように見える行を含む結果セットが生成されることがあります。前の例に戻ると、b のグループ化列に NULL 値が格納されている場合、GROUP BY ROLLUP((a), (b)) は、小計ではない b のグループ化列に値が NULL の行を返します。

 ROLLUP と CUBE によって作成された NULL 値と、テーブル自体に格納されている NULL 値を区別するには、GROUPING 関数またはそのエイリアスである GROUPING\$1ID を使用できます。GROUPING は、引数として 1 つのグループ化セットを取り、結果セットの各行について、その位置のグループ化列に対応する 0 または 1 ビットの値を返し、その値を整数に変換します。その位置の値が集計拡張によって作成された NULL 値の場合、GROUPING は 1 を返します。格納されている NULL 値を含む他のすべての値に対しては 0 を返します。

 例えば、GROUPING(category, product) は、その行のグループ化列の値に応じて、特定の行について次の値を返すことができます。この例では、テーブル内のすべての NULL 値は、集計拡張によって作成された NULL 値です。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_GROUP_BY_aggregation-extensions.html)

GROUPING 関数は、クエリの SELECT リスト部分に次の形式で表示されます。

```
SELECT ... [GROUPING( expr )...] ...
  GROUP BY ... {CUBE | ROLLUP| GROUPING SETS} ( expr ) ...
```

次の例は、前述の CUBE の例と同じですが、グループ化セットに GROUPING 関数が追加されています。

```
SELECT category, product,
       GROUPING(category) as grouping0,
       GROUPING(product) as grouping1,
       GROUPING(category, product) as grouping2,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product) ORDER BY 3,1,2;

       category       |       product        | grouping0 | grouping1 | grouping2 | total
----------------------+----------------------+-----------+-----------+-----------+-------
 cellphones           | smartphone           |         0 |         0 |         0 |  1610
 cellphones           |                      |         0 |         1 |         1 |  1610
 computers            | laptop               |         0 |         0 |         0 |  2050
 computers            | mouse                |         0 |         0 |         0 |    50
 computers            |                      |         0 |         1 |         1 |  2100
                      | laptop               |         1 |         0 |         2 |  2050
                      | mouse                |         1 |         0 |         2 |    50
                      | smartphone           |         1 |         0 |         2 |  1610
                      |                      |         1 |         1 |         3 |  3710
(9 rows)
```

## *部分的な ROLLUP および CUBE*
<a name="r_GROUP_BY_aggregation-extentions-partial"></a>

 ROLLUP および CUBE オペレーションは、小計の一部のみで実行できます。

 部分的な ROLLUP および CUBE オペレーションの構文は次のとおりです。

```
GROUP BY expr1, { ROLLUP | CUBE }(expr2, [, ...])
```

ここで、GROUP BY 句は *expr2* 以降のレベルの小計行のみを作成します。

次の例は、注文テーブルでの ROLLUP および CUBE オペレーションの一部を示しています。最初に製品が中古品かどうかでグループ化し、次にカテゴリ列と製品列で ROLLUP と CUBE を実行します。

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, ROLLUP(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(9 rows)

SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY pre_owned, CUBE(category, product) ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
(13 rows)
```

「pre\$1owned」列は ROLLUP および CUBE オペレーションには含まれないため、他のすべての行を含む総計行はありません。

## *連結グループ*
<a name="r_GROUP_BY_aggregation-extentions-concat"></a>

 複数の GROUPING SETS/ROLLUP/CUBE 句を連結して、さまざまなレベルの小計を計算できます。連結グループでは、指定されたグループ化セットの直積集合を返します。

 GROUPING SETS/ROLLUP/CUBE 句を連結する構文は次のとおりです。

```
GROUP BY {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...]),
         {ROLLUP|CUBE|GROUPING SETS}(expr1[, ...])[, ...]
```

次の例を考慮して、小さな連結グループがどのようにして大きな最終結果セットを生成できるかを確認してください。

```
SELECT pre_owned, category, product,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY CUBE(category, product), GROUPING SETS(pre_owned, ())
ORDER BY 4,1,2,3;

 pre_owned |       category       |       product        | group_id | total
-----------+----------------------+----------------------+----------+-------
 F         | computers            | laptop               |        0 |  1050
 F         | computers            | mouse                |        0 |    50
 T         | cellphones           | smartphone           |        0 |  1610
 T         | computers            | laptop               |        0 |  1000
           | cellphones           | smartphone           |        1 |  1610
           | computers            | laptop               |        1 |  2050
           | computers            | mouse                |        1 |    50
 F         | computers            |                      |        2 |  1100
 T         | cellphones           |                      |        2 |  1610
 T         | computers            |                      |        2 |  1000
           | cellphones           |                      |        3 |  1610
           | computers            |                      |        3 |  2100
 F         |                      | laptop               |        4 |  1050
 F         |                      | mouse                |        4 |    50
 T         |                      | laptop               |        4 |  1000
 T         |                      | smartphone           |        4 |  1610
           |                      | laptop               |        5 |  2050
           |                      | mouse                |        5 |    50
           |                      | smartphone           |        5 |  1610
 F         |                      |                      |        6 |  1100
 T         |                      |                      |        6 |  2610
           |                      |                      |        7 |  3710
(22 rows)
```

## *ネストされたグループ*
<a name="r_GROUP_BY_aggregation-extentions-nested"></a>

 GROUPING SETS/ROLLUP/CUBE オペレーションを GROUPING SETS *expr* として使用して、ネストされたグループを作成できます。ネストされた GROUPING SETS 内のサブグループはフラット化されます。

 ネストされたグループの構文は次のとおりです。

```
GROUP BY GROUPING SETS({ROLLUP|CUBE|GROUPING SETS}(expr[, ...])[, ...])
```

次の例を考えます。

```
SELECT category, product, pre_owned,
       GROUPING(category, product, pre_owned) as group_id,
       sum(cost) as total
FROM orders
GROUP BY GROUPING SETS(ROLLUP(category), CUBE(product, pre_owned))
ORDER BY 4,1,2,3;

       category       |       product        | pre_owned | group_id | total
----------------------+----------------------+-----------+----------+-------
 cellphones           |                      |           |        3 |  1610
 computers            |                      |           |        3 |  2100
                      | laptop               | F         |        4 |  1050
                      | laptop               | T         |        4 |  1000
                      | mouse                | F         |        4 |    50
                      | smartphone           | T         |        4 |  1610
                      | laptop               |           |        5 |  2050
                      | mouse                |           |        5 |    50
                      | smartphone           |           |        5 |  1610
                      |                      | F         |        6 |  1100
                      |                      | T         |        6 |  2610
                      |                      |           |        7 |  3710
                      |                      |           |        7 |  3710
(13 rows)
```

ROLLUP(category) と CUBE(product, pre\$1owned) の両方にグループ化セット () が含まれているため、総計を表す行が重複していることに注意してください。

## *使用に関する注意事項*
<a name="r_GROUP_BY_aggregation-extensions-usage-notes"></a>
+ GROUP BY 句は最大 64 のグループ化セットをサポートします。ROLLUP と CUBE、または GROUPING SETS、ROLLUP、および CUBE の組み合わせの場合、この制限はグループ化セットの暗黙の数に適用されます。例えば、GROUP BY CUBE((a), (b)) は、2 つではなく 4 つのグループ化セットとしてカウントされます。
+ 集計拡張機能を使用する場合、定数をグループ化列として使用することはできません。
+ 重複する列を含むグループ化セットを作成することはできません。

# HAVING 句
<a name="r_HAVING_clause"></a>

HAVING 句は、クエリが返す中間グループ結果セットに条件を適用します。

## 構文
<a name="r_HAVING_clause-synopsis"></a>

```
[ HAVING condition ]
```

例えば、SUM 関数の結果を制限できます。

```
having sum(pricepaid) >10000
```

HAVING 条件は、すべての WHERE 句条件が適用され、GROUP BY オペレーションが完了してから適用されます。

条件自体は、WHERE 句の条件と同じ形式になります。

## 使用に関する注意事項
<a name="r_HAVING_clause_usage_notes"></a>
+ HAVING 句条件内で参照される列は、グループ化列または集計関数の結果を参照する列のいずれかでなければなりません。
+ HAVING 句では、以下の項目を指定することはできません。
  + SELECT リスト項目を参照する序数。序数が使用できるのは、GROUP BY 句または ORDER BY 句だけです。

## 例
<a name="r_HAVING_clause-examples"></a>

次のクエリは、すべてのイベントに対するチケットの合計販売を名前別に計算し、販売合計が 800,000 ドルに達しなかったイベントを削除します。HAVING 条件は、SELECT リスト内の集計関数の結果に適用されます。`sum(pricepaid)`)

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(pricepaid) > 800000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

次のクエリは、同じような結果セットを計算します。ただしこの場合、SELECT リスト `sum(qtysold)` で指定されていない集計に対して HAVING 条件が適用されます。2,000 枚を超えるチケットを販売しなかったイベントは、最終結果から削除されます。

```
select eventname, sum(pricepaid)
from sales join event on sales.eventid = event.eventid
group by 1
having sum(qtysold) >2000
order by 2 desc, 1;

eventname        |    sum
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
Chicago          |  790993.00
Spamalot         |  714307.00
```

次のクエリは、すべてのイベントに対するチケットの合計販売を名前別に計算し、販売合計が 800,000 ドルに達しなかったイベントを削除します。HAVING 条件は、`sum(pricepaid)` の `pp` エイリアスを使用して SELECT リスト内の集計関数の結果に適用されます。

```
select eventname, sum(pricepaid) as pp
from sales join event on sales.eventid = event.eventid
group by 1
having pp > 800000
order by 2 desc, 1;

eventname        |    pp
-----------------+-----------
Mamma Mia!       | 1135454.00
Spring Awakening |  972855.00
The Country Girl |  910563.00
Macbeth          |  862580.00
Jersey Boys      |  811877.00
Legally Blonde   |  804583.00
```

# QUALIFY 句
<a name="r_QUALIFY_clause"></a>

QUALIFY 句は、ユーザーが指定した検索条件に従って、以前に計算されたウィンドウ関数の結果をフィルタリングします。この句を使用すると、サブクエリを使用せずに、ウィンドウ関数の結果にフィルタリング条件を適用できます。

これは、WHERE 句の行をさらに絞り込むための条件を適用する [HAVING 句](https://docs.aws.amazon.com/redshift/latest/dg/r_HAVING_clause.html)に似ています。QUALIFY と HAVING の違いは、QUALIFY 句からフィルタリングされた結果は、データに対してウィンドウ関数を実行した結果に基づいている可能性があることです。1 つのクエリで QUALIFY 句と HAVING 句の両方を使用できます。

## 構文
<a name="r_QUALIFY-synopsis"></a>

```
QUALIFY condition
```

**注記**  
FROM 句の直後に QUALIFY 句を使用する場合、FROM リレーション名には QUALIFY 句の前にエイリアスを指定する必要があります。

## 例
<a name="r_QUALIFY-examples"></a>

このセクションの例では下のサンプルデータを使用します。

```
create table store_sales (ss_sold_date date, ss_sold_time time, 
               ss_item text, ss_sales_price float);
insert into store_sales values ('2022-01-01', '09:00:00', 'Product 1', 100.0),
                               ('2022-01-01', '11:00:00', 'Product 2', 500.0),
                               ('2022-01-01', '15:00:00', 'Product 3', 20.0),
                               ('2022-01-01', '17:00:00', 'Product 4', 1000.0),
                               ('2022-01-01', '18:00:00', 'Product 5', 30.0),
                               ('2022-01-02', '10:00:00', 'Product 6', 5000.0),
                               ('2022-01-02', '16:00:00', 'Product 7', 5.0);
```

次の例は、その日の 12:00 以降に販売される最も高価な 2 つの商品を検索する方法を示しています。

```
SELECT *
FROM store_sales ss
WHERE ss_sold_time > time '12:00:00'
QUALIFY row_number()
OVER (PARTITION BY ss_sold_date ORDER BY ss_sales_price DESC) <= 2
               

 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 17:00:00     | Product 4 |           1000
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

次に、毎日最後に販売された商品を検索できます。

```
SELECT *
FROM store_sales ss
QUALIFY last_value(ss_item)
OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
      ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) = ss_item;
               
ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price 
--------------+--------------+-----------+----------------
 2022-01-01   | 18:00:00     | Product 5 |             30
 2022-01-02   | 16:00:00     | Product 7 |              5
```

次の例では、前のクエリ (毎日最後に販売された商品) と同じ記録が返されますが、QUALIFY 句は使用しません。

```
SELECT * FROM (
  SELECT *,
  last_value(ss_item)
  OVER (PARTITION BY ss_sold_date ORDER BY ss_sold_time ASC
        ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) ss_last_item
  FROM store_sales ss
)
WHERE ss_last_item = ss_item;
               
 ss_sold_date | ss_sold_time |  ss_item  | ss_sales_price | ss_last_item 
--------------+--------------+-----------+----------------+--------------
 2022-01-02   | 16:00:00     | Product 7 |              5 | Product 7
 2022-01-01   | 18:00:00     | Product 5 |             30 | Product 5
```

# UNION、INTERSECT、または EXCEPT
<a name="r_UNION"></a>

**Topics**
+ [構文](#r_UNION-synopsis)
+ [パラメータ](#r_UNION-parameters)
+ [セット演算の評価の順番](#r_UNION-order-of-evaluation-for-set-operators)
+ [使用に関する注意事項](#r_UNION-usage-notes)
+ [UNION クエリの例](c_example_union_query.md)
+ [UNION ALL クエリの例](c_example_unionall_query.md)
+ [INTERSECT クエリの例](c_example_intersect_query.md)
+ [EXCEPT クエリの例](c_Example_MINUS_query.md)

UNION、INTERSECT、または EXCEPT セット演算子**は、2 つの個別のクエリ式の比較とマージに使われます。例えば、ウェブサイトで購入者と販売者の両方を兼ねているが、ユーザー名が別々の列または表に格納されているユーザーを確認するには、これら 2 種類のユーザーの積集合**を求めます。購入者ではあるが販売者ではないウェブユーザーを確認するには、EXCEPT 演算子を使用すると、2 つユーザーリストの差**を見つけることができます。役割とは無関係に、すべてのユーザーのリストを作成する場合、UNION 演算子を使用できます。

## 構文
<a name="r_UNION-synopsis"></a>

```
query
{ UNION [ ALL ] | INTERSECT | EXCEPT | MINUS }
query
```

## パラメータ
<a name="r_UNION-parameters"></a>

 *query*()   
UNION、INTERSECT、または EXCEPT 演算子の後に続く 2 番目のクエリ式に、SELECT リストの形式で対応するクエリ式。2 つの式は、互換性のあるデータ型の出力列を同数含んでいる必要があります。そうでない場合、2 つの結果セットの比較とマージはできません。データ型の複数のカテゴリ間で黙示的な変換を許可しない演算を設定します。詳細については「[型の互換性と変換](c_Supported_data_types.md#r_Type_conversion)」を参照してください。  
クエリ式の数を上限なしに含むクエリを構築して、そのクエリを任意の組み合わせで UNION、INTERSECT、および EXCEPT 演算子に関連付けることができます。例えば、テーブル T1、T2、および T3 に互換性のある列セットが含まれていると想定した場合、次のクエリ構造は有効です。  

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

UNION   
行が片方の式から生成されたか、両方の式から生成されたかにかかわらず、2 つのクエリ式からの行を返す演算を設定します。

INTERSECT   
2 つのクエリ式から生成される行を返す演算を設定します。両方の式によって返されない行は破棄されます。

EXCEPT \$1 MINUS   
2 つのクエリ式の一方から生成される行を返す演算を設定します。結果を制限するため、行は最初の結果テーブルに存在し、2 番目のテーブルには存在しない必要があります。MINUS と EXCEPT はまったく同じ意味です。

ALL   
ALL キーワードは、UNION が生成する重複行を保持します。ALL キーワードを使用しないよう場合のデフォルトの動作は、このような重複を破棄します。INTERSECT ALL、EXCEPT ALL、および MINUS ALL はサポートされません。

## セット演算の評価の順番
<a name="r_UNION-order-of-evaluation-for-set-operators"></a>

UNION および EXCEPT セット演算子は左結合です。優先順位の決定でかっこを指定しなかった場合、これらのセット演算子の組み合わせは、左から右に評価されます。例えば、次のクエリでは、T1 と T2 の UNION が最初に評価され、次に UNION の結果に対して、EXCEPT 演算が実行されます。

```
select * from t1
union
select * from t2
except
select * from t3
order by c1;
```

同じクエリ内で演算子の組み合わせを使用した場合、INTERSECT 演算子は UNION および EXCEPT よりも優先されます。例えば、次のクエリは T2 と T3 の積集合を評価し、その結果を T1 を使って結合します。

```
select * from t1
union
select * from t2
intersect
select * from t3
order by c1;
```

かっこを追加することで、評価の順番を変更することができます。次のケースでは、T1 と T2 の結合結果と T3 の積集合を求めます。このクエリでは異なる結果が生成されます。

```
(select * from t1
union
select * from t2)
intersect
(select * from t3)
order by c1;
```

## 使用に関する注意事項
<a name="r_UNION-usage-notes"></a>
+ セット演算クエリの結果で返される列名は、最初のクエリ式のテーブルからの列名 (またはエイリアス) です。これらの列名は、列内の値はセット演算子の両方のテーブルから生成されるという点で誤解を生む可能性があるため、結果セットには意味のあるエイリアスを付けることをお勧めします。
+ セット演算子より前に記述されたクエリ式には、ORDER BY 句を含めないでください。ORDER BY 句は、セット演算子を含むクエリの最後に使用することで、意味のあるソート結果が得られます。この場合、ORDER BY 句は、すべてのセット演算の最終結果に適用されます。最も外側のクエリには、標準の LIMIT 句および OFFSET 句を含めることもできます。
+ セット演算子クエリが 10 進数の結果を返した場合、同じ精度とスケールで対応する結果列を返すように奨励されます。例えば、T1.REVENUE が DECIMAL(10,2) 列で T2.REVENUE が DECIMAL(8,4) 列の次のクエリでは、DECIMAL(12,4) への結果も 10 進数であることが奨励されます。

  ```
  select t1.revenue union select t2.revenue;
  ```

  スケールは `4` になります。2 つの列の最大のスケールです。精度は `12` です。T1.REVENUE は小数点の左側に 8 桁必要であるからです (12 - 4 = 8)。このような奨励により、UNION の両側からのすべての値が結果に適合します。64 ビットの値の場合、最大結果精度は 19 で、最大結果スケールは 18 です。128 ビットの値の場合、最大結果精度は 38 で、最大結果スケールは 37 です。

  生成されるデータ型が Amazon Redshift の精度とスケールの上限を超えた場合、クエリはエラーを返します。
+ 集合演算で 2 行が同一として扱われるのは、対応する列のペアごとに、2 つのデータ値が*等しい*または*どちらも NULL* である場合です。例えば、テーブル T1 と T2 の両方に 1 つの列と 1 つの行が含まれていて、両方のテーブルでその行が NULL の場合、これらのテーブルに INTERSECT 演算に実行すると、その行が返されます。

# UNION クエリの例
<a name="c_example_union_query"></a>

次の UNION クエリでは、SALES テーブルの行が、LISTING テーブルの行とマージされます。各テーブルからは 3 つの互換性のある列が選択されます。この場合、対応する列には同じ名前とデータ型が与えられます。

最終結果セットは、LISTING テーブルの最初の列によってソートされ、LISTID の値が高い 5 つの行に制限されます。

```
select listid, sellerid, eventid from listing
union select listid, sellerid, eventid from sales
order by listid, sellerid, eventid desc limit 5;

listid | sellerid | eventid
--------+----------+---------
1 |    36861 |    7872
2 |    16002 |    4806
3 |    21461 |    4256
4 |     8117 |    4337
5 |     1616 |    8647
(5 rows)
```

次の例では、どのクエリ式が結果セットの各行を生成したかを確認できるように、UNION クエリの出力にリテラル値を追加する方法を示します。このクエリは、最初のクエリ式からの行を (販売者を意味する) 「B」として識別し、2 番目のクエリ式からの行を (購入者を意味する) 「S」として識別します。

このクエリは 10,000 ドル以上のチケット取引の販売者と購入者を識別します。UNION 演算子の両側の 2 つのクエリ式の違いは、SALES テーブルの結合列だけです。

```
select listid, lastname, firstname, username,
pricepaid as price, 'S' as buyorsell
from sales, users
where sales.sellerid=users.userid
and pricepaid >=10000
union
select listid, lastname, firstname, username, pricepaid,
'B' as buyorsell
from sales, users
where sales.buyerid=users.userid
and pricepaid >=10000
order by 1, 2, 3, 4, 5;

listid | lastname | firstname | username |   price   | buyorsell
--------+----------+-----------+----------+-----------+-----------
209658 | Lamb     | Colette   | VOR15LYI |  10000.00 | B
209658 | West     | Kato      | ELU81XAA |  10000.00 | S
212395 | Greer    | Harlan    | GXO71KOC |  12624.00 | S
212395 | Perry    | Cora      | YWR73YNZ |  12624.00 | B
215156 | Banks    | Patrick   | ZNQ69CLT |  10000.00 | S
215156 | Hayden   | Malachi   | BBG56AKU |  10000.00 | B
(6 rows)
```

次の例では、重複行が検出された場合、その重複行を結果に保持する必要があるため、UNION ALL 演算子を使用します。一連の特定イベント ID では、クエリは各イベントに関連付けられているセールスごとに 0 行以上の行を返し、そのイベントのリスティングごとに 0 行または 1 行を返します。イベント ID は、LISTING テーブルと EVENT テーブルの各行に対して一意ですが、SALES テーブルのイベント ID とリスティング ID の同じ組み合わせに対して、複数のセールスが存在することがあります。

結果セットの 3 番目の列は、行のソースを特定します。その行が SALES テーブルからの行だった場合、SALESROW 列に "Yes" というマークが付きます。(SALESROW は SALES.LISTID のエイリアスです。) その行が LISTING テーブルからの行だった場合、SALESROW 列に "No" というマークが付きます。

この場合、リスティング 500、イベント 7787 の結果セットは、3 つの行から構成されます。つまり、このリスティングとイベントの組み合わせに対して、3 つの異なる取引が実行されたということです。他の 2 つのリスティング (501 と 502) では販売はありません。このため、これらのリスト ID に対してクエリが生成した唯一の行は LISTING テーブル (SALESROW = 'No') から生成されます。

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

ALL キーワードを付けずに同じクエリを実行した場合、結果には、セールス取引の 1 つだけが保持されます。

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# UNION ALL クエリの例
<a name="c_example_unionall_query"></a>

次の例では、重複行が検出された場合、その重複行を結果に保持する必要があるため、UNION ALL 演算子を使用します。一連の特定イベント ID では、クエリは各イベントに関連付けられているセールスごとに 0 行以上の行を返し、そのイベントのリスティングごとに 0 行または 1 行を返します。イベント ID は、LISTING テーブルと EVENT テーブルの各行に対して一意ですが、SALES テーブルのイベント ID とリスティング ID の同じ組み合わせに対して、複数のセールスが存在することがあります。

結果セットの 3 番目の列は、行のソースを特定します。その行が SALES テーブルからの行だった場合、SALESROW 列に "Yes" というマークが付きます。(SALESROW は SALES.LISTID のエイリアスです。) その行が LISTING テーブルからの行だった場合、SALESROW 列に "No" というマークが付きます。

この場合、リスティング 500、イベント 7787 の結果セットは、3 つの行から構成されます。つまり、このリスティングとイベントの組み合わせに対して、3 つの異なる取引が実行されたということです。他の 2 つのリスティング (501 と 502) では販売はありません。このため、これらのリスト ID に対してクエリが生成した唯一の行は LISTING テーブル (SALESROW = 'No') から生成されます。

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union all
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
7787 |    500 | Yes
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(6 rows)
```

ALL キーワードを付けずに同じクエリを実行した場合、結果には、セールス取引の 1 つだけが保持されます。

```
select eventid, listid, 'Yes' as salesrow
from sales
where listid in(500,501,502)
union
select eventid, listid, 'No'
from listing
where listid in(500,501,502)
order by listid asc;

eventid | listid | salesrow
---------+--------+----------
7787 |    500 | No
7787 |    500 | Yes
6473 |    501 | No
5108 |    502 | No
(4 rows)
```

# INTERSECT クエリの例
<a name="c_example_intersect_query"></a>

次の例を最初の UNION の例と比較してみます。2 つの例の違いは使われたセット演算子だけですが、結果は大きく異なります。1 つの行だけが同じになります。

```
235494 |    23875 |    8771
```

 これは、両方のテーブルから検出された 5 つの行の制限された結果の唯一の行です。

```
select listid, sellerid, eventid from listing
intersect
select listid, sellerid, eventid from sales
order by listid desc, sellerid, eventid
limit 5;

listid | sellerid | eventid
--------+----------+---------
235494 |    23875 |    8771
235482 |     1067 |    2667
235479 |     1589 |    7303
235476 |    15550 |     793
235475 |    22306 |    7848
(5 rows)
```

次のクエリでは、3 月にニューヨーク市とロサンジェルスの両方で発生した (チケットが販売された) イベントを検索します。2 つのクエリ式の違いは、VENUECITY 列の制約です。

```
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='Los Angeles'
intersect
select distinct eventname from event, sales, venue
where event.eventid=sales.eventid and event.venueid=venue.venueid
and date_part(month,starttime)=3 and venuecity='New York City'
order by eventname asc;

eventname
----------------------------
A Streetcar Named Desire
Dirty Dancing
Electra
Running with Annalise
Hairspray
Mary Poppins
November
Oliver!
Return To Forever
Rhinoceros
South Pacific
The 39 Steps
The Bacchae
The Caucasian Chalk Circle
The Country Girl
Wicked
Woyzeck
(16 rows)
```

# EXCEPT クエリの例
<a name="c_Example_MINUS_query"></a>

TICKET データベースの CATEGORY テーブルには、次の 11 行が含まれています。

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
   1   | Sports   | MLB       | Major League Baseball
   2   | Sports   | NHL       | National Hockey League
   3   | Sports   | NFL       | National Football League
   4   | Sports   | NBA       | National Basketball Association
   5   | Sports   | MLS       | Major League Soccer
   6   | Shows    | Musicals  | Musical theatre
   7   | Shows    | Plays     | All non-musical theatre
   8   | Shows    | Opera     | All opera and light opera
   9   | Concerts | Pop       | All rock and pop music concerts
  10   | Concerts | Jazz      | All jazz singers and bands
  11   | Concerts | Classical | All symphony, concerto, and choir concerts
(11 rows)
```

CATEGORY\$1STAGE テーブル (ステージングテーブル) には、1 つの追加行が含まれていると想定します。

```
 catid | catgroup |  catname  |                  catdesc
-------+----------+-----------+--------------------------------------------
1 | Sports   | MLB       | Major League Baseball
2 | Sports   | NHL       | National Hockey League
3 | Sports   | NFL       | National Football League
4 | Sports   | NBA       | National Basketball Association
5 | Sports   | MLS       | Major League Soccer
6 | Shows    | Musicals  | Musical theatre
7 | Shows    | Plays     | All non-musical theatre
8 | Shows    | Opera     | All opera and light opera
9 | Concerts | Pop       | All rock and pop music concerts
10 | Concerts | Jazz      | All jazz singers and bands
11 | Concerts | Classical | All symphony, concerto, and choir concerts
12 | Concerts | Comedy    | All stand up comedy performances
(12 rows)
```

2 つのテーブル間の違いを返します。つまり、CATEGORY テーブル内の行ではなく、CATEGORY\$1STAGE テーブル内の行が返されるということです。

```
select * from category_stage
except
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

次の同等のクエリでは、同義語の MINUS を使用します。

```
select * from category_stage
minus
select * from category;

catid | catgroup | catname |             catdesc
-------+----------+---------+----------------------------------
12 | Concerts | Comedy  | All stand up comedy performances
(1 row)
```

SELECT 式の順番を逆にすると、クエリは行を返しません。

# ORDER BY 句
<a name="r_ORDER_BY_clause"></a>

**Topics**
+ [構文](#r_ORDER_BY_clause-synopsis)
+ [パラメータ](#r_ORDER_BY_clause-parameters)
+ [使用に関する注意事項](#r_ORDER_BY_usage_notes)
+ [ORDER BY の例](r_Examples_with_ORDER_BY.md)

ORDER BY 句は、クエリの結果セットをソートします。

## 構文
<a name="r_ORDER_BY_clause-synopsis"></a>

```
[ ORDER BY expression [ ASC | DESC ] ]
[ NULLS FIRST | NULLS LAST ]
[ LIMIT { count | ALL } ]
[ OFFSET start ]
```

## パラメータ
<a name="r_ORDER_BY_clause-parameters"></a>

 *expression*   
通常は、SELECT リスト内の 1 つまたは複数の列を指定することで、クエリ結果セットのソート順を定義する式。結果は、バイナリ UTF-8 順序付けに基づいて返されます。以下を指定することもできます。  
+ SELECT リストにない列
+ クエリが参照するテーブル内に存在する、1 つまたは複数の列で構成される式
+ SELECT リストエントリの位置 (SELECT リストが存在しない場合は、テーブルの列の位置) を表す序数
+ SELECT リストエントリを定義するエイリアス
ORDER BY 句に複数の式が含まれる場合、結果セットは、最初の式に従ってソートされ、次の最初の式の値と一致する値を持つ行に 2 番目の式が適用されます。以降同様の処理が行われます。

ASC \$1 DESC   
次のように、式のソート順を定義するオプション:   
+ ASC: 昇順 (数値の場合は低から高、文字列の場合は「A」から「Z」など) オプションを指定しない場合、データはデフォルトでは昇順にソートされます。
+ DESC: 降順 (数値の場合は高から低、文字列の場合は「Z」から「A」)。

NULLS FIRST \$1 NULLS LAST  
NULL 値を NULL 以外の値より先に順序付けするか、NULL 以外の値の後に順序付けするかを指定するオプション。デフォルトでは、NULL 値は昇順ではソートされて最後にランク付けされ、降順ではソートされて最初にランク付けされます。

LIMIT number** \$1 ALL   <a name="order-by-clause-limit"></a>
クエリが返すソート済みの行数を制御するオプション。LIMIT 数は正の整数でなければなりません。最大値は `2147483647` です。  
LIMIT 0 は行を返しません。この構文は、(行を表示せずに) クエリが実行されているかを確認したり、テーブルから列リストを返すためのテスト目的で使用できます。列リストを返すために LIMIT 0 を使用した場合、ORDER BY 句は重複です。デフォルトは LIMIT ALL です。

OFFSET start**   <a name="order-by-clause-offset"></a>
行を返す前に、start** の前の行数をスキップするよう指定するオプション。OFFSET 数は正の整数でなければなりません。最大値は `2147483647` です。LIMIT オプションを合わせて使用すると、OFFSET 行は、返される LIMIT 行のカウントを開始する前にスキップされます。LIMIT オプションを使用しない場合、結果セット内の行の数が、スキップされる行の数だけ少なくなります。OFFSET 句によってスキップされた行もスキャンされる必要はあるため、大きい OFFSET 値を使用することは一般的に非効率的です。

## 使用に関する注意事項
<a name="r_ORDER_BY_usage_notes"></a>

 ORDER BY 句を使用すると、次の動作が予想されます。
+ ヌル値は他のすべての値よりも「高い」と見なされます。デフォルトの昇順のソートでは、NULL 値は最後に表示されます。この動作を変更するには、NULLS FIRST オプションを使用します。
+ クエリに ORDER BY 句が含まれていない場合、結果行が返す行の順番は予想不能です。同じクエリを 2 回実行した場合に、結果セットが返される順番が異なることがあります。
+ LIMIT オプションと OFFSET オプションは、ORDER BY 句なしに使用できます。ただし、整合性のある行セットを返すには、これらのオプションを ORDER BY と組み合わせて使用してください。
+ Amazon Redshift などの並列システムで ORDER BY が一意の順番を生成しない場合、行の順番は非決定性です。つまり、ORDER BY 式が複数の値を生成する場合、行が返される順番は、システムごと、または Amazon Redshift の実行ごとに異なることがあるということです。
+ Amazon Redshift は、ORDER BY 句で文字列リテラルをサポートしていません。

# ORDER BY の例
<a name="r_Examples_with_ORDER_BY"></a>

CATEGORY テーブルの 11 の行をすべて、2 番目の列 (CATGROUP) でソートして返します。CATGROUP の値が同じ結果の場合、CATDESC 列の値は文字列の長さによってソートされます。次に CATID 列と CATNAME 列でソートされます。

```
select * from category order by 2, length(catdesc), 1, 3;

catid | catgroup |  catname  |                  catdesc
------+----------+-----------+----------------------------------------
10    | Concerts | Jazz      | All jazz singers and bands
9     | Concerts | Pop       | All rock and pop music concerts
11    | Concerts | Classical | All symphony, concerto, and choir conce
6     | Shows    | Musicals  | Musical theatre
7     | Shows    | Plays     | All non-musical theatre
8     | Shows    | Opera     | All opera and light opera
5     | Sports   | MLS       | Major League Soccer
1     | Sports   | MLB       | Major League Baseball
2     | Sports   | NHL       | National Hockey League
3     | Sports   | NFL       | National Football League
4     | Sports   | NBA       | National Basketball Association
(11 rows)
```

SALES テーブルの選択した列を、QTYSOLD 値の高い順にソートして返します。結果を上位の 10 行に制限します。

```
select salesid, qtysold, pricepaid, commission, saletime from sales
order by qtysold, pricepaid, commission, salesid, saletime desc
limit 10;

salesid | qtysold | pricepaid | commission |      saletime
--------+---------+-----------+------------+---------------------
15401   |       8 |    272.00 |      40.80 | 2008-03-18 06:54:56
61683   |       8 |    296.00 |      44.40 | 2008-11-26 04:00:23
90528   |       8 |    328.00 |      49.20 | 2008-06-11 02:38:09
74549   |       8 |    336.00 |      50.40 | 2008-01-19 12:01:21
130232  |       8 |    352.00 |      52.80 | 2008-05-02 05:52:31
55243   |       8 |    384.00 |      57.60 | 2008-07-12 02:19:53
16004   |       8 |    440.00 |      66.00 | 2008-11-04 07:22:31
489     |       8 |    496.00 |      74.40 | 2008-08-03 05:48:55
4197    |       8 |    512.00 |      76.80 | 2008-03-23 11:35:33
16929   |       8 |    568.00 |      85.20 | 2008-12-19 02:59:33
(10 rows)
```

LIMIT 0 構文を使用することで、列リストを返し、行を返しません。

```
select * from venue limit 0;
venueid | venuename | venuecity | venuestate | venueseats
---------+-----------+-----------+------------+------------
(0 rows)
```

# CONNECT BY 句
<a name="r_CONNECT_BY_clause"></a>

CONNECT BY 句は、階層内の行間の関係を指定します。CONNECT BY を使用すると、テーブルをそれ自体に結合して階層データを処理することで、階層順に行を選択できます。例えば、組織図を再帰的にループ処理してデータを一覧表示できます。

階層型クエリは次の順序で処理されます。

1. FROM 句に結合がある場合は、最初に処理されます。

1. CONNECT BY 句が評価されます。

1. WHERE 句が評価されます。

## 構文
<a name="r_CONNECT_BY_clause-synopsis"></a>

```
[START WITH start_with_conditions]
CONNECT BY connect_by_conditions
```

**注記**  
START と CONNECT は予約語ではありませんが、ランタイムの失敗を避けるために、クエリでテーブルのエイリアスとして START と CONNECT を使用する場合は、区切られた識別子 (二重引用符) または AS を使用してください。

```
SELECT COUNT(*)
FROM Employee "start"
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

```
SELECT COUNT(*)
FROM Employee AS start
CONNECT BY PRIOR id = manager_id
START WITH name = 'John'
```

## パラメータ
<a name="r_CONNECT_BY_parameters"></a>

 *start\$1with\$1conditions*   
階層のルート行を指定する条件

 *connect\$1by\$1conditions*   
階層の親行と子行の関係を指定する条件。少なくとも 1 つの条件は、親行を参照する ` ` 単項演算子で修飾される必要があります。  

```
PRIOR column = expression
-- or
expression > PRIOR column
```

## オペレータ
<a name="r_CONNECT_BY_operators"></a>

CONNECT BY クエリでは、次の演算子を使用できます。

 *LEVEL*   
階層内の現在の行レベルを返す疑似列。ルート行には 1、ルート行の子には 2、というように返します。

 *PRIOR*   
階層内の現在の行の親行の式を評価する単項演算子。

## 例
<a name="r_CONNECT_BY_example"></a>

次の例は、John に直接的に、または間接的に報告する従業員の数を返す CONNECT BY クエリで、深さは 4 レベル未満です。

```
SELECT id, name, manager_id
FROM employee
WHERE LEVEL < 4
START WITH name = 'John'
CONNECT BY PRIOR id = manager_id;
```

以下は、クエリの結果です。

```
id      name      manager_id
------+----------+--------------
  101     John        100
  102     Jorge       101
  103     Kwaku       101
  110     Liu         101
  201     Sofía       102
  106     Mateo       102
  110     Nikki       103
  104     Paulo       103
  105     Richard     103
  120     Saanvi      104
  200     Shirley     104
  205     Zhang       104
```

 例えば、テーブルは次のように定義されています。

```
CREATE TABLE employee (
   id INT,
   name VARCHAR(20),
   manager_id INT
   );
```

 以下は、テーブルに挿入された行です。

```
INSERT INTO employee(id, name, manager_id)  VALUES
(100, 'Carlos', null),
(101, 'John', 100),
(102, 'Jorge', 101),
(103, 'Kwaku', 101),
(110, 'Liu', 101),
(106, 'Mateo', 102),
(110, 'Nikki', 103),
(104, 'Paulo', 103),
(105, 'Richard', 103),
(120, 'Saanvi', 104),
(200, 'Shirley', 104),
(201, 'Sofía', 102),
(205, 'Zhang', 104);
```

以下は、John が所属する部門の組織図です。

![\[John が所属する部門の組織図。\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/images/org-chart.png)


# サブクエリの例
<a name="r_Subquery_examples"></a>

次の例は、サブクエリが SELECT クエリに適合するさまざまな方法を示しています。サブクエリの使用に関する別の例については、「[JOIN 句の例](r_Join_examples.md)」を参照してください。

## SELECT リストのサブクエリ
<a name="r_Subquery_examples-select-list-subquery"></a>

次の例には、SELECT リストのサブクエリが含まれています。このサブクエリはスカラー値**であり、1 つの列と 1 つの値のみを返します。外部クエリから返される行の結果ごとに、このサブクエリが繰り返されます。このクエリは、サブクエリが計算した Q1SALES 値を、外部クエリが定義する、2008 年の他の 2 つの四半期 (第 2 と第 3) のセールス値と比較します。

```
select qtr, sum(pricepaid) as qtrsales,
(select sum(pricepaid)
from sales join date on sales.dateid=date.dateid
where qtr='1' and year=2008) as q1sales
from sales join date on sales.dateid=date.dateid
where qtr in('2','3') and year=2008
group by qtr
order by qtr;

qtr  |  qtrsales   |   q1sales
-------+-------------+-------------
2     | 30560050.00 | 24742065.00
3     | 31170237.00 | 24742065.00
(2 rows)
```

## WHERE 句のサブクエリ
<a name="r_Subquery_examples-where-clause-subquery"></a>

次の例には、WHERE 句にテーブルサブクエリが含まれます。このサブクエリは複数の行を生成します。この場合、その行には列が 1 つだけ含まれていますが、テーブルサブクエリには他のテーブルと同様、複数の列と行が含まれていることがあります。

このクエリは、最大販売チケット数の観点でトップ 10 の販売会社を検索します。トップ 10 のリストは、チケットカウンターが存在する都市に住んでいるユーザーを削除するサブクエリによって制限されます。このクエリは、メインクエリ内の結合としてサブクエリを作成するなど、さまざまな方法で作成できます。

```
select firstname, lastname, city, max(qtysold) as maxsold
from users join sales on users.userid=sales.sellerid
where users.city not in(select venuecity from venue)
group by firstname, lastname, city
order by maxsold desc, city desc
limit 10;

firstname | lastname  |      city      | maxsold
-----------+-----------+----------------+---------
Noah       | Guerrero | Worcester      |       8
Isadora    | Moss     | Winooski       |       8
Kieran     | Harrison | Westminster    |       8
Heidi      | Davis    | Warwick        |       8
Sara       | Anthony  | Waco           |       8
Bree       | Buck     | Valdez         |       8
Evangeline | Sampson  | Trenton        |       8
Kendall    | Keith    | Stillwater     |       8
Bertha     | Bishop   | Stevens Point  |       8
Patricia   | Anderson | South Portland |       8
(10 rows)
```

## WITH 句のサブクエリ
<a name="r_Subquery_examples-with-clause-subqueries"></a>

「[WITH 句](r_WITH_clause.md)」を参照してください。

# 相関性のあるサブクエリ
<a name="r_correlated_subqueries"></a>

次の例の WHERE 句には、相関性のあるサブクエリ**が含まれています。このタイプのサブクエリには、サブクエリの列と他のクエリが生成した列の間に相関性があります。この場合、相関は `where s.listid=l.listid` となります。外部クエリが生成する各行に対してサブクエリが実行され、行が適正か適正でないかが判断されます。

```
select salesid, listid, sum(pricepaid) from sales s
where qtysold=
(select max(numtickets) from listing l
where s.listid=l.listid)
group by 1,2
order by 1,2
limit 5;

salesid | listid |   sum
--------+--------+----------
 27     |     28 | 111.00
 81     |    103 | 181.00
 142    |    149 | 240.00
 146    |    152 | 231.00
 194    |    210 | 144.00
(5 rows)
```

## サポートされていない相関サブクエリのパターン
<a name="r_correlated_subqueries-correlated-subquery-patterns-that-are-not-supported"></a>

クエリのプランナーは、MPP 環境で実行する相関サブクエリの複数のパターンを最適化するため、「サブクエリ相関解除」と呼ばれるクエリ再生成メソッドを使用します。相関サブクエリの中には、Amazon Redshift が相関を解除できずサポートすることができないパターンを採用しているものがいくつかあります。次の相関参照を含んでいるクエリがエラーを返します。
+  クエリブロックをスキップする相関参照 (「スキップレベル相関参照」とも呼ばれています) 例えば、次のクエリでは、相関参照とスキップされるブロックを含むブロックは、NOT EXISTS 述語によって接続されます。

  ```
  select event.eventname from event
  where not exists
  (select * from listing
  where not exists
  (select * from sales where event.eventid=sales.eventid));
  ```

  このケースでスキップされたブロックは、LISTING テーブルに対するサブクエリです。相関参照は、EVENT テーブルと SALES テーブルを関係付けます。
+  外部クエリで ON 句の一部であるサブクエリからの相関参照: 

  ```
  select * from category
  left join event
  on category.catid=event.catid and eventid =
  (select max(eventid) from sales where sales.eventid=event.eventid);
  ```

  ON 句には、サブクエリの SALES から外部クエリの EVENT への相関参照が含まれています。
+ Amazon Redshift システムテーブルに対する NULL センシティブな相関参照。次に例を示します。

  ```
  select attrelid
  from stv_locks sl, pg_attribute
  where sl.table_id=pg_attribute.attrelid and 1 not in
  (select 1 from pg_opclass where sl.lock_owner = opcowner);
  ```
+ ウィンドウ関数を含んでいるサブクエリ内からの相関参照。

  ```
  select listid, qtysold
  from sales s
  where qtysold not in
  (select sum(numtickets) over() from listing l where s.listid=l.listid);
  ```
+ 相関サブクエリの結果に対する、GROUP BY 列の参照。次に例を示します。

  ```
  select listing.listid,
  (select count (sales.listid) from sales where sales.listid=listing.listid) as list
  from listing
  group by list, listing.listid;
  ```
+ 集計関数と GROUP BY 句のあり、IN 述語によって外部クエリに接続されているサブクエリからの相関参照。(この制限は、MIN と MAX 集計関数には適用されません。) 例：

  ```
  select * from listing where listid in
  (select sum(qtysold)
  from sales
  where numtickets>4
  group by salesid);
  ```

# SELECT INTO
<a name="r_SELECT_INTO"></a>

任意のクエリによって定義された行を選択して、新しいテーブルに挿入します。一時テーブルと永続的テーブルのどちらを作成するかを指定できます。

## 構文
<a name="r_SELECT_INTO-synopsis"></a>

```
[ WITH with_subquery [, ...] ]
SELECT
[ TOP number | [ ALL | DISTINCT ]
* | expression [ AS output_name ] [, ...] ]
[ EXCLUDE column_list ]
INTO [ TEMPORARY | TEMP ] [ TABLE ] new_table
[ FROM table_reference [, ...] ]
[ WHERE condition ]
[ [ START WITH expression ] CONNECT BY expression ]
[ GROUP BY ALL | expression [, ...] ]
[ HAVING condition ]
[ QUALIFY condition ]
[ { UNION | ALL | INTERSECT | EXCEPT | MINUS } query ]
[ ORDER BY expression [ ASC | DESC ] ]
[ LIMIT { number | ALL } ]
[ OFFSET start ]
```

 このコマンドのパラメータに関する詳細については、「[SELECT](r_SELECT_synopsis.md)」を参照してください。

## 例
<a name="r_SELECT_INTO-examples"></a>

EVENT テーブルからのすべての行を選択し、NEWEVENT テーブルを作成します。

```
select * into newevent from event;
```

集計クエリの結果を選択して、PROFITS という名前の一時テーブルに格納します。

```
select username, lastname, sum(pricepaid-commission) as profit
into temp table profits
from sales, users
where sales.sellerid=users.userid
group by 1, 2
order by 3 desc;
```

# SET
<a name="r_SET"></a>

サーバー設定パラメータの値を設定します。SET コマンドを使用して、現在のセッションまたはトランザクションのみの期間の設定をオーバーライドします。

[RESET](r_RESET.md) コマンドを使って、パラメータをデフォルト値に戻します。

サーバー構成パラメータは、いくつかの方法で変更できます。詳細については、「[サーバー設定の変更](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings)」を参照してください。

## 構文
<a name="r_SET-synopsis"></a>

```
SET { [ SESSION | LOCAL ]
{ SEED | parameter_name } { TO | = }
{ value | 'value' | DEFAULT } |
SEED TO value }
```

次のステートメントは、セッションコンテキスト変数の値を設定します。

```
SET { [ SESSION | LOCAL ]
variable_name { TO | = }
{ value | 'value'  }
```

## パラメータ
<a name="r_SET-parameters"></a>

SESSION   
現在のセッションに対して、設定が有効であることを指定します。デフォルト値

*variable\$1name*   
セッションに設定されたコンテキスト変数の名前を指定します。  
命名規則は、ドットで区切られた 2 つの部分で構成される名前です (例: *identifier.identifier*)。使用できるドット区切り文字は 1 つだけです。Amazon Redshift の標準識別子ルールに従った*識別子*を使用します。詳細については、「[名前と識別子](r_names.md)」を参照してください。区切り文字は許可されていません。

LOCAL   
設定が現在の取引で有効なことを指定します。

SEED TO *value*   
乱数生成用に RANDOM 関数が使用する内部シードを設定します。  
SET SEED は、0 から 1 までの数*値*を取り、この数値に (231-1) を掛けて、[RANDOM 関数](r_RANDOM.md)関数で使用します。複数の RANDOM コールの前に SET SEED を使用すると、RANDOM は予想可能な順番で番号を生成します。

 *parameter\$1name*   
設定するパラメータの名前。パラメータの詳細については、「[サーバー設定の変更](cm_chap_ConfigurationRef.md#t_Modifying_the_default_settings)」を参照してください。

 *値*   
新しいパラメータ値。一重引用符を使って、指定文字列に値を設定します。SET SEED を使用した場合、このパラメータには SEED 値が含まれます。

DEFAULT   
パラメータをデフォルト値に設定します。

## 例
<a name="r_SET-examples"></a>

 **現在のセッションのパラメータの変更** 

次の例は、データスタイルを設定します。

```
set datestyle to 'SQL,DMY';
```

 **ワークロード管理用のクエリグループの設定** 

クラスターの WLM 設定の一部として、クエリグループをキュー定義で一覧表示した場合、一覧表示されたクエリクループ名に QUERY\$1GROUP パラメータを設定できます。以降のクエリは、関連するクエリキューに割り当てられます。QUERY\$1GROUP グループの設定は、セッションの有効期間中、または RESET QUERY\$1GROUP コマンドの遭遇するまで有効です。

この例では、クエリグループ「priority」の一部として 2 つのクエリを実行し、その後クエリグループをリセットします。

```
set query_group to 'priority';
select tbl, count(*)from stv_blocklist;
select query, elapsed, substring from svl_qlog order by query desc limit 5;
reset query_group;
```

詳細については、「[ワークロード管理](cm-c-implementing-workload-management.md)」を参照してください。

 **セッションのデフォルトの ID 名前空間を変更する** 

データベースユーザーは `default_identity_namespace` を設定できます。このサンプルでは、`SET SESSION` を使用して現在のセッション期間中に設定を上書きし、新しい ID プロバイダーの値を表示する方法を示します。これは、Redshift と IAM アイデンティティセンターで ID プロバイダーを使用している場合に最もよく使用されます。Redshift で ID プロバイダーを使用する方法の詳細については、「[Redshift を IAM アイデンティティセンターに接続してユーザーにシングルサインオンエクスペリエンスを提供する](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html)」を参照してください。

```
SET SESSION default_identity_namespace = 'MYCO';
         
SHOW default_identity_namespace;
```

コマンドを実行したら、次のような GRANT ステートメントまたは CREATE ステートメントを実行できます。

```
GRANT SELECT ON TABLE mytable TO alice;

GRANT UPDATE ON TABLE mytable TO salesrole;
         
CREATE USER bob password 'md50c983d1a624280812631c5389e60d48c';
```

この場合、デフォルトの ID 名前空間を設定する効果は、各 ID に名前空間のプレフィックスを付けることと同じです。この例では、`alice` が `MYCO:alice` に置き換えられます。IAM アイデンティティセンターでの Redshift 構成に関連する設定の詳細については、「[ALTER SYSTEM](r_ALTER_SYSTEM.md)」および「[他の ID プロバイダー](r_ALTER_IDENTITY_PROVIDER.md)」を参照してください。

 **クエリのグループのラベルの設定** 

QUERY\$1GROUP パラメータは、SET コマンド実行後の同じセッションで実行される 1 つまたは複数のクエリのためのラベルを定義します。また、実行されたクエリが STL\$1QUERY や STV\$1INFLIGHT システムテーブル、および SVL\$1QLOG ビューから返される結果を制約する場合に、このラベルがログ記録されます。

```
show query_group;
query_group
-------------
unset
(1 row)

set query_group to '6 p.m.';


show query_group;
query_group
-------------
6 p.m.
(1 row)

select * from sales where salesid=500;
salesid | listid | sellerid | buyerid | eventid | dateid | ...
---------+--------+----------+---------+---------+--------+-----
500 |    504 |     3858 |    2123 |    5871 |   2052 | ...
(1 row)

reset query_group;

select query, trim(label) querygroup, pid, trim(querytxt) sql
from stl_query
where label ='6 p.m.';
query | querygroup |  pid  |                  sql
-------+------------+-------+----------------------------------------
57 | 6 p.m.     | 30711 | select * from sales where salesid=500;
(1 row)
```

クエリグループのラベルは、スクリプトの一部として実行された個々のクエリやクエリグループを分離するための有益なメカニズムです。クエリの ID によってクエリの識別や追跡を行う必要はありません。ラベルによってクエリの追跡が可能です。

 **乱数生成用のシード値の設定** 

次の例では、SET コマンドで SEED オプションを使用し、RANDOM 関数により、予想可能な順番で数値を生成します。

まず、SEED 値を最初に設定せずに、3 つの整数の乱数を返します。

```
select cast (random() * 100 as int);
int4
------
6
(1 row)

select cast (random() * 100 as int);
int4
------
68
(1 row)

select cast (random() * 100 as int);
int4
------
56
(1 row)
```

次に、SEED 値を `.25` に設定して、さらに 3 つの整数の乱数を返します。

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

最後に、SEED 値を `.25` にリセットして、RANDOM が前の 3 つの呼び出しと同じ結果を返すことを確認します。

```
set seed to .25;

select cast (random() * 100 as int);
int4
------
21
(1 row)

select cast (random() * 100 as int);
int4
------
79
(1 row)

select cast (random() * 100 as int);
int4
------
12
(1 row)
```

次の例では、カスタマイズされたコンテキスト変数を設定します。

```
SET app_context.user_id TO 123;
SET app_context.user_id TO 'sample_variable_value';
```

# SET SESSION AUTHORIZATION
<a name="r_SET_SESSION_AUTHORIZATION"></a>

現在のセッションのユーザー名を設定します。

SET SESSION AUTHORIZATION コマンドは、権限のないユーザーとしてセッションやトランザクションを一時的に実行することで、データベースアクセスをテストする場合などに使用できます。このコマンドを実行するには、データベースのスーパーユーザー権限を持つ必要があります。

## 構文
<a name="r_SET_SESSION_AUTHORIZATION-synopsis"></a>

```
SET [ LOCAL ] SESSION AUTHORIZATION { user_name | DEFAULT }
```

## パラメータ
<a name="r_SET_SESSION_AUTHORIZATION-parameters"></a>

LOCAL  
設定が現在の取引で有効なことを指定します。このパラメータを省略すると、現在のセッションに対する設定が有効であることを指定したことになります。

 *user\$1name*   
設定するユーザー名。ユーザー名は、識別子またはリテラル文字列として指定できます。

DEFAULT  
セッションユーザー名をデフォルト値に設定します。

## 例
<a name="r_SET_SESSION_AUTHORIZATION-examples"></a>

次の例では、現在のセッションのユーザー名を `dwuser` に設定します。

```
SET SESSION AUTHORIZATION 'dwuser';
```

次の例では、現在のトランザクションのユーザー名を `dwuser` に設定します。

```
SET LOCAL SESSION AUTHORIZATION 'dwuser';
```

この例では、現在のセッションのユーザー名をデフォルトのユーザー名に設定します。

```
SET SESSION AUTHORIZATION DEFAULT;
```

# SET SESSION CHARACTERISTICS
<a name="r_SET_SESSION_CHARACTERISTICS"></a>

このコマンドは廃止されました。

# SHOW
<a name="r_SHOW"></a>

サーバー 設定パラメータの現在の値を表示します。SET コマンドが有効な場合、この値は、現在のセッションに固有となることがあります。設定パラメータのリストについては、「[設定リファレンス](cm_chap_ConfigurationRef.md)」を参照してください。

## 構文
<a name="r_SHOW-synopsis"></a>

```
SHOW { parameter_name | ALL }
```

次のステートメントは、セッションコンテキスト変数の現在の値を表示します。変数が存在しない場合、Amazon Redshift はエラーをスローします。

```
SHOW variable_name
```

## パラメータ
<a name="r_SHOW-parameters"></a>

 *parameter\$1name*   
指定したパラメータの現在の値を表示します。

ALL   
すべてのパラメータの現在の値を表示します。

*variable\$1name*   
指定した変数の現在の値を表示します。

## 例
<a name="r_SHOW-examples"></a>

次の例では、query\$1group パラメータの値を表示します。

```
show query_group;

query_group

unset
(1 row)
```

次の例では、すべてのパラメータとその値を一覧表示します。

```
show all;
name        |   setting
--------------------+--------------
datestyle          | ISO, MDY
extra_float_digits | 0
query_group        | unset
search_path        | $user,public
statement_timeout  | 0
```

次の例では、指定した変数の現在の値を表示します。

```
SHOW app_context.user_id;
```

# SHOW COLUMN GRANTS
<a name="r_SHOW_COLUMN_GRANTS"></a>

テーブル内の列に権限を表示します。

## 必要なアクセス許可
<a name="r_SHOW_COLUMN_GRANTS-required-permissions"></a>

ターゲットオブジェクトの SHOW GRANTS には、現在のユーザーに表示される権限のみが表示されます。現在のユーザーが次の条件のいずれかを満たしている場合、権限は現在のユーザーに表示されます。
+ スーパーユーザーである
+ 権限が付与されたユーザーである
+ 権限が付与されたロールの所有者の権限が付与されている
+ オブジェクト権限の対象となるロールが付与されている

## 構文
<a name="r_SHOW_COLUMN_GRANTS-synopsis"></a>

```
SHOW COLUMN GRANTS ON TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

## パラメータ
<a name="r_SHOW_COLUMN_GRANTS-parameters"></a>

database\$1name  
ターゲットテーブルを含むデータベースの名前。

schema\$1name  
ターゲットテーブルを含むスキーマの名前。

table\$1name  
ターゲットテーブルの名前。

username  
出力に username への権限のみを含める

role\$1name  
role\$1name への権限のみを出力に含める

PUBLIC  
PUBLIC への権限のみを出力に含める

row\$1limit  
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_COLUMN_GRANTS-examples"></a>

次の例は、テーブル demo\$1db.demo\$1schema.t100 の列許可を示しています。

```
SHOW COLUMN GRANTS ON TABLE demo_db.demo_schema.t100;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         134 | bob           | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | SELECT         |         130 | alice         | user          | f            | COLUMN          | dbadmin
 demo_db       | demo_schema | t100       | a           | COLUMN      | UPDATE         |         130 | alice         | user          | f            | COLUMN          | dbadmin
```

次の例は、ユーザー bob のテーブル demo\$1schema.t100 の列許可を示しています。

```
SHOW COLUMN GRANTS ON TABLE demo_schema.t100 for bob;
 database_name | schema_name | table_name | column_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+-------------+------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | demo_schema | t100       | b           | COLUMN      | UPDATE         |         135 | bob           | user          | f            | COLUMN          | dbadmin
```

# SHOW COLUMNS
<a name="r_SHOW_COLUMNS"></a>

テーブル内の列のリストと、いくつかの列属性を表示します。

各出力行は、データベース名、スキーマ名、テーブル名、列名、序数位置、列のデフォルト、NULL 指定可、データ型、最大文字長、数値精度、注釈、ソートキータイプ、ソートキー、分散キー、エンコーディング、照合順序がカンマ区切りリストで構成されます。これらの属性の詳細については、「[SVV\$1ALL\$1COLUMNS](r_SVV_ALL_COLUMNS.md)」を参照してください。

SHOW COLUMNS コマンドの結果が 10,000 列を超える場合は、エラーが返されます。

## 必要なアクセス許可
<a name="r_SHOW_COLUMNS-privileges"></a>

Amazon Redshift テーブルの列を表示するには、現在のユーザーが次の条件のうち 1 つを満たす必要があります。
+ スーパーユーザーであること。
+ テーブルの所有者であること。
+ 親スキーマに対する USAGE 権限が付与され、テーブルに対する SELECT 権限または列に対する SELECT 権限が付与されていること。

## 構文
<a name="r_SHOW_COLUMNS-synopsis"></a>

```
SHOW COLUMNS FROM TABLE database_name.schema_name.table_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## パラメータ
<a name="r_SHOW_COLUMNS-parameters"></a>

 *database\$1name*   
一覧表示するテーブルが含まれているデータベースの名前。  
AWS Glue Data Catalog でテーブルを表示するには、データベース名として (`awsdatacatalog`) を指定し、システム設定 `data_catalog_auto_mount` が `true` に設定されていることを確認します。詳細については、「[ALTER SYSTEM](r_ALTER_SYSTEM.md)」を参照してください。

 *schema\$1name*   
一覧表示するテーブルが含まれているスキーマの名前。  
AWS Glue Data Catalog のテーブルを表示するには、AWS Glue データベース名をスキーマ名として指定します。

 *table\$1name*   
一覧表示する列が含まれているテーブルの名前。

 *filter\$1pattern*   
テーブル名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_COLUMNS.html)
*filter\$1pattern* にメタ文字が含まれていない場合、パターンは文字列そのものを表すだけです。この場合、LIKE は等号演算子と同じ働きをします。

 *row\$1limit*   
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_COLUMNS-examples"></a>

次の例は、スキーマ `tickit` とテーブル `event` にある、`sample_data_dev` という Amazon Redshiftデータベース内の列を示しています。

```
SHOW COLUMNS FROM TABLE demo_schema.compound_sort_table;

  database_name | schema_name |     table_name      | column_name | ordinal_position | column_default | is_nullable |     data_type     | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+---------------------+-------------+------------------+----------------+-------------+-------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 demo_db       | demo_schema | compound_sort_table | id          |                1 |                | YES         | integer           |                          |                32 |             0 |         | COMPOUND      |        1 |        1 | delta32k | 
 demo_db       | demo_schema | compound_sort_table | name        |                2 |                | YES         | character varying |                       50 |                   |               |         | COMPOUND      |        2 |          | lzo      | default
 demo_db       | demo_schema | compound_sort_table | date_col    |                3 |                | YES         | date              |                          |                   |               |         |               |        0 |          | delta    | 
 demo_db       | demo_schema | compound_sort_table | amount      |                4 |                | YES         | numeric           |                          |                10 |             2 |         |               |        0 |          | mostly16 |
```

次の例は、スキーマ `batman` とテーブル `nation` にある、`awsdatacatalog` という AWS Glue Data Catalog データベース内のテーブルを示しています。出力は、`2` 行に制限されます。

```
SHOW COLUMNS FROM TABLE second_db.public.t22;

 database_name | schema_name | table_name | column_name | ordinal_position | column_default | is_nullable |          data_type          | character_maximum_length | numeric_precision | numeric_scale | remarks | sort_key_type | sort_key | dist_key | encoding | collation 
---------------+-------------+------------+-------------+------------------+----------------+-------------+-----------------------------+--------------------------+-------------------+---------------+---------+---------------+----------+----------+----------+-----------
 second_db     | public      | t22        | col1        |                1 |                | YES         | integer                     |                          |                32 |             0 |         | INTERLEAVED   |       -1 |          | mostly8  | 
 second_db     | public      | t22        | col2        |                2 |                | YES         | character varying           |                      100 |                   |               |         | INTERLEAVED   |        2 |          | text255  | default
 second_db     | public      | t22        | col3        |                3 |                | YES         | timestamp without time zone |                          |                   |               |         |               |        0 |          | raw      | 
 second_db     | public      | t22        | col4        |                4 |                | YES         | numeric                     |                          |                10 |             2 |         |               |        0 |          | az64     |
```

# SHOW CONSTRAINTS
<a name="r_SHOW_CONSTRAINTS"></a>

テーブル内のプライマリキーと外部キーの制約のリストを表示します。

## 必要なアクセス許可
<a name="r_SHOW_CONSTRAINTS-required-permissions"></a>

テーブルで SHOW CONSTRAINTS を実行するには、現在のユーザーが次のいずれかの条件を満たす必要があります。
+ スーパーユーザーである
+ テーブルの所有者である
+ 親スキーマに USAGE 権限があり、テーブルに SELECT 権限がある

## 構文
<a name="r_SHOW_CONSTRAINTS-synopsis"></a>

```
SHOW CONSTRAINTS {PRIMARY KEYS | FOREIGN KEYS [EXPORTED]}
FROM TABLE
{ database_name.schema_name.table_name | schema_name.table_name }
[LIMIT row_limit]
```

## パラメータ
<a name="r_SHOW_CONSTRAINTS-parameters"></a>

*database\$1name*  
ターゲットテーブルを含むデータベースの名前。

*schema\$1name*  
ターゲットテーブルを含むスキーマの名前。

*table\$1name*  
ターゲットテーブルの名前。

EXPORTED  
EXPORTED が指定されている場合は、ターゲットテーブルを参照する他のテーブルのすべての外部キーを一覧表示します。

*row\$1limit*  
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_CONSTRAINTS-examples"></a>

次の例は、テーブル demo\$1db.demo\$1schema.pk1 のプライマリキーの制約を示しています。

```
SHOW CONSTRAINTS PRIMARY KEYS FROM TABLE demo_db.demo_schema.pk1;
 database_name | schema_name | table_name | pk_name  | column_name | key_seq 
---------------+-------------+------------+----------+-------------+---------
 demo_db       | demo_schema | pk1        | pk1_pkey | i           |       1
 demo_db       | demo_schema | pk1        | pk1_pkey | j           |       2
 demo_db       | demo_schema | pk1        | pk1_pkey | c           |       3
```

次の例は、テーブル demo\$1schema.fk2 からの外部キーの制約を示しています。

```
SHOW CONSTRAINTS FOREIGN KEYS FROM TABLE demo_schema.fk2;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |  fk_name   | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey | pk1_pkey |             |             |
```

次の例は、テーブル demo\$1schema.pk1 からエクスポートされた外部キーの制約を示しています。

```
SHOW CONSTRAINTS FOREIGN KEYS EXPORTED FROM TABLE demo_schema.pk1;
 pk_database_name | pk_schema_name | pk_table_name | pk_column_name | fk_database_name | fk_schema_name | fk_table_name | fk_column_name | key_seq |     fk_name     | pk_name  | update_rule | delete_rule | deferrability 
------------------+----------------+---------------+----------------+------------------+----------------+---------------+----------------+---------+-----------------+----------+-------------+-------------+---------------
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | fk2           | i              |       1 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | fk2           | j              |       2 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | fk2           | c              |       3 | fk2_i_fkey      | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | i              | demo_db          | demo_schema    | other_fk      | i              |       1 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | j              | demo_db          | demo_schema    | other_fk      | j              |       2 | other_fk_i_fkey | pk1_pkey |             |             | 
 demo_db          | demo_schema    | pk1           | c              | demo_db          | demo_schema    | other_fk      | c              |       3 | other_fk_i_fkey | pk1_pkey |             |             |
```

# SHOW EXTERNAL TABLE
<a name="r_SHOW_EXTERNAL_TABLE"></a>

テーブル属性と列属性を含む、外部テーブルの定義を表示します。SHOW EXTERNAL TABLE ステートメントの出力を使用すると、テーブルを再作成できます。

外部テーブル作成の詳細については、「[CREATE EXTERNAL TABLE](r_CREATE_EXTERNAL_TABLE.md)」を参照してください。

## 構文
<a name="r_SHOW_EXTERNAL_TABLE-synopsis"></a>

```
SHOW EXTERNAL TABLE [external_database].external_schema.table_name [ PARTITION ]
```

## パラメータ
<a name="r_SHOW_EXTERNAL_TABLE-parameters"></a>

 *external\$1database*   
関連付けられた外部データベースの名前。このパラメータはオプションです。

 *external\$1schema*   
関連付けられた外部スキーマの名前。

 *table\$1name*   
表示するテーブルの名前。

PARTITION   
テーブル定義にパーティションを追加する ALTER TABLEE 句を表示します。

## 例
<a name="r_SHOW_EXTERNAL_TABLE-examples"></a>

以下の例は、ここに定義された外部テーブルに基づいています。

```
CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
     csmallint smallint,
     cint int,
     cbigint bigint,
     cfloat float4,
     cdouble float8,
     cchar char(10),
     cvarchar varchar(255),
     cdecimal_small decimal(18,9),
     cdecimal_big decimal(30,15),
     ctimestamp TIMESTAMP,
     cboolean boolean,
     cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime TIMESTAMP)
STORED AS PARQUET
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
```

以下は、`my_schema.alldatatypes_parquet_test_partitioned`のテーブルに関する SHOW EXTERNAL TABLE コマンドと、その出力の例です。

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

以下は、同じテーブル (ただし、データベースがパラメータでも指定されている) に関する SHOW EXTERNAL TABLE コマンドと、その出力の例です。

```
SHOW EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned;
```

```
"CREATE EXTERNAL TABLE my_database.my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date, ctime timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';"
```

`PARTITION` パラメータを使用する場合の、SHOW EXTERNAL TABLE コマンドと、その出力の例を以下に示します。この出力には、テーブル定義にパーティションを追加する ALTER TABLEE 句が含まれています。

```
SHOW EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned PARTITION;
```

```
"CREATE EXTERNAL TABLE my_schema.alldatatypes_parquet_test_partitioned (
    csmallint smallint,
    cint int,
    cbigint bigint,
    cfloat float4,
    cdouble float8,
    cchar char(10),
    cvarchar varchar(255),
    cdecimal_small decimal(18,9),
    cdecimal_big decimal(30,15),
    ctimestamp timestamp,
    cboolean boolean,
    cstring varchar(16383)
)
PARTITIONED BY (cdate date)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-01') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-01';
ALTER TABLE my_schema.alldatatypes_parquet_test_partitioned ADD IF NOT EXISTS PARTITION (cdate='2021-01-02') LOCATION 's3://amzn-s3-demo-bucket/alldatatypes_parquet_partitioned2/cdate=2021-01-02';"
```

# SHOW DATABASES
<a name="r_SHOW_DATABASES"></a>

Data Catalog または Amazon Redshift データウェアハウスのデータベースを表示します。SHOW DATABASES は、データウェアハウス、AWS Glue Data Catalog データベース (awsdatacatalog)、データ共有データベース、Lake Formation データベースなど、アクセス可能なすべてのデータベースのリストを表示します。

## 必要なアクセス許可
<a name="r_SHOW_DATABASES-privileges"></a>

以下を除くすべてのデータベースがユーザーに表示されます。
+ データ共有から作成されたデータベースを表示するには、現在のユーザーにデータベースに対する USAGE 権限が付与されている必要があります。

## 構文
<a name="r_SHOW_DATABASES-syntax"></a>

Amazon Redshift データウェアハウスのデータベースを表示するには:

```
SHOW DATABASES 
[ LIKE '<expression>' ]
[ LIMIT row_limit ]
```

Data Catalog からデータベースを表示するには:

```
SHOW DATABASES FROM DATA CATALOG 
[ ACCOUNT  '<id1>', '<id2>', ... ]
[ LIKE '<expression>' ]
[ IAM_ROLE default | 'SESSION' | 'arn:aws:iam::<account-id>:role/<role-name>' ]
[ LIMIT row_limit ]
```

## パラメータ
<a name="r_SHOW_DATABASES-parameters"></a>

ACCOUNT '<id1>', '<id2>', ...  
データベースを一覧表示する AWS Glue Data Catalog アカウント。このパラメータを省略すると、Amazon Redshift はクラスターを所有するアカウントのデータベースを表示します。

LIKE '<expression>'  
データベースのリストをフィルタリングして、指定した式と一致するものに絞り込みます。このパラメータは、ワイルドカード文字 % (パーセント) および \$1 (アンダースコア) を使用するパターンをサポートしています。

IAM\$1ROLE default \$1 'SESSION' \$1 'arn:aws:iam::<account-id>:role/<role-name>'  
SHOW DATABASES コマンドの実行時にクラスターに関連付けられた IAM ロールを指定すると、Amazon Redshift はデータベースに対するクエリの実行時にロールの認証情報を使用します。  
`default` キーワードを指定することは、デフォルトとして設定されてクラスターに関連付けられている IAM ロールを使用することを意味します。  
フェデレーション ID を使用して Amazon Redshift クラスターに接続し、[CREATE DATABASE](r_CREATE_DATABASE.md) コマンドを使用して作成した外部データベースのテーブルにアクセスする場合は、`'SESSION'` を使用します。フェデレーション ID の使用例については、フェデレーション ID の設定方法を説明している「[フェデレーション ID を使用して、ローカルリソースと Amazon Redshift Spectrum の外部テーブルへの Amazon Redshift アクセスを管理する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorization-fas-spectrum.html)」を参照してください。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。少なくとも、IAM ロールには、Amazon S3 バケットで LIST オペレーションを実行してアクセスを受ける許可と、バケットに含まれる Amazon S3 オブジェクトで GET オペレーションを実行する許可が必要です。データ共有のために AWS Glue Data Catalog で作成するデータベースと IAM\$1ROLE の使用に関する詳細については、「[コンシューマーとしての Lake Formation 管理のデータ共有を使用する](https://docs.aws.amazon.com/redshift/latest/dg/lake-formation-getting-started-consumer.html)」を参照してください。  
以下に ARN が 1 つの場合の IAM\$1ROLE パラメータ文字列の構文を示します。  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'
```
ロールを連鎖することで、クラスターは別のアカウントに属している可能性がある別の IAM ロールを引き受けることができます。最大10 個までのロールを連鎖できます。詳細については、「[Amazon Redshift Spectrum での IAM ロールの連鎖](c-spectrum-iam-policies.md#c-spectrum-chaining-roles)」を参照してください。  
 この IAM ロールに次のような IAM アクセス許可ポリシーをアタッチします。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AccessSecret",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:us-west-2:123456789012:secret:my-rds-secret-VNenFy"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": "*"
        }
    ]
}
```
フェデレーションクエリで使用する IAM ロールを作成するステップについては、「[フェデレーテッドクエリを使用するためのシークレットと IAM ロールの作成](federated-create-secret-iam-role.md)」を参照してください。  
連鎖したロールのリストには空白を含めないでください。
以下に連鎖された 3 つのロールの構文を示します。  

```
IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-1-name>,arn:aws:iam::<aws-account-id>:role/<role-2-name>,arn:aws:iam::<aws-account-id>:role/<role-3-name>'
```

LIMIT *row\$1limit*  
返される行の数を制限する句。*row\$1limit* は、返される行の最大数です。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_DATABASES-examples"></a>

次の例では、アカウント ID 123456789012 のすべてのデータカタログデータベースを表示します。

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012'

  catalog_id  | database_name |                        database_arn                    |     type     |                                             target_database                                      | location | parameters
--------------+---------------+--------------------------------------------------------+--------------+--------------------------------------------------------------------------------------------------+----------+------------
 123456789012 |   database1   | arn:aws:glue:us-east-1:123456789012:database/database1 | Data Catalog |                                                                                                  |          |
 123456789012 |   database2   | arn:aws:glue:us-east-1:123456789012:database/database2 | Data Catalog | arn:aws:redshift:us-east-1:123456789012:datashare:035c45ea-61ce-86f0-8b75-19ac6102c3b7/database2 |          |
```

IAM ロールの認証情報を使用して、アカウント ID 123456789012 のすべてのデータカタログデータベースを表示する方法を示す例は、以下のとおりです。

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE default;
```

```
SHOW DATABASES FROM DATA CATALOG ACCOUNT '123456789012' IAM_ROLE <iam-role-arn>;
```

次の例は、接続先の Amazon Redshift データウェアハウス内のすべてのデータベースを表示します。

```
SHOW DATABASES

database_name  | database_owner | database_type        | database_acl | parameters | database_isolation_level
---------------+----------------+----------------------+--------------+------------+--------------------
awsdatacatalog | 1              | auto mounted catalog | NULL         | UNKNOWN    | UNKNOWN
dev            | 1              | local                | NULL         | NULL       | Snapshot Isolation
```

# SHOW FUNCTIONS
<a name="r_SHOW_FUNCTIONS"></a>

スキーマ内の関数のリストと、リストされたオブジェクトに関する情報を表示します。

各出力行には、database\$1name、schema\$1name、function\$1name、number\$1of\$1arguments、argument\$1list、return\$1type、remarks 列があります。

SHOW FUNCTIONS の結果が 10,000 行を超える場合、コマンドはエラーを生成します。

## 必要なアクセス許可
<a name="r_SHOW_FUNCTIONS-required-permissions"></a>

Redshift スキーマの関数を表示するには、現在のユーザーが次の条件のうち 1 つを満たす必要があります。
+ スーパーユーザーである
+ 関数の所有者である
+ 親スキーマに USAGE 権限があり、関数に EXECUTE 権限がある

## 構文
<a name="r_SHOW_FUNCTIONS-synopsis"></a>

```
SHOW FUNCTIONS FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## パラメータ
<a name="r_SHOW_FUNCTIONS-parameters"></a>

*database\$1name*  
一覧表示する関数を含むデータベースの名前。

*schema\$1name*  
一覧表示する関数が含まれているスキーマの名前。

*filter\$1pattern*  
関数名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_FUNCTIONS.html)
filter\$1pattern は関数名のみと一致することに注意してください。

*row\$1limit*  
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_FUNCTIONS-examples"></a>

次の例は、スキーマ demo\$1db.demo\$1schema の関数を示しています。

```
SHOW FUNCTIONS FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |    function_name     | number_of_arguments |                                  argument_list                                  |    return_type    | remarks 
---------------+-------------+----------------------+---------------------+---------------------------------------------------------------------------------+-------------------+---------
 demo_db       | demo_schema | f2                   |                   6 | integer, character varying, numeric, date, timestamp without time zone, boolean | character varying | 
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer                                                                | numeric           | 
 demo_db       | demo_schema | f_days_between       |                   2 | date, date                                                                      | integer           |
```

次の例は、名前が「discount」で終わるスキーマ demo\$1schema の関数を示しています。

```
SHOW FUNCTIONS FROM SCHEMA demo_schema like '%discount';
 database_name | schema_name |    function_name     | number_of_arguments |  argument_list   | return_type | remarks 
---------------+-------------+----------------------+---------------------+------------------+-------------+---------
 demo_db       | demo_schema | f_calculate_discount |                   2 | numeric, integer | numeric     |
```

# SHOW GRANTS
<a name="r_SHOW_GRANTS"></a>

ユーザー、ロール、またはオブジェクトの権限を表示します。オブジェクトは、データベース、スキーマ、テーブル、関数、テンプレートです。テーブルや関数などのオブジェクトを指定する場合は、2 部または 3 部構成の表記で修飾する必要があります。例えば、`schema_name.table_name`、`database_name.schema_name.table_name` です。

SHOW GRANTS の結果が 10,000 行を超える場合、コマンドはエラーを生成します。

## 必要なアクセス許可
<a name="r_SHOW_GRANTS-permissions"></a>

ターゲットユーザーまたはロールに対して SHOW GRANTS を実行するには、現在のユーザーが次のいずれかの条件を満たす必要があります。
+ スーパーユーザーである
+ ターゲットユーザーである
+ ターゲットロールの所有者である
+ ロールが付与されている

ターゲットオブジェクトの SHOW GRANTS には、現在のユーザーに表示される権限のみが表示されます。現在のユーザーが次の条件のいずれかを満たしている場合、権限は現在のユーザーに表示されます。
+ スーパーユーザーである
+ ターゲットユーザーである
+ 権限が付与されたロールの所有者の権限が付与されている
+ オブジェクト権限の対象となるロールが付与されている

## 構文
<a name="r_SHOW_GRANTS-syntax"></a>

オブジェクトに対する許可を表示するための構文を次に示します。関数を指定する 2 番目の方法は、データ共有から作成した外部スキーマとデータベースでのみ有効であることに注意してください。

```
SHOW GRANTS ON
{
 DATABASE database_name |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } ( [ [ argname ] argtype [, ...] ] ) |
 FUNCTION {database_name.schema_name.function_name | schema_name.function_name } |
 SCHEMA {database_name.schema_name | schema_name} | 
 { TABLE {database_name.schema_name.table_name | schema_name.table_name} | table_name }
 TEMPLATE {database_name.schema_name.template_name | template_name}
}
[FOR {username | ROLE role_name | PUBLIC}]
[LIMIT row_limit]
```

ユーザーまたはロールの許可を表示するための構文を次に示します。

```
SHOW GRANTS FOR
{username | ROLE role_name}
[FROM DATABASE database_name]
[LIMIT row_limit]
```

## パラメータ
<a name="r_SHOW_GRANTS-parameters"></a>

 *database\$1name*   
権限を表示する対象のデータベースの名前。

 *function\$1name*   
権限を表示する対象の関数の名前。

template\$1name  
権限を表示する対象のテンプレートの名前。

 *schema\$1name*   
権限を表示する対象のスキーマの名前。

 *table\$1name*   
権限を表示する対象のテーブルの名前。

FOR *username*   
ユーザーの権限を表示することを示します。

FOR ROLE *role\$1name*   
ロールの権限を表示することを示します。

FOR PUBLIC  
PUBLIC の権限を表示することを示します。

 *row\$1limit*   
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_GRANTS-examples"></a>

次の例は、`dev` という名前のデータベースに対するすべての権限を表示します。

```
SHOW GRANTS on database demo_db;

  database_name | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | grantor_name 
---------------+----------------+-------------+---------------+---------------+--------------+-----------------+--------------
 demo_db       | ALTER          |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TRUNCATE       |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DROP           |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | INSERT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | TEMP           |           0 | public        | public        | f            | DATABASE        | dbadmin
 demo_db       | SELECT         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | UPDATE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | DELETE         |         112 | alice         | user          | f            | TABLES          | dbadmin
 demo_db       | REFERENCES     |         112 | alice         | user          | f            | TABLES          | dbadmin
```

次のコマンドは、`demo` という名前のスキーマに対するすべての権限を表示します。

```
SHOW GRANTS ON SCHEMA demo_schema;

 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | demo_schema | SCHEMA      | ALTER          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | DROP           |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | USAGE          |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
 demo_schema | demo_schema | SCHEMA      | CREATE         |         112 | alice         | user          | f            | SCHEMA          | db1           | dbadmin
```

次のコマンドは、`alice` という名前のユーザーに対するすべての権限を表示します。

```
SHOW GRANTS FOR alice;

 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 demo_db       |             |             | DATABASE    | INSERT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | SELECT         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | UPDATE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DELETE         |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | REFERENCES     |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | DROP           |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | TRUNCATE       |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       |             |             | DATABASE    | ALTER          |         124 | alice         | user          | TABLES          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | USAGE          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | CREATE         |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | DROP           |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema |             | SCHEMA      | ALTER          |         124 | alice         | user          | SCHEMA          | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | INSERT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | SELECT         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | UPDATE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DELETE         |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | RULE           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | REFERENCES     |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRIGGER        |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | DROP           |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | TRUNCATE       |         124 | alice         | user          | TABLE           | dbadmin
 demo_db       | demo_schema | t1          | TABLE       | ALTER          |         124 | alice         | user          | TABLE           | dbadmin
```

```
SHOW GRANTS FOR alice FROM DATABASE second_db;
 database_name | schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | privilege_scope | grantor_name 
---------------+-------------+-------------+-------------+----------------+-------------+---------------+---------------+-----------------+--------------
 second_db     | public      | t22         | TABLE       | SELECT         |         101 | alice         | user          | TABLE           | dbadmin
```

次のコマンドは、`alice` という名前のユーザーについて `t3` という名前のテーブルに対するすべての権限を表示します。テーブル名を指定するには、2 部または 3 部構成の表記を使用できることに留意してください。

```
SHOW GRANTS ON TABLE demo_db.demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin


SHOW GRANTS ON TABLE demo_schema.t3 FOR ALICE;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 demo_schema | t3          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 demo_schema | t3          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

次の例は、`t4` という名前のテーブルに対するすべての権限を表示します。テーブル名は複数の異なる方法で指定できることに留意してください。

```
SHOW GRANTS ON t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 
SHOW GRANTS ON TABLE public.t4;
 schema_name | object_name | object_type | privilege_type | identity_id | identity_name | identity_type | admin_option | privilege_scope | database_name | grantor_name 
-------------+-------------+-------------+----------------+-------------+---------------+---------------+--------------+-----------------+---------------+--------------
 public      | t4          | TABLE       | ALTER          |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRUNCATE       |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DROP           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | TRIGGER        |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | SELECT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | INSERT         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | UPDATE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | DELETE         |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | RULE           |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
 public      | t4          | TABLE       | REFERENCES     |         130 | alice         | user          | f            | TABLE           | demo_db       | dbadmin
```

# SHOW MODEL
<a name="r_SHOW_MODEL"></a>

ステータス、モデルの作成に使用されたパラメータ、入力引数タイプを含む予測関数など、機械学習モデルに関する有用な情報を表示します。SHOW MODEL からの情報を使用して、モデルを再作成できます。ベーステーブルが変更されている場合、同じ SQL ステートメントで CREATE MODEL を実行すると、異なるモデルになります。SHOW MODEL によって返される情報は、モデルの所有者と EXECUTE 権限を持つユーザーによって異なります。SHOW MODEL は、モデルが Amazon Redshift からトレーニングされている場合、またはモデルが BYOM モデルである場合に、さまざまな出力を表示します。

## 構文
<a name="r_SHOW_MODEL-synopsis"></a>

```
SHOW MODEL ( ALL | model_name )
```

## パラメータ
<a name="r_SHOW_MODEL-parameters"></a>

ALL   
ユーザーが使用できるすべてのモデルとそのスキーマを返します。

 *model\$1name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

## 使用に関する注意事項
<a name="r_SHOW_MODEL_usage_notes"></a>

SHOW MODEL コマンドは、以下を返します。
+ モデル名。
+ モデルが作成されたスキーマ。
+ モデルの所有者。
+ モデルの作成時刻。
+ モデルのステータス (READY、TRAINING、または FAILED など)。
+ 失敗したモデルの失敗理由に関するメッセージ。
+ モデルがトレーニングを終了した場合の検証エラー。
+ BYOM アプローチ以外のモデルを導出するために必要な推定コスト。モデルの所有者のみがこの情報を表示できます。
+ ユーザー指定のパラメータとその値のリスト。具体的には以下のとおりです。
  + 指定された TARGET 列。
  + モデルタイプ (AUTO または XGBoost)。
  + 問題の種類 (REGRESSION、BINARY\$1CLASSIFICATION、MULTICLASS\$1CLASSIFICATION など)。このパラメータは AUTO に固有です。
  + モデルを作成した Amazon SageMaker AI トレーニングジョブまたは Amazon SageMaker AI Autopilot ジョブの名前。このジョブ名を使用して、Amazon SageMaker AI のモデルに関する詳細情報を確認できます。
  + MSE、F1、精度などの目標。このパラメータは AUTO に固有です。
  + 作成された関数の名前。
  + 推論のタイプ (ローカルまたはリモート)。
  + 予測関数の入力引数。
  + 独自のモデル (BYOM) を持たないモデルの予測関数入力引数タイプ。
  + 予測関数の戻り値の型。このパラメータは BYOM に固有です。
  + リモート推論を行う BYOM モデル用の Amazon SageMaker AI エンドポイントの名前。
  + IAM ロール。モデルの所有者だけがこれを見ることができます。
  + 使用される S3 バケット。モデルの所有者だけがこれを見ることができます。
  + AWS KMS キー (提供されている場合)。モデルの所有者だけがこれを見ることができます。
  + モデルを実行できる最大時間。
+ モデルタイプが AUTO ではない場合、Amazon Redshift は提供されるハイパーパラメータとその値のリストも表示します。

SHOW MODEL によって提供される情報の一部は、pg\$1proc などの他のカタログテーブルで表示することもできます。Amazon Redshift は、pg\$1proc カタログテーブルに登録されている予測関数に関する情報を返します。この情報には、予測関数の入力引数名とその型が含まれます。Amazon Redshift は、SHOW MODEL コマンドで同じ情報を返します。

```
SELECT * FROM pg_proc WHERE proname ILIKE '%<function_name>%';
```

## 例
<a name="r_SHOW_MODEL-examples"></a>

以下の例は、モデル表示の出力を示しています。

```
SHOW MODEL ALL;

Schema Name |  Model Name
------------+---------------
 public     | customer_churn
```

customer\$1churn の所有者は、次の出力を確認できます。EXECUTE 権限のみを持つユーザーは、IAM ロール、Amazon S3 バケット、およびモードの見積もりコストを確認することができません。

```
SHOW MODEL customer_churn;

       Key                 |           Value
---------------------------+-----------------------------------
 Model Name                | customer_churn
 Schema Name               | public
 Owner                     | 'owner'
 Creation Time             | Sat, 15.01.2000 14:45:20
 Model State               | READY
 validation:F1             | 0.855
 Estimated Cost            | 5.7
                           |
 TRAINING DATA:            |
 Table                     | customer_data
 Target Column             | CHURN
                           |
 PARAMETERS:               |
 Model Type                | auto
 Problem Type              | binary_classification
 Objective                 | f1
 Function Name             | predict_churn
 Function Parameters       | age zip average_daily_spend average_daily_cases
 Function Parameter Types  | int int float float
 IAM Role                  | 'iam_role'
 KMS Key                   | 'kms_key'
 Max Runtime               | 36000
```

# SHOW DATASHARES
<a name="r_SHOW_DATASHARES"></a>

同じアカウントまたは複数のアカウント間で、クラスター内のインバウンドおよびアウトバウンドの共有を表示します。データ共有名を指定しない場合、Amazon Redshift はクラスター内のすべてのデータベースのすべてのデータ共有を表示します。ALTER および SHARE 権限を持つユーザーは、権限を持つ共有を表示できます。

## 構文
<a name="r_SHOW_DATASHARES-synopsis"></a>

```
SHOW DATASHARES [ LIKE 'namepattern' ] 
```

## パラメータ
<a name="r_SHOW_DATASHARES-parameters"></a>

LIKE  
指定された名前パターンをデータ共有の説明と比較するオプションの句。この句を使用すると、Amazon Redshift は指定された名前パターンに一致する名前のデータ共有のみを表示します。

*namepattern*  
リクエストされたデータ共有の名前、またはワイルドカード文字を使用して照合する名前の一部。

## 例
<a name="r_SHOW_DATASHARES-examples"></a>

次の例では、クラスター内のインバウンド共有とアウトバウンド共有を表示します。

```
SHOW DATASHARES;
SHOW DATASHARES LIKE 'sales%';

share_name   | share_owner | source_database | consumer_database | share_type | createdate          | is_publicaccessible | share_acl | producer_account |           producer_namespace
-------------+-------------+-----------------+-------------------+------------+---------------------+---------------------+-----------+------------------+---------------------------------------
'salesshare' | 100         | dev             |                   | outbound   | 2020-12-09 01:22:54.| False               |           |   123456789012   | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
```

# SHOW PARAMETERS
<a name="r_SHOW_PARAMETERS"></a>

関数/プロシージャのパラメータのリストと、パラメータに関するいくつかの情報を表示します。

各出力行には、database\$1name、schema\$1name、procedure\$1name または function\$1name、parameter\$1name、ordinal\$1position、parameter\$1type (IN/OUT)、data\$1type、character\$1maximum\$1length、numeric\$1precision、numeric\$1scale、および remarks が含まれます。

## 必要なアクセス許可
<a name="r_SHOW_PARAMETERS-required-permissions"></a>

Redshift スキーマの関数/プロシージャを表示するには、現在のユーザーが次の条件のうち 1 つを満たす必要があります。
+ スーパーユーザーである
+ 関数の所有者である
+ 親スキーマに USAGE 権限があり、関数に EXECUTE 権限がある

## 構文
<a name="r_SHOW_PARAMETERS-synopsis"></a>

```
SHOW PARAMETERS OF {FUNCTION| PROCEDURE}
[database_name.]schema_name.function_name(argtype [, ...] )
[LIKE 'filter_pattern'];
```

## パラメータ
<a name="r_SHOW_PARAMETERS-parameters"></a>

*database\$1name*  
一覧表示する関数を含むデータベースの名前。

*schema\$1name*  
一覧表示する関数が含まれているスキーマの名前。

*filter\$1pattern*  
テーブル名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_PARAMETERS.html)

## 例
<a name="r_SHOW_PARAMETERS-examples"></a>

次の例は、プロシージャ demo\$1db.demo\$1schema.f1 のパラメータを示しています。

```
SHOW PARAMETERS OF PROCEDURE demo_db.demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL);
 database_name | schema_name | procedure_name |  parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+------------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | operation        |                1 | IN             | character varying           |                       10 |                   |              
 demo_db       | demo_schema | f1             | value1           |                2 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2           |                3 | IN             | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | result           |                4 | INOUT          | numeric                     |                          |                18 |             0
 demo_db       | demo_schema | f1             | operation_status |                5 | OUT            | character varying           |                       50 |                   |              
 demo_db       | demo_schema | f1             | calculation_time |                6 | OUT            | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f1             | is_successful    |                7 | OUT            | boolean                     |                          |                   |
```

次の例は、「val」で始まる名前を持つプロシージャ demo\$1schema.f1 のパラメータを示しています。

```
SHOW PARAMETERS OF PROCEDURE demo_schema.f1(VARCHAR, DECIMAL, DECIMAL, DECIMAL) like 'val%';
 database_name | schema_name | procedure_name | parameter_name | ordinal_position | parameter_type | data_type | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+----------------+----------------+------------------+----------------+-----------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f1             | value1         |                2 | IN             | numeric   |                          |                18 |             0
 demo_db       | demo_schema | f1             | value2         |                3 | IN             | numeric   |                          |                18 |             0
```

次の例は、demo\$1schema.f2 関数のパラメータを示しています。

```
SHOW PARAMETERS OF FUNCTION demo_schema.f2(INT, VARCHAR, DECIMAL, DATE, TIMESTAMP, BOOLEAN);
 database_name | schema_name | function_name | parameter_name  | ordinal_position | parameter_type |          data_type          | character_maximum_length | numeric_precision | numeric_scale 
---------------+-------------+---------------+-----------------+------------------+----------------+-----------------------------+--------------------------+-------------------+---------------
 demo_db       | demo_schema | f2            |                 |                0 | RETURN         | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | int_param       |                1 | IN             | integer                     |                          |                32 |             0
 demo_db       | demo_schema | f2            | varchar_param   |                2 | IN             | character varying           |                       -1 |                   |              
 demo_db       | demo_schema | f2            | decimal_param   |                3 | IN             | numeric                     |                          |                   |              
 demo_db       | demo_schema | f2            | date_param      |                4 | IN             | date                        |                          |                   |              
 demo_db       | demo_schema | f2            | timestamp_param |                5 | IN             | timestamp without time zone |                          |                   |              
 demo_db       | demo_schema | f2            | boolean_param   |                6 | IN             | boolean                     |                          |                   |
```

# SHOW POLICIES
<a name="r_SHOW_POLICIES"></a>

データベースで定義されている行レベルセキュリティ (RLS) ポリシーと動的データマスキング (DDM) ポリシー、および特定のリレーションに適用される RLS ポリシーと DDM ポリシーを表示します。これらのポリシーの結果を表示できるのは、データベースのスーパーユーザーまたは `sys:secadmin` ロールを持つユーザーのみです。

## 構文
<a name="r_SHOW_POLICIES-synopsis"></a>

```
SHOW { RLS | MASKING } POLICIES
[
    ON { database_name.schema_name.relation_name
       | schema_name.relation_name
       }
    [ FOR { user_name | ROLE role_name | PUBLIC } ]
  |
    FROM DATABASE database_name
]
[ LIMIT row_limit ];
```

## パラメータ
<a name="r_SHOW_POLICIES-parameters"></a>

*database\$1name*  
ポリシーを表示するデータベースの名前。

*schema\$1name*  
アタッチされたポリシーを表示するリレーションのスキーマ名。

*relation\$1name*  
アタッチされたポリシーを表示するリレーションの名前。

*user\$1name*  
リレーションにポリシーがアタッチされているユーザーの名前。

*role\$1name*  
リレーションにポリシーがアタッチされているロールの名前。

*row\$1limit*  
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

**注記**  
接続されたデータベースとは異なるデータベースからのポリシーの表示は、Amazon Redshift フェデレーティッドアクセス許可カタログでサポートされています。SHOW POLICIES コマンドは、Amazon Redshift フェデレーティッドアクセス許可を持つウェアハウス内のすべてのデータベースのクロスデータベースクエリをサポートします。

## 例
<a name="r_SHOW_POLICIES-examples"></a>

次のコマンドは、接続されたデータベースの RLS ポリシーを示しています。

```
SHOW RLS POLICIES;

  policy_name   | policy_alias |                           policy_atts                            |                                                                  policy_qual                                                                         | policy_enabled | policy_modified_by |    policy_modified_time    
----------------+--------------+------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------+----------------+--------------------+----------------------------
 policy_america | rls_table    | [{"colname":"region","type":"character varying(10)"}]            | (("rls_table"."region" = CAST('USA' AS TEXT)) OR ("rls_table"."region" = CAST('CANADA' AS TEXT)) OR ("rls_table"."region" = CAST('Mexico' AS TEXT))) | t              | admin              | 2025-11-07 14:57:27
```

次のコマンドは、「sales\$1db.finance-catalog」データベースからのマスキングポリシーを示します。

```
SHOW MASKING POLICIES FROM DATABASE "sales_db@finance-catalog";

  policy_name  |                          input_columns                           |                                                  policy_expression                                                  | policy_modified_by |    policy_modified_time    
---------------+------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------+--------------------+----------------------------
 hash_credit   | [{"colname":"credit_card","type":"character varying(256)"}]      | [{"expr":"SHA2((\"masked_table\".\"credit_card\" + CAST('testSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}]   | admin              | 2025-11-07 16:05:54
 hash_username | [{"colname":"username","type":"character varying(256)"}]         | [{"expr":"SHA2((\"masked_table\".\"username\" + CAST('otherTestSalt' AS TEXT)), CAST(256 AS INT4))","type":"text"}] | admin              | 2025-11-07 16:07:08
(2 rows)
```

次のコマンドは、sales\$1table リレーションにアタッチされた RLS ポリシーを表示します。

```
SHOW RLS POLICIES ON sales_schema.sales_table;

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |          grantee          | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+---------------------------+--------------+--------------+-----------+----------------------
 policy_global  | sales_schema | sales_table   | table         | admin    | sales_analyst_role_global | role         | t            | t         | and
 policy_america | sales_schema | sales_table   | table         | admin    | sales_analyst_usa         | user         | t            | t         | and
```

次のコマンドは、「sales\$1db.finance-catalog」データベースから transaction\$1table リレーションにアタッチされたマスキングポリシーを表示します。

```
SHOW MASKING POLICIES ON "sales_db@finance-catalog".sales_schema.transaction_table LIMIT 1;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority |   input_columns   |   output_columns   
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+-------------------+-------------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"]     | ["user_name"]
```

次のコマンドは、「IAMR:sales\$1analyst\$1usa」ユーザーの「sales\$1db.finance-catalog」データベースから、sales\$1table リレーションにアタッチされた RLS ポリシーを表示します。

```
SHOW RLS POLICIES ON "sales_db@finance-catalog".sales_schema.sales_table FOR "IAMR:sales_analyst_usa";

  policy_name   | schema_name  | relation_name | relation_kind | grantor  |      grantee           | grantee_kind | is_policy_on | is_rls_on | rls_conjunction_type 
----------------+--------------+---------------+---------------+----------+------------------------+--------------+--------------+-----------+----------------------
 policy_america | sales_schema | sales_table   | table         | admin    | IAMR:sales_analyst_usa | user         | t            | t         | and
```

次のコマンドは、ロール transaction\$1analyst\$1role のデータベース「sales\$1db.finance-catalog」から transaction\$1table リレーションにアタッチされた RLS ポリシーを表示します。

```
SHOW MASKING POLICIES ON sales_schema.transaction_table FOR ROLE transaction_analyst_role;

  policy_name  | schema_name  |   relation_name   | relation_type | grantor  |         grantee          | grantee_type | priority | input_columns | output_columns 
---------------+--------------+-------------------+---------------+----------+--------------------------+--------------+----------+---------------+----------------
 hash_username | sales_schema | transaction_table | table         | admin    | transaction_analyst_role | role         |      100 | ["user_name"] | ["user_name"]
```

# SHOW PROCEDURE
<a name="r_SHOW_PROCEDURE"></a>

特定のストアドプロシージャの定義を、その署名も含めて示します。SHOW PROCEDURE の出力を使用してストアドプロシージャを再作成できます。

## 構文
<a name="r_SHOW_PROCEDURE-synopsis"></a>

```
SHOW PROCEDURE sp_name [( [ [ argname ] [ argmode ] argtype [, ...] ] )]
```

## パラメータ
<a name="r_SHOW_PROCEDURE-parameters"></a>

 *sp\$1name*   
表示するプロシージャの名前。

*[argname] [ argmode] argtype*   
ストアドプロシージャを識別するための入力引数タイプ。必要に応じて、OUT 引数も含めて、完全な引数のデータタイプを指定できます。ストアドプロシージャの名前が一意である (重複していない) 場合、この部分は省略可能です。

## 例
<a name="r_SHOW_PROCEDURE-examples"></a>

次の例は、プロシージャ `test_spl2` の定義を示しています。

```
show procedure test_sp2(int, varchar);
                                        Stored Procedure Definition
------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE public.test_sp2(f1 integer, INOUT f2 character varying, OUT character varying)
LANGUAGE plpgsql
AS $_$
DECLARE
out_var alias for $3;
loop_var int;
BEGIN
IF f1 is null OR f2 is null THEN
RAISE EXCEPTION 'input cannot be null';
END IF;
CREATE TEMP TABLE etl(a int, b varchar);
FOR loop_var IN 1..f1 LOOP
insert into etl values (loop_var, f2);
f2 := f2 || '+' || f2;
END LOOP;
SELECT INTO out_var count(*) from etl;
END;
$_$

(1 row)
```

# SHOW PROCEDURE
<a name="r_SHOW_PROCEDURES"></a>

スキーマ内のプロシージャのリストと、リストされたオブジェクトに関する情報を表示します。

各出力行には、列 `database_name`、`schema_name`、`procedure_name`、`number_of_arguments`、`argument_list`、`return_type`、remarks があります。

SHOW PROCEDURES の結果が 10,000 行を超える場合、コマンドはエラーを発生させます。

## 必要なアクセス許可
<a name="r_SHOW_PROCEDURES-required-permissions"></a>

Redshift スキーマのプロシージャを表示するには、現在のユーザーが次の条件のうち 1 つを満たす必要があります。
+ スーパーユーザーである
+ プロシージャの所有者である
+ 親スキーマに USAGE 権限があり、プロシージャに EXECUTE 権限がある

## 構文
<a name="r_SHOW_PROCEDURES-synopsis"></a>

```
SHOW PROCEDURES FROM SCHEMA
[database_name.]schema_name
[LIKE 'filter_pattern'] [LIMIT row_limit]
```

## パラメータ
<a name="r_SHOW_PROCEDURES-parameters"></a>

database\$1name  
一覧表示する手順が含まれているデータベースの名前。

schema\$1name  
一覧表示するプロシージャが含まれているスキーマの名前。

filter\$1pattern  
プロシージャ名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_PROCEDURES.html)
filter\$1pattern はプロシージャ名のみと一致することに注意してください。

row\$1limit  
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_PROCEDURES-examples"></a>

次の例は、スキーマ demo\$1db.demo\$1schema のプロシージャを示しています。

```
SHOW PROCEDURES FROM SCHEMA demo_db.demo_schema;
 database_name | schema_name |  procedure_name   | number_of_arguments |                argument_list                 |                           return_type                            | remarks 
---------------+-------------+-------------------+---------------------+----------------------------------------------+------------------------------------------------------------------+---------
 demo_db       | demo_schema | f1                |                   4 | character varying, numeric, numeric, numeric | numeric, character varying, timestamp without time zone, boolean | 
 demo_db       | demo_schema | sp_get_result_set |                   2 | integer, refcursor                           | refcursor                                                        | 
 demo_db       | demo_schema | sp_process_data   |                   2 | numeric, numeric                             | numeric, character varying                                       |
```

次の例は、名前が「data」で終わる demo\$1schema スキーマのプロシージャを示しています。

```
SHOW PROCEDURES FROM SCHEMA demo_schema like '%data';
 database_name | schema_name | procedure_name  | number_of_arguments |  argument_list   |        return_type         | remarks 
---------------+-------------+-----------------+---------------------+------------------+----------------------------+---------
 demo_db       | demo_schema | sp_process_data |                   2 | numeric, numeric | numeric, character varying |
```

# SHOW SCHEMAS
<a name="r_SHOW_SCHEMAS"></a>

データベース内のスキーマのリストと、いくつかのスキーマ属性を表示します。

各出力行は、データベース名、スキーマ名、スキーマ所有者、スキーマタイプ、スキーマ ACL、ソースデータベース、およびスキーマオプションで構成されます。これらの属性の詳細については、「[SVV\$1ALL\$1SCHEMAS](r_SVV_ALL_SCHEMAS.md)」を参照してください。

SHOW SCHEMAS コマンドで 10,000 を超えるスキーマが生成される場合は、エラーが返されます。

## 必要なアクセス許可
<a name="r_SHOW_SCHEMAS-privileges"></a>

Amazon Redshift テーブルのスキーマを表示するには、現在のユーザーが次の条件のうち 1 つを満たす必要があります。
+ スーパーユーザーであること。
+ スキーマの所有者であること。
+ スキーマに対する USAGE 権限が付与されていること。

## 構文
<a name="r_SHOW_SCHEMAS-synopsis"></a>

```
SHOW SCHEMAS FROM DATABASE database_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## パラメータ
<a name="r_SHOW_SCHEMAS-parameters"></a>

 *database\$1name*   
一覧表示するテーブルが含まれているデータベースの名前。  
AWS Glue Data Catalog でテーブルを表示するには、データベース名として (`awsdatacatalog`) を指定し、システム設定 `data_catalog_auto_mount` が `true` に設定されていることを確認します。詳細については、「[ALTER SYSTEM](r_ALTER_SYSTEM.md)」を参照してください。

 *filter\$1pattern*   
スキーマ名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_SCHEMAS.html)
*filter\$1pattern* にメタ文字が含まれていない場合、パターンは文字列そのものを表すだけです。この場合、LIKE は等号演算子と同じ働きをします。

 *row\$1limit*   
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_SCHEMAS-examples"></a>

次の例は、`dev` という Amazon Redshift データベース内のスキーマを表示します。

```
SHOW SCHEMAS FROM DATABASE dev;

 database_name |     schema_name      | schema_owner | schema_type |         schema_acl          | source_database | schema_option 
---------------+----------------------+--------------+-------------+-----------------------------+-----------------+---------------
 dev           | pg_automv            |            1 | local       |                             |                 | 
 dev           | pg_catalog           |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | public               |            1 | local       | jpuser=UC/jpuser~=UC/jpuser |                 | 
 dev           | information_schema   |            1 | local       | jpuser=UC/jpuser~=U/jpuser  |                 | 
 dev           | schemad79cd6d93bf043 |            1 | local       |                             |                 |
```

次の例は、`awsdatacatalog` という AWS Glue Data Catalog データベース内のスキーマを表示します。出力行の最大数は `5` です。

```
SHOW SCHEMAS FROM DATABASE awsdatacatalog LIMIT 5;

 database_name  |     schema_name      | schema_owner | schema_type | schema_acl | source_database | schema_option 
----------------+----------------------+--------------+-------------+------------+-----------------+---------------
 awsdatacatalog | 000_too_many_glue_db |              | EXTERNAL    |            |                 | 
 awsdatacatalog | 123_default          |              | EXTERNAL    |            |                 | 
 awsdatacatalog | adhoc                |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_10mb      |              | EXTERNAL    |            |                 | 
 awsdatacatalog | all_shapes_1g        |              | EXTERNAL    |            |                 |
```

# テーブルを表示する
<a name="r_SHOW_TABLE"></a>

テーブル属性、テーブル制約、列属性、列照合、列制約など、テーブルの定義を表示します。SHOW TABLE ステートメントの出力を使用して、テーブルを再作成できます。

テーブル作成の詳細については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

## 構文
<a name="r_SHOW_TABLE-synopsis"></a>

```
SHOW TABLE [schema_name.]table_name 
```

## パラメータ
<a name="r_SHOW_TABLE-parameters"></a>

 *schema\$1name*   
(オプション) 関連するスキーマの名前。

 *table\$1name*   
表示するテーブルの名前。

## 例
<a name="r_SHOW_TABLE-examples"></a>

以下は、テーブル `sales` の SHOW TABLE 出力の例です。

```
show table sales;
```

```
CREATE TABLE public.sales (
salesid integer NOT NULL ENCODE az64,
listid integer NOT NULL ENCODE az64 distkey,
sellerid integer NOT NULL ENCODE az64,
buyerid integer NOT NULL ENCODE az64,
eventid integer NOT NULL ENCODE az64,
dateid smallint NOT NULL,
qtysold smallint NOT NULL ENCODE az64,
pricepaid numeric(8,2) ENCODE az64,
commission numeric(8,2) ENCODE az64,
saletime timestamp without time zone ENCODE az64
)
DISTSTYLE KEY SORTKEY ( dateid );
```

以下は、スキーマ `public` のテーブル `category` の SHOW TABLE 出力の例です。データベースの照合は CASE\$1SENSITIVE です。

```
show table public.category;
```

```
CREATE TABLE public.category (
catid smallint NOT NULL distkey,
catgroup character varying(10) ENCODE lzo COLLATE case_sensitive,
catname character varying(10) ENCODE lzo COLLATE case_sensitive,
catdesc character varying(50) ENCODE lzo COLLATE case_sensitive
) 
DISTSTYLE KEY SORTKEY ( catid );
```

次の例では、プライマリキーを使用しながらテーブル `foo` を作成します。

```
create table foo(a int PRIMARY KEY, b int);
```

SHOW TABLE の結果は、`foo`テーブルの作成ステートメントを、すべてのプロパティとともに表示します。

```
show table foo;
```

```
CREATE TABLE public.foo ( 
a integer NOT NULL ENCODE az64, 
b integer ENCODE az64, PRIMARY KEY (a) 
) 
DISTSTYLE AUTO;
```

この例では、列 `a` がデータベースのデフォルトの CASE\$1SENSITIVE 照合を継承し、`b` と `c` が明示的に CASE\$1INSENSITIVE 照合に設定されている場合のテーブルを作成します。

```
CREATE TABLE public.foo (
a CHAR, 
b VARCHAR(10) COLLATE CASE_INSENSITIVE, 
c SUPER COLLATE CASE_INSENSITIVE
);
```

SHOW TABLE の結果は、`foo`テーブルの作成ステートメントを、すべてのプロパティとともに表示します。

```
show table public.foo;
```

```
CREATE TABLE public.foo (
a character(1) ENCODE lzo COLLATE case_sensitive,
b character varying(10) ENCODE lzo COLLATE case_insensitive,
c super COLLATE case_insensitive
)
DISTSTYLE AUTO;
```

# SHOW TABLES
<a name="r_SHOW_TABLES"></a>

スキーマ内のテーブルのリストと、いくつかのテーブル属性を表示します。

各出力行は、データベース名、スキーマ名、テーブル名、テーブルタイプ、テーブル ACL、備考、テーブル所有者、最終変更時刻、最終修正時刻、dist\$1style、テーブルサブタイプで構成されます。これらの属性の詳細については、「[SVV\$1ALL\$1TABLES](r_SVV_ALL_TABLES.md)」を参照してください。

修正と変更のタイムスタンプは、テーブルの更新から約 20 分遅れる可能性があります。

SHOW TABLES コマンドの結果のテーブル数が 10,000 を超える場合は、エラーが返されます。

## 必要なアクセス許可
<a name="r_SHOW_TABLES-privileges"></a>

Amazon Redshift スキーマのテーブルを表示するには、現在のユーザーが次の条件のうち 1 つを満たす必要があります。
+ スーパーユーザーであること。
+ テーブルの所有者であること。
+ 親スキーマに対する USAGE 権限が付与され、テーブルに対する SELECT 権限またはテーブル内の任意の列に対する SELECT 権限が付与されていること。

## 構文
<a name="r_SHOW_TABLES-synopsis"></a>

```
SHOW TABLES FROM SCHEMA database_name.schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ]
```

## パラメータ
<a name="r_SHOW_TABLES-parameters"></a>

 *database\$1name*   
一覧表示するテーブルが含まれているデータベースの名前。  
AWS Glue Data Catalog でテーブルを表示するには、データベース名として (`awsdatacatalog`) を指定し、システム設定 `data_catalog_auto_mount` が `true` に設定されていることを確認します。詳細については、「[ALTER SYSTEM](r_ALTER_SYSTEM.md)」を参照してください。

 *schema\$1name*   
一覧表示するテーブルが含まれているスキーマの名前。  
AWS Glue Data Catalog テーブルを表示するには、スキーマ名として AWS Glue データベース名を指定します。

 *filter\$1pattern*   
テーブル名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_TABLES.html)
*filter\$1pattern* にメタ文字が含まれていない場合、パターンは文字列そのものを表すだけです。この場合、LIKE は等号演算子と同じ働きをします。

 *row\$1limit*   
返される行の最大数。*row\$1limit* には、0～10,000 の値を指定できます。

## 例
<a name="r_SHOW_TABLES-examples"></a>

```
SHOW TABLES FROM SCHEMA s1;

 database_name | schema_name |    table_name     | table_type |              table_acl              | remarks | owner |     last_altered_time      |     last_modified_time     | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+-------------------------------------+---------+-------+----------------------------+----------------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | alice=arwdRxtDPA/alice~bob=d/alice  |         | alice |                            |                            |            | LATE BINDING VIEW
 dev           | s1          | manual_mv         | VIEW       | alice=arwdRxtDPA/alice~bob=P/alice  |         | alice |                            |                            |            | MATERIALIZED VIEW
 dev           | s1          | regular_view      | VIEW       | alice=arwdRxtDPA/alice~bob=r/alice  |         | alice |                            |                            |            | REGULAR VIEW
 dev           | s1          | test_table        | TABLE      | alice=arwdRxtDPA/alice~bob=rw/alice |         | alice | 2025-11-18 15:52:00.010452 | 2025-11-18 15:44:34.856073 | AUTO (ALL) | REGULAR TABLE
```

```
SHOW TABLES FROM SCHEMA dev.s1 LIKE '%view' LIMIT 1;

 database_name | schema_name |    table_name     | table_type |              table_acl               | remarks | owner | last_altered_time | last_modified_time | dist_style |   table_subtype   
---------------+-------------+-------------------+------------+--------------------------------------+---------+-------+-------------------+--------------------+------------+-------------------
 dev           | s1          | late_binding_view | VIEW       | {alice=arwdRxtDPA/alice,bob=d/alice} |         | alice |                   |                    |            | LATE BINDING VIEW
```

# SHOW TEMPLATE
<a name="r_SHOW_TEMPLATE"></a>

完全修飾名 (データベース、スキーマ、テンプレート名) とすべてのパラメータを含む、テンプレートの完全な定義を表示します。出力は、テンプレートを再作成したり、変更を加えて同様のテンプレートを作成したりするために使用できる有効な CREATE TEMPLATE ステートメントです。

テンプレート作成の詳細については「[CREATE TEMPLATE](r_CREATE_TEMPLATE.md)」を参照してください。

## 必要なアクセス許可
<a name="r_SHOW_TEMPLATE-privileges"></a>

テンプレート定義を表示するには、次のいずれかが必要です。
+ スーパーユーザー権限
+ テンプレートに対する USAGE 権限と、テンプレートを含むスキーマに対する USAGE 権限

## 構文
<a name="r_SHOW_TEMPLATE-synopsis"></a>

```
SHOW TEMPLATE [database_name.][schema_name.]template_name;
```

## パラメータ
<a name="r_SHOW_TEMPLATE-parameters"></a>

 *database\$1name*   
(オプション) テンプレートが作成されるデータベースの名前。指定しない場合は、現在のデータベースが使用されます。

 *schema\$1name*   
(オプション) テンプレートが作成されるスキーマの名前。指定しない場合は、現在の検索パスでテンプレートが検索されます。

 *template\$1name*   
テンプレートの名前。

## 例
<a name="r_SHOW_TEMPLATE-examples"></a>

テンプレート `test_template` の SHOW TEMPLATE 出力の例を次に示します。

```
CREATE TEMPLATE test_template FOR COPY AS NOLOAD DELIMITER ',' ENCODING UTF16 ENCRYPTED;
```

```
SHOW TEMPLATE test_template;

CREATE OR REPLACE TEMPLATE dev.public.test_template FOR COPY AS ENCRYPTED NOLOAD ENCODING UTF16 DELIMITER ',';
```

次の例では、スキーマ `demo_schema` にテンプレート `demo_template` を作成します。

```
CREATE OR REPLACE TEMPLATE demo_schema.demo_template FOR COPY AS
ACCEPTANYDATE ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY' EXPLICIT_IDS ROUNDEC
TIMEFORMAT  AS 'DD.MM.YYYY HH:MI:SS' TRUNCATECOLUMNS NULL  AS 'null_string';
```

```
SHOW TEMPLATE demo_schema.demo_template;

CREATE OR REPLACE TEMPLATE dev.demo_schema.demo_template FOR COPY AS TRUNCATECOLUMNS NULL 'null_string' EXPLICIT_IDS TIMEFORMAT 'DD.MM.YYYY HH:MI:SS' ACCEPTANYDATE ROUNDEC ACCEPTINVCHARS DATEFORMAT 'DD-MM-YYYY';
```

# SHOW TEMPLATES
<a name="r_SHOW_TEMPLATES"></a>

スキーマ内のテンプレートとその属性のリストを表示します。

各出力行は、テンプレート名、テンプレート ID、テンプレートタイプ、テンプレート所有者、データベース名、スキーマ名、作成時刻、最終変更時刻、最終変更者で構成されます。

テンプレートパラメータを含むテンプレートの詳細については、「[SYS\$1REDSHIFT\$1TEMPLATE](SYS_REDSHIFT_TEMPLATE.md)」を参照してください。

## 必要なアクセス許可
<a name="r_SHOW_TEMPLATES-privileges"></a>

Amazon Redshift スキーマ内のテンプレートを表示するには、次のいずれかが必要です。
+ スーパーユーザー権限
+ テンプレートを含むスキーマに対する USAGE 権限

## 構文
<a name="r_SHOW_TEMPLATES-synopsis"></a>

```
SHOW TEMPLATES FROM SCHEMA [database_name.]schema_name [LIKE 'filter_pattern'] [LIMIT row_limit ];
```

## パラメータ
<a name="r_SHOW_TEMPLATES-parameters"></a>

 *database\$1name*   
(オプション) 一覧表示するテンプレートを含むデータベースの名前。指定しない場合は、現在のデータベースを使用します。

 *schema\$1name*   
一覧表示するテンプレートが含まれているスキーマの名前。

 *filter\$1pattern*   
(オプション) テンプレート名とマッチングするパターンが含まれる有効な UTF-8 文字式。LIKE オプションでは、以下のパターンマッチングメタ文字をサポートする、大文字と小文字を区別したマッチングを行います。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_SHOW_TEMPLATES.html)
*filter\$1pattern* にメタ文字が含まれていない場合、パターンは文字列そのものを表すだけです。この場合、LIKE は等号演算子と同じ働きをします。

 *row\$1limit*   
返される行の最大数。有効範囲は 0 からクラスターのテンプレート制限までです (デフォルトは 1000)。

## 例
<a name="r_SHOW_TEMPLATES-examples"></a>

```
SHOW TEMPLATES FROM SCHEMA s1;

 template_name          | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by
------------------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 template_maxerror      |      107685 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:10.514076 | 2025-12-16 19:31:10.514076 |              100
 json_template          |      107687 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:33.229566 | 2025-12-16 19:31:33.229567 |              100
 noload_template        |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
 csv_delimiter_template |      107688 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:42.354044 | 2025-12-16 19:31:42.354045 |              100
```

```
SHOW TEMPLATES FROM SCHEMA dev.s1 LIKE '%template' LIMIT 1;

 template_name  | template_id | template_type | template_owner | database_name | schema_name |        create_time         |     last_modified_time     | last_modified_by 
-----------------+-------------+---------------+----------------+---------------+-------------+----------------------------+----------------------------+------------------
 noload_template |      107686 | COPY          | alice          | dev           | s1          | 2025-12-16 19:31:17.370547 | 2025-12-16 19:31:17.370547 |              100
```

# ビューを表示する
<a name="r_SHOW_VIEW"></a>

マテリアライズドビューと遅延バインドビューを含む、ビューの定義を表示します。SHOW VIEW ステートメントの出力を使用して、ビューを再作成できます。

## 構文
<a name="r_SHOW_VIEW-synopsis"></a>

```
SHOW VIEW [schema_name.]view_name 
```

## パラメータ
<a name="r_SHOW_VIEW-parameters"></a>

 *schema\$1name*   
(オプション) 関連するスキーマの名前。

 *view\$1name*   
表示するビューの名前。

## 例
<a name="r_SHOW_VIEW-examples"></a>

 以下は、ビュー `LA_Venues_v` のビュー定義です。

```
create view LA_Venues_v as select * from venue where venuecity='Los Angeles';
```

次に、前に定義したビューの SHOW VIEW コマンドと出力の例を示します。

```
show view LA_Venues_v;
```

```
SELECT venue.venueid,
venue.venuename,
venue.venuecity,
venue.venuestate,
venue.venueseats
FROM venue WHERE ((venue.venuecity)::text = 'Los Angeles'::text);
```

以下は、スキーマ `public` のビュー `public.Sports_v` のビュー定義です。

```
create view public.Sports_v as select * from category where catgroup='Sports';
```

次に、前に定義したビューの SHOW VIEW コマンドと出力の例を示します。

```
show view public.Sports_v;
```

```
SELECT category.catid,
category.catgroup,
category.catname,
category.catdesc
FROM category WHERE ((category.catgroup)::text = 'Sports'::text);
```

# START TRANSACTION
<a name="r_START_TRANSACTION"></a>

BEGIN 関数の同義語です。

「[BEGIN](r_BEGIN.md)」を参照してください。

# TRUNCATE
<a name="r_TRUNCATE"></a>

テーブルをスキャンせずに、テーブルからすべての行を削除します。この操作は無条件の DELETE 操作に対する代替案ですが、より高速です。TRUNCATE コマンドを実行するには、テーブルへの TRUNCATE アクセス許可が付与されているか、テーブルの所有者であるか、スーパーユーザーである必要があります。テーブルを切り捨てるアクセス許可を付与するには、[GRANT](r_GRANT.md) コマンドを使用します。

TRUNCATE は DELETE よりもはるかに効率的であり、VACUUM および ANALYZE を必要としません。ただし、TRUNCATE では、その操作を実行するトランザクションがコミットされることに注意してください。

## 構文
<a name="r_TRUNCATE-synopsis"></a>

```
TRUNCATE [ TABLE ] table_name
```

このコマンドはマテリアライズドビューでも機能します。

```
TRUNCATE materialized_view_name
```

## パラメータ
<a name="r_TRUNCATE-parameters"></a>

TABLE   
オプションキーワード 

 *table\$1name*   
一時テーブルまたは永続的テーブル テーブルの所有者またはスーパーバイザだけがテーブルを切り取ることができます。  
外部キー拘束で参照されるテーブルなど、任意のテーブルを切り取ることができます。  
テーブルを切り取った後、テーブルに対して VACUUM を実行する必要はありません。

 *materialized\$1view\$1name*   
マテリアライズドビュー。  
[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md) に使用されているマテリアライズドビューは切り捨てることができます。

## 使用に関する注意事項
<a name="r_TRUNCATE_usage_notes"></a>
+  TRUNCATE コマンドはコマンドが実行されたトランザクションをコミットします。そのため、TRUNCATE 操作をロールバックすることはできず、それ自体がコミットを行うと TRUNCATE コマンドが他の操作にコミットする場合があります。
+ TRUNCATE オペレーションは、次のいずれかに接続された Amazon Redshift ストリーミングマテリアライズドビューで実行されると、排他的ロックを保持します。
  +  1 つの Amazon Kinesis Data Streams 
  +  1 つの Amazon Managed Streaming for Apache Kafka トピック 
  +  Confluent Cloud Kafka トピックなど、サポートされている外部ストリーム 

  詳細については、「[マテリアライズドビューへのストリーミング取り込み](materialized-view-streaming-ingestion.md)」を参照してください。

## 例
<a name="r_TRUNCATE-examples"></a>

TRUNCATE コマンドを使って、CATEGORY テーブルからすべての行を削除します。

```
truncate category;
```

TRUNCATE オペレーションのロールバック試行。

```
begin;

truncate date;

rollback;

select count(*) from date;
count
-------
0
(1 row)
```

TRUNCATE コマンドにより自動的に確定したため、ROLLBACK コマンドを実行しても DATE テーブルは空のままです。

次の例では、TRUNCATE コマンドを使用してマテリアライズドビューからすべての行を削除します。

```
truncate my_materialized_view;
```

マテリアライズドビューのすべてのレコードが削除され、マテリアライズドビューとそのスキーマはそのまま残ります。クエリでは、マテリアライズドビュー名はサンプルです。

# UNLOAD
<a name="r_UNLOAD"></a>


|  | 
| --- |
|  COPY コマンドと UNLOAD コマンドのクライアント側の暗号化は、2025 年 4 月 30 日以降、新規のお客様は利用できなくなります。2025 年 4 月 30 日より前の 12 か月間に COPY コマンドと UNLOAD コマンドでクライアント側の暗号化を使用していた場合、2026 年 4 月 30 日までは COPY コマンドまたは UNLOAD コマンドでクライアント側の暗号化を引き続き使用できます。2026 年 4 月 30 日を過ぎると、COPY と UNLOAD でクライアント側の暗号化を使用できなくなります。できるだけ早く COPY と UNLOAD でサーバー側の暗号化を使用するよう切り替えることをお勧めします。COPY と UNLOAD でサーバー側の暗号化を既に使用している場合、変更はなく、クエリを変更せずに引き続き使用できます。COPY と UNLOAD の暗号化の詳細については、以下の ENCRYPTED パラメータを参照してください。  | 

Amazon S3 のサーバー側の暗号化 (SSE-S3) を使用して、Amazon S3 上の 1 つ、または複数のテキスト、JSON、または Apache Parquet ファイルにクエリの結果をアンロードします。AWS Key Management Service キー (SSE-KMS) を使用してサーバー側の暗号化を指定することもできます。

デフォルトでは、アンロードされたファイルの形式はパイプ区切り (`|`) テキストです。

Amazon S3 のファイルは、サイズ、拡張子、ファイル数、MAXFILESIZE パラメータを設定することで管理できます。S3 IP 範囲が許可リストに追加されていることを確認します。必要な S3 IP 範囲の詳細については、「[ネットワークの隔離](https://docs.aws.amazon.com//redshift/latest/mgmt/security-network-isolation.html#network-isolation)」を参照してください。

分析用の効率的なオープン列型ストレージ形式である Apache Parquet では、Amazon Redshift クエリの結果を Amazon S3 データレイクにアンロードできます。Parquet 形式は、テキスト形式と比較して、アンロードが最大 2 倍速く、さらにストレージ使用量が Amazon S3 で最大 6 倍少なくすみます。これにより、Amazon S3 で行ったデータ変換とエンリッチメントをオープン形式で Amazon S3 データレイクに保存できます。次に、Redshift Spectrum や、Amazon Athena、Amazon EMR、Amazon SageMaker AI などの他の AWS のサービスを使用して、データを分析できます。

UNLOAD コマンドの使用に関する詳細とシナリオ例については、「[Amazon Redshift でのデータのアンロード](c_unloading_data.md)」を参照してください。

## 必要な権限とアクセス許可
<a name="r_UNLOAD-permissions"></a>

UNLOAD コマンドを正常に実行するには、少なくともデータベース内のデータに対する SELECT 権限と、Amazon S3 ロケーションへの書き込みアクセス許可が必要です。UNLOAD コマンドで AWS リソースにアクセスするためのアクセス許可については、「[他の AWS リソースにアクセスするアクセス許可](copy-usage_notes-access-permissions.md)」を参照してください。

最小特権のアクセス許可を適用するために、以下の推奨事項に従って、このコマンドを実行するユーザーに必要なアクセス許可だけを付与してください。
+ ユーザーには、データに対する SELECT 権限が必要です。データベース権限を制限する方法については、「[GRANT](r_GRANT.md)」を参照してください。
+ ユーザーには、IAM ロールを引き受けて、AWS アカウントの Amazon S3 バケットに書き込むためのアクセス許可が必要です。データベースユーザーがロールを引き受けるためのアクセスを制限するには、「*Amazon Redshift 管理ガイド*」の「[IAM ロールへのアクセスの制限](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service-database-users.html)」を参照してください。
+ ユーザには、Amazon S3 バケットへのアクセス権が必要です。Amazon S3 バケットポリシーを使用してアクセス許可を制限するには、「*Amazon Simple Storage Service ユーザーガイド*」の「[Amazon S3 のバケットポリシー](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html)」を参照してください。

## 構文
<a name="r_UNLOAD-synopsis"></a>

```
UNLOAD ('select-statement')
TO 's3://object-path/name-prefix'
authorization
[ option, ...] 

where authorization is
IAM_ROLE { default | 'arn:aws:iam::<AWS アカウント-id-1>:role/<role-name>[,arn:aws:iam::<AWS アカウント-id-2>:role/<role-name>][,...]' }
            
where option is
| [ FORMAT [ AS ] ] CSV | PARQUET | JSON
| PARTITION BY ( column_name [, ... ] ) [ INCLUDE ]
| MANIFEST [ VERBOSE ]
| HEADER
| DELIMITER [ AS ] 'delimiter-char'
| FIXEDWIDTH [ AS ] 'fixedwidth-spec'
| ENCRYPTED [ AUTO ]
| BZIP2
| GZIP
| ZSTD
| ADDQUOTES
| NULL [ AS ] 'null-string'
| ESCAPE
| ALLOWOVERWRITE
| CLEANPATH
| PARALLEL [ { ON | TRUE } | { OFF | FALSE } ]
| MAXFILESIZE [AS] max-size [ MB | GB ]
| ROWGROUPSIZE [AS] size [ MB | GB ]
| REGION [AS] 'aws-region' }
| EXTENSION 'extension-name'
```

## パラメータ
<a name="unload-parameters"></a>

('*select-statement*')   
SELECT クエリ。クエリ結果をアンロードします。ほとんどの場合、クエリで ORDER BY 句を指定してソート順にデータをアンロードすることは有益です。この方法は、データの再ロード時にデータをソートするために必要な時間を節約します。  
クエリは、次に示すように一重引用符で囲む必要があります:   

```
('select * from venue order by venueid')
```
クエリに引用符が含まれている場合 (リテラル値を囲む場合など)、リテラルを 2 つの単一引用符で囲みます。また、クエリを単一引用符で囲む必要があります。  

```
('select * from venue where venuestate=''NV''')
```

TO 's3://*object-path/name-prefix*'  
Amazon Redshift が出力ファイルオブジェクト (MANIFEST が指定されている場合はマニフェストファイルを含む) を書き込む Amazon S3 上の絶対パス (バケット名を含む)。オブジェクト名には *name-prefix* というプレフィックスが付きます。`PARTITION BY` を使用すると、必要に応じて *name-prefix* 値の末尾にスラッシュ (/) が自動的に追加されます。さらにセキュリティを強化するために、UNLOAD は HTTPS 接続を使用して Amazon S3 に接続します。デフォルトでは、UNLOAD はスライスごとに 1 つ以上のファイルを書き込みます。次に示すように、UNLOAD は指定された名前のプレフィックスにスライス番号とパート番号を追加します:  
`<object-path>/<name-prefix><slice-number>_part_<part-number>`.   
MANIFEST が指定された場合、マニフェストファイルは次のように書き込まれます:  
`<object_path>/<name_prefix>manifest`.   
PARALLEL が OFF に指定されている場合、データファイルは次のように書き込まれます。  
`<object_path>/<name_prefix><part-number>`.   
UNLOAD は、Amazon S3 サーバー側の暗号化 (SSE) を使用して自動的に暗号化ファイルを作成します。MANIFEST を使用すると、マニフェストファイルも暗号化されます。COPY コマンドは、ロード操作中に自動的にサーバー側で暗号化されたファイルを読み取ります。Amazon S3 コンソールまたは API を使用すると、サーバー側で暗号化されたファイルをバケットから透過的にダウンロードできます。詳細については、「[サーバー側の暗号化を使用したデータの保護](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)」を参照してください。  
REGION は、Amazon S3 バケットが Amazon Redshift データベースと同じ AWS リージョン にない場合に必須です。

*authorization*, \$1  
UNLOAD コマンドには Amazon S3 にデータを書き込むための認可が必要です。UNLOAD コマンドは、COPY コマンドが認可に使用するのと同じパラメータを使用します。詳細については、COPY コマンドの構文リファレンスの「[認可パラメータ](copy-parameters-authorization.md)」を参照してください。

IAM\$1ROLE \$1 default \$1 'arn:aws:iam::*<AWS アカウント-id-1>*:role/*<role-name>*'  <a name="unload-iam"></a>
デフォルトキーワードを使用して、UNLOAD コマンドの実行時にデフォルトとして設定されクラスターに関連付けられた IAM ロールの使用を、Amazon Redshift に指示します。  
クラスターが認証と認可に使用する IAM ロールの Amazon リソースネーム (ARN) を使用します。IAM\$1ROLE を指定すると、ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY、SESSION\$1TOKEN、または CREDENTIALS は使用できません。IAM\$1ROLE は連鎖できます。詳細については、「*Amazon Redshift 管理ガイド*」の「[IAM ロールを連鎖する](https://docs.aws.amazon.com/redshift/latest/mgmt/authorizing-redshift-service.html#authorizing-redshift-service-chaining-roles)」を参照してください。

[ FORMAT [AS] ] CSV \$1 PARQUET \$1 JSON  <a name="unload-csv"></a>
デフォルトの形式を上書きするアンロード形式を指定するキーワード。  
CSV の場合、デフォルトの区切り文字としてカンマ (,) を使用して CSV 形式でテキストファイルをアンロードします。フィールドに区切り文字、二重引用符、改行文字、またはキャリッジリターンが含まれている場合、アンロードしたファイルのフィールドは二重引用符で囲まれます。データフィールド内の二重引用符は、追加の二重引用符でエスケープされます。ゼロ行がアンロードされると、Amazon Redshift は空の Amazon S3 オブジェクトを書き込む可能性があります。  
PARQUET の場合、Apache Parquet バージョン 1.0 形式のファイルにアンロードします。デフォルトでは、各行グループは SNAPPY 圧縮を使用して圧縮されます。Apache Parquet 形式の詳細については、「[Apache Parquet](https://parquet.apache.org/)」を参照してください。  
JSON の場合、各行に JSON オブジェクトが含まれている JSON ファイルにアンロードして、クエリ結果の完全なレコードを表します。Amazon Redshift は、クエリ結果に SUPER 列が含まれている場合に、ネストされた JSON の書き込みをサポートします 有効な JSON オブジェクトを作成するには、クエリ内の各列の名前が一意である必要があります。JSON ファイルでは、ブール値が `t` または `f` としてアンロードされ、NULL 値が `null` としてアンロードされます。ゼロ行がアンロードされると、Amazon Redshift は Amazon S3 オブジェクトを書き込まなくなります。  
キーワード FORMAT および AS はオプションです。CSV では ESCAPE、FIXEDWIDTH、または ADDQUOTES は使用できません。DELIMITER、FIXEDWIDTH、ADDQUOTES、ESCAPE、NULL AS、HEADER、GZIP、BZIP2、ZSTD では、PARQUET を使用できません。ENCRYPTED を使用した PARQUET は、AWS Key Management Serviceキー (SSE-KMS) を使用したサーバー側の暗号化でのみサポートされます。DELIMITER、HEADER、FIXEDWIDTH、ADDQUOTES、ESCAPE、または NULL AS では、JSON を使用できません。

PARTITION BY ( *column\$1name* [, ... ] ) [INCLUDE]  <a name="unload-partitionby"></a>
アンロードオペレーションのパーティションキーを指定します。UNLOAD は、Apache Hive の規則に従って、パーティションキーの値に基づいて、出力ファイルをパーティションフォルダに自動的に分割します。例えば、パーティション year 2019 および month September に属する Parquet ファイルには、次のプレフィックス `s3://amzn-s3-demo-bucket/my_prefix/year=2019/month=September/000.parquet` があります。  
*column\$1name* の値は、アンロードされるクエリ結果の列である必要があります。  
PARTITION BY で INCLUDE オプションを指定すると、アンロードされるファイルからパーティション列が削除されません。  
Amazon Redshift は、PARTITION BY 句で文字列リテラルをサポートしていません。

MANIFEST [ VERBOSE ]  
UNLOAD プロセスによって作成されたデータファイルの詳細を明示的に一覧表示するマニフェストファイルを作成します。マニフェストは、Amazon S3 に書き込まれた各ファイルの URL をリストする、JSON 形式のテキストファイルです。  
MANIFEST が VERBOSE オプションとともに指定されている場合、マニフェストには以下の詳細が含まれます。  
+ 列名とデータ型、および CHAR、VARCHAR、または NUMERIC データ型の場合は各列のディメンション。CHAR および VARCHAR データ型の場合、ディメンションは長さです。DECIMAL または NUMERIC データ型の場合、ディメンションは精度とスケールです。
+ 各ファイルにアンロードされた行数。HEADER オプションが指定されている場合、行数にはヘッダー行が含まれます。
+ アンロードされたすべてのファイルの合計ファイルサイズ、およびすべてのファイルにアンロードされた合計行数。HEADER オプションが指定されている場合、行数にはヘッダー行が含まれます。
+ 作成者。作成者は常に「Amazon Redshift」です。
VERBOSE は、MANIFEST の後にしか指定できません。  
マニフェストファイルは、アンロードファイルと同じ Amazon S3 パスプレフィックスに `<object_path_prefix>manifest` 形式で書き込まれます。例えば、UNLOAD で Amazon S3 パスプレフィックス '`s3://amzn-s3-demo-bucket/venue_`' が指定されている場合、マニフェストファイルの場所は '`s3://amzn-s3-demo-bucket/venue_manifest`' となります。

HEADER  
各出力ファイルの先頭に列名を含むヘッダー行を追加します。CSV、DELIMITER、ADDQUOTES、ESCAPE などのテキスト変換オプションもヘッダー行に適用されます。HEADER は FIXEDWIDTH と併用できません。

DELIMITER AS '*delimiter\$1character*'  
パイプ文字 (\$1)、カンマ (,)、タブ (\$1t) など、出力ファイルのフィールドを区切るために使用する単一の ASCII 文字を指定します。テキストファイルのデフォルトの区切り文字はパイプ文字です。CSV ファイルのデフォルトの区切り文字はコンマ文字です。AS キーワードはオプションです。DELIMITER は FIXEDWIDTH と併用できません。データに区切り文字が含まれている場合、ESCAPE オプションを指定して、区切り文字をエスケープするか、ADDQUOTES を使って、データを二重引用符で囲む必要があります。代替案として、データ内に含まれていない区切り文字を指定します。

FIXEDWIDTH '*fixedwidth\$1spec*'  
区切り文字によって区切られているのではなく、各列の幅が固定長のファイルにデータをアンロードします。*fixedwidth\$1spec* は、列の数と列の幅を指定する文字列です。AS キーワードはオプションです。FIXEDWIDTH はデータを切り捨てないため、UNLOAD ステートメントの各列の指定は、少なくともその列の最長エントリの長さと同じになります。*fixedwidth\$1spec* の形式を次に示します。  

```
'colID1:colWidth1,colID2:colWidth2, ...'
```
FIXEDWIDTH は DELIMITER または HEADER と併用できません。

ENCRYPTED [AUTO]  <a name="unload-parameters-encrypted"></a>
Amazon S3 上の出力ファイルを Amazon S3 サーバー側の暗号化を使用して暗号化するよう指定します。MANIFEST を指定すると、マニフェストファイルも暗号化されます。詳細については、「[暗号化されたデータファイルをアンロードする](t_unloading_encrypted_files.md)」を参照してください。ENCRYPTED パラメータを指定しない場合、UNLOAD は AWS 管理の暗号化キーによる Amazon S3 のサーバー側暗号化 (SSE-S3) 機能を使用して、暗号化されたファイルを自動的に作成します。  
ENCRYPTED を指定すると、AWS KMSキーによるサーバー側の暗号化 (SSE-KMS) 機能を使用して Amazon S3 へのアンロードを実行することも可能です。その場合は、[KMS_KEY_ID](#unload-parameters-kms-key-id)パラメータを使用してキー ID を指定します。[CREDENTIALS パラメータの使用](copy-parameters-authorization.md#copy-credentials) パラメータを KMS\$1KEY\$1ID パラメータと併用することはできません。KMS\$1KEY\$1ID を使用してデータに対して UNLOAD コマンドを実行すると、キーを指定せずに同じデータに対して COPY オペレーションを実行できます。  
ENCRYPTED AUTO が使用されている場合、UNLOAD コマンドは、ターゲット Amazon S3 バケットのプロパティ上にあるデフォルトの AWS KMS 暗号化キーを取得し、Amazon S3 に書き込まれたファイルに対し AWS KMS キーによる暗号化を行います。バケットにデフォルトの AWS KMS 暗号化キーがない場合、UNLOAD は Amazon Redshift サーバー側の暗号化に AWS 管理の暗号化キーを使用 (SSE-S3) して、暗号化されたファイルを自動的に作成します。このオプションは、master\$1symmetric\$1key を含む KMS\$1KEY\$1ID、MASTER\$1SYMMETRIC\$1KEY、または CREDENTIALS では使用できません。

KMS\$1KEY\$1ID '*key-id*'  <a name="unload-parameters-kms-key-id"></a>
Amazon S3 上のデータファイルの暗号化に使用する AWS Key Management Service (AWS KMS) キー の ID を指定します。詳細については、「[AWS Key Management Service とは](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html)」を参照してください。KMS\$1KEY\$1ID を指定する場合、[ENCRYPTED](#unload-parameters-encrypted)パラメータも指定する必要があります。KMS\$1KEY\$1ID を指定する場合、CREDENTIALS パラメータを使用して認証することはできません。代わりに [IAM\$1ROLE パラメータの使用](copy-parameters-authorization.md#copy-iam-role) または [ACCESS\$1KEY\$1ID および SECRET\$1ACCESS\$1KEY パラメータの使用](copy-parameters-authorization.md#copy-access-key-id) のどちらかを使用します。

BZIP2   
スライスごとに、1 つまたは複数の bzip2 圧縮ファイルにデータをアンロードします。生成される各ファイルには、`.bz2`拡張子が付加されます。

GZIP   
スライスごとに、1 つまたは複数の gzip 圧縮ファイルにデータをアンロードします。生成される各ファイルには、`.gz`拡張子が付加されます。

ZSTD   
スライスごとに、1 つまたは複数の Zstandard 圧縮ファイルにデータをアンロードします。生成される各ファイルには、`.zst`拡張子が付加されます。

ADDQUOTES   
アンロードされた各データフィールドは引用符で囲まれるため、Amazon Redshift は区切り文字自体を含んでいるデータ値をアンロードすることができます。例えば、区切りがカンマの場合、次のデータのアンロードと再ロードを完了することができます。  

```
 "1","Hello, World" 
```
追加した引用符がない場合、文字列 `Hello, World` は 2 つの異なるフィールドとして解析されます。  
一部の出力形式は ADDQUOTES をサポートしていません。  
ADDQUOTES を使用した際にデータを再ロードするには、COPY で REMOVEQUOTES を指定する必要があります。

NULL AS '*null-string*'  
アンロードファイル内で NULL 値を表す文字列を指定します。このオプションを使用すると、選択したデータ内で検出された任意の NULL 値の代わりに、指定した文字列がすべての出力ファイルに挿入されます。このオプションを指定しない場合、NULL 値は次のようにアンロードされます。  
+ 区切り文字で区切られた出力に対するゼロ長文字列 
+ 固定幅出力に対するホワイトスペース文字列
固定幅のアンロードに対して NULL 文字列が指定され、出力列の幅が NULL 文字列の幅より小さい場合、次の動作が発生します。  
+ 空のフィールドは非文字列用の出力です。
+ 文字列に対してはエラーがレポートされます。
ユーザー定義の文字列が null 値を表す他のデータ型とは異なり、Amazon Redshift は JSON 形式を使用して SUPER データ列をエクスポートし、JSON 形式で決定されるように null として表します。その結果、SUPER データ列では、UNLOAD コマンドで使用される NULL [AS] オプションを無視します。

ESCAPE   
区切られたアンロードファイル内の CHAR と VARCHAR 列の場合、エスケープ文字 (`\`) が次の文字の前に必ず配置されます。  
+ ラインフィード: `\n`
+ キャリッジリターン: `\r`
+ アンロードデータ用に指定された区切り文字。
+ エスケープ文字: `\`
+ 引用符: `"` または `'` (ESCAPE と ADDQUOTES の両方を UNLOAD コマンドで指定した場合)。
ESCAPE オプションを指定して COPY を使ってデータをロードした場合、UNLOAD コマンドでも ESCAPE オプションを指定して可逆出力ファイルを生成する必要があります。同様に、ESCAPE オプションを使って UNLOAD を実行すると、同じデータを COPY する場合に ESCAPE を使用する必要があります。

ALLOWOVERWRITE   <a name="allowoverwrite"></a>
デフォルトでは、UNLOAD によってファイルの上書きが発生する可能性がある場合、その UNLOAD 操作は失敗します。ALLOWOVERWRITE が指定された場合、UNLOAD によって、マニフェストファイルを含めた既存のファイルが上書きされます。

CLEANPATH  <a name="cleanpath"></a>
CLEANPATH オプションは、TO 句で指定された Amazon S3 パスにある既存のファイルを削除してから、指定した場所にファイルをアンロードします。  
PARTITION BY 句を含めると、既存のファイルはパーティションフォルダからのみ削除され、UNLOAD オペレーションによって生成された新しいファイルを受信します。  
Amazon S3 バケットでの `s3:DeleteObject` 許可が必要です。詳細については、[Amazon Simple Storage Service ユーザーガイド](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-policy-language-overview.html)の *Amazon S3 でのポリシーとアクセス許可*を参照してください。CLEANPATH オプションを使用して削除したファイルは、完全に削除され、復元することはできません。ターゲット Amazon S3 バケットでバージョニングが有効になっている場合、CLEANPATH オプションを使用した UNLOAD では、以前のバージョンのファイルは削除されません。  
ALLOWOVERWRITE オプションを指定した場合、CLEANPATH オプションを指定することはできません。

PARALLEL   <a name="unload-parallel"></a>
デフォルトでは、UNLOAD は、クラスター内のスライスの数に応じて、データを複数のファイルに同時に書き込みます。デフォルトのオプションは ON または TRUE です。PARALLEL が OFF または FALSE の場合、UNLOAD は、ORDER BY 句が使用される場合はそれに従って絶対的にソートされた 1 つ以上のデータファイルに逐次書き込みます。データファイルの最大サイズは 6.2 GB です。したがって、例えば、13.4 GB のデータをアンロードする場合、UNLOAD は以下の 3 つのファイルを作成します。  

```
s3://amzn-s3-demo-bucket/key000    6.2 GB
s3://amzn-s3-demo-bucket/key001    6.2 GB
s3://amzn-s3-demo-bucket/key002    1.0 GB
```
UNLOAD コマンドは、並列処理を使用するように設計されています。特別な理由がなく、特にファイルが COPY コマンドを使用してテーブルをロードするために使用される場合には、PARALLEL を有効にしたままにすることをお勧めします。

MAXFILESIZE [AS] 最大サイズ [ MB \$1 GB ]   <a name="unload-maxfilesize"></a>
UNLOAD によって Amazon S3 で作成されるファイルの最大サイズを指定します。5 MB ～ 6.2 GB の十進値を指定します。AS キーワードはオプションです。デフォルト単位は MB です。MAXFILESIZE を指定しない場合、デフォルトの最大ファイルサイズは 6.2 GB です。マニフェストファイルが使用されている場合、このサイズは MAXFILESIZE に影響されません。

ROWGROUPSIZE [AS] サイズ [MB \$1 GB]   <a name="unload-rowgroupsize"></a>
行グループのサイズを指定します。大きいサイズを選択すると、行グループの数を減らし、ネットワーク通信量を減らすことができます。32 MBから 128 MB の間の整数値を指定します。AS キーワードはオプションです。デフォルト単位は MB です。  
ROWGROUPSIZE が指定されなかった場合、デフォルトのサイズは 32 MB です。このパラメータを使用するには、ストレージ形式が Parquet で、ノードタイプが ra3.4xlarge、ra3.16xlarge、ds2.8xlarge のいずれかである必要があります。

REGION [AS] '*aws-region*'  <a name="unload-region"></a>
ターゲットの Amazon S3 バケットがある AWS リージョン を指定します。Amazon Redshift データベースと同じ AWS リージョン にない Amazon S3 バケットへの UNLOAD には、REGION が必要です。  
*aws\$1region* の値は、「*AWS 全般のリファレンス*」の「[Amazon Redshift のリージョンとエンドポイント](https://docs.aws.amazon.com/general/latest/gr/rande.html#redshift_region)」の表に記載されている AWS リージョンと一致している必要があります。  
デフォルトでは、UNLOAD は、ターゲットの Amazon S3 バケットは、Amazon Redshift データベースと同じ AWS リージョン にあると見なします。

拡張子「*extension-name*」  <a name="unload-extension"></a>
アンロードされたファイルの名前に付加するファイル拡張子を指定します。Amazon Redshift は検証を実行しないため、指定したファイル拡張子が正しいことを確認する必要があります。拡張子を指定せずに圧縮方法を指定した場合、Amazon Redshift は圧縮方法の拡張子のみをファイル名に追加します。拡張子を指定せず、圧縮方法も指定しなかった場合、ファイル名には何も追加されません。

## 使用に関する注意事項
<a name="unload-usage-notes"></a>

### 区切り文字が使われているすべての UNLOAD 操作に対する ESCAPE の使用
<a name="unload-usage-escape"></a>

区切り文字を使用して UNLOAD する場合、データにはその区切り文字、または ESCAPE オプションの説明に一覧表示されている任意の文字を含めることができます。この場合は、UNLOAD ステートメントで ESCAPE オプションを使用する必要があります。UNLOAD コマンドで ESCAPE オプションを使用しない場合、その後のアンロードされたデータを使用する COPY 操作は失敗する可能性があります。

**重要**  
必ず UNLOAD ステートメントと COPY ステートメントの両方で ESCAPE オプションを使用することを強くお勧めします。ただし、データに区切り文字が含まれていないこと、またはエスケープが必要となる可能性のあるその他の文字が含まれていないことが確実である場合は除きます。

### 浮動小数点精度の損失
<a name="unload-usage-floating-point-precision"></a>

アンロードと再ロードを連続して実行した浮動小数点データは精度を失っていることがあります。

### Limit 句
<a name="unload-usage-limit-clause"></a>

SELECT クエリは、外部の SELECT で LIMIT 句を使用することはできません。例えば、次の UNLOAD ステートメントは失敗します。

```
unload ('select * from venue limit 10')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

代わりに、次の例のようにネストした LIMIT 句を使用してください。

```
unload ('select * from venue where venueid in
(select venueid from venue order by venueid desc limit 10)')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

SELECT…INTO を使ってテーブルを入力するか、LIMIT 句を使って CREATE TABLE AS を実行し、そのテーブルからアンロードすることもできます。

### GEOMETRY データ型の列のアップロード
<a name="unload-usage-geometry"></a>

GEOMETRY 列はテキストまたは CSV 形式でのみアップロードできます。`FIXEDWIDTH` オプションを使用して、GEOMETRY データをアップロードすることはできません。データは、16 進数の Extended Well-Known Binary (EWKB) 形式でアップロードされます。EWKB データのサイズが 4 MB 以上の場合、後でテーブルにデータをロードできなくなるため、警告が表示されます。

### HLLSKETCH データ型のアンロード
<a name="unload-usage-hll"></a>

HLLSKETCH 列はテキストまたは CSV 形式でのみアンロードできます。`FIXEDWIDTH` オプションを使用して、HLLSKETCH データをアップロードすることはできません。データは、デンスの HyperLogLog スケッチの場合は Base64 形式、スパースの HyperLogLog スケッチの場合は JSON 形式でアンロードされます。詳細については、「[HyperLogLog 関数](hyperloglog-functions.md)」を参照してください。

次の例では、HLLSKETCH 列を含むテーブルをファイルにエクスポートします。

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

UNLOAD ('select * from hll_table') TO 's3://amzn-s3-demo-bucket/unload/'
IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' NULL AS 'null' ALLOWOVERWRITE CSV;
```

### VARBYTE データ型の列のアンロード
<a name="unload-usage-varbyte"></a>

VARBYTE列はテキストまたは CSV 形式でのみアンロードできます。データは 16 進数形式でアンロードされます。`FIXEDWIDTH` オプションを使用して、VARBYTE データをアンロードすることはできません。CSV に UNLOAD するための `ADDQUOTES` オプションはサポートされていません。VARBYTE 列は、PARTITIONED BY 列にすることはできません。

### FORMAT AS PARQUET 句
<a name="unload-parquet-usage"></a>

FORMAT AS PARQUET を使用する場合は、次の考慮事項に注意してください。
+ [Unload to Parquet (Parquet にアンロード)] では、ファイルレベルの圧縮は使用されません。各行グループは SNAPPY で圧縮されます。
+ MAXFILESIZE を指定しない場合、デフォルトの最大ファイルサイズは 6.2 GB です。MAXFILESIZE を使用して、5 MB～6.2 GB のファイルサイズを指定できます。実際のファイルサイズは、ファイルの書き込み時に概算されるため、指定した数と正確に等しくない場合があります。

  スキャンパフォーマンスを最大化するため、Amazon Redshift はまったく同じサイズの 32 MB の行グループを含む Parquet ファイルの作成を試みます。指定した MAXFILESIZE 値は、32 MB の最も近い倍数に自動的に切り捨てられます。例えば、MAXFILESIZE 200 MB を指定すると、アンロードされた各 Parquet ファイルは約 192 MB になります (32 MB の行グループ x 6 = 192 MB)。
+ 列で TIMESTAMPTZ データ形式が使用されている場合、タイムスタンプ値のみがアンロードされます。タイムゾーン情報はアンロードされません。
+ アンダースコア (\$1) 文字またはピリオド (.) 文字で始まるファイル名プレフィックスを指定しないでください。Redshift Spectrum は、これらの文字で始まるファイルを隠しファイルとして処理し、無視します。

### PARTITION BY 句
<a name="unload-partitionby-usage"></a>

PARTITION BY を使用する場合は、次の考慮事項に注意してください。
+ パーティション列は出力ファイルに含まれていません。
+ 必ず、UNLOAD ステートメントで使用される SELECT クエリにパーティション列を含めてください。UNLOAD コマンドでは、任意の数のパーティション列を指定できます。ただし、ファイルの一部となる非パーティション列が少なくとも 1 つ存在する必要があるという制限があります。
+ パーティションキー値が null の場合、Amazon Redshift はそのデータをデフォルトパーティション (`partition_column=__HIVE_DEFAULT_PARTITION__`) に自動的にアンロードします。
+ UNLOAD コマンドでは、外部カタログへの呼び出しは行われません。新しいパーティションを既存の外部テーブルの一部として登録するには、別個の ALTER TABLE ..。ADD PARTITION ... コマンドを使用します。または、CREATE EXTERNAL TABLE コマンドを実行して、アンロードされたデータを新しい外部テーブルとして登録することもできます。また、AWS Glueクローラを使用して、データカタログにデータを入力することもできます。詳細については、*AWS Glueデベロッパーガイド*の「[クローラの定義](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html)」を参照してください。
+ MANIFEST オプションを使用する場合、Amazon Redshift はルート Amazon S3 フォルダにマニフェストファイルを 1 つだけ生成します。
+ パーティションキーとして使用できる列のデータ型は、SMALLINT、INTEGER、BIGINT、DECIMAL、REAL、BOOLEAN、CHAR、VARCHAR、DATE および TIMESTAMP です。

### ASSUMEROLE 権限を使用して、UNLOAD オペレーションの IAM ロールへのアクセスを許可する
<a name="unload-assumerole-privilege-usage"></a>

特定のユーザーおよびグループに UNLOAD オペレーション用の IAM ロールへのアクセスを提供するために、スーパーユーザーは IAM ロールに対する ASSUMEROLE 権限をユーザーおよびグループに付与できます。詳細については、[GRANT](r_GRANT.md)を参照してください。

### UNLOAD は、Amazon S3 アクセスポイントのエイリアスをサポートしていません
<a name="unload-usage-s3-access-point-alias"></a>

UNLOAD コマンドで、Amazon S3 アクセスポイントのエイリアスを使用することはできません。

## 例
<a name="r_UNLOAD-examples"></a>

UNLOAD コマンドの使用方法の例については、「[UNLOAD の例](r_UNLOAD_command_examples.md)」を参照してください。

# UNLOAD の例
<a name="r_UNLOAD_command_examples"></a>

これらの例は、UNLOAD コマンドのさまざまなパラメータを示しています。多くの例では、TICKIT サンプルデータを使用しています。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

**注記**  
次の例では読みやすくするため、改行しています。*credentials-args* 文字列には改行やスペースを含めないでください。

## パイプ区切りファイルへの VENUE のアンロード (デフォルト区切り文字）
<a name="unload-examples-venue"></a>

次の例は、VENUE テーブルをアンロードし、データを `s3://amzn-s3-demo-bucket/unload/` に書き込みます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

デフォルトでは、UNLOAD はスライスごとに 1 つ以上のファイルを書き込みます。ノードごとに 2 つのスライスを装備した 2 ノードクラスターを想定すると、前の例では `amzn-s3-demo-bucket` に以下のファイルが作成されます。

```
unload/0000_part_00
unload/0001_part_00
unload/0002_part_00
unload/0003_part_00
```

出力ファイルの違いをわかりやすくするため、ロケーションにプレフィックスを含めることができます。次の例は、VENUE テーブルをアンロードし、データを `s3://amzn-s3-demo-bucket/unload/venue_pipe_` に書き込みます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

結果として、`unload`フォルダに以下の 4 つのファイルが生成されます。ここでも 4 つのスライスを想定しています。

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## パーティション化された Parquet ファイルへの LINEITEM テーブルのアンロード
<a name="unload-examples-partitioned-parquet"></a>

次の例では、`l_shipdate`列によって分割された Parquet 形式で LINEITEM テーブルをアンロードします。

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate);
```

4 つのスライスがある場合、生成される Parquet ファイルはさまざまなフォルダに動的に分割されます。

```
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-02/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-03/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
s3://amzn-s3-demo-bucket/lineitem/l_shipdate=1992-01-04/0000_part_00.parquet
                                             0001_part_00.parquet
                                             0002_part_00.parquet
                                             0003_part_00.parquet
...
```

**注記**  
場合によっては、次の SQL ステートメントに示すように、UNLOAD コマンドで INCLUDE オプションを使用します。  

```
unload ('select * from lineitem')
to 's3://amzn-s3-demo-bucket/lineitem/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
PARQUET
PARTITION BY (l_shipdate) INCLUDE;
```
この場合、`l_shipdate`列は Parquet ファイルのデータにも含まれます。INCLUDE オプションを使用しない場合、`l_shipdate`列のデータは Parquet ファイルに含まれません。

## VENUE テーブルを JSON ファイルにアンロードする
<a name="unload-examples-json"></a>

次の例は、VENUE テーブルをアンロードし、そのデータを JSON 形式で `s3://amzn-s3-demo-bucket/unload/` に書き込みます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
JSON;
```

VENUE テーブルのサンプル行を次に示します。

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

JSON へのアンロード後、ファイルの形式は次のようになります。

```
{"venueid":1,"venuename":"Pinewood Racetrack","venuecity":"Akron","venuestate":"OH","venueseats":0}
{"venueid":2,"venuename":"Columbus \"Crew\" Stadium ","venuecity":"Columbus","venuestate":"OH","venueseats":0}
{"venueid":4,"venuename":"Community, Ballpark, Arena","venuecity":"Kansas City","venuestate":"KS","venueseats":0}
```

## CSV ファイルへの VENUE のアップロード
<a name="unload-examples-csv"></a>

次の例は、VENUE テーブルをアンロードし、データを CSV 形式で `s3://amzn-s3-demo-bucket/unload/` に書き込みます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV;
```

VENUE テーブルに次の行が含まれているとします。

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-----------
      1 | Pinewood Racetrack         | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

アンロードしたファイルは次のようになります。

```
1,Pinewood Racetrack,Akron,OH,0
2,"Columbus ""Crew"" Stadium",Columbus,OH,0
4,"Community, Ballpark, Arena",Kansas City,KS,0
```

## 区切り文字を使用した CSV ファイルへの VENUE のアンロード
<a name="unload-examples-csv-delimiter"></a>

次の例では、パイプ文字 (\$1) を区切り文字として使用して VENUE テーブルをアンロードし、データを CSV 形式で書き込みます。アンロードしたファイルは、`s3://amzn-s3-demo-bucket/unload/`に書き込まれます。この例の VENUE テーブルには、最初の行 (`Pinewood Race|track`) の値にパイプ文字が含まれています。これは、結果の値が二重引用符で囲まれることを示すためにそうされています。二重引用符がある場合は二重引用符でエスケープされ、フィールド全体が二重引用符で囲まれます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
CSV DELIMITER AS '|';
```

VENUE テーブルに次の行が含まれているとします。

```
venueid | venuename                  | venuecity       | venuestate | venueseats
--------+----------------------------+-----------------+------------+-------------
      1 | Pinewood Race|track        | Akron           | OH         | 0
      2 | Columbus "Crew" Stadium    | Columbus        | OH         | 0
      4 | Community, Ballpark, Arena | Kansas City     | KS         | 0
```

アンロードしたファイルは次のようになります。

```
1|"Pinewood Race|track"|Akron|OH|0
2|"Columbus ""Crew"" Stadium"|Columbus|OH|0
4|Community, Ballpark, Arena|Kansas City|KS|0
```

## マニフェストファイルを使用した VENUE のアンロード
<a name="unload-examples-manifest"></a>

マニフェストファイルを作成するには、MANIFEST オプションを指定します。次の例では、VENUE テーブルをアンロードし、データファイルとともにマニフェストファイルを s3://amzn-s3-demo-bucket/venue\$1pipe\$1 に書き込みます。

**重要**  
MANIFEST オプションを指定してファイルをアンロードする場合、そのファイルをロードするときに COPY コマンドで MANIFEST オプションを使用する必要があります。同じプレフィックスを使用してファイルをロードし、MANIFEST オプションを指定しない場合、COPY ではマニフェストファイルがデータファイルであると推測され、操作が失敗します。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

結果は次の 5 ファイルです。

```
s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00
s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00
s3://amzn-s3-demo-bucket/venue_pipe_manifest
```

マニフェストファイルの内容を次に示します。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0000_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0001_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0002_part_00"},
    {"url":"s3://amzn-s3-demo-bucket/tickit/venue_0003_part_00"}
  ]
}
```

## MANIFEST VERBOSE を使用した VENUE のアンロード
<a name="unload-examples-manifest-verbose"></a>

MANIFEST VERBOSE オプションを指定すると、マニフェストファイルに以下のセクションが含まれます。
+ `entries` セクションには、各ファイルの Amazon S3 パス、ファイルサイズ、および行数が一覧表示されます。
+ `schema` セクションには、列名、データ型、および各列のディメンションが一覧表示されます。
+ `meta` セクションには、すべてのファイルの合計ファイルサイズと行数が表示されます。

次の例では、MANIFEST VERBOSE オプションを使用して VENUE テーブルをアンロードします。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload_venue_folder/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest verbose;
```

マニフェストファイルの内容を次に示します。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0000_part_00", "meta": { "content_length": 32295, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0001_part_00", "meta": { "content_length": 32771, "record_count": 20 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0002_part_00", "meta": { "content_length": 32302, "record_count": 10 }},
    {"url":"s3://amzn-s3-demo-bucket/venue_pipe_0003_part_00", "meta": { "content_length": 31810, "record_count": 15 }}
  ],
  "schema": {
    "elements": [
      {"name": "venueid", "type": { "base": "integer" }},
      {"name": "venuename", "type": { "base": "character varying", 25 }},
      {"name": "venuecity", "type": { "base": "character varying", 25 }},
      {"name": "venuestate", "type": { "base": "character varying", 25 }},
      {"name": "venueseats", "type": { "base": "character varying", 25 }}
    ]
  },
  "meta": {
    "content_length": 129178,
    "record_count": 55
  },
  "author": {
    "name": "Amazon Redshift",
    "version": "1.0.0"
  }
}
```

## ヘッダーを使用した VENUE のアンロード
<a name="unload-examples-header"></a>

次の例では、ヘッダー行を指定して VENUE をアンロードします。

```
unload ('select * from venue where venueseats > 75000')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
header
parallel off;
```

以下に、出力ファイルの内容とヘッダー行を示します。

```
venueid|venuename|venuecity|venuestate|venueseats
6|New York Giants Stadium|East Rutherford|NJ|80242
78|INVESCO Field|Denver|CO|76125
83|FedExField|Landover|MD|91704
79|Arrowhead Stadium|Kansas City|MO|79451
```

## より小さいファイルへの VENUE のアンロード
<a name="unload-examples-maxfilesize"></a>

デフォルトでは、最大のファイルサイズは 6.2 GB です。アンロードするデータが 6.2 GB より大きい場合、UNLOAD は 6.2 GB のデータセグメントごとに新しいファイルを作成します。より小さなファイルを作成するには、MAXFILESIZE パラメータを含めます。前の例のデータのサイズを 20 GB とすると、次の UNLOAD コマンドは 各 1 GB サイズの 20 ファイルを作成します。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
maxfilesize 1 gb;
```

## VENUE の逐次アンロード
<a name="unload-examples-serial"></a>

逐次アンロードを行うには、PARALLEL を OFF にします。これにより、UNLOAD が一度に書き込むファイルの数は 1 つになります (ファイルにつき最大で 6.2 GB まで)。

次の例は、VENUE テーブルをアンロードし、データを `s3://amzn-s3-demo-bucket/unload/` に逐次書き込みます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off;
```

結果として、venue\$1serial\$1000 という名前のファイルが 1 つ生成されます。

アンロードするデータが 6.2 GB より大きい場合、UNLOAD は 6.2 GB のデータセグメントごとに新しいファイルを作成します。次の例は、LINEORDER テーブルをアンロードし、データを `s3://amzn-s3-demo-bucket/unload/` に逐次書き込みます。

```
unload ('select * from lineorder')
to 's3://amzn-s3-demo-bucket/unload/lineorder_serial_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
parallel off gzip;
```

結果として、以下の一連のファイルが生成されます。

```
lineorder_serial_0000.gz
lineorder_serial_0001.gz
lineorder_serial_0002.gz
lineorder_serial_0003.gz
```

出力ファイルの違いをわかりやすくするため、ロケーションにプレフィックスを含めることができます。次の例は、VENUE テーブルをアンロードし、データを `s3://amzn-s3-demo-bucket/venue_pipe_` に書き込みます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/unload/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

結果として、`unload`フォルダに以下の 4 つのファイルが生成されます。ここでも 4 つのスライスを想定しています。

```
venue_pipe_0000_part_00
venue_pipe_0001_part_00
venue_pipe_0002_part_00
venue_pipe_0003_part_00
```

## アンロードファイルからの VENUE のロード
<a name="unload-examples-load"></a>

一連のアンロードファイルからテーブルをロードするには、COPY コマンドを使用して単純にプロセスを逆順で実行します。次の例では、新しいテーブル LOADVENUE を作成し、前の例で作成したデータファイルからテーブルをロードします。

```
create table loadvenue (like venue);

copy loadvenue from 's3://amzn-s3-demo-bucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

アンロードファイルとともにマニフェストファイルを作成するときに MANIFEST オプションを使用した場合は、同じマニフェストファイルを使用してデータをロードできます。これには、COPY コマンドで MANIFEST オプションを指定します。次の例では、マニフェストファイルを使用してデータをロードします。

```
copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_pipe_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest;
```

## 暗号化ファイルへの VENUE のアンロード
<a name="unload-examples-unload-encrypted"></a>

次の例では、AWS KMSキーを使用して、VENUE テーブルが一連の暗号化ファイルにアンロードされます。ENCRYPTED オプションでマニフェストファイルを指定すると、マニフェストファイルも暗号化されます。詳細については、「[暗号化されたデータファイルをアンロードする](t_unloading_encrypted_files.md)」を参照してください。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_kms'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
kms_key_id '1234abcd-12ab-34cd-56ef-1234567890ab'
manifest
encrypted;
```

次の例では、ルート対称キーを使用して VENUE テーブルを一連の暗号化ファイルにアンロードします。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_encrypt_cmk'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
encrypted;
```

## 暗号化ファイルからの VENUE のロード
<a name="unload-examples-load-encrypted"></a>

UNLOAD を ENCRYPT オプションとともに使用して作成された一連のファイルからテーブルをロードするには、COPY コマンドを使用してプロセスを逆順で実行します。同時にこのコマンドでは、ENCRYPTED オプションを使用ながら、UNLOAD コマンドに使用されたものと同じルート対称キーを指定します。次の例では、前の例で作成した暗号化されたデータファイルから LOADVENUE テーブルをロードします。

```
create table loadvenue (like venue);

copy loadvenue
from 's3://amzn-s3-demo-bucket/venue_encrypt_manifest'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
master_symmetric_key 'EXAMPLEMASTERKEYtkbjk/OpCwtYSx/M4/t7DMCDIK722'
manifest
encrypted;
```

## タブ区切りファイルへの VENUE データのアンロード
<a name="unload-examples-venue-tab"></a>

```
unload ('select venueid, venuename, venueseats from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t';
```

出力データファイルは次のようになります。

```
1	Toyota Park	Bridgeview	IL	0
2	Columbus Crew Stadium	Columbus	OH	0
3	RFK Stadium	Washington	DC	0
4	CommunityAmerica Ballpark	Kansas City	KS	0
5	Gillette Stadium	Foxborough	MA	68756
...
```

## 固定幅のデータファイルへの VENUE のアンロード
<a name="unload-venue-fixed-width"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_fw_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
fixedwidth as 'venueid:3,venuename:39,venuecity:16,venuestate:2,venueseats:6';
```

出力データファイルは次のようになります。

```
1  Toyota Park              Bridgeview  IL0
2  Columbus Crew Stadium    Columbus    OH0
3  RFK Stadium              Washington  DC0
4  CommunityAmerica BallparkKansas City KS0
5  Gillette Stadium         Foxborough  MA68756
...
```

## VENUE を一連のタブ区切り GZIP 圧縮ファイルにアンロードします。
<a name="unload-examples-venue-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter as '\t'
gzip;
```

## VENUE を GZIP 圧縮テキストファイルにアンロードする
<a name="unload-examples-venue-extension-gzip"></a>

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_tab_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
extension 'txt.gz'
gzip;
```

## 区切り文字を含むデータのアンロード
<a name="unload-examples-delimiter"></a>

この例では、ADDQUOTES オプションを使って、実際の一部のデータフィールドにカンマが含まれているカンマ区切りデータをアンロードします。

最初に引用符を含むテーブルを作成します。

```
create table location (id int, location char(64));

insert into location values (1,'Phoenix, AZ'),(2,'San Diego, CA'),(3,'Chicago, IL');
```

次に ADDQUOTES オプションを使って、データをアンロードします。

```
unload ('select id, location from location')
to 's3://amzn-s3-demo-bucket/location_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
delimiter ',' addquotes;
```

アンロードされたデータファイルは次のようになります。

```
1,"Phoenix, AZ"
2,"San Diego, CA"
3,"Chicago, IL"
...
```

## 結合クエリの結果のアンロード
<a name="unload-examples-join"></a>

次の例では、ウィンドウ関数を含む結合クエリの結果をアンロードします。

```
unload ('select venuecity, venuestate, caldate, pricepaid,
sum(pricepaid) over(partition by venuecity, venuestate
order by caldate rows between 3 preceding and 3 following) as winsum
from sales join date on sales.dateid=date.dateid
join event on event.eventid=sales.eventid
join venue on event.venueid=venue.venueid
order by 1,2')
to 's3://amzn-s3-demo-bucket/tickit/winsum'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

出力ファイルは次のようになります。

```
Atlanta|GA|2008-01-04|363.00|1362.00
Atlanta|GA|2008-01-05|233.00|2030.00
Atlanta|GA|2008-01-06|310.00|3135.00
Atlanta|GA|2008-01-08|166.00|8338.00
Atlanta|GA|2008-01-11|268.00|7630.00
...
```

## NULL AS を使用したアンロード
<a name="unload-examples-null-as"></a>

UNLOAD では、デフォルトで空の文字列として Null 値を出力します。以下の例では、NULL AS を使用して Null のテキスト文字列を置換する方法を示します。

これらの例では、VENUE テーブルにいくつかの Null 値を追加します。

```
update venue set venuestate = NULL
where venuecity = 'Cleveland';
```

VENUESTATE が Null である VENUE から選択して、列に Null が格納されていることを確認します。

```
select * from venue where venuestate is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
```

次に、VENUE テーブルに対して NULL AS オプションを指定して UNLOAD を実行し、Null 値をキャラクタ文字列 '`fred`' で置き換えます。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

次のアンロードファイルの例は、Null 値が `fred` で置き換えられたことを示しています。この場合、VENUESEATS の値の一部も Null であったため、`fred`で置き換えられたことが分かります。VENUESEATS のデータ型が整数であっても、UNLOAD によってアンロードファイルの値がテキストに変換され、さらに COPY によって再び整数に戻されます。固定幅ファイルにアンロードする場合、NULL AS の文字列をフィールド幅以下にする必要があります。

```
248|Charles Playhouse|Boston|MA|0
251|Paris Hotel|Las Vegas|NV|fred
258|Tropicana Hotel|Las Vegas|NV|fred
300|Kennedy Center Opera House|Washington|DC|0
306|Lyric Opera House|Baltimore|MD|0
308|Metropolitan Opera|New York City|NY|0
  5|Gillette Stadium|Foxborough|MA|5
 22|Quicken Loans Arena|Cleveland|fred|0
101|Progressive Field|Cleveland|fred|43345
...
```

アンロードファイルからテーブルをロードするには、COPY コマンドで同じ NULL AS オプションを指定します。

**注記**  
NOT NULL として定義された列に Null のロードを試みた場合、COPY コマンドは失敗します。

```
create table loadvenuenulls (like venue);

copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
null as 'fred';
```

列に単なる空の文字列ではなく Null が含まれていることを確認するには、LOADVENUENULLS から選択して Null でフィルタリングします。

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |

...
```

Null を含むテーブルに対してデフォルトの NULL AS の動作を使用して UNLOAD を実行し、次にデフォルトの NULL AS の動作を使用して COPY を実行してデータをテーブルに戻すことができます。ただし、ターゲットテーブルの数値以外のフィールドには、Null ではなく空の文字列が格納されます。デフォルトでは、UNLOAD によって Null が空の文字列 (空白またはゼロ長) に変換されます。COPY によって、数値列では空の文字列が Null に変換されますが、数値以外の列には空の文字列が挿入されます。次の例では、デフォルトの NULL AS 動作を使用して UNLOAD の後で COPY を実行する方法を示します。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';
```

この場合、Null でフィルタリングすると、VENUESEATS に Null が含まれていた行のみが表示されます。テーブル (VENUE) で VENUESTATE に Null が含まれていた場合、ターゲットテーブル (LOADVENUENULLS) の VENUESTATE には空の文字列が格納されます。

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
     251 | Paris Hotel              | Las Vegas | NV         |
...
```

数値以外の列に空の文字列を Null としてロードするには、EMPTYASNULL オプションまたは BLANKSASNULL オプションを含めます。両方を組み合わせて使用しても問題ありません。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' allowoverwrite;

truncate loadvenuenulls;
copy loadvenuenulls from 's3://amzn-s3-demo-bucket/nulls/'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' EMPTYASNULL;
```

列に単なる空白または空の文字列ではなく Null が含まれていることを確認するには、LOADVENUENULLS でその列を選択して、Null によるフィルタリングを行います。

```
select * from loadvenuenulls where venuestate is null or venueseats is null;

 venueid |        venuename         | venuecity | venuestate | venueseats
---------+--------------------------+-----------+------------+------------
      72 | Cleveland Browns Stadium | Cleveland |            |      73200
     253 | Mirage Hotel             | Las Vegas | NV         |
     255 | Venetian Hotel           | Las Vegas | NV         |
      22 | Quicken Loans Arena      | Cleveland |            |          0
     101 | Progressive Field        | Cleveland |            |      43345
     251 | Paris Hotel              | Las Vegas | NV         |
     ...
```

## ALLOWOVERWRITE パラメータを使用してアンロード
<a name="unload-examples-allowoverwrite"></a>

デフォルトでは、UNLOAD は送り先バケットの既存のファイルを上書きしません。例えば、送り先バケット内のファイルを変更せずに、同じ UNLOAD ステートメントを 2 回実行すると、2 回目の UNLOAD は失敗します。マニフェストファイルを含めて既存のファイルを上書きするには、ALLOWOVERWRITE オプションを指定します。

```
unload ('select * from venue')
to 's3://amzn-s3-demo-bucket/venue_pipe_'
iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole'
manifest allowoverwrite;
```

## PARALLEL パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロード
<a name="unload-examples-manifest-parallel"></a>

テーブルを並行して UNLOAD し、マニフェストファイルを生成できます。Amazon S3 データファイルはすべて同じレベルで作成され、名前の末尾にパターン `0000_part_00` が付きます。マニフェストファイルはデータファイルと同じフォルダレベルにあり、末尾にテキスト `manifest` が付きます。次の SQL は EVENT テーブルをアンロードし、ベース名 `parallel` でファイルを作成します。

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/parallel'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel on
manifest;
```

Amazon S3 ファイルのリストは次のようになります。

```
 Name                       Last modified                        Size                  
 parallel0000_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB  
 parallel0001_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0002_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 52.1 KB
 parallel0003_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 51.1 KB
 parallel0004_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.6 KB
 parallel0005_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 53.4 KB
 parallel0006_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 54.1 KB
 parallel0007_part_00	-   August 2, 2023, 14:54:39 (UTC-07:00) 55.9 KB
 parallelmanifest       -   August 2, 2023, 14:54:39 (UTC-07:00) 886.0 B
```

`parallelmanifest` ファイルの内容は次のようになります。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/parallel0000_part_00", "meta": { "content_length": 53316 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0001_part_00", "meta": { "content_length": 54704 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0002_part_00", "meta": { "content_length": 53326 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0003_part_00", "meta": { "content_length": 52356 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0004_part_00", "meta": { "content_length": 55933 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0005_part_00", "meta": { "content_length": 54648 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0006_part_00", "meta": { "content_length": 55436 }},
    {"url":"s3://amzn-s3-demo-bucket/parallel0007_part_00", "meta": { "content_length": 57272 }}
  ]
}
```

## PARALLEL OFF パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロード
<a name="unload-examples-manifest-serial"></a>

テーブルを順番にアンロード (PARALLEL OFF) して、マニフェストファイルを生成できます。Amazon S3 データファイルはすべて同じレベルで作成され、名前の末尾にパターン `0000` が付きます。マニフェストファイルはデータファイルと同じフォルダレベルにあり、末尾にテキスト `manifest` が付きます。

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/serial'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
parallel off
manifest;
```

Amazon S3 ファイルのリストは次のようになります。

```
 Name                       Last modified                        Size                  
 serial0000             -   August 2, 2023, 15:54:39 (UTC-07:00) 426.7 KB  
 serialmanifest         -   August 2, 2023, 15:54:39 (UTC-07:00) 120.0 B
```

`serialmanifest` ファイルの内容は、次のようになります。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/serial000", "meta": { "content_length": 436991 }}
  ]
}
```

## PARTITION BY パラメータと MANIFEST パラメータを使用して EVENT テーブルをアンロード
<a name="unload-examples-manifest-partition"></a>

テーブルをパーティションごとにアンロードし、マニフェストファイルを生成できます。Amazon S3 に、子パーティションフォルダを含む新しいフォルダが作成され、子フォルダ内のデータファイルは `0000_par_00` のような名前パターンで作成されます。マニフェストファイルは、`manifest` という名前の付いた子フォルダと同じフォルダレベルにあります。

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/partition'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
partition by (eventname)
manifest;
```

Amazon S3 ファイルのリストは次のようになります。

```
 Name                   Type     Last modified                        Size                  
 partition           	Folder
```

`partition` フォルダ内には、パーティション名が付いた子フォルダとマニフェストファイルがあります。次に示すのは、`partition` フォルダ内のフォルダリストの最下部であり、次のようになります。

```
 Name                   Type      Last modified                        Size                  
 ...
 eventname=Zucchero/    Folder 
 eventname=Zumanity/    Folder 
 eventname=ZZ Top/      Folder  
 manifest          	    -	    August 2, 2023, 15:54:39 (UTC-07:00) 467.6 KB
```

`eventname=Zucchero/` フォルダには、次のようなデータファイルがあります。

```
 Name               Last modified                        Size                  
 0000_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 70.0 B
 0001_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 106.0 B
 0002_part_00	-   August 2, 2023, 15:59:15 (UTC-07:00) 70.0 B
 0004_part_00	-   August 2, 2023, 15:59:17 (UTC-07:00) 141.0 B
 0006_part_00	-   August 2, 2023, 15:59:16 (UTC-07:00) 35.0 B
 0007_part_00	-   August 2, 2023, 15:59:19 (UTC-07:00) 108.0 B
```

`manifest` ファイルの内容の最下部は次のようになります。

```
{
  "entries": [
    ...
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zucchero/007_part_00", "meta": { "content_length": 108 }},
    {"url":"s3://amzn-s3-demo-bucket/partition/eventname=Zumanity/007_part_00", "meta": { "content_length": 72 }}
  ]
}
```

## MAXFILESIZE、ROWGROUPSIZE、MANIFEST の各パラメータを使用して EVENT テーブルをアンロード
<a name="unload-examples-manifest-maxsize"></a>

テーブルを並行して UNLOAD し、マニフェストファイルを生成できます。Amazon S3 データファイルはすべて同じレベルで作成され、名前の末尾にパターン `0000_part_00` が付きます。生成される Parquet データファイルは 256 MB、行グループのサイズは 128 MB に制限されています。マニフェストファイルはデータファイルと同じフォルダレベルにあり、末尾に `manifest` が付きます。

```
unload ('select * from mytickit1.event')
to 's3://amzn-s3-demo-bucket/eventsize'
iam_role 'arn:aws:iam::123456789012:role/MyRedshiftRole'
maxfilesize 256 MB
rowgroupsize 128 MB
parallel on
parquet
manifest;
```

Amazon S3 ファイルのリストは次のようになります。

```
 Name                            Type      Last modified                        Size 
 eventsize0000_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.5 KB
 eventsize0001_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0002_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.4 KB
 eventsize0003_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.0 KB
 eventsize0004_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.3 KB
 eventsize0005_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 24.8 KB
 eventsize0006_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.0 KB
 eventsize0007_part_00.parquet	parquet	August 2, 2023, 17:35:21 (UTC-07:00) 25.6 KB
 eventsizemanifest                 -       August 2, 2023, 17:35:21 (UTC-07:00) 958.0 B
```

`eventsizemanifest` ファイルの内容は次のようになります。

```
{
  "entries": [
    {"url":"s3://amzn-s3-demo-bucket/eventsize0000_part_00.parquet", "meta": { "content_length": 25130 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0001_part_00.parquet", "meta": { "content_length": 25428 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0002_part_00.parquet", "meta": { "content_length": 25025 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0003_part_00.parquet", "meta": { "content_length": 24554 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0004_part_00.parquet", "meta": { "content_length": 25918 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0005_part_00.parquet", "meta": { "content_length": 25362 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0006_part_00.parquet", "meta": { "content_length": 25647 }},
    {"url":"s3://amzn-s3-demo-bucket/eventsize0007_part_00.parquet", "meta": { "content_length": 26256 }}
  ]
}
```

# UPDATE
<a name="r_UPDATE"></a>

**Topics**
+ [構文](#r_UPDATE-synopsis)
+ [パラメータ](#r_UPDATE-parameters)
+ [使用に関する注意事項](#r_UPDATE_usage_notes)
+ [UPDATE ステートメントの例](c_Examples_of_UPDATE_statements.md)

条件が満たされた場合、1 つまたは複数のテーブル列の値を更新します。

**注記**  
単一 SQL ステートメントの最大サイズは 16 MB です。

## 構文
<a name="r_UPDATE-synopsis"></a>

```
[ WITH [RECURSIVE] common_table_expression [, common_table_expression , ...] ]
            UPDATE table_name [ [ AS ] alias ] SET column = { expression | DEFAULT } [,...]

[ FROM fromlist ]
[ WHERE condition ]
```

## パラメータ
<a name="r_UPDATE-parameters"></a>

WITH 句  
1 つ以上の *common-table-expressions* を指定する任意の句。「[WITH 句](r_WITH_clause.md)」を参照してください。

 *table\$1name*   
一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルに関する UPDATE 権限を持っているユーザーだけが行を更新できます。FROM 句を使用したり、式または条件でテーブルを選択する場合、そのテーブルに関する SELECT 権限を所有している必要があります。ここではテーブルにエイリアスを指定することはできません。ただし、FROM 句内でエイリアスを指定することはできます。  
Amazon Redshift Spectrum の外部テーブルは読み込み専用です。外部テーブルを UPDATE することはできません。

alias  
ターゲットテーブルの一時的な代替名。エイリアスはオプションです。AS キーワードは常にオプションです。

SET *column* =   
修正する 1 つまたは複数の列。一覧表示されていない列は現在の値を保持します。ターゲット列の仕様にテーブル名を含めないでください。たとえば、`UPDATE tab SET tab.col = 1`は無効です。

 *expression*   
指定された列の新しい値を定義する式。

DEFAULT   
CREATE TABLE ステートメントで列に割り当てられたデフォルト値を使って、列を更新します。

FROM *tablelist*   
他のテーブルの情報を参照することで、テーブルを更新できます。FROM 句の他のテーブルを一覧表示するか、WHERE 条件の一部としてサブクエリを使用します。FROM 句で一覧表示されているテーブルには、エイリアスを設定することができます。リスト内に UPDATE ステートメントのターゲットテーブルを含める必要がある場合は、エイリアスを使用します。

WHERE *condition*   
条件と一致する行への更新を制限するオプション句。条件が `true` を返した場合、指定された SET 列が更新されます。条件は列に関するシンプルな述語の場合もあれば、サブクエリの結果に基づく条件の場合もあります。  
UPDATE のターゲットテーブルなど、サブクエリ内の任意のテーブルを指定できます。

## 使用に関する注意事項
<a name="r_UPDATE_usage_notes"></a>

テーブル内の多数の行を更新した後: 
+ ストレージ容量を再利用し、行を再ソートするため、テーブルにバキューム処理を実行します。
+ テーブルを分析して、クエリプランナーの統計情報を更新します。

Left、right、および full 外部結合は、UPDATE ステートメントの FROM 句ではサポートされず、以下のエラーを返します。

```
ERROR: Target table must be part of an equijoin predicate
```

 外部結合を指定する必要がある場合は、UPDATE ステートメントの WHERE 句でサブクエリを使用します。

UPDATE ステートメントでターゲットテーブルへの自己結合が必要な場合、更新操作の対象となる行を限定する WHERE 句の基準だけでなく、結合条件も指定する必要があります。一般的に、ターゲットテーブルを自分または他のテーブルに結合する場合のベストプラクティスは、アップデータ対象の行を限定する基準と、結合条件を明確に分離するサブクエリを使用することです。

行ごとに複数の一致がある UPDATE クエリは、構成パラメータ `error_on_nondeterministic_update` が *true* に設定されている場合にエラーをスローします。詳細については、「[error\$1on\$1nondeterministic\$1update](r_error_on_nondeterministic_update.md)」を参照してください。

GENERATED BY DEFAULT AS IDENTITY 列を更新できます。GENERATED BY DEFAULT AS IDENTITY として定義された列は、指定した値で更新できます。詳細については、「[GENERATED BY DEFAULT AS IDENTITY](r_CREATE_TABLE_NEW.md#identity-generated-bydefault-clause)」を参照してください。

# UPDATE ステートメントの例
<a name="c_Examples_of_UPDATE_statements"></a>

次の例で使用されるテーブルの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

TICKIT データベースの CATEGORY テーブルには、次の行が含まれています。

```
+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 5     | Sports   | MLS       | Major League Soccer                        |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 1     | Sports   | MLB       | Major League Baseball                      |
| 6     | Shows    | Musicals  | Musical theatre                            |
| 3     | Sports   | NFL       | National Football League                   |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 2     | Sports   | NHL       | National Hockey League                     |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 4     | Sports   | NBA       | National Basketball Association            |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
+-------+----------+-----------+--------------------------------------------+
```

 **値の範囲に基づくテーブルの更新** 

CATID 列の値の範囲に基づいて、CATGROUP 列を更新します。

```
UPDATE category
SET catgroup='Theatre'
WHERE catid BETWEEN 6 AND 8;

SELECT * FROM category
WHERE catid BETWEEN 6 AND 8;

+-------+----------+----------+---------------------------+
| catid | catgroup | catname  |          catdesc          |
+-------+----------+----------+---------------------------+
| 6     | Theatre  | Musicals | Musical theatre           |
| 7     | Theatre  | Plays    | All non-musical theatre   |
| 8     | Theatre  | Opera    | All opera and light opera |
+-------+----------+----------+---------------------------+
```

 **現在の値に基づくテーブルの更新** 

CATNAME 列および CATDESC 列を現在の CATGROUP 値に基づいて更新します。

```
UPDATE category
SET catdesc=default, catname='Shows'
WHERE catgroup='Theatre';

SELECT * FROM category
WHERE catname='Shows';

+-------+----------+---------+---------+
| catid | catgroup | catname | catdesc |
+-------+----------+---------+---------+
| 6     | Theatre  | Shows   | NULL    |
| 7     | Theatre  | Shows   | NULL    |
| 8     | Theatre  | Shows   | NULL    |
+-------+----------+---------+---------+)
```

この場合、テーブルが作成されたときにデフォルト値が定義されなかったため、CATDESC 列は null に設定されています。

次のコマンドを実行して、CATEGORY テーブルのデータを元の値に設定し直します。

```
TRUNCATE category;

COPY category
FROM 's3://redshift-downloads/tickit/category_pipe.txt' 
DELIMITER '|' 
IGNOREHEADER 1 
REGION 'us-east-1'
IAM_ROLE default;
```

 **WHERE 句のサブクエリの結果に基づく、テーブルの更新** 

WHERE 句のサブクエリの結果に基づいて、CATEGORY テーブルを更新します。

```
UPDATE category
SET catdesc='Broadway Musical'
WHERE category.catid IN
(SELECT category.catid FROM category
JOIN event ON category.catid = event.catid
JOIN venue ON venue.venueid = event.venueid
JOIN sales ON sales.eventid = event.eventid
WHERE venuecity='New York City' AND catname='Musicals');
```

更新したテーブルを表示します。

```
SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 6     | Shows    | Musicals  | Broadway Musical                           |
| 7     | Shows    | Plays     | All non-musical theatre                    |
| 8     | Shows    | Opera     | All opera and light opera                  |
| 9     | Concerts | Pop       | All rock and pop music concerts            |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
+-------+----------+-----------+--------------------------------------------+
```

 **WITH 句のサブクエリの結果に基づくテーブルの更新** 

WITH 句を使用するサブクエリの結果に基づいて CATEGORY テーブルを更新するには、次の例を使用します。

```
WITH u1 as (SELECT catid FROM event ORDER BY catid DESC LIMIT 1) 
UPDATE category SET catid='200' FROM u1 WHERE u1.catid=category.catid;

SELECT * FROM category ORDER BY catid DESC LIMIT 1;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 200   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

## 結合条件の結果に基づく、テーブルの更新
<a name="c_Examples_of_UPDATE_statements-updating-a-table-based-on-the-result-of-a-join-condition"></a>

EVENT テーブルで一致する CATID 行 に基づいて、CATEGORY テーブルの元の 11 行を更新します。

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid;

SELECT * FROM category ORDER BY catid;

+-------+----------+-----------+--------------------------------------------+
| catid | catgroup |  catname  |                  catdesc                   |
+-------+----------+-----------+--------------------------------------------+
| 2     | Sports   | NHL       | National Hockey League                     |
| 3     | Sports   | NFL       | National Football League                   |
| 4     | Sports   | NBA       | National Basketball Association            |
| 5     | Sports   | MLS       | Major League Soccer                        |
| 10    | Concerts | Jazz      | All jazz singers and bands                 |
| 11    | Concerts | Classical | All symphony, concerto, and choir concerts |
| 100   | Concerts | Pop       | All rock and pop music concerts            |
| 100   | Shows    | Plays     | All non-musical theatre                    |
| 100   | Shows    | Opera     | All opera and light opera                  |
| 100   | Shows    | Musicals  | Broadway Musical                           |
+-------+----------+-----------+--------------------------------------------+
```

 EVENT テーブルは FROM 句にリストされ、ターゲットテーブルへの結合条件は WHERE 句で定義されていることに注意してください。更新用に限定される行は 4 行だけです。これらの 4 行は、CATID 値が元々 6、7、8、および 9 だった行です。この 4 つのカテゴリだけが、EVENT テーブル内で表現されます。

```
SELECT DISTINCT catid FROM event;

+-------+
| catid |
+-------+
| 6     |
| 7     |
| 8     |
| 9     |
+-------+
```

前の例を拡張して、WHERE 句に別の条件を追加することで、CATEGORY テーブル内の元の 11 行を更新します。CATGROUP 列に関する制限により、更新用に限定される行は 1 行だけです (ただし、結合用には 4 行は有資格となります)。

```
UPDATE category SET catid=100
FROM event
WHERE event.catid=category.catid
AND catgroup='Concerts';

SELECT * FROM category WHERE catid=100;

+-------+----------+---------+---------------------------------+
| catid | catgroup | catname |             catdesc             |
+-------+----------+---------+---------------------------------+
| 100   | Concerts | Pop     | All rock and pop music concerts |
+-------+----------+---------+---------------------------------+
```

この例を作成するためのもう 1 つの方法を次に示します。

```
UPDATE category SET catid=100
FROM event JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
```

この方法のメリットは、結合基準が、更新対象の行を限定する他の規格と明確に分離されることです。FROM 句の CATEGORY テーブルに対するエイリアス CAT の使用に注意してください。

## FROM 句内の外部結合を使った更新
<a name="c_Examples_of_UPDATE_statements-updates-with-outer-joins-in-the-from-clause"></a>

前の例では、UPDATE ステートメントの FROM 句で指定した内部結合を示しました。次の例では、FROM 句がターゲットテーブルに対する外部結合をサポートしていないため、エラーが返されます。

```
UPDATE category SET catid=100
FROM event LEFT JOIN category cat ON event.catid=cat.catid
WHERE cat.catgroup='Concerts';
ERROR:  Target table must be part of an equijoin predicate
```

UPDATE ステートメントに対して外部結合が必要な場合、外部結合構文をサブクエリに移動することができます。

```
UPDATE category SET catid=100
FROM
(SELECT event.catid FROM event LEFT JOIN category cat ON event.catid=cat.catid) eventcat
WHERE category.catid=eventcat.catid
AND catgroup='Concerts';
```

## SET 句内の別のテーブルの列を使用した更新
<a name="c_Examples_of_UPDATE_statements-set-with-column-from-another-table"></a>

TICKIT サンプルデータベース内の listing テーブルを sales テーブルの値を使用して更新するには、次の例を使用します。

```
SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 4          |
| 108334 | 24         |
| 117150 | 4          |
| 135915 | 20         |
| 205927 | 6          |
+--------+------------+

UPDATE listing
SET numtickets = sales.sellerid
FROM sales
WHERE sales.sellerid = 1 AND listing.sellerid = sales.sellerid;

SELECT listid, numtickets FROM listing WHERE sellerid = 1 ORDER BY 1 ASC LIMIT 5;

+--------+------------+
| listid | numtickets |
+--------+------------+
| 100423 | 1          |
| 108334 | 1          |
| 117150 | 1          |
| 135915 | 1          |
| 205927 | 1          |
+--------+------------+
```

# 使用
<a name="r_USE_command"></a>

クエリを実行するデータベースを変更します。SHOW USE は、USE コマンドで最近使用されたデータベースを指します。RESET USE は、使用済みデータベースをリセットします。つまり、データベースを SQL で指定しない場合、オブジェクトは現在のデータベースで検索されます。

## 構文
<a name="r_USE-synopsis"></a>

```
USE database
```

## 例
<a name="r_USE_command-examples"></a>

3 つのデータベース (`dev` と `pdb` と `pdb2`) があるとします。各データベースのパブリックスキーマに 2 つのテーブル (`t`) があるとします。まず、異なるデータベースのテーブルにデータを挿入します。

```
dev=# insert into dev.public.t values (1);
INSERT 0 1
dev=# insert into pdb.public.t values (2);
INSERT 0 1
```

データベースを明示的に設定しないと、システムは接続されたデータベースを使用します。現在のデータベースコンテキストを確認します。

```
dev=# show use;
Use Database

(1 row)
dev=> show search_path;
search_path
$user, public
(1 row)
```

データベースを指定せずにテーブル `t` をクエリする場合、システムは現在のデータベース内のテーブルを使用します。

```
dev=# select * from t;
c
----
1
(1 row)
```

`use` コマンドを使用して、接続を変更せずにデータベースを切り替えます。

```
dev=# use pdb;
USE
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# select * from t;
id
----
2
(1 row)
```

また、明示的にスキーマを指定することもできます。

```
dev=# select * from public.t;
id
----
2
(1 row)
```

現在のデータベース内の異なるスキーマにテーブルを作成できるようになりました。

```
dev=# create table s1.t(id int);
CREATE TABLE
dev=# insert into pdb.s1.t values (3);
INSERT 0 1
```

検索パスは、スキーマを指定しない場合にアクセスするスキーマのオブジェクトを決定します。

```
dev=# set search_path to public, s1;
SET
dev=# select * from t;
 id
----
  2
(1 row)
```

スキーマの順序を変更して、異なるテーブルにアクセスします。

```
dev=# set search_path to s1, public;
SET
dev=# show search_path;
 search_path
-------------
 s1, public
(1 row)
dev=# select * from t;
 id
----
  3
(1 row)
```

元の接続を維持しながら、別のデータベースに切り替えます。

```
dev=# show use;
 Use Database
--------------
 pdb
(1 row)
dev=# use pdb2;
USE
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)
```

データベースを切り替えると、検索パスがデフォルトにリセットされます。

```
dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

テーブルを作成し、現在のデータベースにデータを挿入します。

```
dev=# create table pdb2.public.t(id int);
CREATE TABLE
dev=# insert into pdb2.public.t values (4);
INSERT 0 1
dev=# select * from t;
 id
----
  4
(1 row)
```

トランザクションでは、現在のデータベースに書き込み、3 つの部分からなる表記を使用して任意のデータベースから読み取ることができます。これには、接続されたデータベースも含まれます。

```
dev=# show use;
 Use Database
--------------
 pdb2
(1 row)

dev=# BEGIN;
BEGIN
dev=# select * from t;
 id
----
  4
(1 row)

dev=# insert into t values (5);
INSERT 0 1
dev=# select * from t;
 id
----
  4
  5
(2 rows)

dev=# select * from pdb.public.t;
 id
----
  2
(1 row)

dev=# select * from dev.public.t;
 id
----
  1
(1 row)
```

接続されたデータベースにリセットします。これは、以前に使用したデータベース `pdb` に戻るだけでなく、接続されたデータベースにリセットされることに注意してください。検索パスもデフォルトのパスに変わります。

```
dev=# RESET USE;
RESET
dev=# select * from t;
c
----
1
(1 row)
dev=# show use;
 Use Database
--------------

(1 row)

dev=# show search_path;
  search_path
---------------
 $user, public
(1 row)
```

データベースはトランザクションの開始時に変更できますが、クエリの実行後は変更できません。

```
dev=# BEGIN;
BEGIN
dev=# use pdb;
USE
dev=# use pdb2;
USE
dev=# use pdb;
USE
dev=# select * from t;
 id
----
  2
(1 row)
dev=# use pdb2;
ERROR:  USEd Database cannot be set or reset inside a transaction after another command.
dev=# rollback;
ROLLBACK
(1 row)
```

### データカタログの例
<a name="use-redlake-example"></a>

まず、異なるスキーマとカタログにテーブルを作成して、クロスカタログクエリを示します。まず、接続されたデータベースにテーブルを作成します。

```
dev=# CREATE TABLE dev.public.t (col INT);
dev=# INSERT INTO dev.public.t VALUES (1);
dev=# CREATE SCHEMA write_schema;
dev=# CREATE TABLE dev.write_schema.t (state char (2));
dev=# INSERT INTO dev.write_schema.t VALUES ('WA');
```

次に、別のカタログに同様のテーブルを作成します。これは、クロスカタログデータベースを操作する方法を示しています。

```
dev=# CREATE TABLE my_db@my_catalog.public.t (col INT);
dev=# INSERT INTO my_db@my_catalog.public.t VALUES (100);
dev=# CREATE SCHEMA my_db@my_catalog.write_schema;
dev=# CREATE TABLE my_db@my_catalog.write_schema.t (state char (2));
dev=# INSERT INTO my_db@my_catalog.write_schema.t VALUES ('CA');
```

現在のデータベースコンテキストを確認します。データベースを明示的に設定しないと、システムは接続されたデータベースを使用します。

```
dev=# SHOW USE;
 Use Database
--------------

(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)

dev=# SELECT * FROM t;
 col
-----
   1
(1 row)
```

USEd データベースを設定して、別のカタログのテーブルをクエリします。

```
dev=# USE my_db@my_catalog;

dev=# SHOW USE;
            Use Database
-------------------------------------
 my_db@my_catalog
(1 row)

dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

テーブル t をクエリする場合、結果はクロスカタログデータベースから取得されます。

```
dev=# SELECT * FROM t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
 100
(1 row)

dev=# SELECT * FROM my_db@my_catalog.public.t;
 col
-----
 100
(1 row)
```

USEd データベース内の異なるスキーマのテーブルにアクセスするように検索パスを変更します。

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 CA
(1 row)

dev=# SELECT * FROM my_db@my_catalog.write_schema.t;
 state
-------
 CA
(1 row)
```

USE はクロスカタログデータベースに設定されていますが、元のデータベースを明示的にクエリすることは可能です。

```
dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

USEd データベースをリセットして、接続されたデータベース内のオブジェクトを再度参照します。

```
dev=# RESET USE;

dev=# SHOW USE;
 Use Database
--------------

(1 row)
```

USE がリセットされると search\$1path がリセットされることに注意してください。

```
dev=# SHOW search_path;
  search_path
---------------
 $user, public
(1 row)
```

リセット後、クエリは元の接続データベースを参照するようになります。

```
dev=# SELECT * FROM t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM public.t;
 col
-----
   1
(1 row)

dev=# SELECT * FROM dev.public.t;
 col
-----
   1
(1 row)
```

元のデータベースの検索パスを変更して、異なるスキーマにアクセスできます。

```
dev=# SET search_path to write_schema;

dev=# SHOW search_path;
 search_path
--------------
 write_schema
(1 row)

dev=# SELECT * FROM t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM write_schema.t;
 state
-------
 WA
(1 row)

dev=# SELECT * FROM dev.write_schema.t;
 state
-------
 WA
(1 row)
```

# VACUUM
<a name="r_VACUUM_command"></a>

指定されたテーブルまたは現在のデータベース内のすべてのテーブルで、行を再ソートしてスペースを再利用します。

**注記**  
必要なテーブルのアクセス許可を持つユーザーのみが、テーブルにバキューム処理を効果的に行うことができます。必要なテーブルアクセス許可なしで VACUUM が実行された場合、オペレーションは完了しますが、効果はありません。VACUUM を効果的に実行するのに有効なテーブルアクセス許可のリストについては、「必要な権限」セクションを参照してください。

Amazon Redshift は、背景で自動的にデータをソートし、VACUUM DELETE を実行します。これにより、VACUUM コマンドを実行する必要が少なくなります。詳細については、「[テーブルのバキューム処理](t_Reclaiming_storage_space202.md)」を参照してください。

デフォルトではVACUUM コマンドで、テーブルの行の 95 パーセント以上がすでにソートされているテーブルのソートフェーズをスキップします。ソートフェーズをスキップすることにより、VACUUM のパフォーマンスが大幅に向上します。1 つのテーブルのデフォルトのソートあるいは削除しきい値を変更するには、VACUUM を実行するときに、テーブル名および TO *threshold* PERCENT パラメータを含めます。

ユーザーは、バキューム処理中のテーブルにアクセスできます。バキューム処理中のテーブルにクエリおよび書き込み操作を実行できますが、データ操作言語 (DML) コマンドおよびバキュームを同時に実行すると両方の処理時間が長くなる可能性があります。バキューム処理中に UPDATE および DELETE ステートメントを実行する場合は、システムのパフォーマンスが低減する場合があります。VACUUM DELETE は、更新操作と削除操作を一時的にブロックします。

Amazon Redshift は、バックグラウンドで自動的に DELETE ONLY vacuum を実行します。ユーザーが ALTER TABLE などのデータ定義言語 (DDL) 操作を実行すると、自動バキューム操作は一時停止します。

**注記**  
Amazon Redshift の VACUUM コマンドの構文と動作は、PostgreSQL の VACUUM 操作とは大幅に異なります。例えば、Amazon Redshift でのデフォルトの VACUUM 操作は VACUUM FULL です。これは、ディスク領域を再利用し、すべての行を再ソートします。これに対して、PostgreSQL のデフォルトの VACUUM 操作は、単純に領域を再利用し、再び使用できるようにするだけです。

詳細については、「[テーブルのバキューム処理](t_Reclaiming_storage_space202.md)」を参照してください。

## 必要な権限
<a name="r_VACUUM_command-privileges"></a>

以下に、VACUUM に必要な権限を示します。
+ スーパーユーザー
+ VACUUM の権限を持つユーザー
+ テーブルの所有者
+ テーブルの共有先であるデータベース所有者

## 構文
<a name="r_VACUUM_command-synopsis"></a>

```
VACUUM [ FULL | SORT ONLY | DELETE ONLY | REINDEX | RECLUSTER ]
[ [ table_name ] [ TO threshold PERCENT ] [ BOOST ] ]
```

## パラメータ
<a name="r_VACUUM_command-parameters"></a>

FULL   <a name="vacuum-full"></a>
指定されたテーブル (または現在のデータベースのすべてのテーブル）をソートし、直前の UPDATE 操作および DELETE 操作で削除対象のマークが付けられた行によって占有されているディスク領域を再利用します。VACUUM FULL がデフォルトです。  
完全バキュームは、インターリーブテーブルのインデックスを再作成しません。インターリーブテーブルのインデックスを再作成するには、[VACUUM REINDEX](#vacuum-reindex)オプションを使用します。  
デフォルトで、VACUUM FULL は、少なくとも 95 パーセントがソート済みであるテーブルのソートフェーズをすべてスキップします。VACUUM がソートフェーズをスキップできれば、DELETE ONLY を実行し、削除フェーズで残りの行の少なくとも 95 パーセントが削除対象としてマークされていない領域を再利用します。   
ソートしきい値に達しておらず (例えば 90 パーセントの行がソートされていて) VACUUM が完全ソートを実行する場合は、完全な削除オペレーションも実行され、削除された行のスペースが 100 パーセント回復されます。  
一つのテーブルに対してのみデフォルトの VACUUM しきい値を変更できます。1 つのテーブルのデフォルトの VACUUM しきい値を変更するには、テーブル名および TO *threshold* PERCENT パラメータを含めます。

SORT ONLY   <a name="vacuum-sort-only"></a>
削除した行によって解放されたスペースを再利用せずに、指定されたテーブル (または現在のデータベース内のすべてのテーブル) をソートします。このオプションは、ディスク容量の再利用が重要でなく、新しい行の再ソートが重要な場合に役に立ちます。ソートされていない領域が削除済みの行が大量に含んでおらず、ソート済み領域全体にまたがっていない場合に、SORT ONLY のバキューム操作を実行すると、バキューム操作にかかる時間が短縮されます。ディスク容量による拘束がなく、テーブルの行を常にソート状態に維持するクエリの最適化に依存するアプリケーションは、このようなバキューム操作からメリットを得ることができます。  
デフォルトで、VACUUM SORT ONLY は少なくとも 95 パーセントがソート済みであるテーブルをスキップします。1 つのテーブルのデフォルトのソートしきい値を変更するには、VACUUM を実行するときに、テーブル名および TO *threshold* PERCENT パラメータを含めます。

DELETE ONLY   <a name="vacuum-delete-only"></a>
Amazon Redshift はバックグラウンドで自動的に DELETE ONLY vacuum を実行するため、DELETE ONLY vacuum を実行する必要は、ほとんどの場合ありません。  
VACUUM DELETE は、直前の UPDATE 操作と DELETE 操作で削除対象のマークが付けられた行によって占有されているディスク容量を回収し、テーブルを圧縮して、消費されている領域を解放します。DELETE ONLY バキューム操作を実行しても、テーブルのデータはソートされません。  
このオプションは、ディスク容量が重要で、新しい行の再ソートが重要でない場合に、バキューム操作にかかる時間を短縮します。このオプションは、クエリのパフォーマンスが既に最適で、行の再ソートのためにクエリのパフォーマンスを最適化する必要がない場合にも役立ちます。  
デフォルトでは、VACUUM DELETE ONLY は、残りの行の少なくとも 95 パーセントが削除対象としてマークされていない領域を再利用します。1 つのテーブルのデフォルトの削除しきい値を変更するには、VACUUM を実行するときに、テーブル名および TO *threshold* PERCENT パラメータを含めます。    
一部のオペレーション (`ALTER TABLE APPEND` など) により、テーブルは断片化される場合があります。`DELETE ONLY`句を使用すると、バキュームオペレーションにより、断片化されたテーブルから領域が解放されます。しきい値として同じ 95 パーセントが最適化オペレーションに適用されます。

REINDEX  <a name="vacuum-reindex"></a>
インターリーブソートキー列の値の分散を分析した後、完全バキューム処理を実行します。REINDEX を使用する場合は、テーブル名が必要です。  
VACUUM REINDEX は、インターリーブソートキーを分析する目的で追加パスを作成するため、VACUUM FULL よりも大幅に実行時間が長くなります。インターリーブテーブルでは、ソート操作およびマージ操作の時間が長くなる場合があります。これは、インターリーブソートでは、複合ソートよりも多くの行の再調整が必要になる可能性があるためです。  
VACUUM REINDEX 操作がその完了前に終了した場合、次の VACUUM は完全バキューム操作の実行前に REINDEX 操作を再開します。  
VACUUM REINDEX は TO *threshold* PERCENT ではサポートされいません。  

RECLUSTER  <a name="vacuum-recluster"></a>
テーブルのソートされていない部分をソートします。自動テーブルソートによってすでにソートされているテーブルの一部はそのまま残ります。このコマンドは、新しくソートされたデータをソート済みの領域とマージしません。また、削除対象としてマークされたすべての領域が、再利用されるわけではありません。このコマンドの完了後、テーブルが完全にソートされない状態で、SVV\$1TABLE\$1INFO の `unsorted` フィールドに表示されることがあります。  
 大規模なテーブルにおいて、取り込み頻度が高かったり最新のデータのみにアクセスするクエリを実行する場合には、VACUUM RECLUSTER を使用することをお勧めします。  
 VACUUM RECLUSTER は TO threshold PERCENT ではサポートされていません。RECLUSTER を使用する場合は、テーブル名が必要です。  
VACUUM RECLUSTER は、インターリーブソートキーを使用する、分散スタイルが ALL に指定されたテーブルではサポートされません。

 *table\$1name*   
バキューム操作を実行するテーブルの名前。テーブル名を指定しない場合、バキューム操作は現在のデータベースのすべてのテーブルに適用されます。ユーザーが作成した常設テーブルまたは一時テーブルを指定できます。このコマンドは、ビューやシステムテーブルなど、他のオブジェクトに対しては意味を持ちません。  
 TO *threshold* PERCENT パラメータを含める場合は、テーブル名が必要です。

 TO *threshold* PERCENT   
VACUUM が削除フェーズをスキップする最低のしきい値、および削除フェーズでスペースを再利用する対象となるしきい値を指定する句です。*ソートしきい値*は、バキューム処理の前の指定されたテーブルにおけるソート済みの行の合計の割合です。 *削除しきい値*は、バキューム処理後に削除対象としてマークされていない行の合計の最低割合です。  
VACUUM は、テーブルのソート済みの行の割合がソートしきい値以下の場合のみ行を再ソートするため、Amazon Redshift は、バキューム処理の時間を大幅に削減できます。同様に、VACUUM は削除対象としてマークされた行のスペースを 100 パーセント再利用するよう制約を受けない場合、削除対象としてマークされた行を数行のみ含むブロックの書き換えをスキップできます。  
例えば、*しきい値*に 75 を指定すると、テーブルの行の 75 パーセント以上がすでにソート済みの場合、VACUUM はソートフェーズをスキップします。削除フェーズでは、バキューム処理後に削除対象としてマークされていない行がテーブルに 少なくとも 75 パーセントあるようなテーブルを VACUUM はディスク領域の再利用の対象として設定します。*しきい値*の値は、0 から 100 の間の整数でなければなりません。デフォルトは 95 です。100 という値を指定すると、VACUUM はすでに完全にソートされていない限り常にテーブルをソートし、削除対象としてマークされたすべての行のスペースを再利用します。0 という値を指定すると、VACUUM は一切テーブルをソートせず、一切スペースを再利用しません。  
TO *threshold* PERCENT パラメータを含める場合は、テーブルの名前も指定する必要があります。テーブル名を省略すると、VACUUM は失敗します。  
TO *threshold* PERCENT パラメータは REINDEX と併用できません。

BOOST  
使用可能なメモリやディスク容量などの追加のリソースを使用して VACUUM コマンドを実行します。BOOST オプションを使用して、VACUUM は 1 つのウィンドウで動作し、VACUUM 操作の期間の同時削除や更新をブロックします。BOOST オプションを使用して実行すると、システムリソースのために競合するので、クエリパフォーマンスに影響する場合があります。VACUUM BOOST は、メンテナンスオペレーションの間など、システムのロードが少ない場合に実行します。  
BOOST オプションを使用する際は、以下を考慮します。  
+ BOOST を指定した場合は、*table\$1name* 値が必要です。
+ BOOST は REINDEX でサポートされていません。
+ BOOST は DELETE ONLY で無視されます。

## 使用に関する注意事項
<a name="r_VACUUM_usage_notes"></a>

ほとんどの Amazon Redshift アプリケーションでは、完全バキュームをお勧めします。詳細については、「[テーブルのバキューム処理](t_Reclaiming_storage_space202.md)」を参照してください。

バキューム操作を実行する前に、以下の動作に注意してください。
+ トランザクションブロック (BEGIN ... END) 内で VACUUM を実行することはできません。トランザクションの詳細については、「[Amazon Redshift の分離レベル](c_serial_isolation.md)」を参照してください。
+ テーブルのバキュームを実行すると、ある程度のテーブル容量の増加が発生することがあります。再利用の対象となる削除済みの行が存在しない場合や、テーブルの新しいソート順によりデータ圧縮率が低下する場合、これは想定される動作です。
+ バキューム操作の実行中、クエリのパフォーマンスがある程度低下することが予想されます。バキューム操作が終了すると直ちに通常のパフォーマンスに戻ります。
+ バキュームオペレーション中にも、同時実行書き込みオペレーションは進行しますが、バキューム中の書き込みオペレーションの実行は推奨されていません。バキューム操作を実行する前に、書き込み操作を終了する方がより効率的です。また、バキューム操作開始後に書き込まれたすべてのデータは、その操作でバキュームすることができません。その場合は 2 回目のバキューム操作が必要です。
+ ロード操作または挿入操作が既に進行中の場合、バキューム操作を開始できないことがあります。バキューム操作を開始するには、テーブルへの一時的な排他アクセスが必要になります。この排他アクセスは短時間しか必要でないため、バキューム操作により同時ロードと同時挿入が長時間ブロックされることはありません。
+ 特定のテーブルに対して実行する作業がない場合、バキューム操作はスキップされます。ただし、操作がスキップ可能かどうかの検出に関連して、ある程度のオーバーヘッドが発生します。テーブルがあまり使われていないことが判明している場合、または、バキュームのしきい値を満たさないことが判明している場合は、これに対してバキューム操作を実行しないでください。
+ 小さなテーブルに対して DELETE ONLY バキューム操作を実行した場合、データの保存に使われるブロック数が減少しないことがあります。特にテーブルに多数の列が存在している場合、またはクラスターがノードごとに多数のスライスを使用している場合、この傾向が顕著になります。このようなバキューム操作はテーブルへの同時挿入を実現するため、1 列ごとに 1 ブロックを各スライスに追加します。また、このようなオーバーヘッドが発生した場合、ブロック数の削減の方が再利用されるディスク容量を上回る可能性があります。例えばバキューム操作前に、8 ノードクラスター上の 10 列のテーブルが 1000 ブロックを占有している場合、削除された行が原因で 80 ブロックを超えるディスク容量が再利用されない限り、バキュームを実行しても実際のブロック数は減少しません。(各データブロックは 1 MB 使用します。)

次のいずれかの条件が満たされると、自動バキューム操作は一時停止します。
+ ユーザーが ALTER TABLE などのデータ定義言語 (DDL) 操作を実行します。この操作では、現在自動バキューム処理が行われている表に対して排他ロックが必要です。
+ クラスター負荷が高い期間。

### 同時 VACUUM のサポート
<a name="r_VACUUM_usage_notes_concurrent"></a>

Amazon Redshift は、クラスターまたはワークグループ内の異なるセッション間で、複数のバキュームトランザクションの同時実行をサポートしています。そのため、すべてのバキュームモードの異なる複数のインスタンスを一度に発行でき、各バキュームトランザクションを一意のテーブルに発行できます。2 つの VACUUM 操作を 1 つのテーブルで同時に実行することはできません。

**同時バキュームを実行するためのガイドライン**
+ 異なるセッション間で同時バキュームトランザクションを実行する場合は、システムリソースをモニタリングし、バキューム操作の同時実行数が増えすぎないようにする必要があります。
+ 推奨される同時実行数は、再利用するスペースの量、ソートする行の数と幅、ウェアハウスのサイズ、VACUUM 操作とともに実行されるワークロードのサイズによって異なります。
+ バキュームトランザクションのモードに応じて、2 つの同時バキューム操作から開始し、実行時間とシステム負荷を確認しながらさらに追加します。Amazon Redshift がシステムリソースの制限に達したときに同時実行数が多すぎる場合、ユーザーが発行する他の重いクエリと同様に、バキューム操作がキューイングを開始する可能性があります。
+ 複数の VACUUM BOOST 操作は慎重に実行します。BOOST オプションを使用して VACUUM を実行すると、システムリソースの競合が発生し、クエリパフォーマンスに影響する場合があります。VACUUM BOOST は、メンテナンスオペレーションの間など、システムのロードが少ない場合に実行します。
+ テーブル名を指定しない場合、バキューム操作は現在のデータベースのすべてのテーブルに適用されます。これらのバキューム操作は引き続き順番に実行されます。

## 例
<a name="r_VACUUM_command-examples"></a>

すべてのテーブルで、デフォルトのバキュームしきい値 95 パーセントに基づいて、容量とデータベースの再利用と行の再ソートを実行します。

```
vacuum;
```

SALES テーブルで、デフォルトのしきい値 95 パーセントに基づいて、容量の再利用と行の再ソートを実行します。

```
vacuum sales;
```

SALES テーブルで、常に容量の再利用と行の再ソートを実行します。

```
vacuum sales to 100 percent;
```

SALES テーブルで、すでにソートされている行が 75 パーセント未満の場合のみ、行の再ソートを実行します。

```
 vacuum sort only sales to 75 percent;
```

バキューム処理後に削除対象としてマークされていない行が残りの行の 少なくとも 75 パーセント以上である SALES テーブルで容量の再利用を実行します。

```
vacuum delete only sales to 75 percent;
```

LISTING テーブルのインデックスを再作成した後、バキューム処理を実行します。

```
vacuum reindex listing;
```

次のコマンドはエラーを返します。

```
vacuum reindex listing to 75 percent;
```

LISTING テーブルのインデックスを再クラスターした後、バキューム処理を実行します。

```
vacuum recluster listing;
```

LISTING テーブルを再クラスターしてから、BOOST オプションを使用し、バキューム処理を実行します。

```
vacuum recluster listing boost;
```

# SQL 関数リファレンス
<a name="c_SQL_functions"></a>

**Topics**
+ [リーダーノード専用関数](c_SQL_functions_leader_node_only.md)
+ [集計関数](c_Aggregate_Functions.md)
+ [配列関数](c_Array_Functions.md)
+ [ビット単位の集計関数](c_bitwise_aggregate_functions.md)
+ [条件式](c_conditional_expressions.md)
+ [データ型フォーマット関数](r_Data_type_formatting.md)
+ [日付および時刻関数](Date_functions_header.md)
+ [ハッシュ関数](hash-functions.md)
+ [HyperLogLog 関数](hyperloglog-functions.md)
+ [JSON 関数](json-functions.md)
+ [機械学習機能](ml-function.md)
+ [数学関数](Math_functions.md)
+ [オブジェクト関数](Object_Functions.md)
+ [空間関数](geospatial-functions.md)
+ [文字列関数](String_functions_header.md)
+ [SUPER 型の情報関数](c_Type_Info_Functions.md)
+ [VARBYTE 関数と演算子](varbyte-functions.md)
+ [ウィンドウ関数](c_Window_functions.md)
+ [システム管理関数](r_System_administration_functions.md)
+ [システム情報関数](r_System_information_functions.md)

Amazon Redshift は SQL 標準を拡張する多くの関数をサポートします。また、標準の集計関数、スカラー関数、およびウィンドウ関数もサポートします。

**注記**  
Amazon Redshift は PostgreSQL に基づいています。Amazon Redshift と PostgreSQL の間には非常に重要な相違点がいくつかあり、データウェアハウスアプリケーションを設計して開発するときはそれを考慮する必要があります。Amazon Redshift SQL と PostgreSQL の違いについては、[Amazon Redshift および PostgreSQL](c_redshift-and-postgres-sql.md)を参照してください。

# リーダーノード専用関数
<a name="c_SQL_functions_leader_node_only"></a>

一部のAmazon Redshift クエリは配信され、コンピューティングノードで実行されます。ほかのクエリはリーダーノードのみで実行されます。

クエリがユーザーが作成したテーブルまたはシステムテーブル (STL または STV を持つテーブル、および SVL または SVV プレフィックスを持つシステムビュー) を参照する場合、リーダーノードは SQL をコンピューティングノードに配布します。カタログテーブルのみを参照するクエリ (PG\$1TABLE\$1DEF など、PG プレフィックスを持つテーブル) またはテーブルを参照しないクエリは、リーダーノードのみで実行されます。

Amazon Redshift SQL 関数の中にはリーダーノードのみでサポートされ、コンピューティングノードではサポートされないものがあります。リーダーノード専用関数を使用するクエリは、コンピューティングノードではなくリーダーノードのみで実行される必要があり、そうでなければエラーが返されます。

各リーダーノード専用関数のドキュメントには注意点として、その関数がユーザー定義のテーブルまたは Amazon Redshift システムテーブルを参照する場合にエラーを返すことが示されています。

詳細については、「[リーダーノードでサポートされる SQL 関数](c_sql-functions-leader-node.md)」を参照してください。

次の SQL 関数はリーダーノード専用関数であり、コンピューティングノードではサポートされません。

システム情報関数
+ CURRENT\$1SCHEMA
+ CURRENT\$1SCHEMAS
+ HAS\$1DATABASE\$1PRIVILEGE
+ HAS\$1SCHEMA\$1PRIVILEGE
+ HAS\$1TABLE\$1PRIVILEGE

文字列関数
+ SUBSTR

数学関数
+ FACTORIAL
+  LOG 

以下のリーダーノード専用関数は廃止され、サポートは終了しました。

日付関数
+ AGE
+ CURRENT\$1TIME
+ CURRENT\$1TIMESTAMP
+ LOCALTIME
+ ISFINITE
+ NOW

文字列関数
+ GETBIT
+ GET\$1BYTE
+ SET\$1BIT
+ SET\$1BYTE
+ TO\$1ASCII

# 集計関数
<a name="c_Aggregate_Functions"></a>

**Topics**
+ [ANY\$1VALUE 関数](r_ANY_VALUE.md)
+ [APPROXIMATE PERCENTILE\$1DISC 関数](r_APPROXIMATE_PERCENTILE_DISC.md)
+ [AVG 関数](r_AVG.md)
+ [COUNT 関数](r_COUNT.md)
+ [LISTAGG 関数](r_LISTAGG.md)
+ [MAX 関数](r_MAX.md)
+ [MEDIAN 関数](r_MEDIAN.md)
+ [MIN 関数](r_MIN.md)
+ [PERCENTILE\$1CONT 関数](r_PERCENTILE_CONT.md)
+ [STDDEV\$1SAMP および STDDEV\$1POP 関数](r_STDDEV_functions.md)
+ [SUM 関数](r_SUM.md)
+ [VAR\$1SAMP および VAR\$1POP 関数](r_VARIANCE_functions.md)

集計関数は入力値のセットから 1 つの結果の値を計算します。

集計関数を使用する SELECT ステートメントには、2 つのオプション句 (GROUP BY および HAVING) を含めることができます。これらの句の構文は次のとおりです (例として COUNT 関数を使用)。

```
SELECT count (*) expression FROM table_reference
WHERE condition [GROUP BY expression ] [ HAVING condition]
```

GROUP BY 句は、指定した列 (単数または複数) の一意の値によって結果を集計およびグループ化します。HAVING 句は、特定の集計条件が真の場合 (例: count (\$1) > 1) に行に返す結果を制限します。HAVING 句は行の値に基づく列を制限するために、WHERE と同様に使用されます。追加されたこれらの句の例については、[COUNT](r_COUNT.md)を参照してください。

集計関数は、入れ子にした集計関数またはウィンドウ関数を引数として使用できません。

# ANY\$1VALUE 関数
<a name="r_ANY_VALUE"></a>

ANY\$1VALUE 関数は、入力式の値から任意の値を非決定的に返します。この関数は、入力式で行が返されない場合に `NULL` を返します。この関数は、入力式に `NULL` 値がある場合にも `NULL` を返します。入力に `NULL` 以外の `NULL` 値と混合された値が含まれている場合、`NULL` が返される可能性があります。すべての値が `NULL` の場合、`NULL` が返されます。条件に一致する行がない場合、`NULL` が返されます。

## 構文
<a name="r_ANY_VALUE-synopsis"></a>

```
ANY_VALUE( [ DISTINCT | ALL ] expression )
```

## 引数
<a name="r_ANY_VALUE-arguments"></a>

DISTINCT \$1 ALL  
DISTINCT または ALL のいずれかを指定すると、入力式の値から任意の値が返されます。DISTINCT 引数は効果がなく、無視されます。

 * 式*   
関数が動作するターゲット列または式。*式*は、以下に示すデータ型の 1 つを取ります。  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ DOUBLE PRECISION
+ BOOLEAN
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ TIMETZ
+ INTERVAL YEAR TO MONTH
+ INTERVAL DAY TO SECOND
+ VARBYTE
+ SUPER
+ HLLSKETCH
+ GEOMETRY
+ GEOGRAPHY

## 戻り値
<a name="r_ANY_VALUE-returns"></a>

同じデータ型を *expression* として返します。

## 使用に関する注意事項
<a name="r_ANY_VALUE-usage-notes"></a>

列の ANY\$1VALUE 関数を指定するステートメントに 2 番目の列参照も含まれている場合、2 番目の列は GROUP BY 句に含めるか、集計関数に含める必要があります。

## 例
<a name="r_ANY_VALUE-examples"></a>

この例では、*Amazon Redshift 入門ガイド*の「[ステップ 4: Amazon S3 のサンプルデータをロードする](https://docs.aws.amazon.com/redshift/latest/gsg/rs-gsg-create-sample-db.html)」で作成したイベントテーブルを使用します。次の例では、イベント名が Eagles である任意の dateid のインスタンスを返します。

```
select any_value(dateid) as dateid, eventname from event where eventname ='Eagles' group by eventname;
```

結果は、以下の通りです。

```
dateid | eventname
-------+---------------
 1878  | Eagles
```

次の例では、イベント名が Eagles または Cold War Kids である任意の dateid のインスタンスを返します。

```
select any_value(dateid) as dateid, eventname from event where eventname in('Eagles', 'Cold War Kids') group by eventname;
```

結果は、以下のとおりです。

```
dateid | eventname
-------+---------------
 1922  | Cold War Kids
 1878  | Eagles
```

# APPROXIMATE PERCENTILE\$1DISC 関数
<a name="r_APPROXIMATE_PERCENTILE_DISC"></a>

APPROXIMATE PERCENTILE\$1DISC は、離散型分散モデルを前提とする逆分散関数です。これは、パーセンタイル値とソート仕様を取得し、特定のセットからエレメントを返します。概算により、関数の実行がはるかに高速になり、相対誤差は約 0.5% と低くなります。

特定の *percentile* 値に対して、APPROXIMATE PERCENTILE\$1DISC は分位数要約アルゴリズムを使用して ORDER BY 句の式の離散パーセンタイルを概算します。APPROXIMATE PERCENTILE\$1DISC は、*percentile* と同じであるかそれより大きい最少累積分散値 (同じソート仕様を基準とする) を持つ値を返します。

## 構文
<a name="r_APPROXIMATE_PERCENTILE_DISC-synopsis"></a>

```
APPROXIMATE  PERCENTILE_DISC ( percentile )
WITHIN GROUP (ORDER BY expr)
```

## 引数
<a name="r_APPROXIMATE_PERCENTILE_DISC-arguments"></a>

 *パーセンタイル*   
0 と 1 の間の数値定数。Null は計算では無視されます。

WITHIN GROUP ( ORDER BY *expr*)   
パーセンタイルをソートして計算するための数値または日付/時間値を指定する句。

## 戻り値
<a name="r_APPROXIMATE_PERCENTILE_DISC-returns"></a>

WITHIN GROUP 句の ORDER BY 式と同じデータ型。

## 使用に関する注意事項
<a name="r_APPROXIMATE_PERCENTILE_DISC-usage-notes"></a>

APPROXIMATE PERCENTILE\$1DISC ステートメントに GROUP BY 句が含まれている場合、結果セットは制限されます。制限は、ノードタイプとノード数によって異なります。制限を超えると、関数は失敗して以下のエラーを返します。

```
GROUP BY limit for approximate percentile_disc exceeded.
```

評価するグループの数が制限の許可数を超える場合は、[PERCENTILE\$1CONT 関数](r_PERCENTILE_CONT.md)の使用を検討してください。

## 例
<a name="r_APPROXIMATE_PERCENTILE_DISC-examples"></a>

次の例では、上位 10 日の販売数、販売総額、50 番目のパーセンタイル値を返します。

```
select top 10 date.caldate,
count(totalprice), sum(totalprice),
approximate percentile_disc(0.5) 
within group (order by totalprice)
from listing
join date on listing.dateid = date.dateid
group by date.caldate
order by 3 desc;

caldate    | count | sum        | percentile_disc
-----------+-------+------------+----------------
2008-01-07 |   658 | 2081400.00 |         2020.00
2008-01-02 |   614 | 2064840.00 |         2178.00
2008-07-22 |   593 | 1994256.00 |         2214.00
2008-01-26 |   595 | 1993188.00 |         2272.00
2008-02-24 |   655 | 1975345.00 |         2070.00
2008-02-04 |   616 | 1972491.00 |         1995.00
2008-02-14 |   628 | 1971759.00 |         2184.00
2008-09-01 |   600 | 1944976.00 |         2100.00
2008-07-29 |   597 | 1944488.00 |         2106.00
2008-07-23 |   592 | 1943265.00 |         1974.00
```

# AVG 関数
<a name="r_AVG"></a>

 AVG 関数は、入力式の値の平均 (算術平均) を返します。AVG 関数は数値に対してはたらき、NULL 値は無視します。

## 構文
<a name="r_AVG-synopsis"></a>

```
AVG ( [ DISTINCT | ALL ] expression )
```

## 引数
<a name="r_AVG-arguments"></a>

 * 式*   
関数の対象となる列または式。*式*は、以下に示すデータ型の 1 つを取ります。  
+ SMALLINT
+ INTEGER
+ BIGINT
+ NUMERIC
+ DECIMAL
+ REAL
+ DOUBLE PRECISION
+ SUPER

DISTINCT \$1 ALL   
引数 DISTINCT を指定すると、この関数は平均を計算する前に重複した値をすべて指定された式から削除します。引数 ALL を指定すると、この関数は平均を計算する式の重複した値をすべて保持します。ALL がデフォルトです。

## データ型
<a name="r_AVG-data-types"></a>

 AVG 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、DOUBLE PRECISION および SUPER です。

AVG 関数でサポートされる戻り値の型は次のとおりです。
+ 整数型の引数の場合は BIGINT
+ 浮動小数点の引数の場合は DOUBLE PRECISION
+ 他の引数型については、expression と同じデータ型を返します。

NUMERIC または DECIMAL 引数を使用した AVG 関数の結果のデフォルト精度は 38 です。結果のスケールは、引数のスケールと同じです。例えば、DEC(5,2) 列の AVG は DEC(38,2) のデータ型を返します。

## 例
<a name="r_AVG-examples"></a>

SALES テーブルから取引ごとの平均販売量を検索します。

```
select avg(qtysold)from sales;

avg
-----
2
(1 row)
```

すべてのリストに一覧表示された合計額の平均を検索します。

```
select avg(numtickets*priceperticket) as avg_total_price from listing;

avg_total_price
-----------------
3034.41
(1 row)
```

支払い額の平均を月ごとに降順で検索します。

```
select avg(pricepaid) as avg_price, month 
from sales, date
where sales.dateid = date.dateid
group by month
order by avg_price desc;

avg_price | month
-----------+-------
659.34 | MAR
655.06 | APR
645.82 | JAN
643.10 | MAY
642.72 | JUN
642.37 | SEP
640.72 | OCT
640.57 | DEC
635.34 | JUL
635.24 | FEB
634.24 | NOV
632.78 | AUG
(12 rows)
```

# COUNT 関数
<a name="r_COUNT"></a>

 COUNT 関数は式で定義された行をカウントします。

COUNT 関数には 3 つのバリエーションがあります。
+ COUNT(\$1) は null を含むかどうかにかかわらず、ターゲットテーブルのすべての行をカウントします。
+ COUNT ( *expression* ) は、特定の列または式にある Null 以外の値を持つ行数を計算します。
+ COUNT ( DISTINCT *expression* ) は、列または式にある Null 以外の一意な値の数を計算します。
+ APPROXIMATE COUNT DISTINCT は、列または式にある Null 以外の個別の値の数を概算します。

## 構文
<a name="r_COUNT-synopsis"></a>

```
COUNT( * | expression )
```

```
COUNT ( [ DISTINCT | ALL ] expression )
```

```
APPROXIMATE COUNT ( DISTINCT expression )
```

## 引数
<a name="r_COUNT-arguments"></a>

 * 式*   
関数の対象となる列または式。COUNT 関数は引数のデータ型をすべてサポートしています。

DISTINCT \$1 ALL  
引数 DISTINCT を指定すると、この関数はカウントを行う前に指定された式から重複した値をすべて削除します。引数 ALL を指定すると、この関数はカウントに使用する式から重複する値をすべて保持します。ALL がデフォルトです。

APPROXIMATE  
COUNT DISTINCT 関数を APPROXIMATE とともに使用すると、HyperLogLog アルゴリズムを使用して、列または式にある Null 以外の個別の値の数を概算します。APPROXIMATE キーワードを使用するクエリは、はるかに高速に実行され、相対誤差は約 2% と低くなります。クエリあたり、または GROUP BY 句がある場合にはグループあたりで、数百万個以上の多数の個別の値を返すクエリについては、概算を使用するのが妥当です。個別の値が数千個のように比較的少ない場合は、概算は正確なカウントよりも低速になる可能性があります。APPROXIMATE は、COUNT DISTINCT でのみ使用できます。

## 戻り型
<a name="c_Supported_data_types_count"></a>

COUNT 関数は BIGINT を返します。

## 例
<a name="r_COUNT-examples"></a>

フロリダ州のユーザーをすべてカウントします。

```
select count(*) from users where state='FL';

count
-------
510
```

EVENT テーブルからすべてのイベント名をカウントします。

```
select count(eventname) from event;

count
-------
8798
```

EVENT テーブルからすべてのイベント名をカウントします。

```
select count(all eventname) from event;

count
-------
8798
```

EVENT テーブルから一意の会場 ID をすべてカウントします。

```
select count(distinct venueid) as venues from event;

venues
--------
204
```

4 枚より多いチケットをまとめて販売した販売者ごとの回数をカウントします。販売者 ID で結果をグループ化します。

```
select count(*), sellerid from listing 
where numtickets > 4
group by sellerid
order by 1 desc, 2;

count | sellerid
------+----------
12    |    6386
11    |    17304
11    |    20123
11    |    25428
...
```

次の例では、COUNT および APPROXIMATE COUNT の戻り値と実行時間を比較します。

```
select  count(distinct pricepaid) from sales;
              
count
-------
  4528


Time: 48.048 ms

               
select approximate count(distinct pricepaid) from sales;

count
-------
  4553


Time: 21.728 ms
```

# LISTAGG 関数
<a name="r_LISTAGG"></a>

クエリの各グループについて、LISTAGG 集計関数は、ORDER BY 式に従ってそのグループの行をソートしてから、それらの値を 1 つの文字列に連結します。

## 構文
<a name="r_LISTAGG-synopsis"></a>

```
LISTAGG( [DISTINCT] aggregate_expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ]
```

## 引数
<a name="r_LISTAGG-arguments"></a>

DISTINCT  
連結する前に、指定した式から重複した値を削除する句。末尾のスペースは無視されます。例えば、文字列 `'a'` および `'a '` は重複として扱われます。LISTAGG は、発生した最初の値を使用します。詳細については、「[末尾の空白の重要性](r_Character_types.md#r_Character_types-significance-of-trailing-blanks)」を参照してください。

 *aggregate\$1expression*   
 集計する値を返す任意の有効な式 (列名など)。NULL 値および空の文字列は無視されます。

 *delimiter*   
連結された値を区切る文字列定数。デフォルトは NULL です。

 *WITHIN GROUP (ORDER BY order\$1list)*   
集計値のソート順を指定する句。

## 戻り値
<a name="r_LISTAGG-data-types"></a>

VARCHAR(MAX)。結果セットが VARCHAR の最大サイズより大きい場合、LISTAGG は次のエラーを返します。

```
Invalid operation: Result size exceeds LISTAGG limit
```

## 使用に関する注意事項
<a name="r_LISTAGG-usage-notes"></a>
+ WITHIN GROUP 句を使用する複数の LISTAGG 関数が 1 つのステートメントに含まれる場合、各 WITHIN GROUP 句で ORDER BY 値を使用する必要があります。

  例えば、次のステートメントはエラーを返します。

  ```
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) 
  WITHIN GROUP (ORDER BY sellerid) AS dates
  FROM sales;
  ```

  以下のステートメントは正常に実行されます。

  ```
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) 
  WITHIN GROUP (ORDER BY dateid) AS dates
  FROM sales;
  
  SELECT LISTAGG(sellerid) 
  WITHIN GROUP (ORDER BY dateid) AS sellers,
  LISTAGG(dateid) AS dates
  FROM sales;
  ```
+ LISTAGG、PERCENTILE\$1CONT、MEDIAN 集計関数は、他の個別の集計関数で使用することはできません。

## 例
<a name="r_LISTAGG-examples"></a>

以下の例は、販売者 ID を集計し、販売者 ID 順で返します。

```
SELECT LISTAGG(sellerid, ', ') 
WITHIN GROUP (ORDER BY sellerid) 
FROM sales
WHERE eventid = 4337;

listagg                                                                                                                                 
----------------------------------------------------------------------------------------------------------------------------------------
380, 380, 1178, 1178, 1178, 2731, 8117, 12905, 32043, 32043, 32043, 32432, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 47188, 48294
```

次の例では、DISTINCT を使用して一意の販売者 ID のリストを返します。

```
SELECT LISTAGG(DISTINCT sellerid, ', ') 
WITHIN GROUP (ORDER BY sellerid) 
FROM sales
WHERE eventid = 4337;

listagg                                                                                    
-------------------------------------------------------------------------------------------
380, 1178, 2731, 8117, 12905, 32043, 32432, 38669, 38750, 41498, 45676, 46324, 47188, 48294
```

以下の例は、販売者 ID を集計し、日付順で返します。

```
SELECT LISTAGG(sellerid, ', ')  
WITHIN GROUP (ORDER BY dateid) 
FROM sales
WHERE eventid = 4337;

   listagg
-----------------------------------------------------------------------------------------------------------------------------------------
 41498, 47188, 47188, 1178, 1178, 1178, 380, 45676, 46324, 48294, 32043, 32043, 32432, 12905, 8117, 38750, 2731, 32432, 32043, 380, 38669
```

次の例は、ID が 660 の購入者についてパイプで区切った販売日のリストを返します。

```
SELECT LISTAGG(
    (SELECT caldate FROM date WHERE date.dateid=sales.dateid), ' | '    
)
WITHIN GROUP (ORDER BY sellerid DESC, salesid ASC)
FROM sales
WHERE buyerid = 660;

             listagg
-------------------------------------------------
2008-07-16 | 2008-07-09 | 2008-01-01 | 2008-10-26
```

次の例は、ID が 660、661、662 の購入者についてカンマで区切った販売 ID のリストを返します。

```
SELECT buyerid, 
LISTAGG(salesid,', ')
WITHIN GROUP (ORDER BY salesid) AS sales_id
FROM sales
WHERE buyerid BETWEEN 660 AND 662
GROUP BY buyerid
ORDER BY buyerid;
            
buyerid |                sales_id
--------+-----------------------------------------------------
660     | 32872, 33095, 33514, 34548
661     | 19951, 20517, 21695, 21931
662     | 3318, 3823, 4215, 51980, 53202, 55908, 57832, 171603
```

# MAX 関数
<a name="r_MAX"></a>

 MAX 関数は行のセットの最大値を返します。DISTINCT または ALL が使用される可能性がありますが、結果には影響しません。

## 構文
<a name="r_MAX-synopsis"></a>

```
MAX ( [ DISTINCT | ALL ] expression )
```

## 引数
<a name="r_MAX-arguments"></a>

 * 式*   
関数の対象となる列または式。*式*は、以下に示すデータ型の 1 つを取ります。  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ DOUBLE PRECISION
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ TIMETZ
+ VARBYTE
+ SUPER

DISTINCT \$1 ALL   
引数 DISTINCT を指定すると、この関数は最大値を計算する前に指定された式から重複した値をすべて削除します。引数 ALL を指定すると、この関数は最大値を計算する式から重複する値をすべて保持します。ALL がデフォルトです。

## データ型
<a name="c_Supported_data_types_max"></a>

同じデータ型を *expression* として返します。MIN 関数のブールバージョンは [BOOL\$1AND 関数](r_BOOL_AND.md) であり、MAX 関数のブールバージョンは [BOOL\$1OR 関数](r_BOOL_OR.md) です。

## 例
<a name="r_MAX-examples"></a>

すべての販売から最高支払価格を検索します。

```
select max(pricepaid) from sales;

max
----------
12624.00
(1 row)
```

すべての販売からチケットごとの最高支払価格を検索します。

```
select max(pricepaid/qtysold) as max_ticket_price
from sales;

max_ticket_price
-----------------
2500.00000000
(1 row)
```

# MEDIAN 関数
<a name="r_MEDIAN"></a>

値の範囲の中央値を計算します。範囲内の `NULL` 値は無視されます。

MEDIAN は、連続型分散モデルを前提とする逆分散関数です。

MEDIAN は [PERCENTILE\$1CONT](r_PERCENTILE_CONT.md) の特殊なケースです。

## 構文
<a name="r_MEDIAN-synopsis"></a>

```
MEDIAN(median_expression)
```

## 引数
<a name="r_MEDIAN-arguments"></a>

 *median\$1expression*   
関数の対象となる列または式。

## データ型
<a name="r_MEDIAN-data-types"></a>

戻り値の型は、データ型 *median\$1expression* によって決まります。次の表は、各 *median\$1expression* 式のデータ型に対応する戻り型を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_MEDIAN.html)

## 使用に関する注意事項
<a name="r_MEDIAN-data-type-usage-notes"></a>

*median\$1expression* 引数が `DECIMAL` データ型であり、その最大精度が 38 桁である場合、MEDIAN が不正確な結果またはエラーを返す可能性があります。MEDIAN 関数の戻り値が 38 桁を超える場合、結果は 38 桁までとなり、39 桁以降は切り捨てられるため、精度が失われます。補間中に中間結果が最大精度を超えた場合には、数値オーバーフローが発生し、この関数はエラーを返します。このような状態を回避するため、精度が低いデータ型を使用するか、*median\$1expression* 引数を低い精度にキャストすることをお勧めします。

ステートメントにソートベースの集計関数 (LISTAGG、PERCENTILE\$1CONT、または MEDIAN) に対する複数の呼び出しが含まれる場合、すべて同じ ORDER BY 値を使用する必要があります。MEDIAN では、式の値による暗黙的な順序が適用されることに注意してください。

例えば、次のステートメントはエラーを返します。

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

ERROR: within group ORDER BY clauses for aggregate functions must be the same
```

次のステートメントは正常に実行されます。

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales 
GROUP BY salesid, pricepaid;
```

## 例
<a name="r_MEDIAN-examples"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

以下は、MEDIAN が PERCENTILE\$1CONT(0.5) と同じ結果を生成する例です。

```
SELECT TOP 10 DISTINCT sellerid, qtysold, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold) 
FROM sales
GROUP BY sellerid, qtysold;

+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
|        2 |       2 |               2 |      2 |
|       26 |       1 |               1 |      1 |
|       33 |       1 |               1 |      1 |
|       38 |       1 |               1 |      1 |
|       43 |       1 |               1 |      1 |
|       48 |       2 |               2 |      2 |
|       48 |       3 |               3 |      3 |
|       77 |       4 |               4 |      4 |
|       85 |       4 |               4 |      4 |
|       95 |       2 |               2 |      2 |
+----------+---------+-----------------+--------+
```

次の例では、各 sellerid の平均販売数量を求めます。

```
SELECT sellerid, 
MEDIAN(qtysold)
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;

+----------+--------+
| sellerid | median |
+----------+--------+
|        1 |    1.5 |
|        2 |      2 |
|        3 |      2 |
|        4 |      2 |
|        5 |      1 |
|        6 |      1 |
|        7 |    1.5 |
|        8 |      1 |
|        9 |      4 |
|       12 |      2 |
+----------+--------+
```

最初の sellerid に対する前回のクエリの結果を検証するには、次の例を使用します。

```
SELECT qtysold 
FROM sales 
WHERE sellerid=1;

+---------+
| qtysold |
+---------+
|       2 |
|       1 |
+---------+
```

# MIN 関数
<a name="r_MIN"></a>

 MIN 関数は行のセットの最小値を返します。DISTINCT または ALL が使用される可能性がありますが、結果には影響しません。

## 構文
<a name="r_MIN-synopsis"></a>

```
MIN ( [ DISTINCT | ALL ] expression )
```

## 引数
<a name="r_MIN-arguments"></a>

 * 式*   
関数の対象となる列または式。*式*は、以下に示すデータ型の 1 つを取ります。  
+ SMALLINT
+ INTEGER
+ BIGINT
+ DECIMAL
+ REAL
+ DOUBLE PRECISION
+ CHAR
+ VARCHAR
+ DATE
+ TIMESTAMP
+ TIMESTAMPTZ
+ TIME
+ TIMETZ
+ VARBYTE
+ SUPER

DISTINCT \$1 ALL  
引数 DISTINCT を指定すると、この関数は最小値を計算する前に指定された式から重複した値をすべて削除します。引数 ALL を指定すると、この関数は最小値を計算する式から重複する値をすべて保持します。ALL がデフォルトです。

## データ型
<a name="c_Supported_data_types_min"></a>

 同じデータ型を *expression* として返します。MIN 関数のブールバージョンは [BOOL\$1AND 関数](r_BOOL_AND.md) であり、MAX 関数のブールバージョンは [BOOL\$1OR 関数](r_BOOL_OR.md) です。

## 例
<a name="r_MIN-examples"></a>

すべての販売から最低支払価格を検索します。

```
select min(pricepaid) from sales;

min
-------
20.00
(1 row)
```

すべての販売からチケットごとの最低支払価格を検索します。

```
select min(pricepaid/qtysold)as min_ticket_price
from sales;

min_ticket_price
------------------
20.00000000
(1 row)
```

# PERCENTILE\$1CONT 関数
<a name="r_PERCENTILE_CONT"></a>

PERCENTILE\$1CONT は、連続型分散モデルを前提とする逆分散関数です。これは、パーセンタイル値とソート仕様を取得し、ソート仕様を基準として、そのパーセンタイル値に該当する補間値を返します。

PERCENTILE\$1CONT は、値の順序付けを行った後に値の間の線形補間を計算します。この関数は、パーセンタイル値 `(P)` と集計グループの Null ではない行の数 `(N)` を使用して、ソート使用に従って行の順序付けを行った後に行番号を計算します。この行番号 `(RN)` は、計算式 `RN = (1+ (P*(N-1))` に従って計算されます。集計関数の最終結果は、行番号 `CRN = CEILING(RN)` および `FRN = FLOOR(RN)` にある行の値の間の線形補間に基づいて計算されます。

最終結果は次のとおりです。

`(CRN = FRN = RN)` である場合、結果は `(value of expression from row at RN)` 

そうでない場合、結果は

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

## 構文
<a name="r_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT(percentile)
WITHIN GROUP(ORDER BY expr)
```

## 引数
<a name="r_PERCENTILE_CONT-arguments"></a>

 *パーセンタイル*   
0 と 1 の間の数値定数。`NULL` 値は計算で無視されます。

*\$1 expr*  
パーセンタイルをソートして計算するための数値または日付/時間値を指定します。

## 戻り値
<a name="r_PERCENTILE_CONT-returns"></a>

戻り型は、WITHIN GROUP 句の ORDER BY 式のデータ型に基づいて決定されます。次の表は、各 ORDER BY 式のデータ型に対応する戻り型を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_PERCENTILE_CONT.html)

## 使用に関する注意事項
<a name="r_PERCENTILE_CONT-usage-notes"></a>

ORDER BY 式が DECIMAL データ型であり、その最大精度が 38 桁である場合、PERCENTILE\$1CONT が不正確な結果またはエラーを返す可能性があります。PERCENTILE\$1CONT 関数の戻り値が 38 桁を超える場合、結果は 38 桁までとなり、39 桁以降は切り捨てられるため、精度が失われます。補間中に中間結果が最大精度を超えた場合には、数値オーバーフローが発生し、この関数はエラーを返します。このような状態を回避するため、精度が低いデータ型を使用するか、ORDER BY 式を低い精度にキャストすることをお勧めします。

ステートメントにソートベースの集計関数 (LISTAGG、PERCENTILE\$1CONT、または MEDIAN) に対する複数の呼び出しが含まれる場合、すべて同じ ORDER BY 値を使用する必要があります。MEDIAN では、式の値による暗黙的な順序が適用されることに注意してください。

例えば、次のステートメントはエラーを返します。

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

An error occurred when executing the SQL command:
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(pricepaid)
FROM sales 
GROUP BY salesid, pricepaid;

ERROR: within group ORDER BY clauses for aggregate functions must be the same
```

次のステートメントは正常に実行されます。

```
SELECT TOP 10 salesid, SUM(pricepaid), 
PERCENTILE_CONT(0.6) WITHIN GROUP(ORDER BY salesid),
MEDIAN(salesid)
FROM sales 
GROUP BY salesid, pricepaid;
```

## 例
<a name="r_PERCENTILE_CONT-examples"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

以下は、PERCENTILE\$1CONT(0.5) が MEDIAN と同じ結果を生成する例です。

```
SELECT TOP 10 DISTINCT sellerid, qtysold, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold),
MEDIAN(qtysold) 
FROM sales
GROUP BY sellerid, qtysold;

+----------+---------+-----------------+--------+
| sellerid | qtysold | percentile_cont | median |
+----------+---------+-----------------+--------+
|        2 |       2 |               2 |      2 |
|       26 |       1 |               1 |      1 |
|       33 |       1 |               1 |      1 |
|       38 |       1 |               1 |      1 |
|       43 |       1 |               1 |      1 |
|       48 |       2 |               2 |      2 |
|       48 |       3 |               3 |      3 |
|       77 |       4 |               4 |      4 |
|       85 |       4 |               4 |      4 |
|       95 |       2 |               2 |      2 |
+----------+---------+-----------------+--------+
```

次の例では、SALES テーブルの各 selleridD の販売数量の PERCENTILE\$1CONT(0.5) と PERCENTILE\$1CONT(0.75) を求めます。

```
SELECT sellerid, 
PERCENTILE_CONT(0.5) WITHIN GROUP(ORDER BY qtysold) as pct_50,
PERCENTILE_CONT(0.75) WITHIN GROUP(ORDER BY qtysold) as pct_75
FROM sales
GROUP BY sellerid
ORDER BY sellerid
LIMIT 10;

+----------+--------+---------+
| sellerid | pct_50 | pct_75 |
+----------+--------+---------+
|        1 |    1.5 |    1.75 |
|        2 |      2 |    2.25 |
|        3 |      2 |       3 |
|        4 |      2 |       2 |
|        5 |      1 |     1.5 |
|        6 |      1 |       1 |
|        7 |    1.5 |    1.75 |
|        8 |      1 |       1 |
|        9 |      4 |       4 |
|       12 |      2 |    3.25 |
+----------+--------+---------+
```

最初の sellerid に対する前回のクエリの結果を検証するには、次の例を使用します。

```
SELECT qtysold 
FROM sales 
WHERE sellerid=1;

+---------+
| qtysold |
+---------+
|       2 |
|       1 |
+---------+
```

# STDDEV\$1SAMP および STDDEV\$1POP 関数
<a name="r_STDDEV_functions"></a>

 STDDEV\$1SAMP および STDDEV\$1POP 関数は、数値のセットの標本標準偏差と母集団標準偏差 (整数、10 進数、または浮動小数点) を返します。STDDEV\$1SAMP 関数の結果は、値の同じセットの標本分散の平方根に相当します。

STDDEV\$1SAMP および STDDEV は、同じ関数のシノニムです。

## 構文
<a name="r_STDDEV_functions-syntax"></a>

```
STDDEV_SAMP | STDDEV ( [ DISTINCT | ALL ] expression)
STDDEV_POP ( [ DISTINCT | ALL ] expression)
```

この式は整数、10 進数、または浮動小数点数データ型である必要があります。式のデータ型にかかわらず、この関数の戻り値の型は倍精度の数値です。

**注記**  
標準偏差は浮動小数点演算を使用して計算されます。これはわずかに不正確である可能性があります。

## 使用に関する注意事項
<a name="r_STDDEV_usage_notes"></a>

標本標準偏差 (STDDEV または STDDEV\$1SAMP) が 1 つの値で構成される式に対して計算される場合、関数の結果は 0 ではなく、NULL になります。

## 例
<a name="r_STDDEV_functions-examples"></a>

次のクエリは VENUE テーブルの VENUESEATS 列の値の平均、続いて値の同じセットの標本標準偏差と母集団標準偏差を返します。VENUESEATS は INTEGER 列です。結果のスケールは 2 桁に減らされます。

```
select avg(venueseats),
cast(stddev_samp(venueseats) as dec(14,2)) stddevsamp,
cast(stddev_pop(venueseats) as dec(14,2)) stddevpop
from venue;

avg  | stddevsamp | stddevpop
-------+------------+-----------
17503 |   27847.76 |  27773.20
(1 row)
```

次のクエリは SALES テーブルの COMMISSION 列に標本標準偏差を返します。COMMISSION は DECIMAL 列です。結果のスケールは 10 桁に減らされます。

```
select cast(stddev(commission) as dec(18,10))
from sales;

stddev
----------------
130.3912659086
(1 row)
```

次のクエリは整数として COMMISSION 列の標本標準偏差をキャストします。

```
select cast(stddev(commission) as integer)
from sales;

stddev
--------
130
(1 row)
```

次のクエリは COMMISSION 列に標本標準偏差と標本分散の平方根の両方を返します。これらの計算の結果は同じです。

```
select
cast(stddev_samp(commission) as dec(18,10)) stddevsamp,
cast(sqrt(var_samp(commission)) as dec(18,10)) sqrtvarsamp
from sales;

stddevsamp   |  sqrtvarsamp
----------------+----------------
130.3912659086 | 130.3912659086
(1 row)
```

# SUM 関数
<a name="r_SUM"></a>

 SUM 関数は入力列または式の値の合計を返します。SUM 関数は数値に対してはたらき、NULL 値を無視します。

## 構文
<a name="r_SUM-synopsis"></a>

```
SUM ( [ DISTINCT | ALL ] expression )
```

## 引数
<a name="r_SUM-arguments"></a>

 * 式*   
関数の対象となる列または式。*式*は、以下に示すデータ型の 1 つを取ります。  
+ SMALLINT
+ INTEGER
+ BIGINT
+ NUMERIC
+ DECIMAL
+ REAL
+ DOUBLE PRECISION
+ SUPER

DISTINCT \$1 ALL   
引数 DISTINCT を指定すると、この関数は合計を計算する前に指定された式から重複した値をすべて削除します。引数 ALL を指定すると、この関数は合計を計算する式から重複する値をすべて保持します。ALL がデフォルトです。

## データ型
<a name="c_Supported_data_types_sum"></a>

SUM 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、DOUBLE PRECISION および SUPER です。

SUM 関数でサポートされる戻り値の型は次のとおりです。
+ BIGINT、SMALLINT、および INTEGER 引数の場合は BIGINT
+ NUMERIC 引数の場合は NUMERIC
+ 浮動小数点の引数の場合は DOUBLE PRECISION
+ 他の引数型については、expression と同じデータ型を返します。

NUMERIC または DECIMAL 引数を持つ SUM 関数結果のデフォルト精度は 38 です。結果のスケールは、引数のスケールと同じです。例えば、DEC(5,2) 列の SUM は DEC(38,2) のデータ型を返します。

## 例
<a name="r_SUM-examples"></a>

 SALES テーブルから支払われたすべての手数料の合計を検索します。

```
select sum(commission) from sales;

sum
-------------
16614814.65
(1 row)
```

フロリダ州の全会場の座席数を検索します。

```
select sum(venueseats) from venue
where venuestate = 'FL';

sum
--------
250411
(1 row)
```

5 月に販売された座席数を検索します。

```
select sum(qtysold) from sales, date
where sales.dateid = date.dateid and date.month = 'MAY';

sum
-------
32291
(1 row)
```

# VAR\$1SAMP および VAR\$1POP 関数
<a name="r_VARIANCE_functions"></a>

 VAR\$1SAMP および VAR\$1POP 関数は、数値のセットの標本分散と母集団分散 (整数、10 進数、または浮動小数点) を返します。VAR\$1SAMP 関数の結果は、値の同じセットの 2 乗の標本標準偏差に相当します。

VAR\$1SAMP および VARIANCE は同じ関数のシノニムです。

## 構文
<a name="r_VARIANCE_functions-syntax"></a>

```
VAR_SAMP | VARIANCE ( [ DISTINCT | ALL ] expression)
VAR_POP ( [ DISTINCT | ALL ] expression)
```

この式は整数、10 進数、または浮動小数点数データ型である必要があります。式のデータ型にかかわらず、この関数の戻り値の型は倍精度の数値です。

**注記**  
これらの関数の結果は、それぞれのクラスターの設定に応じて、データウェアハウスクラスターによって変わる場合があります。

## 使用に関する注意事項
<a name="r_VARIANCE_usage_notes"></a>

標本分散 (VARIANCE または VAR\$1SAMP) が 1 つの値で構成される式に対して計算される場合、関数の結果は 0 ではなく、NULL になります。

## 例
<a name="r_VARIANCE_functions-examples"></a>

次のクエリは LISTING テーブルの NUMTICKETS 列の四捨五入した標本分散と母集団分散を返します。

```
select avg(numtickets),
round(var_samp(numtickets)) varsamp,
round(var_pop(numtickets)) varpop
from listing;

avg | varsamp | varpop
-----+---------+--------
10 |      54 |     54
(1 row)
```

次のクエリは同じ計算を実行しますが、10 進値の結果をキャストします。

```
select avg(numtickets),
cast(var_samp(numtickets) as dec(10,4)) varsamp,
cast(var_pop(numtickets) as dec(10,4)) varpop
from listing;

avg | varsamp | varpop
-----+---------+---------
10 | 53.6291 | 53.6288
(1 row)
```

# 配列関数
<a name="c_Array_Functions"></a>

以下に、Amazon Redshift が配列にアクセスして操作するためにサポートする SQL 配列関数の説明を示します。

**Topics**
+ [ARRAY 関数](r_array.md)
+ [ARRAY\$1CONCAT 関数](r_array_concat.md)
+ [ARRAY\$1CONTAINS 関数](array_contains.md)
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)
+ [ARRAY\$1EXCEPT 関数](array_except.md)
+ [ARRAY\$1FLATTEN 関数](array_flatten.md)
+ [ARRAY\$1INTERSECTION 関数](array_intersection.md)
+ [ARRAY\$1POSITION 関数](array_position.md)
+ [ARRAY\$1POSITIONS 関数](array_positions.md)
+ [ARRAY\$1SORT 関数](array_sort.md)
+ [ARRAY\$1UNION 関数](array_union.md)
+ [ARRAYS\$1OVERLAP 関数](arrays_overlap.md)
+ [GET\$1ARRAY\$1LENGTH 関数](get_array_length.md)
+ [SPLIT\$1TO\$1ARRAY 関数](split_to_array.md)
+ [SUBARRAY 関数](r_subarray.md)

# ARRAY 関数
<a name="r_array"></a>

SUPER データ型の配列を作成します。

## 構文
<a name="r_array-synopsis"></a>

```
ARRAY( [ expr1 ] [, expr2 [, ... ]] )
```

## 引数
<a name="r_array-argument"></a>

 *expr1、expr2*   
Amazon Redshift では、日付と時刻の型は SUPER データ型にキャストされないため、任意の Amazon Redshift データ型の式では日付と時刻の型は除外されます。引数は同じデータ型である必要はありません。

## 戻り型
<a name="r_array-return-type"></a>

ARRAY 関数は、SUPER データ型を返します。

## 例
<a name="r_array-example"></a>

次の例は、数値の配列と、さまざまなデータ型の配列を示しています。

```
--an array of numeric values
select ARRAY(1,50,null,100);
      array
------------------
 [1,50,null,100]
(1 row)

--an array of different data types
select ARRAY(1,'abc',true,3.14);
        array
-----------------------
 [1,"abc",true,3.14]
(1 row)
```

## 関連情報
<a name="r_array-see-also"></a>
+ [ARRAY\$1CONCAT 関数](r_array_concat.md)
+ [SPLIT\$1TO\$1ARRAY 関数](split_to_array.md)
+ [ARRAY\$1FLATTEN 関数](array_flatten.md)

# ARRAY\$1CONCAT 関数
<a name="r_array_concat"></a>

2 つの配列を連結して、最初の配列のすべての要素と、それに続く 2 番目の配列のすべての要素を含む配列を作成します。2 つの引数は有効な SUPER 配列でなければなりません。

## 構文
<a name="r_array_concat-synopsis"></a>

```
ARRAY_CONCAT( array1, array2 )
```

## 引数
<a name="r_array_concat-argument-arguments"></a>

 *array1*  
連結する 2 つの配列のうち、最初の配列を指定する値。

 *array2*  
連結する 2 つの配列のうち、2 番目の配列を指定する値。

## 戻り型
<a name="r_array_concat-return-type"></a>

ARRAY\$1CONCAT 関数は、SUPER データ値を返します。

## 例
<a name="r_array_concat-example"></a>

次の例は、同じ型の 2 つの配列の連結と、異なる型の 2 つの配列の連結を示しています。

```
-- concatenating two arrays 
SELECT ARRAY_CONCAT(ARRAY(10001,10002),ARRAY(10003,10004));
              array_concat
------------------------------------
 [10001,10002,10003,10004]
(1 row)

-- concatenating two arrays of different types 
SELECT ARRAY_CONCAT(ARRAY(10001,10002),ARRAY('ab','cd'));
          array_concat
------------------------------
 [10001,10002,"ab","cd"]
(1 row)
```

## 関連情報
<a name="r_array_concat-see-also"></a>
+ [ARRAY\$1UNION 関数](array_union.md)
+ [ARRAY\$1FLATTEN 関数](array_flatten.md)
+ [SPLIT\$1TO\$1ARRAY 関数](split_to_array.md)
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)

# ARRAY\$1CONTAINS 関数
<a name="array_contains"></a>

配列に指定された値が含まれているかどうかを確認し、見つかった場合は TRUE を返します。

## 構文
<a name="array_contains-syntax"></a>

```
ARRAY_CONTAINS( array, value [, null_match] )
```

## 引数
<a name="array_contains-arguments"></a>

 *array*   
検索する配列を指定する SUPER 式。

 *値*   
検索する要素を指定する値。

 *null\$1match*   
NULL 値の処理方法を指定するブール値:  
+ *null\$1match* = FALSE: NULL を検索すると、NULL が返されます。配列に NULL 値が含まれており、NULL 以外の検索値に一致するものが見つからない場合は、NULL が返されます。
+ *null\$1match* = TRUE: NULL は、有効な、検索可能な要素として扱われます。配列に NULL 値が含まれており、NULL 以外の検索値に一致するものが見つからない場合は、FALSE を返します。
デフォルトは TRUE です。  
デフォルトの NULL 処理は、設定オプションで指定することもできます。  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## 戻り型
<a name="array_contains-return-type"></a>

ARRAY\$1CONTAINS 関数は BOOLEAN 型を返します。

## 例
<a name="array_contains-example"></a>

次の例は、ARRAY\$1CONTAINS 関数を示しています。

```
SELECT ARRAY_CONTAINS(ARRAY('red', 'green'), 'red');
array_contains
----------------
 t
(1 row)
```

次の例は、*null\$1match* を TRUE に設定した場合の関数の動作を示しています。

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), NULL);
array_contains
----------------
 t
(1 row)

-- The array can contain NULLs
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'blue', TRUE);
array_contains
----------------
 f
(1 row)
```

次の例は、*null\$1match* を FALSE に設定した場合の関数の動作を示しています。関数内で *null\$1match* 動作を指定すると、デフォルト設定が上書きされることに注意してください。

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_CONTAINS(ARRAY('red', 'green'), NULL, FALSE);
array_contains
----------------
 
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'green');
array_contains
----------------
 t
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_CONTAINS(ARRAY('red', NULL, 'green'), 'blue');
array_contains
----------------
 
(1 row)
```

## 関連情報
<a name="array_contains-see-also"></a>
+ [ARRAY\$1POSITION 関数](array_position.md)
+ [ARRAY\$1POSITIONS 関数](array_positions.md)
+ [ARRAYS\$1OVERLAP 関数](arrays_overlap.md)

# ARRAY\$1DISTINCT 関数
<a name="array_distinct"></a>

入力配列から一意の要素のみを含む新しい配列を作成し、すべての重複を削除します。出力配列内の要素の順序は、入力順序と一致するとは限りません。NULL 値は有効な要素として扱われます。入力配列に複数の NULL が存在する場合、出力には 1 つの NULL のみが表示されます。

## 構文
<a name="array_distinct-syntax"></a>

```
ARRAY_DISTINCT( array )
```

## 引数
<a name="array_distinct-arguments"></a>

 *array*   
配列を指定する SUPER 式。

## 戻り型
<a name="array_distinct-return-type"></a>

ARRAY\$1DISTINCT 関数は、SUPER 型を返します。

## 例
<a name="array_distinct-example"></a>

次の例は、ARRAY\$1DISTINCT 関数を示しています。

```
SELECT ARRAY_DISTINCT(ARRAY(1, 1, 'a', 'a', NULL, NULL));
 array_distinct 
----------------
 [1,"a",null]
(1 row)

SELECT ARRAY_DISTINCT(ARRAY_CONCAT(ARRAY(1,2,3,3),ARRAY(2,3,4,4)));
 array_distinct 
----------------
 [1,2,3,4]
(1 row)
```

## 関連情報
<a name="array_distinct-see-also"></a>
+ [ARRAY\$1UNION 関数](array_union.md)
+ [ARRAY\$1SORT 関数](array_sort.md)
+ [ARRAY\$1EXCEPT 関数](array_except.md)
+ [ARRAY\$1INTERSECTION 関数](array_intersection.md)

# ARRAY\$1EXCEPT 関数
<a name="array_except"></a>

最初の配列の要素のうち 2 番目の配列に存在しない要素を保持して、2 つの配列の差を返します。関数は NULL セーフです。つまり、NULL は既知のオブジェクトとして扱われます。

## 構文
<a name="array_except-syntax"></a>

```
ARRAY_EXCEPT( array1, array2 [, distinct] )
```

## 引数
<a name="array_except-arguments"></a>

 *array1*   
最初の配列を指定する SUPER 式。

 *array2*   
2 番目の配列を指定する SUPER 式。

 *\$1distinct*   
個別の要素のみを返すかどうかを指定するブール値。  
+ *distinct* = FALSE: マルチセットセマンティクスが適用されます。最初の配列の要素が出現するたびに、2 番目の配列の出現と照合されます。最初の配列における要素の出現が 2 番目の配列よりも多い場合、余分な出現は結果に保持されます。
+ *distinct* = TRUE: セットセマンティクスが適用されます。どちらの配列もセットとして扱われ、重複する要素を無視します。最初の配列にある要素のうち、出現数に関係なく、2 番目の配列のどこかに 1 つでも存在する要素は削除されます。
デフォルトは FALSE です。

## 戻り型
<a name="array_except-return-type"></a>

ARRAY\$1EXCEPT 関数は、SUPER 型を返します。

## 例
<a name="array_except-example"></a>

次の例は、ARRAY\$1EXCEPT 関数を示しています。

```
SELECT ARRAY_EXCEPT(ARRAY('a','b','c'), ARRAY('b','c','d'));
 array_except
--------------
 ["a"]
(1 row)
```

マルチセットセマンティクス:

```
SELECT ARRAY_EXCEPT(ARRAY('b','b','b','b'), ARRAY('b','b'));
 array_except
--------------
 ["b","b"]
(1 row)
```

セマンティクスを設定します。

```
SELECT ARRAY_EXCEPT(ARRAY('a','b','b'), ARRAY('b'), TRUE);
 array_except
--------------
 ["a"]
(1 row)
```

NULL は既知のオブジェクトとして扱われます。

```
SELECT ARRAY_EXCEPT(ARRAY('a',NULL), ARRAY(NULL));
 array_except
--------------
 ["a"]
(1 row)
```

## 関連情報
<a name="array_except-see-also"></a>
+ [ARRAY\$1INTERSECTION 関数](array_intersection.md)
+ [ARRAY\$1UNION 関数](array_union.md)
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)
+ [ARRAYS\$1OVERLAP 関数](arrays_overlap.md)

# ARRAY\$1FLATTEN 関数
<a name="array_flatten"></a>

複数の配列を SUPER 型の単一の配列にマージします。最初の内部配列の要素が最初に表示され、その後に後続の内部配列の要素が表示されます。NULL は既知のオブジェクトとして扱われます。

## 構文
<a name="array_flatten-syntax"></a>

```
ARRAY_FLATTEN( array )
```

## 引数
<a name="array_flatten-arguments"></a>

 *array*   
配列形式の SUPER 式。

## 戻り型
<a name="array_flatten-returm-type"></a>

ARRAY\$1FLATTEN 関数は、SUPER 型を返します。

## 例
<a name="array_flatten-example"></a>

次の例は、ARRAY\$1FLATTEN 関数を示しています。

```
SELECT ARRAY_FLATTEN(ARRAY(ARRAY(1,2,3,4),ARRAY(5,6,7,8),ARRAY(9,10)));
     array_flatten
------------------------
 [1,2,3,4,5,6,7,8,9,10]
(1 row)
```

## 関連情報
<a name="array_flatten-see-also"></a>
+ [ARRAY\$1CONCAT 関数](r_array_concat.md)
+ [SUBARRAY 関数](r_subarray.md)
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)

# ARRAY\$1INTERSECTION 関数
<a name="array_intersection"></a>

両方の入力配列に存在する要素のみを含む新しい配列を返します。関数は NULL セーフです。つまり、NULL は既知のオブジェクトとして扱われます。結果内の要素の順序は保証されていません。

## 構文
<a name="array_intersection-syntax"></a>

```
ARRAY_INTERSECTION( array1, array2 [, distinct] )
```

## 引数
<a name="array_intersection-arguments"></a>

 *array1*   
配列を指定する SUPER 式。

 *array2*   
配列を指定する SUPER 式。

 *\$1distinct*   
個別の要素のみを返すかどうかを指定するブール値。  
+ *distinct* = FALSE: マルチセットセマンティクスが適用されます。重複する要素は保持され、結果の各要素の頻度は 2 つの入力配列における頻度の最小値に等しくなります。
+ *distinct* = TRUE: セットセマンティクスが適用されます。両方の配列に共通の一意の要素のみが (重複を取り除いて) 返されます。
デフォルトは FALSE です。

## 戻り型
<a name="array_intersection-return-type"></a>

ARRAY\$1INTERSECTION 関数は SUPER 型を返します。

## 例
<a name="array_intersection-example"></a>

次の例は、ARRAY\$1INTERSECTION 関数を示しています。

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','c'), ARRAY('b','c','d'));
 array_intersection 
--------------------
 ["b","c"]
(1 row)
```

マルチセットセマンティクス:

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','b'), ARRAY('b','b','b'));
 array_intersection 
--------------------
 ["b","b"]
(1 row)
```

セマンティクスを設定します。

```
SELECT ARRAY_INTERSECTION(ARRAY('a','b','b'), ARRAY('b','b','b'), TRUE);
 array_intersection 
--------------------
 ["b"]
(1 row)
```

NULL は既知のオブジェクトとして扱われます。

```
SELECT ARRAY_INTERSECTION(ARRAY('a',NULL), ARRAY('b',NULL));
 array_intersection 
--------------------
 [null]
(1 row)
```

## 関連情報
<a name="array_intersection-see-also"></a>
+ [ARRAY\$1EXCEPT 関数](array_except.md)
+ [ARRAYS\$1OVERLAP 関数](arrays_overlap.md)
+ [ARRAY\$1UNION 関数](array_union.md)
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)

# ARRAY\$1POSITION 関数
<a name="array_position"></a>

配列内の指定された要素の最初の出現の位置 (インデックス) を返します。インデックスは 0 ベースで、0 は最初の要素を示し、1 は 2 番目の要素を示します。配列内に要素が見つからない場合は、-1 を返します。

この関数は、最初に出現した位置のみを返します。すべての出現箇所を検索するには、[ARRAY\$1POSITIONS 関数](array_positions.md) 関数の使用を検討してください。

## 構文
<a name="array_position-syntax"></a>

```
ARRAY_POSITION( array, value [, null_match] )
```

## 引数
<a name="array_position-arguments"></a>

 *array*   
検索する配列を指定する SUPER 式。

 *値*   
検索する要素を指定する値。

 *null\$1match*   
NULL 値の処理方法を指定するブール値:  
+ *null\$1match* = FALSE: NULL を検索すると、NULL が返されます。配列に NULL 値が含まれており、NULL 以外の検索値に一致するものが見つからない場合は、NULL が返されます。
+ *null\$1match* = TRUE: NULL は、有効な、検索可能な要素として扱われます。配列に NULL 値が含まれており、NULL 以外の検索値に一致するものが見つからない場合は、-1 を返します。
デフォルトは TRUE です。  
デフォルトの NULL 処理は、設定オプションで指定することもできます。  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## 戻り型
<a name="array_position-return-type"></a>

ARRAY\$1POSITION 関数は INT 型を返します。

## 例
<a name="array_position-example"></a>

次の例は、ARRAY\$1POSITION 関数を示しています。

```
SELECT ARRAY_POSITION(ARRAY('red', 'green'), 'red');
 array_position 
----------------
              0
(1 row)

SELECT ARRAY_POSITION(ARRAY(1, 2, 3), 4);
 array_position 
----------------
             -1
(1 row)

-- only the position of the first occurrence is returned
SELECT ARRAY_POSITION(ARRAY('red', 'green', 'red'), 'red');
 array_position 
----------------
              0
(1 row)
```

次の例は、*null\$1match* を TRUE に設定した場合の関数の動作を示しています。

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), NULL);
 array_position 
----------------
              1
(1 row)

-- The array can contain NULLs
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'blue', TRUE);
 array_position 
----------------
             -1
(1 row)
```

次の例は、*null\$1match* を FALSE に設定した場合の関数の動作を示しています。関数内で *null\$1match* 動作を指定すると、デフォルト設定が上書きされることに注意してください。

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_POSITION(ARRAY('red', 'green'), NULL, FALSE);
 array_position 
----------------
               
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'green');
 array_position 
----------------
              2
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_POSITION(ARRAY('red', NULL, 'green'), 'blue');
 array_position 
----------------
               
(1 row)
```

## 関連情報
<a name="array_position-see-also"></a>
+ [ARRAY\$1POSITIONS 関数](array_positions.md)
+ [ARRAY\$1CONTAINS 関数](array_contains.md)
+ [SUBARRAY 関数](r_subarray.md)

# ARRAY\$1POSITIONS 関数
<a name="array_positions"></a>

指定された要素が入力配列に表示される位置 (インデックス) の配列を返します。インデックスは 0 ベースで、0 は最初の要素を示し、1 は 2 番目の要素を示します。要素が見つからない場合は、空の配列を返します。

## 構文
<a name="array_positions-syntax"></a>

```
ARRAY_POSITIONS( array, value [, null_match] )
```

## 引数
<a name="array_positions-arguments"></a>

 *array*   
検索する配列を指定する SUPER 式。

 *値*   
検索する要素を指定する値。

 *null\$1match*   
NULL 値の処理方法を指定するブール値:  
+ *null\$1match* = FALSE: NULL を検索すると、NULL が返されます。配列に NULL 値が含まれており、NULL 以外の検索値に一致するものが見つからない場合は、NULL が返されます。
+ *null\$1match* = TRUE: NULL は、有効な、検索可能な要素として扱われます。配列に NULL 値が含まれており、NULL 以外の検索値に一致するものが見つからない場合は、空の配列が返されます。
デフォルトは TRUE です。  
デフォルトの NULL 処理は、設定オプションで指定することもできます。  

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;
```

## 戻り型
<a name="array_positions-return-type"></a>

ARRAY\$1POSITIONS 関数は、SUPER データ型を返します。

## 例
<a name="array_positions-example"></a>

次の例は、ARRAY\$1POSITIONS 関数を示しています。

```
SELECT ARRAY_POSITIONS(ARRAY('red', 'green', 'red'), 'red');
 array_positions 
-----------------
 [0,2]
(1 row)

SELECT ARRAY_POSITIONS(ARRAY(1, 2, 3), 4);
 array_positions 
-----------------
 []
(1 row)
```

次の例は、*null\$1match* を TRUE に設定した場合の関数の動作を示しています。

```
SET default_array_search_null_handling to TRUE;

-- NULL search is enabled
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green', NULL), NULL);
 array_positions 
-----------------
 [1,3]
(1 row)

-- The array can contain NULLs
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'blue', TRUE);
 array_positions 
-----------------
 []
(1 row)
```

次の例は、*null\$1match* を FALSE に設定した場合の関数の動作を示しています。関数内で *null\$1match* 動作を指定すると、デフォルト設定が上書きされることに注意してください。

```
-- same as null_match = TRUE
SET default_array_search_null_handling to TRUE;

-- NULL search is disabled. The default behavior is overridden
SELECT ARRAY_POSITIONS(ARRAY('red', 'green'), NULL, FALSE);
 array_positions 
-----------------
 
(1 row)

-- same as null_match = FALSE
SET default_array_search_null_handling to FALSE;

-- The array contains NULL and a match is found
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'green');
 array_positions 
-----------------
 [2]
(1 row)

-- The array contains NULL but no match is found
SELECT ARRAY_POSITIONS(ARRAY('red', NULL, 'green'), 'blue');
 array_positions 
-----------------
 
(1 row)
```

## 関連情報
<a name="array_positions-see-also"></a>
+ [ARRAY\$1POSITION 関数](array_position.md)
+ [ARRAY\$1CONTAINS 関数](array_contains.md)
+ [SUBARRAY 関数](r_subarray.md)

# ARRAY\$1SORT 関数
<a name="array_sort"></a>

入力配列を昇順または降順でソートしたバージョンを作成します。結果内で NULL 値が表示される場所を指定できます。関数は NULL セーフです。つまり、NULL は既知のオブジェクトとして扱われます。

## 構文
<a name="array_sort-syntax"></a>

```
ARRAY_SORT( array [, sort_ascending [, nulls_first]] )
```

## 引数
<a name="array_sort-arguments"></a>

 *array*   
ソートする配列を指定する SUPER 式。

 *sort\$1ascending*   
配列を昇順でソートするか、降順でソートするかを指定するブール値。  
+ 要素を昇順にソートするには、TRUE を指定します。
+ 要素を降順でソートするには、FALSE を指定します。
デフォルトは TRUE です。

 *nulls\$1first*   
NULL の位置を指定するブール値。  
+ ソートされた配列の先頭に NULL を配置するには、TRUE を指定します。
+ ソートされた配列の最後に NULL を配置するには、FALSE を指定します。

## 戻り型
<a name="array_sort-return-type"></a>

ARRAY\$1SORT 関数は、SUPER 型を返します。

## 注記
<a name="array_sort-note"></a>

混合データ型を含む配列をソートする場合、要素は次のタイプの優先順位に従って順序付けられます。
+ ブール値
+ 数値
+ 文字列値
+ 配列
+ オブジェクト/ディクショナリ

各タイプカテゴリ内では、要素は自然な順序に従ってソートされます (例: 数値は数値順にソートされ、文字列はアルファベット順にソートされます)。

## 例
<a name="array_sort-example"></a>

次の例は、ARRAY\$1SORT 関数を示しています。

```
-- Ascending order (default)
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false));
        array_sort        
--------------------------
 [false,0,1,"a","b",null]
(1 row)

-- Descending order
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false), False);
        array_sort        
--------------------------
 [null,"b","a",1,0,false]
(1 row)

-- Descending order with NULLs at the end of the sorted array
SELECT ARRAY_SORT(ARRAY('b', 'a', 0, NULL, 1, false), False, False);
        array_sort        
--------------------------
 ["b","a",1,0,false,null]
(1 row)
```

## 関連情報
<a name="array_sort-see-also"></a>
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)
+ [ARRAY\$1FLATTEN 関数](array_flatten.md)
+ [SUBARRAY 関数](r_subarray.md)

# ARRAY\$1UNION 関数
<a name="array_union"></a>

2 つの配列を結合し、重複を削除したすべての一意の値を含む単一の配列を返します。関数は NULL セーフです。つまり、NULL は既知のオブジェクトとして扱われます。結果内の要素の順序は保証されていません。

## 構文
<a name="array_union-syntax"></a>

```
ARRAY_UNION( array1, array2 )
```

## 引数
<a name="array_union-arguments"></a>

 *array1*   
最初の配列を指定する SUPER 式。

 *array2*   
2 番目の配列を指定する SUPER 式。

## 戻り型
<a name="array_union-return-type"></a>

ARRAY\$1UNION 関数は SUPER 型を返します。

## 例
<a name="array_union-example"></a>

次の例は、ARRAY\$1UNION 関数を示しています。

```
SELECT ARRAY_UNION(ARRAY('a','b','b'), ARRAY('b','c','c'));
  array_union  
---------------
 ["a","b","c"]
(1 row)
```

要素の順序は保証されません。

```
SELECT ARRAY_UNION(ARRAY('b','a','b'), ARRAY(NULL,'b',NULL));
  array_union   
----------------
 ["b","a",null]
(1 row)
```

## 関連情報
<a name="array_union-see-also"></a>
+ [ARRAY\$1CONCAT 関数](r_array_concat.md)
+ [ARRAY\$1DISTINCT 関数](array_distinct.md)
+ [ARRAY\$1INTERSECTION 関数](array_intersection.md)
+ [ARRAY\$1EXCEPT 関数](array_except.md)

# ARRAYS\$1OVERLAP 関数
<a name="arrays_overlap"></a>

2 つの配列に共通の要素があるかどうかを確認します。配列が少なくとも 1 つの要素を共有する場合は TRUE を返し、共通の要素が存在しない場合は FALSE を返します。関数は NULL セーフです。つまり、NULL は既知のオブジェクトとして扱われます。

## 構文
<a name="arrays_overlap-syntax"></a>

```
ARRAYS_OVERLAP( array1, array2 )
```

## 引数
<a name="arrays_overlap-arguments"></a>

 *array1*   
配列を指定する SUPER 式。

 *array2*   
配列を指定する SUPER 式。

## 戻り型
<a name="arrays_overlap-return-type"></a>

ARRAYS\$1OVERLAP 関数はブール型を返します。

## 例
<a name="arrays_overlap-example"></a>

次の例は、ARRAYS\$1OVERLAP 関数を示しています。

```
SELECT ARRAYS_OVERLAP(ARRAY('blue', 'green'), ARRAY('red', 'green'));
 arrays_overlap 
----------------
 t
(1 row)
```

次の例は、NULL が有効な要素として扱われることを示しています。

```
SELECT ARRAYS_OVERLAP(ARRAY('red', NULL, 'blue'), ARRAY('green', NULL));
 arrays_overlap 
----------------
 t
(1 row)

SELECT ARRAYS_OVERLAP(ARRAY('red', NULL, 'blue'), ARRAY('green'));
 arrays_overlap 
----------------
 f
(1 row)

SELECT ARRAYS_OVERLAP(JSON_PARSE('[null]'), ARRAY(NULL));
 arrays_overlap 
----------------
 t
(1 row)
```

## 関連情報
<a name="arrays_overlap-see-also"></a>
+ [ARRAY\$1INTERSECTION 関数](array_intersection.md)
+ [ARRAY\$1CONTAINS 関数](array_contains.md)
+ [ARRAY\$1EXCEPT 関数](array_except.md)

# GET\$1ARRAY\$1LENGTH 関数
<a name="get_array_length"></a>

オブジェクトまたは配列パスが与えられた SUPER 配列の長さを返します。

## 構文
<a name="get_array_length-syntax"></a>

```
GET_ARRAY_LENGTH( super_expr )
```

## 引数
<a name="get_array_length-arguments"></a>

 *super\$1expr*   
配列形式の有効な SUPER 表現。

## 戻り型
<a name="get_array_length-returm-type"></a>

GET\$1ARRAY\$1LENGTH 関数は、INT を返します。

## 例
<a name="get_array_length-example"></a>

次の例は、GET\$1ARRAY\$1LENGTH 関数を示しています。

```
SELECT GET_ARRAY_LENGTH(ARRAY(1,2,3,4,5,6,7,8,9,10));
 get_array_length
----------------------
            10
(1 row)
```

# SPLIT\$1TO\$1ARRAY 関数
<a name="split_to_array"></a>

区切り文字を任意のパラメータとして使用します。区切り文字がない場合、デフォルトはコンマです。

## 構文
<a name="split_to_array-syntax"></a>

```
SPLIT_TO_ARRAY( string, delimiter )
```

## 引数
<a name="split_to_array-arguments"></a>

 **string**   
分割する入力文字列。

 **delimiter**   
入力文字列が分割されるオプションの値。デフォルトではカンマを使用します。

## 戻り型
<a name="split_to_array-return-type"></a>

SPLIT\$1TO\$1ARRAY 関数は、SUPER データ値を返します。

## 例
<a name="split_to_array-example"></a>

次の例は、SPLIT\$1TO\$1ARRAY 関数を示しています。

```
SELECT SPLIT_TO_ARRAY('12|345|6789', '|');
     split_to_array
-------------------------
 ["12","345","6789"]
(1 row)
```

## 関連情報
<a name="split_to_array-see-also"></a>
+ [ARRAY 関数](r_array.md)
+ [ARRAY\$1CONCAT 関数](r_array_concat.md)
+ [SUBARRAY 関数](r_subarray.md)
+ [ARRAY\$1FLATTEN 関数](array_flatten.md)

# SUBARRAY 関数
<a name="r_subarray"></a>

指定された位置から始まる配列の一部を抽出します。入力配列から指定された数の要素を含む新しい配列を返します。

## 構文
<a name="r_subarray-syntax"></a>

```
SUBARRAY( super_expr, start_position, length )
```

## 引数
<a name="r_subarray-arguments"></a>

*super\$1expr*  
配列形式で有効な SUPER 表現です。

*start\$1position*  
抽出の開始位置を指定する整数。インデックスは 0 ベースで、0 は最初の要素を示します。start\$1position が配列の長さを超える場合は、空の配列が返されます。

*length*  
抽出する要素の数を指定するオプションの整数。省略すると、配列の開始位置から終了位置までのすべての要素が返されます。

## 戻り型
<a name="r_subarray-return-type"></a>

SUBARRAY 関数は、SUPER データ値を返します。

## 例
<a name="r_subarray-examples"></a>

SUBARRAY 関数の例を次に示します。

```
 SELECT SUBARRAY(ARRAY('a', 'b', 'c', 'd', 'e', 'f'), 2, 3);
   subarray
---------------
 ["c","d","e"]
(1 row)
```

## 関連情報
<a name="r_subarray-see-also"></a>
+ [ARRAY\$1POSITION 関数](array_position.md)
+ [ARRAY\$1POSITIONS 関数](array_positions.md)
+ [ARRAY\$1FLATTEN 関数](array_flatten.md)
+ [ARRAY\$1CONCAT 関数](r_array_concat.md)

# ビット単位の集計関数
<a name="c_bitwise_aggregate_functions"></a>

ビット単位の集計関数は、ビット演算を計算し、整数値に変換または丸めることができる整数の列と列の集計を実行します。

**Topics**
+ [ビット単位の集計 NULL を使用する](#c_bitwise_aggregate_functions-nulls-in-bit-wise-aggregations)
+ [ビット単位の集計の DISTINCT サポート](#distinct-support-for-bit-wise-aggregations)
+ [ビット単位関数の概要の例](#r_bitwise_example)
+ [BIT\$1AND 関数](r_BIT_AND.md)
+ [BIT\$1OR 関数](r_BIT_OR.md)
+ [BOOL\$1AND 関数](r_BOOL_AND.md)
+ [BOOL\$1OR 関数](r_BOOL_OR.md)

## ビット単位の集計 NULL を使用する
<a name="c_bitwise_aggregate_functions-nulls-in-bit-wise-aggregations"></a>

ビット単位関数が Null 使用可能な列に適用されている場合、NULL 値は関数の結果が計算される前に削除されます。集計を満たす行がない場合、ビット単位関数は NULL を返します。同じ動作が標準の集計関数に適用されます。次に例を示します。

```
select sum(venueseats), bit_and(venueseats) from venue
where venueseats is null;

sum  | bit_and
------+---------
null |    null
(1 row)
```

## ビット単位の集計の DISTINCT サポート
<a name="distinct-support-for-bit-wise-aggregations"></a>

他の集計関数のように、ビット単位関数は DISTINCT キーワードをサポートします。

ただし、これらの関数で DISTINCT を使用しても結果に影響はありません。値の最初のインスタンスは、ビット単位の AND または OR 演算を満たすのに十分です。評価される式に重複する値が存在する場合でも、違いはありません。

DISTINCT プロセスはクエリ実行オーバーヘッドを伴う可能性があるため、ビット単位の関数で DISTINCT を使用しないことをお勧めします。

## ビット単位関数の概要の例
<a name="r_bitwise_example"></a>

以下に、ビット単位の関数を操作する方法を示す概要例をいくつか示します。また、各関数の説明とともに特定のコード例を見つけることができます。

ビット単位の関数の例は、TICKIT サンプルデータベースに基づいています。TICKIT サンプルデータベースの USERS テーブルには複数のブール列が含まれ、ユーザーごとに異なるイベントのタイプ (スポーツ、演劇、オペラなど) を好きかどうかを示しています。以下に例を示します。

```
select userid, username, lastname, city, state, 
likesports, liketheatre
from users limit 10;

userid | username | lastname  |     city     | state | likesports | liketheatre
-------+----------+-----------+--------------+-------+------------+-------------
1 | JSG99FHE | Taylor    | Kent         | WA    | t          | t
9 | MSD36KVR | Watkins   | Port Orford  | MD    | t          | f
```

USERS テーブルの新しいバージョンが別の方法で構築されていると想定します。この新しいバージョンでは、各ユーザーが好きまたは嫌いな 8 種類のイベントを (バイナリ形式で) 定義する 1 つの整数列です。この設計では、各ビット位置はイベントの種類を表します。8 種類すべてのタイプが好きなユーザーは、(以下のテーブルの 1 行目のように) 8 ビットすべてが 1 に設定されています。これらのどのイベントも好きではないユーザーは、8 ビットすべてに 0 が設定されます (2 行目を参照)。スポーツとジャズのみが好きなユーザーを次の 3 行目に示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_bitwise_aggregate_functions.html)

データベーステーブルでこれらのバイナリ値は、次のように整数として 1 つの LIKES 列に保存される場合があります。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_bitwise_aggregate_functions.html)

# BIT\$1AND 関数
<a name="r_BIT_AND"></a>

BIT\$1AND 関数は、単一の整数列または式内のすべての値に対してビット単位の AND 演算を実行します。この関数は、式の整数値ごとに対応する各バイナリ値の各ビットを集計します。

値のすべてにおいてどのビットにも 1 が設定されていない場合、BIT\$1AND 関数は `0` の結果を返します。値のすべてにおいて 1 つ以上のビットに 1 が設定されている場合、関数は整数値を返します。この整数はこれらのビットのバイナリ値に対応する数値です。

例えば、テーブルは列に 4 つの整数値を含みます (3、7、10、および 22)。これらの整数は、次のようにバイナリで表されます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_BIT_AND.html)

このデータセットの BIT\$1AND 演算は、すべてのビットで最後から 2 番目の位置にのみ `1` が設定されていることが分かります。結果は、整数値 `00000010` を表す `2` のバイナリ値です。したがって、BIT\$1AND 関数は `2` を返します。

## 構文
<a name="r_BIT_AND-synopsis"></a>

```
BIT_AND ( [DISTINCT | ALL] expression )
```

## 引数
<a name="r_BIT_AND-arguments"></a>

 * 式*   
関数の対象となる列または式。この式には、INT、INT2、または INT8 のデータ型がある必要があります。関数は同等の INT、INT2、または INT8 のデータ型を返します。

DISTINCT \$1 ALL  
引数 DISTINCT を指定すると、この関数は結果を計算する前に指定された式から重複した値をすべて削除します。引数 ALL 指定すると、この関数は重複する値をすべて保持します。ALL がデフォルトです。詳細については、「[ビット単位の集計の DISTINCT サポート](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations)」を参照してください。

## 例
<a name="r_bit_end_example"></a>

有効な企業情報が整数列に保存されるとすると、ビット単位関数を使用してこの情報を抽出および集計できます。次のクエリは USERLIKES と呼ばれるテーブルの LIKES 列に BIT\$1AND 関数を適用し、CITY 列による結果をグループ化します。

```
select city, bit_and(likes) from userlikes group by city 
order by city;
city          | bit_and
--------------+---------
Los Angeles   |       0
Sacramento    |       0
San Francisco |       0
San Jose      |      64
Santa Barbara |     192
(5 rows)
```

これらの結果は次のように解釈できます。
+ サンタバーバラの整数値 `192` は、バイナリ値 `11000000` に変換されます。つまり、この都市のすべてのユーザーがスポーツと演劇を好きですが、すべてのユーザーがその他のタイプのイベントを好きというわけではありません。
+ 整数 `64` は `01000000` に変換されます。したがって、サンノゼのユーザーの場合、全員が好きなイベントタイプは演劇のみです。
+ 他の 3 都市の `0` の値は、「好き」と回答したユーザーがこれらの都市で 1 人もいないことを示します。

# BIT\$1OR 関数
<a name="r_BIT_OR"></a>

BIT\$1OR 関数は、単一の整数列または式内のすべての値に対してビット単位の OR 演算を実行します。この関数は、式の整数値ごとに対応する各バイナリ値の各ビットを集計します。

例えば、テーブルが列に 4 つの整数値を含んでいるとします (3、7、10、および 22)。これらの整数は、次のようにバイナリで表されます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_BIT_OR.html)

BIT\$1OR 関数を整数値のセットに適用すると、オペレーションは各位置で `1` が見つかった値を探します。この場合、`1`が少なくとも 1 つの値の最後の 5 つの位置に存在し、`00011111`のバイナリ結果を生成します。そのため、関数は `31` (または `16 + 8 + 4 + 2 + 1`) を返します。

## 構文
<a name="r_BIT_OR-synopsis"></a>

```
BIT_OR ( [DISTINCT | ALL] expression )
```

## 引数
<a name="r_BIT_OR-arguments"></a>

 * 式*   
関数の対象となる列または式。この式には、INT、INT2、または INT8 のデータ型がある必要があります。関数は同等の INT、INT2、または INT8 のデータ型を返します。

DISTINCT \$1 ALL  
引数 DISTINCT を指定すると、この関数は結果を計算する前に指定された式から重複した値をすべて削除します。引数 ALL 指定すると、この関数は重複する値をすべて保持します。ALL がデフォルトです。詳細については、「[ビット単位の集計の DISTINCT サポート](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations)」を参照してください。

## 例
<a name="r_bit_or_example"></a>

次のクエリは USERLIKES と呼ばれるテーブルの LIKES 列に BIT\$1OR 関数を適用し、CITY 列による結果をグループ化します。

```
select city, bit_or(likes) from userlikes group by city
order by city;
city          | bit_or
--------------+--------
Los Angeles   |    127
Sacramento    |    255
San Francisco |    255
San Jose      |    255
Santa Barbara |    255
(5 rows)
```

表示された 4 都市では、すべてのイベントタイプで少なくとも 1 人のユーザーが好きと答えています (`255=11111111`)。ロサンゼルスでは、スポーツを除くすべてのイベントタイプで「好き」と答えたユーザーが少なくとも 1 人います (`127=01111111`)。

# BOOL\$1AND 関数
<a name="r_BOOL_AND"></a>

BOOL\$1AND 関数は、単一のブール値、整数値、または式に対して動作します。この関数は、BIT\$1AND 関数と BIT\$1OR 関数に同様のロジックを適用します。この関数の戻り値の型はブール値 (`true` または `false`) です。

セットの値がすべて true の場合、BOOL\$1AND 関数は `true` (`t`) を返します。いずれかの値が false の場合、関数は `false` (`f`) を返します。

## 構文
<a name="r_BOOL_AND-synopsis"></a>

```
BOOL_AND ( [DISTINCT | ALL] expression )
```

## 引数
<a name="r_BOOL_AND-arguments"></a>

 * 式*   
関数の対象となる列または式。この式には BOOLEAN または整数のデータ型がある必要があります。関数の戻り値の型は BOOLEAN です。

DISTINCT \$1 ALL  
引数 DISTINCT を指定すると、この関数は結果を計算する前に指定された式から重複した値をすべて削除します。引数 ALL 指定すると、この関数は重複する値をすべて保持します。ALL がデフォルトです。詳細については、「[ビット単位の集計の DISTINCT サポート](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations)」を参照してください。

## 例
<a name="r_bool_and_example"></a>

ブール関数をブール式または整数式のどちらかに対して使用できます。例えば、次のクエリは複数のブール列のある TICKIT データベースの標準 USERS テーブルから結果を返します。

BOOL\$1AND 関数は 5 行すべてに `false` を返します。これら各州のすべてのユーザーがスポーツを好きというわけではありません。

```
select state, bool_and(likesports) from users 
group by state order by state limit 5;

state | bool_and
------+---------
AB    | f
AK    | f
AL    | f
AZ    | f
BC    | f
(5 rows)
```

# BOOL\$1OR 関数
<a name="r_BOOL_OR"></a>

BOOL\$1OR 関数は、単一のブール値、整数値、または式に対して動作します。この関数は、BIT\$1AND 関数と BIT\$1OR 関数に同様のロジックを適用します。この関数の戻り値の型はブール値 (`true`、`false`、または `NULL`) です。

セットの 1 つ以上の値が `true` の場合、BOOL\$1OR 関数は `true` (`t`) を返します。セットの値がすべて `false` の場合、関数は `false` (`f`) を返します。値が不明な場合は NULL を返すことができます。

## 構文
<a name="r_BOOL_OR-synopsis"></a>

```
BOOL_OR ( [DISTINCT | ALL] expression )
```

## 引数
<a name="r_BOOL_OR-arguments"></a>

 * 式*   
関数の対象となる列または式。この式には BOOLEAN または整数のデータ型がある必要があります。関数の戻り値の型は BOOLEAN です。

DISTINCT \$1 ALL  
引数 DISTINCT を指定すると、この関数は結果を計算する前に指定された式から重複した値をすべて削除します。引数 ALL 指定すると、この関数は重複する値をすべて保持します。ALL がデフォルトです。「[ビット単位の集計の DISTINCT サポート](c_bitwise_aggregate_functions.md#distinct-support-for-bit-wise-aggregations)」を参照してください。

## 例
<a name="r_bool_or_example"></a>

ブール関数はブール式または整数式のどちらかで使用できます。例えば、次のクエリは複数のブール列のある TICKIT データベースの標準 USERS テーブルから結果を返します。

BOOL\$1OR 関数は 5 行すべてに `true` を返します。これらの州のそれぞれにおいて少なくとも 1 人のユーザーがスポーツを好きです。

```
select state, bool_or(likesports) from users 
group by state order by state limit 5;

state | bool_or 
------+--------
AB    | t      
AK    | t      
AL    | t       
AZ    | t       
BC    | t       
(5 rows)
```

次の例は、NULL を返します。

```
SELECT BOOL_OR(NULL = '123')
               bool_or
------                  
NULL
```

# 条件式
<a name="c_conditional_expressions"></a>

**Topics**
+ [CASE 条件式](r_CASE_function.md)
+ [DECODE 関数](r_DECODE_expression.md)
+ [GREATEST および LEAST 関数](r_GREATEST_LEAST.md)
+ [NVL および COALESCE 関数](r_NVL_function.md)
+ [NVL2 関数](r_NVL2.md)
+ [NULLIF 関数](r_NULLIF_function.md)

Amazon Redshift は、SQL 標準の拡張であるいくつかの条件式をサポートしています。

# CASE 条件式
<a name="r_CASE_function"></a>

CASE 式は条件式であり、他の言語で使われる if/then/else ステートメントと似ています。CASE は、複数の条件がある場合に結果を指定するために使用されます。SELECT コマンドでなど、SQL 式が有効な場合に CASE を使用してください。

2 種類の CASE 式 (簡易および検索) があります。
+ 簡易 CASE 式では、式は値と比較されます。一致が検出された場合、THEN 句で指定されたアクションが適用されます。一致が検出されない場合、ELSE 句のアクションが適用されます。
+ 検索 CASE 式では、CASE ごとにブール式に基づいて検証され、CASE ステートメントは最初を一致する CASE を返します。WHEN 句で検出されない場合、ELSE 句のアクションが返されます。

## 構文
<a name="r_CASE_function-syntax"></a>

条件を満たすために使用される簡易 CASE ステートメント

```
CASE expression
  WHEN value THEN result
  [WHEN...]
  [ELSE result]
END
```

各条件を検証するために使用する検索 CASE ステートメント

```
CASE
  WHEN condition THEN result
  [WHEN ...]
  [ELSE result]
END
```

## 引数
<a name="r_CASE_function-arguments"></a>

 *expression*   
列名または有効な式。

 *値*   
数値定数または文字列などの式を比較する値。

 *result*   
式またはブール条件が検証されるときに返されるターゲット値または式。すべての結果式のデータタイプは、単一の出力タイプに変換できる必要があります。

 *condition*   
true または false に評価される Boolean 式。*条件*が true の場合、CASE 式の値は条件に続く結果であり、残りの CASE 式は処理されません。*条件*が false の場合、後続の WHEN 句はすべて評価されます。WHEN 条件の結果がどれも true ではない場合、CASE 式の値が ELSE 句の結果になります。ELSE 句が省略され、どの条件も true ではない場合、結果は Null となります。

## 例
<a name="r_CASE_function-examples"></a>

次の例では、サンプル TICKIT データの VENUE テーブルと SALES テーブルを使用しています。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

簡易 CASE 式を使用し、VENUE テーブルに対するクエリで `New York City` を `Big Apple` に置換します。その他すべての都市名を `other` に置換します。

```
select venuecity,
  case venuecity
    when 'New York City'
    then 'Big Apple' else 'other'
  end 
from venue
order by venueid desc;

venuecity        |   case
-----------------+-----------
Los Angeles      | other
New York City    | Big Apple
San Francisco    | other
Baltimore        | other
...
```

検索 CASE 式を使用し、それぞれのチケット販売の PRICEPAID 値に基づいてグループ番号を割り当てます。

```
select pricepaid,
  case when pricepaid <10000 then 'group 1'
    when pricepaid >10000 then 'group 2'
    else 'group 3'
  end 
from sales
order by 1 desc;

pricepaid |  case
----------+---------
12624     | group 2
10000     | group 3
10000     | group 3
9996      | group 1
9988      | group 1
...
```

# DECODE 関数
<a name="r_DECODE_expression"></a>

DECODE 式は、等価条件の結果に応じて、特定の値を別の特定の値またはデフォルト値で置換します。この演算は簡易 CASE 式または IF-THEN-ELSE ステートメントの演算と同じです。

## 構文
<a name="r_DECODE_expression-synopsis"></a>

```
DECODE ( expression, search, result [, search, result ]... [ ,default ] )
```

このタイプの式は、テーブルに格納されている略語またはコードを、レポートに必要な意味のあるビジネス値に置き換える場合に便利です。

## パラメータ
<a name="r_DECODE_expression-parameters"></a>

 *expression*   
テーブル内の列など、比較する値のソース。

 *\$1search*   
ソース式と比較されるターゲット値 (数値や文字列など)。検索式の結果は単一の固定値である必要があります。値の範囲 (`age between 20 and 29` など) を検証する式を指定することはできません。置換する値ごとに個別の検索/結果のペアを指定する必要があります。  
検索式のすべてのインスタンスのデータ型は、同じまたは互換性がある必要があります。*expression* および *search* パラメータも互換性のある必要があります。

 *結果*   
式が検索値を満たす場合、クエリが返す置換値。DECODE 式に少なくとも 1 の検索/結果のペアを含める必要があります。  
結果式のすべてのインスタンスのデータ型は同じまたは互換性がある必要があります。*result* および *default* パラメータも互換性のある必要があります。

 *default*   
検索条件が失敗した場合に使用されるオプションのデフォルト値。デフォルト値を指定しない場合、DECODE 式は NULL を返します。

## 使用に関する注意事項
<a name="decode-expression-usage-notes"></a>

*expression* 値と *search* 値が両方とも NULL の場合、DECODE 結果は対応する *result* の値になります。関数のこの使用方法の説明については、「例」のセクションを参照してください。

このように使用する場合、DECODE は「[NVL2 関数](r_NVL2.md)」に似ていますが、いくつかの違いがあります。その違いについては、NVL2 の使用に関する注意事項を参照してください。

## 例
<a name="r_DECODE_expression-examples"></a>

値 `2008-06-01` が datetable の caldate 列に存在する場合、次の例ではこれが `June 1st, 2008` に置換されます。この例では、他のすべての caldate 値が NULL に置き換えられます。

```
select decode(caldate, '2008-06-01', 'June 1st, 2008')
from datetable where month='JUN' order by caldate;

case
----------------
June 1st, 2008

...
(30 rows)
```

次の例では、DECODE 式を使用して、CATEGORY テーブルの 5 つの省略された CATNAME 列を完全名に変換し、列の他の値を `Unknown` に変換します。

```
select catid, decode(catname,
'NHL', 'National Hockey League',
'MLB', 'Major League Baseball',
'MLS', 'Major League Soccer',
'NFL', 'National Football League',
'NBA', 'National Basketball Association',
'Unknown')
from category
order by catid;

catid  |	case
-------+---------------------------------
1      | Major League Baseball
2      | National Hockey League
3      | National Football League
4      | National Basketball Association
5      | Major League Soccer
6      | Unknown
7      | Unknown
8      | Unknown
9      | Unknown
10     | Unknown
11     | Unknown
(11 rows)
```

DECODE 式を使用して、VENUESEATS 列が NULL のコロラドとネバダの会場を検索して、NULL をゼロに変換します。VENUESEATS 列が NULL でない場合は、結果として 1 を返します。

```
select venuename, venuestate, decode(venueseats,null,0,1)
from venue
where venuestate in('NV','CO')
order by 2,3,1;

venuename	              | venuestate     | case
------------------------------+----------------+-----------
Coors Field                   |	CO	       |   1
Dick's Sporting Goods Park    |	CO	       |   1
Ellie Caulkins Opera House    |	CO	       |   1
INVESCO Field		      |	CO	       |   1
Pepsi Center		      |	CO	       |   1
Ballys Hotel		      |	NV	       |   0
Bellagio Hotel                |	NV	       |   0
Caesars Palace                |	NV	       |   0
Harrahs Hotel                 |	NV	       |   0
Hilton Hotel                  |	NV	       |   0
...						
(20 rows)
```

# GREATEST および LEAST 関数
<a name="r_GREATEST_LEAST"></a>

任意の数の式のリストから最大値または最小値を返します。

## 構文
<a name="r_GREATEST_LEAST-synopsis"></a>

```
GREATEST (value [, ...])
LEAST (value [, ...])
```

## パラメータ
<a name="r_GREATEST_LEAST-arguments"></a>

*expression\$1list*  
列名などの式のカンマ区切りリスト。式はすべて一般的なデータ型に変換可能である必要があります。リスト内の NULL 値は無視されます。すべての式が NULL と評価された場合、結果は NULL になります。

## 戻り値
<a name="r_GREATEST_LEAST-returns"></a>

指定された式のリストから最大 (GREATEST の場合) または最小 (LEAST の場合) の値を返します。

## 例
<a name="r_GREATEST_LEAST-examples"></a>

次の例は、アルファベット順で最も高い `firstname` または `lastname` の値を返します。

```
select firstname, lastname, greatest(firstname,lastname) from users
where userid < 10
order by 3;

 firstname | lastname  | greatest
-----------+-----------+-----------
 Lars      | Ratliff   | Ratliff
 Reagan    | Hodge     | Reagan
 Colton    | Roy       | Roy
 Barry     | Roy       | Roy
 Tamekah   | Juarez    | Tamekah
 Rafael    | Taylor    | Taylor
 Victor    | Hernandez | Victor
 Vladimir  | Humphrey  | Vladimir
 Mufutau   | Watkins   | Watkins
(9 rows)
```

# NVL および COALESCE 関数
<a name="r_NVL_function"></a>

一連の式の中で、Null 以外の最初の式の値を返します。Null 以外の値が見つかると、リスト内の残りの式は評価されません。

NVL は COALESCE と同じです。これらはシノニムです。このトピックでは、両方の構文について説明し、例を示します。

## 構文
<a name="r_NVL_function-synopsis"></a>

```
NVL( expression, expression, ... )
```

COALESCE の構文は同じです。

```
COALESCE( expression, expression, ... )
```

すべての式が null の場合、結果は null になります。

これらの関数は、プライマリ値がないか Null の場合にセカンダリ値を返すときに役に立ちます。例えば、クエリを実行すると、使用可能な 3 つの電話番号 (携帯、自宅、職場) のうち最初の電話番号が返されることがあります。関数内の式の順序によって、評価の順序が決まります。

## 引数
<a name="r_NVL_function-arguments"></a>

 *expression*   
Null ステータスが評価される列名などの式。

## 戻り型
<a name="r_NVL_function-returntype"></a>

Amazon Redshift は、入力式に基づいて戻り値のデータ型を決定します。入力式のデータ型に共通の型がない場合は、エラーが返されます。

## 例
<a name="r_NVL_function-examples"></a>

リストに整数式が含まれている場合、関数は整数を返します。

```
SELECT COALESCE(NULL, 12, NULL);

coalesce
--------------
12
```

この例は前の例と同じですが、NVL を使用して、同じ結果が返される点が異なります。

```
SELECT NVL(NULL, 12, NULL);

coalesce
--------------
12
```

次の例は、文字列型を返します。

```
SELECT COALESCE(NULL, 'Amazon Redshift', NULL);

coalesce
--------------
Amazon Redshift
```

次の例では、式リストのデータ型が異なるため、エラーになります。この場合、リストには文字列型と数値型の両方があります。

```
SELECT COALESCE(NULL, 'Amazon Redshift', 12);
ERROR: invalid input syntax for integer: "Amazon Redshift"
```

この例では、START\$1DATE および END\$1DATE 列を持つテーブルを作成し、Null 値を含む行を挿入して、NVL 式をその 2 列に適用します。

```
create table datetable (start_date date, end_date date);           
insert into datetable values ('2008-06-01','2008-12-31');
insert into datetable values (null,'2008-12-31');
insert into datetable values ('2008-12-31',null);
```

```
select nvl(start_date, end_date)
from datetable
order by 1;
               
coalesce
------------
2008-06-01
2008-12-31
2008-12-31
```

NVL 式のデフォルトの列名は COALESCE です。次のクエリは同じ結果を返します。

```
select coalesce(start_date, end_date)
from datetable
order by 1;
```

次のクエリ例では、ホテルの予約情報のサンプルを含むテーブルを作成し、複数の行を挿入します。一部のレコードは NULL 値を含んでいます。

```
create table booking_info (booking_id int, booking_code character(8), check_in date, check_out date, funds_collected numeric(12,2));
```

次のサンプルデータを挿入します。一部のレコードには `check_out` 日付または `funds_collected` 数がありません。

```
insert into booking_info values (1, 'OCEAN_WV', '2023-02-01','2023-02-03',100.00);
insert into booking_info values (2, 'OCEAN_WV', '2023-04-22','2023-04-26',120.00);
insert into booking_info values (3, 'DSRT_SUN', '2023-03-13','2023-03-16',125.00);
insert into booking_info values (4, 'DSRT_SUN', '2023-06-01','2023-06-03',140.00);
insert into booking_info values (5, 'DSRT_SUN', '2023-07-10',null,null);
insert into booking_info values (6, 'OCEAN_WV', '2023-08-15',null,null);
```

次のクエリは、日付のリストを返します。`check_out` 日付が使用できない場合は、`check_in` 日付が表示されます。

```
select coalesce(check_out, check_in)
from booking_info
order by booking_id;
```

結果は、以下のとおりです。最後の 2 つのレコードには `check_in` 日付が表示されていることに注意してください。

```
coalesce
------------
2023-02-03
2023-04-26	
2023-03-16	
2023-06-03	
2023-07-10	
2023-08-15
```

クエリが特定の関数または列に対して Null 値を返すことが予想される場合は、NVL 式を使用して Null 値を他の値に置換できます。例えば、SUM などの集計関数は検証する行がない場合に、ゼロの代わりに Null 値を返します。NVL 式を使用して、これらの Null 値を `700.0` に置き換えることができます。`485` の代わりに、`funds_collected` を合計した結果が `1885` になります。これは、Null を含む 2 つの行が `700` に置き換えられるためです。

```
select sum(nvl(funds_collected, 700.0)) as sumresult from booking_info;
               
sumresult
------
 1885
```

# NVL2 関数
<a name="r_NVL2"></a>

指定された式の結果が NULL か NOT NULL かに基づいて、2 つの値のいずれかを返します。

## 構文
<a name="r_NVL2-synopsis"></a>

```
NVL2 ( expression, not_null_return_value, null_return_value )
```

## 引数
<a name="r_NVL2-arguments"></a>

 *expression*   
Null ステータスが評価される列名などの式。

 *not\$1null\$1return\$1value*   
*expression* が NOT NULL に評価された場合に返される値。*not\$1null\$1return\$1value* 値は、*expression* と同じデータ型を持つか、そのデータ型に暗黙的に変換可能である必要があります。

 *null\$1return\$1value*   
*expression* が NULL に評価される場合に値が返されます。*null\$1return\$1value* 値は、*expression* と同じデータ型を持つか、そのデータ型に暗黙的に変換可能である必要があります。

## 戻り型
<a name="r_NVL2-return-type"></a>

NVL2 の戻り値の型は、次のように決まります。
+ *not\$1null\$1return\$1value* または *null\$1return\$1value* が null の場合、not-null 式のデータ型が返されます。

*not\$1null\$1return\$1value* と *null\$1return\$1value* がどちらも null である場合
+ *not\$1null\$1return\$1value* と *null\$1return\$1value* のデータ型が同じ場合、そのデータ型が返されます。
+ *not\$1null\$1return\$1value* と *null\$1return\$1value* の数値データ型が異なる場合、互換性を持つ最小の数値データ型が返されます。
+ *not\$1null\$1return\$1value* と *null\$1return\$1value* の日時データ型が異なる場合、タイムスタンプデータ型が返されます。
+ *not\$1null\$1return\$1value* と *null\$1return\$1value* の文字データ型が異なる場合、*not\$1null\$1return\$1value* のデータ型が返されます。
+ *not\$1null\$1return\$1value* と *null\$1return\$1value* で数値データ型と数値以外のデータ型が混合している場合、*not\$1null\$1return\$1value* のデータ型が返されます。

**重要**  
*not\$1null\$1return\$1value* のデータ型が返される最後の 2 つのケースでは、*null\$1return\$1value* がそのデータ型に暗黙的にキャストされます。データ型に互換性がない場合、関数は失敗します。

## 使用に関する注意事項
<a name="nvl2-usage-notes"></a>

[DECODE 関数](r_DECODE_expression.md) は、*式*と*検索*パラメータの両方が null の場合、NVL2 と同様の方法で使用できます。異なるのは、DECODE の場合、*result* パラメータの値とデータ型の両方が戻り値に含められるという点です。一方、NVL2 の場合、*not\$1null\$1return\$1value* または *null\$1return\$1value* パラメータのうち、どちらか関数により選択された方の値が戻り値に含められますが、データ型については *not\$1null\$1return\$1value* のデータ型が含められます。

例えば、column1 が NULL の場合、次のクエリは同じ値を返します。ただし、DECODE の戻り値のデータ型は INTEGER となり、NVL2 の戻り値のデータ型は VARCHAR になります。

```
select decode(column1, null, 1234, '2345');
select nvl2(column1, '2345', 1234);
```

## 例
<a name="r_NVL2-examples"></a>

次の例では、一部のサンプルデータを変更し、2 つのフィールドを評価してユーザーに適切な連絡先情報を提供します。

```
update users set email = null where firstname = 'Aphrodite' and lastname = 'Acevedo';

select (firstname + ' ' + lastname) as name, 
nvl2(email, email, phone) AS contact_info
from users 
where state = 'WA'
and lastname  like 'A%'
order by lastname, firstname;

name			     contact_info	
--------------------+-------------------------------------------
Aphrodite Acevedo	(906) 632-4407
Caldwell Acevedo 	Nunc.sollicitudin@Duisac.ca
Quinn Adams		  vel@adipiscingligulaAenean.com
Kamal Aguilar		quis@vulputaterisusa.com
Samson Alexander	 hendrerit.neque@indolorFusce.ca
Hall Alford		  ac.mattis@vitaediamProin.edu
Lane Allen		   et.netus@risusDonec.org
Xander Allison	   ac.facilisis.facilisis@Infaucibus.com
Amaya Alvarado	   dui.nec.tempus@eudui.edu
Vera Alvarez		 at.arcu.Vestibulum@pellentesque.edu
Yetta Anthony		enim.sit@risus.org
Violet Arnold		ad.litora@at.com
August Ashley		consectetuer.euismod@Phasellus.com
Karyn Austin		 ipsum.primis.in@Maurisblanditenim.org
Lucas Ayers		  at@elitpretiumet.com
```

# NULLIF 関数
<a name="r_NULLIF_function"></a>

## 構文
<a name="r_NULLIF_function-synopsis"></a>

NULLIF 式は 2 つの引数を比較し、引数が等しい場合に Null を返します。引数が等しくない場合、最初の引数が返されます。この式は NVL または COALESCE 式の逆です。

```
NULLIF ( expression1, expression2 )
```

## 引数
<a name="r_NULLIF_function-arguments"></a>

 *expression1, expression2*   
比較対象の列または式。戻り値の型は、最初の式の型と同じです。NULLIF の結果のデフォルトの列名は、最初の式の列名です。

## 例
<a name="r_NULLIF_function-examples"></a>

次の例では、引数が等しくないため、クエリは `first` 文字列を返します。

```
SELECT NULLIF('first', 'second');

case
-------
first
```

次の例では、文字列リテラル引数が等しいため、クエリは `NULL` を返します。

```
SELECT NULLIF('first', 'first');

case
-------
NULL
```

次の例では、整数の引数が等しくないため、クエリは `1` を返します。

```
SELECT NULLIF(1, 2);

case
-------
1
```

次の例では、整数の引数が等しいため、クエリは `NULL` を返します。

```
SELECT NULLIF(1, 1);

case
-------
NULL
```

次の例に示すクエリは、LISTID 値と SALESID 値が一致する場合に Null を返します。

```
select nullif(listid,salesid), salesid
from sales where salesid<10 order by 1, 2 desc;

listid  | salesid
--------+---------
     4  |       2
     5  |       4
     5  |       3
     6  |       5
     10 |       9
     10 |       8
     10 |       7
     10 |       6
        |       1
(9 rows)
```

NULLIF を使用し、空の文字列が常に Null として返されるようにします。以下の例では、NULLIF 式は Null 値または少なくとも 1 文字を含む文字列のどちらかを返します。

```
insert into category
values(0,'','Special','Special');

select nullif(catgroup,'') from category
where catdesc='Special';

catgroup
----------
null
(1 row)
```

NULLIF は末尾の空白を無視します。文字列が空ではないが空鶴が含まれる場合も、NULLIF は Null を返します。

```
create table nulliftest(c1 char(2), c2 char(2));

insert into nulliftest values ('a','a ');

insert into nulliftest values ('b','b');


select nullif(c1,c2) from nulliftest;
c1
------
null
null
(2 rows)
```

# データ型フォーマット関数
<a name="r_Data_type_formatting"></a>

**Topics**
+ [CAST 関数](r_CAST_function.md)
+ [CONVERT 関数](r_CONVERT_function.md)
+ [TEXT\$1TO\$1INT\$1ALT](r_TEXT_TO_INT_ALT.md)
+ [TEXT\$1TO\$1NUMERIC\$1ALT](r_TEXT_TO_NUMERIC_ALT.md)
+ [TO\$1CHAR](r_TO_CHAR.md)
+ [TO\$1DATE 関数](r_TO_DATE_function.md)
+ [TO\$1NUMBER](r_TO_NUMBER.md)
+ [TRY\$1CAST 関数](r_TRY_CAST.md)
+ [日時形式の文字列](r_FORMAT_strings.md)
+ [数値形式の文字列](r_Numeric_formating.md)
+ [数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)

データ型フォーマット関数を使用すると、簡単な方法で値のデータ型を変換できます。これらの各関数では必ず、最初の引数にはフォーマットする値を指定し、2 番目の引数には新しい形式のテンプレートを指定します。Amazon Redshift は、いくつかのデータ型のフォーマット関数をサポートしています。

# CAST 関数
<a name="r_CAST_function"></a>

CAST 関数は、1 つのデータ型を互換性のある別のデータ型に変換します。例えば、文字列を日付に変換したり、数値型を文字列に変換したりできます。CAST はランタイム変換を実行します。つまり、変換によってソーステーブル内の値のデータ型は変更されません。クエリのコンテキストでのみ変更されます。

CAST 関数は、あるデータ型から別のデータ型に変換するという点では [CONVERT 関数](r_CONVERT_function.md) とよく似ていますが、呼び出し方が異なります。

特定のデータ型は、CAST 関数または CONVERT 関数を使用して、他のデータ型に明示的に変換する必要があります。その他のデータ型は、CAST や CONVERT を使用せずに、別のコマンドの一部として暗黙的に変換できます。「[型の互換性と変換](c_Supported_data_types.md#r_Type_conversion)」を参照してください。

## 構文
<a name="r_CAST_function-syntax"></a>

式のデータ型を別のデータ型に変換するには、次の 2 つの同等な構文フォームのいずれかを使用します。

```
CAST ( expression AS type )
expression :: type
```

## 引数
<a name="r_CAST_function-arguments"></a>

 *expression*   
1 つ以上の値 (列名、値など) に評価される式。null 値を変換すると、null が返されます。式に、空白または空の文字列を含めることはできません。

 *型*   
サポートされる [データ型](c_Supported_data_types.md) の 1 つ。

## 戻り型
<a name="r_CAST_function-return-type"></a>

CAST は、*type* 引数で指定されたデータ型を返します。

**注記**  
次の正確性が失われる DECIMAL 変換のように、問題のある変換を実行しようとすると、Amazon Redshift はエラーを返します。  

```
select 123.456::decimal(2,1);
```
また、次の INTEGER 変換では、オーバーフローが生じます。  

```
select 12345678::smallint;
```

## 例
<a name="r_CAST_function-examples"></a>

一部の例では、サンプルの [TICKIT データベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)を使用しています。サンプルデータの設定の詳細については、「[データをロードする](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html)」を参照してください。

次の 2 つのクエリは同等です。どちらも 10 進値を整数に変換します。

```
select cast(pricepaid as integer)
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

```
select pricepaid::integer
from sales where salesid=100;

pricepaid
-----------
162
(1 row)
```

次の場合も同様の結果が得られます。サンプルデータの実行は必要ありません。

```
select cast(162.00 as integer) as pricepaid;

pricepaid
-----------
162
(1 row)
```

次の例では、タイムスタンプ列の値を日付に変換して、各結果から時刻を削除します。

```
select cast(saletime as date), salesid
from sales order by salesid limit 10;

 saletime  | salesid
-----------+---------
2008-02-18 |       1
2008-06-06 |       2
2008-06-06 |       3
2008-06-09 |       4
2008-08-31 |       5
2008-07-16 |       6
2008-06-26 |       7
2008-07-10 |       8
2008-07-22 |       9
2008-08-06 |      10
(10 rows)
```

前のサンプルで示した CAST を使用しなかった場合、結果には *2008-02-18 02:36:48* という時刻が含まれます。

次のクエリは、可変文字データを日付に変換します。実行にサンプルデータは必要ありません。

```
select cast('2008-02-18 02:36:48' as date) as mysaletime;

mysaletime    
--------------------
2008-02-18  
(1 row)
```

次の例では、日付列の値をタイムスタンプに変換します。

```
select cast(caldate as timestamp), dateid
from date order by dateid limit 10;

      caldate       | dateid
--------------------+--------
2008-01-01 00:00:00 |   1827
2008-01-02 00:00:00 |   1828
2008-01-03 00:00:00 |   1829
2008-01-04 00:00:00 |   1830
2008-01-05 00:00:00 |   1831
2008-01-06 00:00:00 |   1832
2008-01-07 00:00:00 |   1833
2008-01-08 00:00:00 |   1834
2008-01-09 00:00:00 |   1835
2008-01-10 00:00:00 |   1836
(10 rows)
```

前のサンプルのような場合は、[TO\$1CHAR](https://docs.aws.amazon.com/redshift/latest/dg/r_TO_CHAR.html) を使用して出力フォーマットをさらに制御できます。

次の例では、整数を文字列に変換します。

```
select cast(2008 as char(4));

bpchar
--------
2008
```

次の例では、DECIMAL(6,3) 値を DECIMAL(4,1) 値に変換します。

```
select cast(109.652 as decimal(4,1));

numeric
---------
109.7
```

この例は、より複雑な式を示しています。SALES テーブル内の PRICEPAID 列 (DECIMAL(8,2) 列) を DECIMAL(38,2) 列に変換し、結果の値を 100000000000000000000 で乗算します。

```
select salesid, pricepaid::decimal(38,2)*100000000000000000000
as value from sales where salesid<10 order by salesid;


 salesid |           value
---------+----------------------------
       1 | 72800000000000000000000.00
       2 |  7600000000000000000000.00
       3 | 35000000000000000000000.00
       4 | 17500000000000000000000.00
       5 | 15400000000000000000000.00
       6 | 39400000000000000000000.00
       7 | 78800000000000000000000.00
       8 | 19700000000000000000000.00
       9 | 59100000000000000000000.00
(9 rows)
```

**注記**  
`GEOMETRY` データ型に対して CAST や CONVERT オペレーションを実行して別のデータ型に変更することはできません。ただし、`GEOMETRY` 引数を受け入れる関数への入力として、Extended Well-Known Binary (EWKB) 形式の 16 進数の文字列リテラルを指定できます。例えば、後続の `ST_AsText` 関数は `GEOMETRY` データ型を想定します。  

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
また、明示的に `GEOMETRY` データ型を指定することもできます。  

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```

# CONVERT 関数
<a name="r_CONVERT_function"></a>

[CAST 関数](https://docs.aws.amazon.com/redshift/latest/dg/r_CAST_function.html)と同様に、CONVERT 関数はあるデータ型を互換性のある別のデータ型に変換します。例えば、文字列を日付に変換したり、数値型を文字列に変換したりできます。CONVERT は、ランタイム変換を実行します。つまり、変換によってソーステーブルの値のデータ型は変更されません。クエリのコンテキストでのみ変更されます。

特定のデータ型は、CONVERT 関数を使用して、他のデータ型に明示的に変換する必要があります。その他のデータ型は、CAST や CONVERT を使用せずに、別のコマンドの一部として暗黙的に変換できます。「[型の互換性と変換](c_Supported_data_types.md#r_Type_conversion)」を参照してください。

## 構文
<a name="r_CONVERT-syntax"></a>

```
CONVERT ( type, expression )
```

## 引数
<a name="r_CONVERT-arguments"></a>

 *型*   
サポートされる [データ型](c_Supported_data_types.md) の 1 つ。

 *expression*   
1 つ以上の値 (列名、値など) に評価される式。null 値を変換すると、null が返されます。式に、空白または空の文字列を含めることはできません。

## 戻り型
<a name="r_CONVERT-return-type"></a>

CONVERT は、*type* 引数で指定されたデータ型を返します。

**注記**  
次の正確性が失われる DECIMAL 変換のように、問題のある変換を実行しようとすると、Amazon Redshift はエラーを返します。  

```
SELECT CONVERT(decimal(2,1), 123.456);
```
また、次の INTEGER 変換では、オーバーフローが生じます。  

```
SELECT CONVERT(smallint, 12345678);
```

## 例
<a name="r_CONVERT-examples"></a>

一部の例では、サンプルの [TICKIT データベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)を使用しています。サンプルデータの設定の詳細については、「[データをロードする](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html)」を参照してください。

次のクエリは、CONVERT 関数を使用して小数の列を整数に変換します。

```
SELECT CONVERT(integer, pricepaid)
FROM sales WHERE salesid=100;
```

この例では、整数を文字列に変換します。

```
SELECT CONVERT(char(4), 2008);
```

次の例では、現在の日付と時刻を可変文字データ型に変換します。

```
SELECT CONVERT(VARCHAR(30), GETDATE());

getdate
---------
2023-02-02 04:31:16
```

この例では、販売時間の列を時刻のみに変換し、各行から日付を削除します。

```
SELECT CONVERT(time, saletime), salesid
FROM sales order by salesid limit 10;
```

タイムスタンプをあるタイムゾーンから別のタイムゾーンに変換する方法については、「[CONVERT\$1TIMEZONE 関数](CONVERT_TIMEZONE.md)」を参照してください。その他の日付および時刻関数については、「[日付および時刻関数](Date_functions_header.md)」を参照してください。

次の例では、可変文字データを datetime オブジェクトに変換します。

```
SELECT CONVERT(datetime, '2008-02-18 02:36:48') as mysaletime;
```

**注記**  
`GEOMETRY` データ型に対して CAST や CONVERT オペレーションを実行して別のデータ型に変更することはできません。ただし、`GEOMETRY` 引数を受け入れる関数への入力として、Extended Well-Known Binary (EWKB) 形式の 16 進数の文字列リテラルを指定できます。例えば、後続の `ST_AsText` 関数は `GEOMETRY` データ型を想定します。  

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
また、明示的に `GEOMETRY` データ型を指定することもできます。  

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```

# TEXT\$1TO\$1INT\$1ALT
<a name="r_TEXT_TO_INT_ALT"></a>

TEXT\$1TO\$1INT\$1ALT は、Teradata スタイルの形式を使用して文字列を整数に変換します。結果の小数桁は切り捨てられます。

## 構文
<a name="r_TEXT_TO_INT_ALT-synopsis"></a>

```
TEXT_TO_INT_ALT (expression [ , 'format'])
```

## 引数
<a name="r_TEXT_TO_INT_ALT-arguments"></a>

 *expression*   
1 つ以上の CHAR 値または VARCHAR 値 (列名、リテラル文字列など) になる式。null 値を変換すると、null が返されます。この関数は、空白または空の文字列を 0 に変換します。

 *format*   
入力式の形式を定義する文字列リテラル。指定できるフォーマット文字の詳細については、「[数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)」を参照してください。

## 戻り型
<a name="r_TEXT_TO_INT_ALT-return-type"></a>

TEXT\$1TO\$1INT\$1ALT は INTEGER 値を返します。

キャスト結果の小数部分は切り捨てられます。

指定した*形式*のフレーズへの変換に成功できなかった場合、Amazon Redshift はエラーを返します。

## 例
<a name="r_TEXT_TO_INT_ALT-examples"></a>

次の例では、入力*式*の文字列 '123-' を整数 -123 に変換します。

```
select text_to_int_alt('123-');
```

```
text_to_int_alt
----------
      -123
```

次の例では、入力*式*の文字列 '2147483647\$1' を整数 2147483647 に変換します。

```
select text_to_int_alt('2147483647+');
```

```
text_to_int_alt
----------
2147483647
```

次の例は、指数入力*式*の文字列 '-123E-2' を整数 -1 に変換します。

```
select text_to_int_alt('-123E-2');
```

```
text_to_int_alt
----------
        -1
```

次の例では、入力*式*の文字列 '2147483647\$1' を整数 2147483647 に変換します。

```
select text_to_int_alt('2147483647+');
```

```
text_to_int_alt
----------
2147483647
```

次の例では、*形式*フレーズ '999S' を含む入力*式*の文字列 '123' を整数 1,230 に変換します。S 文字は、符号付きゾーン 10 進数を示します。詳細については、「[数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)」を参照してください。

```
select text_to_int_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

次の例では、*形式*フレーズ「C9(I)」を含む入力*式*の文字列 'USD123' を整数 123 に変換します。「[数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)」を参照してください。

```
select text_to_int_alt('USD123', 'C9(I)');
```

```
text_to_int_alt
----------
       123
```

次の例では、入力*式*としてテーブル列を指定しています。

```
select text_to_int_alt(a), text_to_int_alt(b) from t_text2int order by 1;
```

```
 text_to_int_alt | text_to_int_alt
-----------------+-----------------
            -123 |            -123
            -123 |            -123
             123 |             123
             123 |             123
```

以下は、この例のテーブル定義と挿入のステートメントです。

```
create table t_text2int (a varchar(200), b char(200));
```

```
insert into t_text2int VALUES('123', '123'),('123.123', '123.123'), ('-123', '-123'), ('123-', '123-');
```

# TEXT\$1TO\$1NUMERIC\$1ALT
<a name="r_TEXT_TO_NUMERIC_ALT"></a>

TEXT\$1TO\$1NUMERIC\$1ALT は、Teradata 形式のキャストオペレーションを実行して、文字列を数値データ形式に変換します。

## 構文
<a name="r_TEXT_TO_NUMERIC_ALT-synopsis"></a>

```
TEXT_TO_NUMERIC_ALT (expression [, 'format'] [, precision, scale])
```

## 引数
<a name="r_TEXT_TO_NUMERIC_ALT-arguments"></a>

 *expression*   
1 つ以上の CHAR 値または VARCHAR 値 (列名、リテラルなど) に評価される式。null 値を変換すると、null が返されます。空白または空の文字列は 0 に変換されます。

 *format*   
入力式の形式を定義する文字列リテラル。詳細については、「[数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)」を参照してください。

 *precision*   
数値結果の桁数。デフォルトは 38 です。

 *\$1/scale*   
数値結果の小数点の右側の桁数です。デフォルトは 0 です。

## 戻り型
<a name="r_TEXT_TO_NUMERIC_ALT-return-type"></a>

TEXT\$1TO\$1NUMERIC\$1ALT は、10 進数値を返します。

指定した*形式*のフレーズへの変換に成功できなかった場合、Amazon Redshift はエラーを返します。

Amazon Redshift は、入力*式*の文字列を、*精度*オプションでその型に指定した最高の精度で数値型にキャストします。数値の長さが*精度*のために指定した値を超える場合、Amazon Redshift は次のルールに従って数値を四捨五入します。
+ キャスト結果の長さが*形式*フレーズで指定した長さを超える場合、Amazon Redshift はエラーを返します。
+ 結果が数値にキャストされる場合、結果は最も近い値に四捨五入されます。小数部分がキャスト結果のちょうど真ん中にある場合、結果は最も近い偶数値に四捨五入されます。

## 例
<a name="r_TEXT_TO_NUMERIC_ALT-examples"></a>

次の例では、入力*式*の文字列 '1.5' を数値 '2' に変換します。ステートメントは*スケール*を指定しないため、*スケール*はデフォルトで 0 になり、キャスト結果には分数の結果が含まれません。.5 は 1 と 2 の中間であるため、キャスト結果は偶数値 2 に四捨五入されます。

```
select text_to_numeric_alt('1.5');
```

```
 text_to_numeric_alt
---------------------
                   2
```

次の例では、入力*式*の文字列 '2.51' を数値 '3' に変換します。ステートメントは*スケール*値を指定しないため、*スケール*はデフォルトで 0 になり、キャスト結果には分数の結果が含まれません。.51 は 2 より 3 に近いので、キャスト結果は 3 の値に四捨五入されます。

```
select text_to_numeric_alt('2.51');
```

```
 text_to_numeric_alt
---------------------
                   3
```

次の例では、*精度* 10、*スケール* 2 の入力*式*で文字列 123.52501 を数値 123.53 に変換します。

```
select text_to_numeric_alt('123.52501', 10, 2);
```

```
 text_to_numeric_alt
---------------------
               123.53
```

次の例では、形式フレーズ '999S' を含む入力式の文字列 '123\$1' を数値 1230 に変換します。****S 文字は、符号付きゾーン 10 進数を示します。詳細については、「[数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)」を参照してください。

```
select text_to_numeric_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

次の例では、形式フレーズ 'C9(I)' を含む入力式の文字列 'USD123' を数値 124 に変換します。****「[数値データの Teradata スタイルの書式文字](r_Numeric-format-teradata.md)」を参照してください。

```
select text_to_numeric_alt('USD123.9', 'C9(I)');
```

```
text_to_numeric_alt
----------
       124
```

次の例では、入力*式*としてテーブル列を指定しています。

```
select text_to_numeric_alt(a), text_to_numeric_alt(b) from t_text2numeric order by 1;
```

```
           text_to_numeric_alt           |           text_to_numeric_alt
-----------------------------------------+-----------------------------------------
 -99999999999999999999999999999999999999 | -99999999999999999999999999999999999999
                                  -12300 |                                  -12300
                                     123 |                                     123
                                     123 |                                     123
  99999999999999999999999999999999999999 |  99999999999999999999999999999999999999
```

以下は、この例のテーブル定義と挿入のステートメントです。

```
create table  t_text2numeric (a varchar(200), b char(200));
```

```
insert into  t_text2numeric values
('123', '123'),
('+123.456', '+123.456'),
('-' || repeat('9', 38), '-' || repeat('9', 38)),
(repeat('9', 38) || '+', repeat('9', 38) || '+'),
('-123E2', '-123E2');
```

# TO\$1CHAR
<a name="r_TO_CHAR"></a>

TO\$1CHAR は、タイムスタンプまたは数値式を文字列データ形式に変換します。

## 構文
<a name="r_TO_CHAR-synopsis"></a>

```
TO_CHAR (timestamp_expression | numeric_expression , 'format')
```

## 引数
<a name="r_TO_CHAR-arguments"></a>

 *timestamp\$1expression*   
TIMESTAMP 型または TIMESTAMPTZ 型の値、またはタイムスタンプに暗黙的に強制変換できる値を生成する式。

 *numeric\$1expression*   
数値データ型の値、または数値型に暗黙的に強制変換できる値が生成される式。詳細については、「[数値型](r_Numeric_types201.md)」を参照してください。TO\$1CHAR は、数文字列の左側にスペースを挿入します。  
TO\$1CHAR は、128 ビットの DECIMAL 値をサポートしません。

 *形式*   
新しい値の形式。有効な形式については、「[日時形式の文字列](r_FORMAT_strings.md)」および「[数値形式の文字列](r_Numeric_formating.md)」を参照してください。

## 戻り型
<a name="r_TO_CHAR-return-type"></a>

VARCHAR

## 例
<a name="r_TO_CHAR-examples"></a>

次の例では、月の名前を 9 文字に埋め込み、曜日の名前と日付の数字を指定した形式でタイムスタンプを日付と時刻の値に変換します。

```
select to_char(timestamp '2009-12-31 23:15:59', 'MONTH-DY-DD-YYYY HH12:MIPM');

to_char
-------------------------
DECEMBER -THU-31-2009 11:15PM
```

次の例では、タイムスタンプを日付の番号の値に変換します。

```
select to_char(timestamp '2009-12-31 23:15:59', 'DDD');

to_char
-------------------------
365
```

次の例では、タイムスタンプを曜日の番号の値に変換します。

```
select to_char(timestamp '2022-05-16 23:15:59', 'ID');

to_char
-------------------------
1
```

以下の例では、日付から月を抽出しています。

```
select to_char(date '2009-12-31', 'MONTH');

to_char
-------------------------
DECEMBER
```

次の例は、EVENT テーブル内の各 STARTTIME 値を、時、分、および秒から成る文字列に変換します。

```
select to_char(starttime, 'HH12:MI:SS')
from event where eventid between 1 and 5
order by eventid;

to_char
----------
02:30:00
08:00:00
02:30:00
02:30:00
07:00:00
```

次の例は、タイムスタンプの値全体を別の形式に変換します。

```
select starttime, to_char(starttime, 'MON-DD-YYYY HH12:MIPM')
from event where eventid=1;

      starttime      |       to_char
---------------------+---------------------
 2008-01-25 14:30:00 | JAN-25-2008 02:30PM
```

次の例は、タイムスタンプリテラルをキャラクタ文字列に変換します。

```
select to_char(timestamp '2009-12-31 23:15:59','HH24:MI:SS');

to_char
----------
23:15:59
```

次の例では、10 進数をキャラクタ文字列に変換します。

```
select to_char(125.8, '999.99');

to_char
---------
125.80
```

次の例では、10 進数をキャラクタ文字列に変換します。

```
select to_char(125.8, '999D99');

to_char
---------
125.80
```

次の例では、先頭にゼロを含む数字をキャラクタ文字列に変換します。

```
select to_char(125.8, '0999D99');

to_char
---------
0125.80
```

次の例では、数字を負の記号を末尾に付けた文字列に変換します。

```
select to_char(-125.8, '999D99S');

to_char
---------
125.80-
```

次の例では、指定された位置に正または負の記号を末尾に付けた文字列に数字を変換します。

```
select to_char(125.8, '999D99SG');

to_char
---------
125.80+
```

次の例では、指定された位置に正の記号を末尾に付けた文字列に数字を変換します。

```
select to_char(125.8, 'PL999D99');

to_char
---------
+ 125.80
```

次の例では、数字を通貨記号付きの文字列に変換します。

```
select to_char(-125.88, '$S999D99');

to_char
---------
$-125.88
```

次の例では、指定された位置に通貨記号を付けた文字列に数字を変換します。

```
select to_char(-125.88, 'S999D99L');

to_char
---------
-125.88$
```

次の例では、3 桁の区切り文字 (コンマ) を使用して数字をキャラクタ文字列に変換します。

```
select to_char(1125.8, '9,999.99');

to_char
---------
1,125.80
```

次の例では、負の数字に角括弧を使用して、数字を文字列に変換します。

```
select to_char(-125.88, '$999D99PR');

to_char
---------
$<125.88>
```

次の例では、数字をローマ字の文字列に変換します。

```
select to_char(125, 'RN');

to_char
---------
   CXXV
```

次の例では、日付を世紀コードに変換します。

```
select to_char(date '2020-12-31', 'CC');

to_char
---------
21
```

次の例では、曜日を表示します。

```
SELECT to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS');

to_char
-----------------------
Wednesday, 31 09:34:26
```

次の例では、数に対して序数のサフィックスを表示します。

```
SELECT to_char(482, '999th');

to_char
-----------------------
 482nd
```

次の例では、販売テーブル内の支払い価格からコミッションを減算します。誤差は四捨五入されて、ローマ数字に変換され、to\$1char 列に表示されます。

```
select salesid, pricepaid, commission, (pricepaid - commission)
as difference, to_char(pricepaid - commission, 'rn') from sales
group by sales.pricepaid, sales.commission, salesid
order by salesid limit 10;

 salesid | pricepaid | commission | difference |     to_char
---------+-----------+------------+------------+-----------------
       1 |    728.00 |     109.20 |     618.80 |           dcxix
       2 |     76.00 |      11.40 |      64.60 |             lxv
       3 |    350.00 |      52.50 |     297.50 |        ccxcviii
       4 |    175.00 |      26.25 |     148.75 |           cxlix
       5 |    154.00 |      23.10 |     130.90 |           cxxxi
       6 |    394.00 |      59.10 |     334.90 |         cccxxxv
       7 |    788.00 |     118.20 |     669.80 |           dclxx
       8 |    197.00 |      29.55 |     167.45 |          clxvii
       9 |    591.00 |      88.65 |     502.35 |             dii
      10 |     65.00 |       9.75 |      55.25 |              lv
```

次の例では、さまざまな値に通貨記号を追加して、to\$1char 列に表示します。

```
select salesid, pricepaid, commission, (pricepaid - commission)
as difference, to_char(pricepaid - commission, 'l99999D99') from sales
group by sales.pricepaid, sales.commission, salesid
order by salesid limit 10;

salesid | pricepaid | commission | difference |  to_char
--------+-----------+------------+------------+------------
      1 |    728.00 |     109.20 |     618.80 | $   618.80
      2 |     76.00 |      11.40 |      64.60 | $    64.60
      3 |    350.00 |      52.50 |     297.50 | $   297.50
      4 |    175.00 |      26.25 |     148.75 | $   148.75
      5 |    154.00 |      23.10 |     130.90 | $   130.90
      6 |    394.00 |      59.10 |     334.90 | $   334.90
      7 |    788.00 |     118.20 |     669.80 | $   669.80
      8 |    197.00 |      29.55 |     167.45 | $   167.45
      9 |    591.00 |      88.65 |     502.35 | $   502.35
     10 |     65.00 |       9.75 |      55.25 | $    55.25
```

次の例では、各販売が行われた世紀を一覧で示します。

```
select salesid, saletime, to_char(saletime, 'cc') from sales
order by salesid limit 10;

 salesid |      saletime       | to_char
---------+---------------------+---------
       1 | 2008-02-18 02:36:48 | 21
       2 | 2008-06-06 05:00:16 | 21
       3 | 2008-06-06 08:26:17 | 21
       4 | 2008-06-09 08:38:52 | 21
       5 | 2008-08-31 09:17:02 | 21
       6 | 2008-07-16 11:59:24 | 21
       7 | 2008-06-26 12:56:06 | 21
       8 | 2008-07-10 02:12:36 | 21
       9 | 2008-07-22 02:23:17 | 21
      10 | 2008-08-06 02:51:55 | 21
```

次の例は、EVENT テーブル内の各 STARTTIME 値を、時、分、秒、およびタイムゾーンから成る文字列に変換します。

```
select to_char(starttime, 'HH12:MI:SS TZ')
from event where eventid between 1 and 5
order by eventid;

to_char
----------
02:30:00 UTC
08:00:00 UTC
02:30:00 UTC
02:30:00 UTC
07:00:00 UTC
```

以下の例では、秒、ミリ秒、マイクロ秒の形式を示しています。

```
select sysdate,
to_char(sysdate, 'HH24:MI:SS') as seconds,
to_char(sysdate, 'HH24:MI:SS.MS') as milliseconds,
to_char(sysdate, 'HH24:MI:SS:US') as microseconds;

timestamp           | seconds  | milliseconds | microseconds   
--------------------+----------+--------------+----------------
2015-04-10 18:45:09 | 18:45:09 | 18:45:09.325 | 18:45:09:325143
```

# TO\$1DATE 関数
<a name="r_TO_DATE_function"></a>

TO\$1DATE は、文字列で表記された日付を DATE データ型に変換します。

**注記**  
TO\$1DATE は、Q (四半期番号) の形式の文字列をサポートしていません。

## 構文
<a name="r_TO_DATE_function-synopsis"></a>

```
TO_DATE(string, format)
```

```
TO_DATE(string, format, is_strict)
```

## 引数
<a name="r_TO_DATE_function-arguments"></a>

 *string*   
変換する文字列。

 *format*   
入力の*文字列*をその日付部分に基づいて定義する文字列リテラル。有効な日、月、年の形式一覧については、「[日時形式の文字列](r_FORMAT_strings.md)」を参照してください。

 *is\$1strict*   
入力日付値が範囲外である場合にエラーを返すかどうかを指定するオプションのブール値。*is\$1strict* が `TRUE` に設定されている場合、範囲外の値があるとエラーが返されます。*is\$1strict* がデフォルトの `FALSE` に設定されている場合、オーバーフロー値が受け入れられます。

## 戻り型
<a name="r_TO_DATE_function-return-type"></a>

TO\$1DATE は、*format* の値に応じて DATE を返します。

*フォーマット*への変換が失敗すると、エラーが返されます。

## 例
<a name="r_TO_DATE_function-example"></a>

 次の SQL ステートメントは、日付 `02 Oct 2001` を日付データ型に変換します。

```
select to_date('02 Oct 2001', 'DD Mon YYYY');

to_date
------------
2001-10-02
(1 row)
```

 次の SQL ステートメントは、文字列 `20010631` を日付に変換します。

```
select to_date('20010631', 'YYYYMMDD', FALSE);
```

結果は 2001 年 7 月 1 日です。これは、6 月が 30 日しかないためです。

```
to_date
------------
2001-07-01
```

 次の SQL ステートメントは、文字列 `20010631` を日付に変換します。

```
to_date('20010631', 'YYYYMMDD', TRUE);
```

結果はエラーになります。これは、6 月が 30 日しかないためです。

```
ERROR:  date/time field date value out of range: 2001-6-31
```

# TO\$1NUMBER
<a name="r_TO_NUMBER"></a>

TO\$1NUMBER は、文字列を数値 (10 進) に変換します。

**注記**  
パディングの空白とゼロを抑制するには、フォーマット文字列で `FM` を使用することをお勧めします。有効な形式の一覧については、「[数値形式の文字列](r_Numeric_formating.md)」を参照してください。

## 構文
<a name="r_TO_NUMBER-synopsis"></a>

```
to_number(string, format)
```

## 引数
<a name="r_TO_NUMBER-arguments"></a>

 *string*   
変換する文字列。形式はリテラル値である必要があります。

 *format*   
2 番目の引数は、数値を作成するために文字列を解析する方法を示す書式文字列です。例えば、形式 `'FM99D999'` では、変換する文字列が 5 つの数字で構成され、3 番目の位置に小数点が挿入されます。たとえば、`to_number('12.345','FM99D999')`は数値として `12.345` を返します。有効な形式の一覧については、「[数値形式の文字列](r_Numeric_formating.md)」を参照してください。

## 戻り型
<a name="r_TO_NUMBER-return-type"></a>

TO\$1NUMBER は DECIMAL 型の数値を返します。

*フォーマット*への変換が失敗すると、エラーが返されます。

## 例
<a name="r_TO_NUMBER-examples"></a>

次の例では、文字列 `12,454.8-` を数値に変換します。

```
select to_number('12,454.8-', 'FM99G999D9S');

to_number
-----------
-12454.8
```

次の例では、文字列 `$ 12,454.88` を数値に変換します。

```
select to_number('$ 12,454.88', 'FML99G999D99');

to_number
-----------
12454.88
```

次の例では、文字列 `$ 2,012,454.88` を数値に変換します。

```
select to_number('$ 2,012,454.88', 'FML9,999,999.99');

to_number
-----------
2012454.88
```

# TRY\$1CAST 関数
<a name="r_TRY_CAST"></a>

CAST 関数とは異なり、TRY\$1CAST は最初に式を指定された型にキャストしようとします。変換エラーによりキャストが失敗した場合、オペレーションは null を返します。変換が明示的に許可されていない場合、オペレーションはエラーを返します。許可されている変換のリストは、以下の使用に関する注意事項に記載されています。例えば、ブール値のタイムスタンプへの変換は許可されていません。

## 構文
<a name="r_TRY_CAST-syntax"></a>

```
TRY_CAST(expression AS type)
```

## 引数
<a name="r_TRY_CAST-arguments"></a>

 *expression*   
1 つ以上の値 (列名、値など) に評価される式。null 値を変換すると、null が返されます。式に、空白または空の文字列を含めることはできません。

 *型*   
 サポートされているデータ型。データ型の完全なリストについては、「[データ型](c_Supported_data_types.md)」を参照してください。サポートされているソースデータ型とターゲットデータ型のペアのリストについては、以下の使用に関する注意事項を参照してください。

## 戻り型
<a name="r_TRY_CAST-return-type"></a>

TRY\$1CAST は、*type* 引数で指定されたデータ型の値を返します。変換が失敗した場合、オペレーションは null を返します。

## 使用に関する注意事項
<a name="r_TRY_CAST-usage-notes"></a>

以下は、Amazon Redshift が TRY\$1CAST でサポートするソースデータ型とターゲットデータ型のペアのリストです。

 * BOOL *   
 SMALLINT、INT、BIGINT、SUPER 

 * SMALLINT *   
 BOOL、INT、BIGINT、DECIMAL、REAL、FLOAT、BPCHAR、TEXT、VARCHAR、SUPER 

 * INT *   
 BOOL、SMALLINT、BIGINT、DECIMAL、REAL、FLOAT、BPCHAR、TEXT、VARCHAR、SUPER 

 * BIGINT *   
 BOOL、SMALLINT、INT、DECIMAL、REAL、FLOAT、BPCHAR、TEXT、VARCHAR、SUPER 

 * DECIMAL *   
 SMALLINT、INT、BIGINT、REAL、FLOAT、BPCHAR、TEXT、VARCHAR、SUPER 

 * REAL *   
 SMALLINT、INT、BIGINT、DECIMAL、FLOAT、BPCHAR、TEXT、VARCHAR、SUPER 

 * FLOAT *   
 SMALLINT、INT、BIGINT、DECIMAL、REAL、BPCHAR、TEXT、VARCHAR、SUPER 

 * BPCHAR *   
 SMALLINT、INT、BIGINT、DECIMAL、REAL、FLOAT、TEXT、VARCHAR、TIMESTAMP、TIMESTAMPTZ、DATE、TIME、TIMETZ、SUPER 

 * TEXT *   
 SMALLINT、INT、BIGINT、DECIMAL、REAL、FLOAT、BPCHAR、VARCHAR、TIMESTAMP、TIMESTAMPTZ、DATE、TIME、TIMETZ、SUPER 

 * VARCHAR *   
 SMALLINT、INT、BIGINT、DECIMAL、REAL、FLOAT、BPCHAR、TEXT、TIMESTAMP、TIMESTAMPTZ、DATE、TIME、TIMETZ、SUPER 

 * TIMESTAMP *   
 BPCHAR、TEXT、VARCHAR、TIMESTAMPTZ、DATE、TIME 

 * TIMESTAMPTZ *   
 BPCHAR、TEXT、VARCHAR、TIMESTAMP、DATE、TIME、TIMETZ 

 * DATE *   
 BPCHAR、TEXT、VARCHAR、TIMESTAMP、TIMESTAMPTZ 

 * TIME *   
 BPCHAR、TEXT、VARCHAR 

 * TIMETZ *   
 BPCHAR、TEXT、VARCHAR 

 * SUPER *   
 SUPER は、DATE、TIME、TIMETZ、TIMESTAMP、TIMESTAMPTZ を除き、他の任意のデータ型に変換できます。

## 例
<a name="r_TRY_CAST-examples"></a>

次の例では、STRING を INTEGER にキャストします。

```
SELECT TRY_CAST('123' AS INT);

int
----
123
```

次の例は、null を返します。STRING を INTEGER に変換することは許可されているため、TRY\$1CAST はエラーを返しませんが、'foo' は整数ではないため、関数は null を返します。

```
SELECT TRY_CAST('foo' AS INT)
```

次の例では、BOOLEAN を TIMESTAMP に変換することは許可されていないため、エラーを返します。

```
SELECT TRY_CAST(true as timestamp);
```

TRY\$1CAST は変換が失敗した場合にエラーをすぐに返す代わりに null を返すため、TRY\$1CAST を使用して無効なデータをフィルタリングできます。次の例では、Akua Mansa の age 列で変換が失敗したために無効な行が除外されます。

```
CREATE TABLE IF NOT EXISTS student_data(
name VARCHAR(100) NOT NULL,
age VARCHAR(3) NOT NULL,
enrollment_date DATE NOT NULL);

INSERT INTO student_data (name, age, enrollment_date)
VALUES
('Alejandro Rosalez', '10', '01/01/2000'),
('Akua Mansa', 'Ten', '01/01/2000');

SELECT * FROM student_data WHERE TRY_CAST(age AS INT) IS NOT NULL;

--Akua is not returned.
 name              | age | enrollment_date
-------------------+-----+-----------------
 Alejandro Rosalez | 10  | 01/01/2000
```

# 日時形式の文字列
<a name="r_FORMAT_strings"></a>

以下の日時形式の文字列のリファレンスを参照してください。

以下の形式の文字列は、TO\$1CHAR などの関数に適用されます。これらの文字列には、日時区切り記号 ('`-`'、'`/`'、'`:`' など)、および次の「日付部分」と「時間部分」を含めることができます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_FORMAT_strings.html)

**注記**  
日時の区切り文字は一重引用符で囲む (例: '-'、'/'、':' など) 必要がありますが、前の表に示されている「日付部分」と「時間部分」は二重引用符で囲む必要があります。

## 例
<a name="r_FORMAT_strings-examples"></a>

日付を文字列の形式にする例については、「[TO\$1CHAR](r_TO_CHAR.md)」を参照してください。

# 数値形式の文字列
<a name="r_Numeric_formating"></a>

以下の数値形式の文字列のリファレンスを参照してください。

次の形式の文字列は、TO\$1NUMBER や TO\$1CHAR などの関数に適用されます。
+ 文字列を数値の形式にする例については、「[TO\$1NUMBER](r_TO_NUMBER.md)」を参照してください。
+ 数字をも文字列の形式にする例については、「[TO\$1CHAR](r_TO_CHAR.md)」を参照してください。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric_formating.html)

# 数値データの Teradata スタイルの書式文字
<a name="r_Numeric-format-teradata"></a>

以下に、TEXT\$1TO\$1INT\$1ALT 関数と TEXT\$1TO\$1NUMERIC\$1ALT 関数が入力*式*文字列の文字をどのように解釈するかを示します。*形式*フレーズで指定できる文字のリストもあります。さらに、*形式*オプションの Teradata スタイルの形式と Amazon Redshift の違いに関する説明を確認できます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric-format-teradata.html)

## 符号付きゾーン 10 進数、Teradata スタイルの数値データ形式のデータ形式文字
<a name="r_Numeric-format-teradata-signed-zone"></a>

符号付きゾーンの 10 進数値には、TEXT\$1TO\$1INT\$1ALT 関数および TEXT\$1TO\$1NUMERIC\$1ALT 関数の*形式*句で次の文字を使用できます。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Numeric-format-teradata.html)

# 日付および時刻関数
<a name="Date_functions_header"></a>

このセクションでは、Amazon Redshift がサポートする日付と時刻のスカラー関数についての情報を示します。

**Topics**
+ [日付と時刻関数の概要](#date-functions-summary)
+ [トランザクションにおける日付および時刻関数](#date-functions-transactions)
+ [廃止されたリーダーノード専用の関数](#date-functions-deprecated)
+ [\$1 (連結) 演算子](r_DATE-CONCATENATE_function.md)
+ [ADD\$1MONTHS 関数](r_ADD_MONTHS.md)
+ [AT TIME ZONE 関数](r_AT_TIME_ZONE.md)
+ [CONVERT\$1TIMEZONE 関数](CONVERT_TIMEZONE.md)
+ [CURRENT\$1DATE 関数](r_CURRENT_DATE_function.md)
+ [DATE\$1CMP 関数](r_DATE_CMP.md)
+ [DATE\$1CMP\$1TIMESTAMP 関数](r_DATE_CMP_TIMESTAMP.md)
+ [DATE\$1CMP\$1TIMESTAMPTZ 関数](r_DATE_CMP_TIMESTAMPTZ.md)
+ [DATEADD 関数](r_DATEADD_function.md)
+ [DATEDIFF 関数](r_DATEDIFF_function.md)
+ [DATE\$1PART 関数](r_DATE_PART_function.md)
+ [DATE\$1PART\$1YEAR 関数](r_DATE_PART_YEAR.md)
+ [DATE\$1TRUNC 関数](r_DATE_TRUNC.md)
+ [EXTRACT 関数](r_EXTRACT_function.md)
+ [GETDATE 関数](r_GETDATE.md)
+ [INTERVAL\$1CMP 関数](r_INTERVAL_CMP.md)
+ [LAST\$1DAY 関数](r_LAST_DAY.md)
+ [MONTHS\$1BETWEEN 関数](r_MONTHS_BETWEEN_function.md)
+ [NEXT\$1DAY 関数](r_NEXT_DAY.md)
+ [SYSDATE 関数](r_SYSDATE.md)
+ [TIMEOFDAY 関数](r_TIMEOFDAY_function.md)
+ [TIMESTAMP\$1CMP 関数](r_TIMESTAMP_CMP.md)
+ [TIMESTAMP\$1CMP\$1DATE 関数](r_TIMESTAMP_CMP_DATE.md)
+ [TIMESTAMP\$1CMP\$1TIMESTAMPTZ 関数](r_TIMESTAMP_CMP_TIMESTAMPTZ.md)
+ [TIMESTAMPTZ\$1CMP 関数](r_TIMESTAMPTZ_CMP.md)
+ [TIMESTAMPTZ\$1CMP\$1DATE 関数](r_TIMESTAMPTZ_CMP_DATE.md)
+ [TIMESTAMPTZ\$1CMP\$1TIMESTAMP 関数](r_TIMESTAMPTZ_CMP_TIMESTAMP.md)
+ [TIMEZONE 関数](r_TIMEZONE.md)
+ [TO\$1TIMESTAMP 関数](r_TO_TIMESTAMP.md)
+ [TRUNC 関数](r_TRUNC_date.md)
+ [日付関数またはタイムスタンプ関数の日付部分](r_Dateparts_for_datetime_functions.md)

## 日付と時刻関数の概要
<a name="date-functions-summary"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/Date_functions_header.html)

**注記**  
うるう秒は経過時間の計算では考慮されません。

## トランザクションにおける日付および時刻関数
<a name="date-functions-transactions"></a>

トランザクションブロック (BEGIN … END) 内で次の関数を実行すると、関数は現在のステートメントではなく、現在のトランザクションの開始日または開始時刻を返します。
+ SYSDATE
+ TIMESTAMP
+ CURRENT\$1DATE

次の関数は、トランザクションブロック内にある場合でも、現在のステートメントの開始日または開始時刻を常に返します。
+ GETDATE
+ TIMEOFDAY

## 廃止されたリーダーノード専用の関数
<a name="date-functions-deprecated"></a>

次の日付関数は、リーダーノードのみで実行されるため、非推奨となりました。詳細については、「[リーダーノード専用関数](c_SQL_functions_leader_node_only.md)」を参照してください。
+ AGE。代わりに [DATEDIFF 関数](r_DATEDIFF_function.md) を使用します。
+ CURRENT\$1TIME。代わりに [GETDATE 関数](r_GETDATE.md) または [SYSDATE](r_SYSDATE.md) を使用します。
+ CURRENT\$1TIMESTAMP。代わりに [GETDATE 関数](r_GETDATE.md) または [SYSDATE](r_SYSDATE.md) を使用します。
+ LOCALTIME。代わりに [GETDATE 関数](r_GETDATE.md) または [SYSDATE](r_SYSDATE.md) を使用します。
+ LOCALTIMESTAMP。代わりに [GETDATE 関数](r_GETDATE.md) または [SYSDATE](r_SYSDATE.md) を使用します。
+ ISFINITE 
+ NOW。代わりに [GETDATE 関数](r_GETDATE.md) または [SYSDATE](r_SYSDATE.md) を使用します。マテリアライズドビュー内で NOW 関数を使用する場合、現在のタイムスタンプではなく、マテリアライズドビューの作成時のタイムスタンプが設定されます。

# \$1 (連結) 演算子
<a name="r_DATE-CONCATENATE_function"></a>

\$1 記号の両側のいずれかの方で DATE を TIME または TIMETZ に連結し、TIMESTAMP または TIMESTAMPTZ を返します。

## 構文
<a name="r_DATE-CONCATENATE_function-synopsis"></a>

```
date + {time | timetz}
```

引数の順序は逆にすることができます。例: *time* \$1 *date*。

## 引数
<a name="r_DATE-CONCATENATE_function-arguments"></a>

 *date*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

 *時間*:   
データ型 `TIME` の列または `TIME` 型に暗黙的に評価される式。

 *timetz*   
データ型 `TIMETZ` の列または `TIMETZ` 型に暗黙的に評価される式。

## 戻り型
<a name="r_DATE-CONCATENATE_function-return-type"></a>

入力が *date* \$1 *time* の場合は TIMESTAMP です。

入力が *date* \$1 *timetz* の場合は TIMESTAMPTZ です。

## 例
<a name="r_DATE-CONCATENATE_function-examples"></a>

### セットアップ例
<a name="r_DATE-CONCATENATE_function-example-setup"></a>

例で使用されている TIME\$1TEST テーブルと TIMEZ\$1TEST テーブルをセットアップするには、次のコマンドを使用します。

```
create table time_test(time_val time);

insert into time_test values
('20:00:00'),
('00:00:00.5550'),
('00:58:00');
   
create table timetz_test(timetz_val timetz);
   
insert into timetz_test values
('04:00:00+00'),
('00:00:00.5550+00'),
('05:58:00+00');
```

### 時間列の例
<a name="r_DATE-CONCATENATE_function-examples-time"></a>

次のテーブルの TIME\$1TEST の例には、3 つの値が挿入された列 TIME\$1VAL (タイプ TIME) があります。

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

次の例では、日付リテラルと TIME\$1VAL 列を連結します。

```
select date '2000-01-02' + time_val as ts from time_test;
            
ts
---------------------
2000-01-02 20:00:00
2000-01-02 00:00:00.5550
2000-01-02 00:58:00
```

次の例では、日付リテラルと時刻リテラルを連結します。

```
select date '2000-01-01' + time '20:00:00' as ts;
            
         ts
---------------------
 2000-01-01 20:00:00
```

次の例では、時刻リテラルと日付リテラルを連結します。

```
select time '20:00:00' + date '2000-01-01' as ts;
            
         ts
---------------------
 2000-01-01 20:00:00
```

### TIMETZ 列の例
<a name="r_DATE-CONCATENATE_function-examples-timetz"></a>

次のテーブルの TIMETZ\$1TEST の例には、3 つの値が挿入された列 TIMETZ\$1VAL (タイプ TIMETZ) があります。

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

次の例では、日付リテラルと TIMETZ\$1VAL 列を連結します。

```
select date '2000-01-01' + timetz_val as ts from timetz_test;
ts
---------------------
2000-01-01 04:00:00+00
2000-01-01 00:00:00.5550+00
2000-01-01 05:58:00+00
```

次の例では、TIMETZ\$1VAL 列と date リテラルを連結します。

```
select timetz_val + date '2000-01-01' as ts from timetz_test;
ts
---------------------
2000-01-01 04:00:00+00
2000-01-01 00:00:00.5550+00
2000-01-01 05:58:00+00
```

次の例では、DATE リテラルと TIMETZ 列を連結します。この例では、デフォルトで UTC タイムゾーンにある TIMESTAMPTZ が返されます。UTC は PST よりも 8 時間進んでいるため、結果は入力時間より 8 時間進みます。

```
select date '2000-01-01' + timetz '20:00:00 PST' as ts;
            
           ts
------------------------
 2000-01-02 04:00:00+00
```

# ADD\$1MONTHS 関数
<a name="r_ADD_MONTHS"></a>

ADD\$1MONTHS は日付またはタイムスタンプの値または式に、指定された月数を加算します。[DATEADD](r_DATEADD_function.md) 関数は同様の機能を提供します。

## 構文
<a name="r_ADD_MONTHS-synopsis"></a>

```
ADD_MONTHS( {date | timestamp}, integer)
```

## 引数
<a name="r_ADD_MONTHS-arguments"></a>

 *date* \$1 *timestamp*   
データ型 `DATE` または `TIMESTAMP` の列、あるいは `DATE` 型または `TIMESTAMP` 型に暗黙的に評価される式。date がその月の最終日である場合、または結果の月が短い場合、関数は結果に月の最終日を返します。その他の日付の場合、結果には date 式と同じ日数が含まれます。

 * (整数*)   
データ型 `INTEGER` の値。負の数を使用し、日付から月を削除します。

## 戻り型
<a name="r_ADD_MONTHS-return-type"></a>

TIMESTAMP

## 例
<a name="r_ADD_MONTHS-example"></a>

次のクエリは、TRUNC 関数内の ADD\$1MONTHS 関数を使用します。TRUNC 関数は、ADD\$1MONTHS の結果から日付の時刻を削除します。ADD\$1MONTHS 関数は CALDATE 列の値ごとに 12 か月を追加します。CALDATE 列の値は日付です。

```
select distinct trunc(add_months(caldate, 12)) as calplus12,
trunc(caldate) as cal
from date
order by 1 asc;

 calplus12  |    cal
------------+------------
 2009-01-01 | 2008-01-01
 2009-01-02 | 2008-01-02
 2009-01-03 | 2008-01-03
...
(365 rows)
```

次の例では、ADD\$1MONTHS 関数を使用して、*timestamp* に 1 か月を加算しています。

```
select add_months('2008-01-01 05:07:30', 1); 

add_months
---------------------
2008-02-01 05:07:30
```

次の例は、ADD\$1MONTHS 関数が異なる日数の月を持つ日付で実行される動作を示しています。この例は、関数が 3 月 31 日への 1 か月の加算と、4 月 30 日への 1 か月の加算をどのように処理するかを示しています。4 月は 30 日間あるので、3 月 31 日に 1 か月を加えると 4 月 30 日になります。5 月は 31 日間あるので、4 月 30 日に 1 か月を加えると 5 月 31 日になります。

```
select add_months('2008-03-31',1);

add_months
---------------------
2008-04-30 00:00:00

select add_months('2008-04-30',1); 

add_months
---------------------
2008-05-31 00:00:00
```

# AT TIME ZONE 関数
<a name="r_AT_TIME_ZONE"></a>

AT TIME ZONE は、TIMESTAMP 式または TIMESTAMPTZ 式で使用するタイムゾーンを指定します。

## 構文
<a name="r_AT_TIME_ZONE-syntax"></a>

```
AT TIME ZONE 'timezone'
```

## 引数
<a name="r_AT_TIME_ZONE-arguments"></a>

*timezone*  
戻り値の `TIMEZONE`。タイムゾーンは、タイムゾーン名 (**'Africa/Kampala'** または **'Singapore'** など) またはタイムゾーンの略名 (**'UTC'** または **'PDT'** など) として指定できます。  
サポートされるタイムゾーン名のリストを表示するには、次のコマンドを実行します。  

```
select pg_timezone_names();
```
 サポートされるタイムゾーン省略形のリストを表示するには、次のコマンドを実行します。  

```
select pg_timezone_abbrevs();
```
 詳細な説明と例については、「[タイムゾーンの使用上の注意](CONVERT_TIMEZONE.md#CONVERT_TIMEZONE-usage-notes)」を参照してください。

## 戻り型
<a name="r_AT_TIME_ZONE-return-type"></a>

TIMESTAMP 式で使用する場合は TIMESTAMPTZ。TIMESTAMPTZ 式で使用する場合は TIMESTAMP。

## 例
<a name="r_AT_TIME_ZONE-examples"></a>

次の例では、タイムゾーンのないタイムゾーン値を変換して MST 時間 (POSIX では UTC\$17) として解釈します。この例では、UTC タイムゾーンのデータ型 TIMESTAMPTZ の値を返します。デフォルトのタイムゾーンを UTC 以外のタイムゾーンに設定すると、異なる結果が表示される場合があります。

```
SELECT TIMESTAMP '2001-02-16 20:38:40' AT TIME ZONE 'MST';

timezone
------------------------
2001-02-17 03:38:40+00
```

次の例では、指定されたタイムゾーンが EST (POSIX では UTC\$15) であるタイムゾーン値を持つ入力タイムスタンプを取得し、それを MST (POSIX では UTC\$17) に変換します。この例では、データ型 TIMESTAMP の値を返します。

```
SELECT TIMESTAMPTZ '2001-02-16 20:38:40-05' AT TIME ZONE 'MST';

timezone
------------------------
2001-02-16 18:38:40
```

# CONVERT\$1TIMEZONE 関数
<a name="CONVERT_TIMEZONE"></a>

CONVERT\$1TIMEZONE は、タイムスタンプのタイムゾーンを別のタイムゾーンに変換します。この関数は夏時間に合わせて自動的に調整されます。

## 構文
<a name="CONVERT_TIMEZONE-syntax"></a>

```
CONVERT_TIMEZONE( ['source_timezone',] 'target_timezone', 'timestamp')
```

## 引数
<a name="CONVERT_TIMEZONE-arguments"></a>

*source\$1timezone*  
(オプション) 現在のタイムスタンプのタイムゾーン。デフォルトは UTC です。詳細については、「[タイムゾーンの使用上の注意](#CONVERT_TIMEZONE-usage-notes)」を参照してください。

*target\$1timezone*   
新しいタイムスタンプのタイムゾーン。詳細については、「[タイムゾーンの使用上の注意](#CONVERT_TIMEZONE-usage-notes)」を参照してください。

*timestamp*   
タイムスタンプの列、あるいは暗黙的にタイムスタンプに変換される式。

## 戻り型
<a name="CONVERT_TIMEZONE-return-type"></a>

TIMESTAMP

## タイムゾーンの使用上の注意
<a name="CONVERT_TIMEZONE-usage-notes"></a>

*source\$1timezone* または *target\$1timezone* のいずれかをタイムゾーン名 (「Africa/Kampala」または「Singapore」など) またはタイムゾーンの略名 (「UTC」または「PDT」など) として指定できます。タイムゾーン名を名前に変換したり、略語を略語に変換したりする必要はありません。例えば、ソースタイムゾーン名「Singapore」からタイムスタンプを選択して、タイムゾーンの略語「PDT」のタイムスタンプに変換できます。

**注記**  
タイムゾーン名またはタイムゾーンの略名を使用した結果は、地域の季節ごとの時間 (夏時間など) に応じて異なる場合があります。

### タイムゾーン名の使用
<a name="CONVERT_TIMEZONE-using-name"></a>

タイムゾーン名の完全なリストの最新版を表示するには、次のコマンドを実行します。

```
select pg_timezone_names();
```

各行には、タイムゾーン名、略名、UTC オフセット、タイムゾーンが夏時間を採用しているかどうかのインジケーター (`t` または `f`) などが、カンマ区切りの文字列で含まれています。例えば、次のスニペットは、結果として 2 行が表示されます。1 番目の行はタイムゾーン `Antarctica/South Pole` で略名は `NZDT`、UTC からのオフセットは `13:00:00` です。`f` によって夏時間が適用されないことが示されています。2 番目の行は、タイムゾーンが `Europe/Paris` で、略名は `CET`、UTC からのオフセットは `01:00:00` です。`f` は、夏時間が適用されないことを示しています。

```
pg_timezone_names
------------------
(Antarctica/South_Pole,NZDT,13:00:00,t)	
(Europe/Paris,CET,01:00:00,f)
```

SQL ステートメントを実行してリスト全体を取得し、タイムゾーン名を検索します。約 600 行が返されます。返されるタイムゾーン名は大文字のイニシャルや頭字語 (例: GB、PRC、ROK) になっていますが、CONVERT\$1TIMEZONE 関数ではこれらはタイムゾーンの省略形ではなくタイムゾーン名として扱われます。

タイムゾーン名を使用してタイムゾーンを指定する場合、CONVERT\$1TIMEZONE は自動的に夏時間 (DST)、または '*timestamp*' によって指定される日付と時刻で有効なその他の現地の季節の慣習 (サマータイム、標準時、冬時間) を調整します。例えば、'Europe/London' は冬季は UTC を表し、夏季は 1 時間を追加します。Amazon Redshift は、[IANA タイムゾーンデータベース](https://www.iana.org/time-zones)をタイムゾーン仕様の信頼できるソースとして使用することに注意してください。

### タイムゾーンの略名の使用
<a name="CONVERT_TIMEZONE-using-abbrev"></a>

 タイムゾーン略名の完全なリストの最新版を表示するには、次のコマンドを実行します。

```
select pg_timezone_abbrevs();
```

結果には、タイムゾーンの略名、UTC オフセット、タイムゾーンが夏時間を採用しているかどうかのインジケーター (`t` または `f`) がカンマ区切りの文字列で含まれています。例えば、次のスニペットは、結果として 2 行が表示されます。最初の行には、太平洋夏時間の略名 `PDT` が含まれており、UTC からのオフセットは `-07:00:00` で、`t` は夏時間を採用していることを示しています。2 行目には、太平洋夏時間の略名 `PST` が含まれており、UTC からのオフセットは `-08:00:00` で、`f` は夏時間を採用していないことを示しています。

```
pg_timezone_abbrevs
--------------------
(PDT,-07:00:00,t)	
(PST,-08:00:00,f)
```

この SQL ステートメントを実行してリスト全体を取得し、オフセットと夏時間のインジケーターに基づいて略名を検索します。約 200 行が返されます。

タイムゾーンの略名は、UTC からの固定オフセットを表します。タイムゾーンの略名を使用してタイムゾーンを指定する場合、CONVERT\$1TIMEZONE は UTC からの固定オフセットを使用し、現地の季節の慣習を調整しません。

### POSIX スタイル形式の使用
<a name="CONVERT_TIMEZONE-using-posix"></a>

POSIX スタイルのタイムゾーン仕様は *STDoffset* または *STDoffsetDST* の形式であり、これらの *STD* はタイムゾーンの省略形、*offset* は UTC から西方向への時間単位の数値オフセット、および *DST* はオプションの夏時間ゾーンの省略形です。夏時間は、特定のオフセットより 1 時間早いことを想定しています。

POSIX スタイルのタイムゾーン形式では、グリニッジから西方向に正のオフセットが使用されます。これは、グリニッジから東方向に正のオフセットを使用する ISO-8601 規則とは対照的です。

POSIX スタイルのタイムゾーンの例を以下に示します。
+  PST8
+  PST8PDT
+  EST5
+  EST5EDT

**注記**  
Amazon Redshift は、POSIX スタイルのタイムゾーン仕様を検証しないため、タイムゾーンを無効な値に設定する可能性があります。例えば、次のコマンドはタイムゾーンを無効な値に設定しますが、エラーを返しません。  

```
set timezone to ‘xxx36’;
```

## 例
<a name="CONVERT_TIMEZONE-examples"></a>

多くの例では、TICKIT サンプルデータセットを使用しています。詳細については、「[サンプルデータベース](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)」を参照してください。

次の例は、タイムスタンプ値をデフォルトの UTC タイムゾーンから PST に変換します。

```
select convert_timezone('PST', '2008-08-21 07:23:54');
                     
 convert_timezone
------------------------
2008-08-20 23:23:54
```

次の例は、LISTTIME 列のタイムスタンプ値をデフォルトの UTC タイムゾーンから PST に変換します。タイムスタンプが夏時間の期間内であっても、変換後のタイムゾーンが略名 (PST) で指定されているため、標準時間に変換されます。

```
select listtime, convert_timezone('PST', listtime) from listing
where listid = 16;
                     
     listtime       |   convert_timezone
--------------------+-------------------
2008-08-24 09:36:12     2008-08-24 01:36:12
```

次の例は、タイムスタンプの LISTTIME 列をデフォルトの UTC タイムゾーンから US/Pacific タイムゾーンに変換します。変換後のタイムゾーンはタイムゾーン名で指定されており、タイムスタンプは夏時間の期間内であるため、この関数は夏時間を返します。

```
select listtime, convert_timezone('US/Pacific', listtime) from listing
where listid = 16;
                     
     listtime       |   convert_timezone
--------------------+---------------------
2008-08-24 09:36:12 | 2008-08-24 02:36:12
```

次の例は、タイムスタンプの文字列を EST から PST に変換します。

```
select convert_timezone('EST', 'PST', '20080305 12:25:29');
                     
 convert_timezone
-------------------
2008-03-05 09:25:29
```

次の例は、変換後のタイムゾーンがタイムゾーン名 (America/New\$1York) で指定されており、タイムスタンプが標準時間の期間内にあるため、タイムスタンプを米国東部標準時に変換します。

```
select convert_timezone('America/New_York', '2013-02-01 08:00:00');

 convert_timezone
---------------------
2013-02-01 03:00:00
(1 row)
```

次の例は、変換後のタイムゾーンがタイムゾーン名 (America/New\$1York) で指定されており、タイムスタンプが夏時間の期間内にあるため、タイムスタンプを米国東部夏時間に変換します。

```
select convert_timezone('America/New_York', '2013-06-01 08:00:00');

 convert_timezone
---------------------
2013-06-01 04:00:00
(1 row)
```

次の例は、オフセットの使用を示しています。

```
SELECT CONVERT_TIMEZONE('GMT','NEWZONE +2','2014-05-17 12:00:00') as newzone_plus_2, 
CONVERT_TIMEZONE('GMT','NEWZONE-2:15','2014-05-17 12:00:00') as newzone_minus_2_15, 
CONVERT_TIMEZONE('GMT','America/Los_Angeles+2','2014-05-17 12:00:00') as la_plus_2,
CONVERT_TIMEZONE('GMT','GMT+2','2014-05-17 12:00:00') as gmt_plus_2;
 
   newzone_plus_2    | newzone_minus_2_15  |      la_plus_2      |     gmt_plus_2
---------------------+---------------------+---------------------+---------------------
2014-05-17 10:00:00 | 2014-05-17 14:15:00 | 2014-05-17 10:00:00 | 2014-05-17 10:00:00
(1 row)
```

# CURRENT\$1DATE 関数
<a name="r_CURRENT_DATE_function"></a>

CURRENT\$1DATE は、現在のセッションのタイムゾーン (デフォルトは UTC) の日付をデフォルト形式 YYYY-MM-DD で返します。

**注記**  
CURRENT\$1DATE は、現在のステートメントの開始日ではなく、現在のトランザクションの開始日を返します。複数のステートメントを含むトランザクションを 2008 年 10 月 1 日 23:59 に開始し、CURRENT\$1DATE を含むステートメントが 2008 年 10 月 2 日 00:00 に実行されるシナリオを考えてみましょう。CURRENT\$1DATE は `10/02/08` ではなく、`10/01/08` を返します。

## 構文
<a name="r_CURRENT_DATE_function-syntax"></a>

```
CURRENT_DATE
```

## 戻り型
<a name="r_CURRENT_DATE_function-return-type"></a>

DATE

## 例
<a name="r_CURRENT_DATE_function-examples"></a>

次の例では、現在の日付を返します (関数が実行される AWS リージョン)。

```
select current_date;

   date
------------
2008-10-01
```

次の例では、テーブルを作成し、列 `todays_date` のデフォルトが CURRENT\$1DATE である行を挿入し、テーブル内のすべての行を選択します。

```
CREATE TABLE insert_dates(
    label varchar(128) NOT NULL,
    todays_date DATE DEFAULT CURRENT_DATE);

INSERT INTO insert_dates(label)
VALUES('Date row inserted');

SELECT * FROM insert_dates;
         

 label            | todays_date
------------------+-------------
Date row inserted | 2023-05-10
```

# DATE\$1CMP 関数
<a name="r_DATE_CMP"></a>

DATE\$1CMP は 2 つの日付を比較します。この関数は、日付が同一の場合は `0`、*date1* が大きい場合は `1`、*date2* が大きい場合は `-1` を返します。

## 構文
<a name="r_DATE_CMP-synopsis"></a>

```
DATE_CMP(date1, date2)
```

## 引数
<a name="r_DATE_CMP-arguments"></a>

 *date1*   
データ型 `DATE` の値または `DATE` 型と評価される式の列。

 *date2*   
データ型 `DATE` の値または `DATE` 型と評価される式の列。

## 戻り型
<a name="r_DATE_CMP-return-type"></a>

INTEGER

## 例
<a name="r_DATE_CMP-example"></a>

次のクエリは CALDATE 列の DATE 値を 2008 年 1 月 4 日の日付と比較し、CALDATE の値が 2008 年 1 月 4 日より前 (`-1`)、同じ (`0`)、より後 (`1`) であるかを返します。

```
select caldate, '2008-01-04',
date_cmp(caldate,'2008-01-04')
from date
order by dateid
limit 10;

 caldate   |  ?column?  | date_cmp
-----------+------------+----------
2008-01-01 | 2008-01-04 |       -1
2008-01-02 | 2008-01-04 |       -1
2008-01-03 | 2008-01-04 |       -1
2008-01-04 | 2008-01-04 |        0
2008-01-05 | 2008-01-04 |        1
2008-01-06 | 2008-01-04 |        1
2008-01-07 | 2008-01-04 |        1
2008-01-08 | 2008-01-04 |        1
2008-01-09 | 2008-01-04 |        1
2008-01-10 | 2008-01-04 |        1
(10 rows)
```

# DATE\$1CMP\$1TIMESTAMP 関数
<a name="r_DATE_CMP_TIMESTAMP"></a>

DATE\$1CMP\$1TIMESTAMP は、日付とタイムスタンプを比較し、値が同一の場合は `0`、*date* が時間的により大きい場合は `1`、*timestamp* がより大きい場合は `-1` を返します。

## 構文
<a name="r_DATE_CMP_TIMESTAMP-synopsis"></a>

```
DATE_CMP_TIMESTAMP(date, timestamp)
```

## 引数
<a name="r_DATE_CMP_TIMESTAMP-arguments"></a>

 *date*   
データ型 `DATE` の値または `DATE` 型と評価される式の列。

 *timestamp*   
データ型 `TIMESTAMP` の値または `TIMESTAMP` 型と評価される式の列。

## 戻り型
<a name="r_DATE_CMP_TIMESTAMP-return-type"></a>

INTEGER

## 例
<a name="r_DATE_CMP_TIMESTAMP-examples"></a>

次の例は日付 `2008-06-18` と LISTTIME を比較します。LISTTIME 列の値はタイムスタンプです。この日付より前に作成されたリストは `1` を返し、この日付より後に作成されたリストは `-1` を返します。

```
select listid, '2008-06-18', listtime,
date_cmp_timestamp('2008-06-18', listtime)
from listing
order by 1, 2, 3, 4
limit 10;

 listid |  ?column?  |      listtime       | date_cmp_timestamp
--------+------------+---------------------+--------------------
      1 | 2008-06-18 | 2008-01-24 06:43:29 |                  1
      2 | 2008-06-18 | 2008-03-05 12:25:29 |                  1
      3 | 2008-06-18 | 2008-11-01 07:35:33 |                 -1
      4 | 2008-06-18 | 2008-05-24 01:18:37 |                  1
      5 | 2008-06-18 | 2008-05-17 02:29:11 |                  1
      6 | 2008-06-18 | 2008-08-15 02:08:13 |                 -1
      7 | 2008-06-18 | 2008-11-15 09:38:15 |                 -1
      8 | 2008-06-18 | 2008-11-09 05:07:30 |                 -1
      9 | 2008-06-18 | 2008-09-09 08:03:36 |                 -1
     10 | 2008-06-18 | 2008-06-17 09:44:54 |                  1
(10 rows)
```

# DATE\$1CMP\$1TIMESTAMPTZ 関数
<a name="r_DATE_CMP_TIMESTAMPTZ"></a>

DATE\$1CMP\$1TIMESTAMPTZ は、日付とタイムゾーン付きのタイムスタンプを比較し、値が同一の場合は `0`、*date* が時間的により大きい場合は `1`、*timestamptz* がより大きい場合は `-1` を返します。

## 構文
<a name="r_DATE_CMP_TIMESTAMPTZ-syntax"></a>

```
DATE_CMP_TIMESTAMPTZ(date, timestamptz)
```

## 引数
<a name="r_DATE_CMP_TIMESTAMPTZ-arguments"></a>

 *date*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

 *timestamptz*   
データ型 `TIMESTAMPTZ` の列または `TIMESTAMPTZ` 型に暗黙的に評価される式。

## 戻り型
<a name="r_DATE_CMP_TIMESTAMPTZ-return-type"></a>

INTEGER

## 例
<a name="r_DATE_CMP_TIMESTAMPTZ-examples"></a>

次の例は日付 `2008-06-18` と LISTTIME を比較します。この日付より前に作成されたリストは `1` を返し、この日付より後に作成されたリストは `-1` を返します。

```
select listid, '2008-06-18', CAST(listtime AS timestamptz),
date_cmp_timestamptz('2008-06-18', CAST(listtime AS timestamptz))
from listing
order by 1, 2, 3, 4
limit 10;

 listid |  ?column?  |      timestamptz       | date_cmp_timestamptz
--------+------------+------------------------+----------------------
      1 | 2008-06-18 | 2008-01-24 06:43:29+00 |                  1
      2 | 2008-06-18 | 2008-03-05 12:25:29+00 |                  1
      3 | 2008-06-18 | 2008-11-01 07:35:33+00 |                 -1
      4 | 2008-06-18 | 2008-05-24 01:18:37+00 |                  1
      5 | 2008-06-18 | 2008-05-17 02:29:11+00 |                  1
      6 | 2008-06-18 | 2008-08-15 02:08:13+00 |                 -1
      7 | 2008-06-18 | 2008-11-15 09:38:15+00 |                 -1
      8 | 2008-06-18 | 2008-11-09 05:07:30+00 |                 -1
      9 | 2008-06-18 | 2008-09-09 08:03:36+00 |                 -1
     10 | 2008-06-18 | 2008-06-17 09:44:54+00 |                  1
(10 rows)
```

# DATEADD 関数
<a name="r_DATEADD_function"></a>

指定された間隔で DATE、TIME、TIMETZ、または TIMESTAMP の値を増分します。

## 構文
<a name="r_DATEADD_function-synopsis"></a>

```
DATEADD( datepart, interval, {date|time|timetz|timestamp} )
```

## 引数
<a name="r_DATEADD_function-arguments"></a>

 *datepart*   
関数が実行される日付部分 (例: 年、月、日、または時間)。詳細については、「[日付関数またはタイムスタンプ関数の日付部分](r_Dateparts_for_datetime_functions.md)」を参照してください。

 *interval*   
ターゲット式に追加する間隔 ( 日数など ) を指定する整数。負の整数は間隔を減算します。

 *date*\$1*time*\$1*timetz*\$1*timestamp*  
DATE、TIME、TIMETZ、または TIMESTAMP の列、あるいは暗黙的に DATE、TIME、TIMETZ、または TIMESTAMP に変換される式。DATE、TIME、TIMETZ、または TIMESTAMP の式には、指定した日付部分が含まれている必要があります。

## 戻り型
<a name="r_DATEADD_function-return-type"></a>

入力データ型に応じて TIMESTAMP、TIME、または TIMETZ を指定します。

## DATE 列の例
<a name="r_DATEADD_function-examples"></a>

次の例では、DATE テーブルに存在する 11 月の各日付に 30 日追加します。

```
select dateadd(day,30,caldate) as novplus30
from date
where month='NOV'
order by dateid;

novplus30
---------------------
2008-12-01 00:00:00
2008-12-02 00:00:00
2008-12-03 00:00:00
...
(30 rows)
```

 次の例は、リテラル日付値に 18 か月を追加します。

```
select dateadd(month,18,'2008-02-28');

date_add
---------------------
2009-08-28 00:00:00
(1 row)
```

DATEDIFF 関数のデフォルトの列名は DATE\$1ADD です。日付の値に使用するデフォルトのタイムスタンプは `00:00:00` です。

次の例では、タイムスタンプを指定しない日付の値に 30 分を追加します。

```
select dateadd(m,30,'2008-02-28');

date_add
---------------------
2008-02-28 00:30:00
(1 row)
```

完全名または略名で日付部分に名前を付けることができます。この場合、*m* は月ではなく分を表します。

## TIME 列の例
<a name="r_DATEADD_function-examples-time"></a>

次のテーブルの TIME\$1TEST の例には、3 つの値が挿入された列 TIME\$1VAL (タイプ TIME) があります。

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

次の例では、TIME\$1TEST テーブルの各 TIME\$1VAL に 5 分を追加します。

```
select dateadd(minute,5,time_val) as minplus5 from time_test;
            
minplus5
---------------
20:05:00
00:05:00.5550
01:03:00
```

次の例では、リテラル時刻値に 8 時間を追加します。

```
select dateadd(hour, 8, time '13:24:55');
            
date_add
---------------
21:24:55
```

次の例では、時刻が 24:00:00 を超えるか 00:00:00 を下回る場合を示しています。

```
select dateadd(hour, 12, time '13:24:55');
            
date_add
---------------
01:24:55
```

## TIMETZ 列の例
<a name="r_DATEADD_function-examples-timetz"></a>

これらの例の出力値は、デフォルトのタイムゾーンである UTC です。

次のテーブルの TIMETZ\$1TEST の例には、3 つの値が挿入された列 TIMETZ\$1VAL (タイプ TIMETZ) があります。

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

次の例では、TIMETZ\$1TEST テーブルの各 TIMETZ\$1VAL に 5 分を追加します。

```
select dateadd(minute,5,timetz_val) as minplus5_tz from timetz_test;
            
minplus5_tz
---------------
04:05:00+00
00:05:00.5550+00
06:03:00+00
```

次の例では、リテラルの timetz 値に 2 時間を追加します。

```
select dateadd(hour, 2, timetz '13:24:55 PST');
            
date_add
---------------
23:24:55+00
```

## TIMESTAMP 列の例
<a name="r_DATEADD_function-examples-timestamp"></a>

これらの例の出力値は、デフォルトのタイムゾーンである UTC です。

次のテーブルの TIMESTAMP\$1TEST の例には、3 つの値が挿入された列 TIMESTAMP\$1VAL (タイプ TIMESTAMP) があります。

```
SELECT timestamp_val FROM timestamp_test;
            
timestamp_val
------------------
1988-05-15 10:23:31
2021-03-18 17:20:41
2023-06-02 18:11:12
```

次の例では、2000 年より前の TIMESTAMP\$1TEST の TIMESTAMP\$1VAL 値にのみ 20 年を加算しています。

```
SELECT dateadd(year,20,timestamp_val) 
FROM timestamp_test
WHERE timestamp_val < to_timestamp('2000-01-01 00:00:00', 'YYYY-MM-DD HH:MI:SS');
            
date_add
---------------
2008-05-15 10:23:31
```

次の例では、秒インジケータなしで書き込まれたリテラルタイムスタンプ値に 5 秒を加算します。

```
SELECT dateadd(second, 5, timestamp '2001-06-06');
            
date_add
---------------
2001-06-06 00:00:05
```

## 使用に関する注意事項
<a name="r_DATEADD_usage_notes"></a>

 DATEADD(month, ...) および ADD\$1MONTHS 関数は、異なる月末になる日付を処理します。
+ ADD\$1MONTHS: 追加している日付が月の最終日である場合、結果は月の期間にかかわらず、常に結果の月の最終日になります。例えば、4 月 30 日 \$1 1 か月は 5 月 31 日になります。

  ```
  select add_months('2008-04-30',1);
  
  add_months
  ---------------------
  2008-05-31 00:00:00
  (1 row)
  ```
+ DATEADD: 追加している日付が結果の月より短い場合、結果は月の最終日ではなく、結果の月の対応する日付になります。例えば、4 月 30 日 \$1 1 か月は 5 月 30 日になります。

  ```
  select dateadd(month,1,'2008-04-30');
  
  date_add
  ---------------------
  2008-05-30 00:00:00
  (1 row)
  ```

DATEADD 関数では dateadd(month, 12,…) または dateadd(year, 1, …) を使用するとき、うるう年の日付 02-29 は扱いが異なります。

```
select dateadd(month,12,'2016-02-29');
               
date_add
---------------------
2017-02-28 00:00:00

select dateadd(year, 1, '2016-02-29');

date_add       
---------------------
2017-03-01 00:00:00
```

# DATEDIFF 関数
<a name="r_DATEDIFF_function"></a>

DATEDIFF は 2 つの日付または時刻式の日付部分の差を返します。

## 構文
<a name="r_DATEDIFF_function-synopsis"></a>

```
DATEDIFF( datepart, {date|time|timetz|timestamp}, {date|time|timetz|timestamp} )
```

## 引数
<a name="r_DATEDIFF_function-arguments"></a>

 *datepart*   
関数が実行される日付または時刻値 (年、月、または日、時、分、秒、ミリ秒、またはマイクロ秒) の特定部分。詳細については、「[日付関数またはタイムスタンプ関数の日付部分](r_Dateparts_for_datetime_functions.md)」を参照してください。  
特に、DATEDIFF は 2 つの式の間で越える日付部分の境界の数を決定します。例えば、`12-31-2008` と `01-01-2009` の 2 つの日付間で年の差を計算しているとします。この場合、これらの日付は 1 日しか離れていないにもかかわらず、関数は 1 年を返します。2 つのタイムスタンプ (`01-01-2009 8:30:00` と `01-01-2009 10:00:00`) の間で時間の差が分かっている場合、結果は 2 時間になります。2 つのタイムスタンプ (`8:30:00` と `10:00:00`) の間で時間の差が分かっている場合、結果は 2 時間になります。

*date*\$1*time*\$1*timetz*\$1*timestamp*  
DATE、TIME、TIMETZ、または TIMESTAMP の列、あるいは暗黙的に DATE、TIME、TIMETZ、または TIMESTAMP に変換される式。両方の式には、指定した日付部分または時刻部分を含める必要があります。2 番目の日付または時刻が 1 番目の日付または時刻よりも後である場合、結果は正です。2 番目の日付または時刻が 1 番目の日付または時刻よりも前である場合、結果は負です。

## 戻り型
<a name="r_DATEDIFF_function-return-type"></a>

BIGINT

## DATE 列の例
<a name="r_DATEDIFF_function-examples"></a>

次の例では、2 つの日付リテラル値の間の差 (週単位) を取得します。

```
select datediff(week,'2009-01-01','2009-12-31') as numweeks;

numweeks
----------
52
(1 row)
```

次の例は、2 つの日付リテラル値の差 (時間単位) を検出します。日付の時刻値を指定しなかった場合、デフォルトで 00:00:00 に設定されます。

```
select datediff(hour, '2023-01-01', '2023-01-03 05:04:03');
            
date_diff
----------
53
(1 row)
```

次の例は、2 つの日付リテラル TIMESTAMETZ 値の差 (日単位) を検出します。

```
Select datediff(days, 'Jun 1,2008  09:59:59 EST', 'Jul 4,2008  09:59:59 EST')
         
date_diff
----------
33
```

次の例は、テーブルの同じ行の 2 つの日付の差 (日単位) を検出します。

```
select * from date_table;

start_date |   end_date
-----------+-----------
2009-01-01 | 2009-03-23
2023-01-04 | 2024-05-04
(2 rows)

select datediff(day, start_date, end_date) as duration from date_table;
         
duration
---------
      81
     486
(2 rows)
```

次の例では、過去のリテラル値と今日の日付の間の差 (四半期単位) を取得します。この例では、現在の日付を 2008 年 6 月 5 日とします。完全名または略名で日付部分に名前を付けることができます。DATEDIFF 関数のデフォルトの列名は DATE\$1DIFF です。

```
select datediff(qtr, '1998-07-01', current_date);

date_diff
-----------
40
(1 row)
```

次の例では、SALES テーブルと LISTING テーブルを結合し、リスト 1000 から 1005 に対してチケットをリストしてから何日後に販売されたかを計算します。これらのリストの販売を最長の待機期間は 15 日であり、最小は 1 日より短いです (0 日)。

```
select priceperticket,
datediff(day, listtime, saletime) as wait
from sales, listing where sales.listid = listing.listid
and sales.listid between 1000 and 1005
order by wait desc, priceperticket desc;

priceperticket | wait
---------------+------
 96.00         |   15
 123.00        |   11
 131.00        |    9
 123.00        |    6
 129.00        |    4
 96.00         |    4
 96.00         |    0
(7 rows)
```

この例は、販売者が任意およびすべてのチケット販売を待機する平均時間を計算します。

```
select avg(datediff(hours, listtime, saletime)) as avgwait
from sales, listing
where sales.listid = listing.listid;

avgwait
---------
465
(1 row)
```

## TIME 列の例
<a name="r_DATEDIFF_function-examples-time"></a>

次のテーブルの TIME\$1TEST の例には、3 つの値が挿入された列 TIME\$1VAL (タイプ TIME) があります。

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

次の例では、TIME\$1VAL 列と時刻リテラル間の時間数の差を検出します。

```
select datediff(hour, time_val, time '15:24:45') from time_test;
         
 date_diff
-----------
        -5
        15
        15
```

次の例では、2 つのリテラル時間値の分数の差を検出します。

```
select datediff(minute, time '20:00:00', time '21:00:00') as nummins;  
         
nummins 
---------- 
60
```

## TIMETZ 列の例
<a name="r_DATEDIFF_function-examples-timetz"></a>

次のテーブルの TIMETZ\$1TEST の例には、3 つの値が挿入された列 TIMETZ\$1VAL (タイプ TIMETZ) があります。

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

次の例では、TIMETZ リテラルと timetz\$1val の間の時間数の差を検出します。

```
select datediff(hours, timetz '20:00:00 PST', timetz_val) as numhours from timetz_test;

numhours 
---------- 
0
-4
1
```

次の例では、2 つのリテラル TIMETZ 値間の時間数の差を検出します。

```
select datediff(hours, timetz '20:00:00 PST', timetz '00:58:00 EST') as numhours;
         
numhours 
---------- 
1
```

# DATE\$1PART 関数
<a name="r_DATE_PART_function"></a>

DATE\$1PART は式から日付部分の値を抽出します。DATE\$1PART は PGDATE\$1PART 関数のシノニムです。

## 構文
<a name="r_DATE_PART_function-synopsis"></a>

```
DATE_PART(datepart, {date|timestamp})
```

## 引数
<a name="r_DATE_PART_function-arguments"></a>

 *datepart*   
関数が実行される日付の値の特定部分 (例: 年、月、または日) の識別子リテラルまたは文字列。詳細については、「[日付関数またはタイムスタンプ関数の日付部分](r_Dateparts_for_datetime_functions.md)」を参照してください。

\$1*date*\$1*timestamp*\$1  
日付列、タイムスタンプ列、または暗黙的に日付またはタイムスタンプに変換される式。*日付*または*タイムスタンプ*の列または式には、*datepart* で指定された日付部分が含まれている必要があります。

## 戻り型
<a name="r_DATE_PART_function-return-type"></a>

DOUBLE

## 例
<a name="r_DATE_PART_function-examples"></a>

DATE\$1PART 関数のデフォルトの列名は `pgdate_part` です。

 次の例の一部で使用されるデータの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

次の例では、タイムスタンプリテラルから分を見つけます。

```
SELECT DATE_PART(minute, timestamp '20230104 04:05:06.789');
            
pgdate_part
-----------
         5
```

次の例では、タイムスタンプリテラルから週番号を見つけます。週番号の計算は、ISO 8601 標準に従います。詳細については、Wikipedia の「[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)」を参照してください。

```
SELECT DATE_PART(week, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         18
```

次の例では、タイムスタンプリテラルから日付を見つけます。

```
SELECT DATE_PART(day, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         2
```

次の例では、タイムスタンプリテラルから曜日を見つけます。曜日番号の計算は、日曜日から始まる 0～6 の整数です。

```
SELECT DATE_PART(dayofweek, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         1
```

次の例では、タイムスタンプリテラルから世紀を見つけます。世紀の計算は、ISO 8601 標準に従います。詳細については、Wikipedia の「[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)」を参照してください。

```
SELECT DATE_PART(century, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         21
```

次の例は、タイムスタンプリテラルからミレニアムを検出します。ミレニアムの計算は、ISO 8601 標準に従います。詳細については、Wikipedia の「[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)」を参照してください。

```
SELECT DATE_PART(millennium, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
         3
```

次の例は、タイムスタンプリテラルからマイクロ秒を検出します。マイクロ秒の計算は、ISO 8601 標準に従います。詳細については、Wikipedia の「[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601)」を参照してください。

```
SELECT DATE_PART(microsecond, timestamp '20220502 04:05:06.789');
            
pgdate_part
-----------
    789000
```

次の例では、日付リテラルから月を見つけます。

```
SELECT DATE_PART(month, date '20220502');
            
pgdate_part
-----------
         5
```

次の例は、DATE\$1PART 関数をテーブルの列に適用します。

```
SELECT date_part(w, listtime) AS weeks, listtime
FROM listing 
WHERE listid=10
            

weeks |      listtime
------+---------------------
 25   | 2008-06-17 09:44:54
(1 row)
```

完全形あるいは省略形の日付部分に名前を付けることができます。この場合、*w* は週を指します。

曜日の日付部分は、0～6 の整数を返します (0 は日曜日)。dow (曜日) とともに DATE\$1PART を使用し、土曜のイベントを表示します。

```
SELECT date_part(dow, starttime) AS dow, starttime 
FROM event
WHERE date_part(dow, starttime)=6
ORDER BY 2,1;     

 dow |      starttime
-----+---------------------
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
   6 | 2008-01-05 14:00:00
...
(1147 rows)
```

# DATE\$1PART\$1YEAR 関数
<a name="r_DATE_PART_YEAR"></a>

DATE\$1PART\$1YEAR 関数は日付から年を抽出します。

## 構文
<a name="r_DATE_PART_YEAR-synopsis"></a>

```
DATE_PART_YEAR(date)
```

## 引数
<a name="r_DATE_PART_YEAR-argument"></a>

 *date*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

## 戻り型
<a name="r_DATE_PART_YEAR-return-type"></a>

INTEGER

## 例
<a name="r_DATE_PART_YEAR-examples"></a>

次の例では、日付リテラルから年を見つけます。

```
SELECT DATE_PART_YEAR(date '20220502 04:05:06.789');

date_part_year
---------------
2022
```

次の例は CALDATE 列から年を抽出します。CALDATE 列の値は日付です。この例で使用されているデータの詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
select caldate, date_part_year(caldate)
from date
order by
dateid limit 10;

 caldate   | date_part_year
-----------+----------------
2008-01-01 |           2008
2008-01-02 |           2008
2008-01-03 |           2008
2008-01-04 |           2008
2008-01-05 |           2008
2008-01-06 |           2008
2008-01-07 |           2008
2008-01-08 |           2008
2008-01-09 |           2008
2008-01-10 |           2008
(10 rows)
```

# DATE\$1TRUNC 関数
<a name="r_DATE_TRUNC"></a>

DATE\$1TRUNC 関数は、指定した日付部分 (時、日、月など) に基づいてタイムスタンプの式またはリテラルを切り捨てます。

## 構文
<a name="r_DATE_TRUNC-synopsis"></a>

```
DATE_TRUNC('datepart', timestamp)
```

## 引数
<a name="r_DATE_TRUNC-arguments"></a>

 *datepart*   
タイムスタンプの値を切り捨てる日付部分。入力*タイムスタンプ*は、入力 *datepart* の精度で切り捨てられます。例えば、`month` は、その月の初日で切り捨てられます。有効な形式は次のとおりです。  
+ microsecond、microseconds
+ millisecond、milliseconds
+ second、seconds
+ minute、minutes
+ hour、hours
+ day、days
+ week、weeks
+ month、months
+ quarter、quarters
+ year、years
+ decade、decades
+ century、centuries
+ millennium、millennia
形式の略語の詳細については、「[日付関数またはタイムスタンプ関数の日付部分](r_Dateparts_for_datetime_functions.md)」を参照してください。

 *timestamp*   
タイムスタンプの列、あるいは暗黙的にタイムスタンプに変換される式。

## 戻り型
<a name="r_DATE_TRUNC-return-type"></a>

TIMESTAMP

## 例
<a name="r_DATE_TRUNC-example"></a>

入力タイムスタンプを秒単位で切り捨てます。

```
SELECT DATE_TRUNC('second', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:05:06
```

入力タイムスタンプを分単位で切り捨てます。

```
SELECT DATE_TRUNC('minute', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:05:00
```

入力タイムスタンプを時間単位で切り捨てます。

```
SELECT DATE_TRUNC('hour', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 04:00:00
```

入力タイムスタンプを日単位で切り捨てます。

```
SELECT DATE_TRUNC('day', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-30 00:00:00
```

入力タイムスタンプを月の初日で切り捨てます。

```
SELECT DATE_TRUNC('month', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-01 00:00:00
```

入力タイムスタンプを四半期の初日で切り捨てます。

```
SELECT DATE_TRUNC('quarter', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-04-01 00:00:00
```

入力タイムスタンプを 1 年の初日で切り捨てます。

```
SELECT DATE_TRUNC('year', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2020-01-01 00:00:00
```

入力タイムスタンプを 1 世紀の初日で切り捨てます。

```
SELECT DATE_TRUNC('millennium', TIMESTAMP '20200430 04:05:06.789');
date_trunc
2001-01-01 00:00:00
```

入力タイムスタンプを月曜日に切り捨てます。

```
select date_trunc('week', TIMESTAMP '20220430 04:05:06.789');
date_trunc
2022-04-25 00:00:00
```

次の例では、DATE\$1TRUNC 関数が 'week' の日付部分を使用して、各週の月曜日の日付を返します。

```
select date_trunc('week', saletime), sum(pricepaid) from sales where
saletime like '2008-09%' group by date_trunc('week', saletime) order by 1;

date_trunc  |    sum
------------+-------------
2008-09-01  | 2474899
2008-09-08  | 2412354
2008-09-15  | 2364707
2008-09-22  | 2359351
2008-09-29  |  705249
```

# EXTRACT 関数
<a name="r_EXTRACT_function"></a>

EXTRACT 関数は、TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、 INTERVAL YEAR TO MONTH、または INTERVAL DAY TO SECOND の値から日付または時刻のパートを返します。例としては、タイムスタンプの日、月、年、時、分、秒、ミリ秒、マイクロ秒などがあります。

## 構文
<a name="r_EXTRACT_function-synopsis"></a>

```
EXTRACT(datepart FROM source)
```

## 引数
<a name="r_EXTRACT_function-arguments"></a>

 *datepart*   
日、月、年、時、分、秒、ミリ秒、マイクロ秒など、抽出する日付または時刻のサブフィールド。有効な値については、「[日付関数またはタイムスタンプ関数の日付部分](r_Dateparts_for_datetime_functions.md)」を参照してください。

 * ソース*   
評価結果が TIMESTAMP、TIMESTAMPTZ、TIME、TIMETZ、INTERVAL YEAR TO MONTH、または INTERVAL DAY TO SECOND のデータ型になる列または式。

## 戻り型
<a name="r_EXTRACT_function-return-type"></a>

source 値が TIMESTAMP、TIME、TIMETZ、INTERVAL YEAR TO MONTH、または INTERVAL DAY TO SECOND のデータ型として評価される場合は INTEGER。**

*source* 値がデータ型 TIMESTAMPTZ として評価される場合は、DOUBLE PRECISION。

## TIMESTAMP の例
<a name="r_EXTRACT_function-examples"></a>

次の例では、支払価格が 10,000 USD 以上であった販売の週の数を判定します。この例では、TICKIT データを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
select salesid, extract(week from saletime) as weeknum
from sales 
where pricepaid > 9999 
order by 2;

salesid | weeknum
--------+---------
 159073 |       6
 160318 |       8
 161723 |      26
```

次の例では、リテラルタイムスタンプの値から分の値を返します。

```
select extract(minute from timestamp '2009-09-09 12:08:43');
            
date_part
-----------
8
```

次の例は、リテラルタイムスタンプ値からミリ秒の値を返します。

```
select extract(ms from timestamp '2009-09-09 12:08:43.101');
            
date_part
-----------
101
```

## TIMESTAMPTZ の例
<a name="r_EXTRACT_function-examples-timestamptz"></a>

次の例は、リテラル timestamptz 値から年の値を返します。

```
select extract(year from timestamptz '1.12.1997 07:37:16.00 PST');
            
date_part
-----------
1997
```

## TIME の例
<a name="r_EXTRACT_function-examples-time"></a>

次のテーブルの TIME\$1TEST の例には、3 つの値が挿入された列 TIME\$1VAL (タイプ TIME) があります。

```
select time_val from time_test;
            
time_val
---------------------
20:00:00
00:00:00.5550
00:58:00
```

次の例は、各 time\$1val から分を抽出します。

```
select extract(minute from time_val) as minutes from time_test;
            
minutes
-----------
         0
         0
         58
```

次の例は、各 time\$1val から時間を抽出します。

```
select extract(hour from time_val) as hours from time_test;
            
hours
-----------
         20
         0
         0
```

次の例では、リテラル値からミリ秒を抽出します。

```
select extract(ms from time '18:25:33.123456');
            
 date_part
-----------
     123
```

## TIMETZ の例
<a name="r_EXTRACT_function-examples-timetz"></a>

次のテーブルの TIMETZ\$1TEST の例には、3 つの値が挿入された列 TIMETZ\$1VAL (タイプ TIMETZ) があります。

```
select timetz_val from timetz_test;
            
timetz_val
------------------
04:00:00+00
00:00:00.5550+00
05:58:00+00
```

次の例では、各 timetz\$1val から時間を抽出します。

```
select extract(hour from timetz_val) as hours from time_test;
            
hours
-----------
         4
         0
         5
```

次の例では、リテラル値からミリ秒を抽出します。抽出が処理される前には、リテラルは UTC に変換されません。

```
select extract(ms from timetz '18:25:33.123456 EST');
            
 date_part
-----------
     123
```

次の例は、リテラル timetz 値から、UTC からのタイムゾーンオフセット時を返します。

```
select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT');
            
date_part
-----------
-7
```

## INTERVAL YEAR TO MONTH と INTERVAL DAY TO SECOND の例
<a name="r_EXTRACT_function-examples-interval"></a>

次の例では、36 時間 (1 日と 12 時間) を定義する INTERVAL DAY TO SECOND から日のパートである `1` を抽出します。

```
select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND)
  
 date_part
------------------
 1
```

次の例では、15 か月 (1 年と 3 か月) を定義する YEAR TO MONTH から月のパートである `3` を抽出します。

```
select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH)
  
 date_part
------------------
 3
```

次の例では、30 か月 (2 年と 6 か月) から月のパートである `6` を抽出します。

```
select EXTRACT('month' from INTERVAL '30' MONTH)
   
 date_part
------------------
 6
```

次の例では、50 時間 (2 日と 2 時間) から時間のパートである `2` を抽出します。

```
select EXTRACT('hours' from INTERVAL '50' HOUR)
  
 date_part
------------------
 2
```

次の例では、1 時間 11 分 11.123 秒から分のパートである `11` を抽出します。

```
select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND)
  
 date_part
------------------
 11
```

次の例では、1 日 1 時間 1 分 1.11 秒から秒のパートである `1.11` を抽出します。

```
select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
  
 date_part
------------------
 1.11
```

次の例では、INTERVAL の合計時間数を抽出します。各パートが抽出され、合計に追加されます。

```
select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR)
 
 ?column?
------------------
 50
```

次の例では、INTERVAL の合計秒数を抽出します。各パートが抽出され、合計に追加されます。

```
select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 + 
       EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 +
       EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 + 
       EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND)
  
 ?column?
------------------
 90061.11
```

# GETDATE 関数
<a name="r_GETDATE"></a>

GETDATE は、現在のセッションのタイムゾーン (デフォルトでは UTC) で現在の日付と時刻を返します。トランザクションブロック内にある場合でも、現在のステートメントの開始日または開始時刻を返します。

## 構文
<a name="r_GETDATE-synopsis"></a>

```
GETDATE()
```

かっこが必要です。

## 戻り型
<a name="r_GETDATE-return-type"></a>

TIMESTAMP

## 例
<a name="r_GETDATE-examples"></a>

次の例は、GETDATE 関数を使用して現在の日付の完全なタイムスタンプを返します。

```
select getdate();

timestamp
---------------------
2008-12-04 16:10:43
```

次の例では、TRUNC 関数内の GETDATE 関数を使用し、時刻のない現在の日付を返します。

```
select trunc(getdate());

trunc
------------
2008-12-04
```

# INTERVAL\$1CMP 関数
<a name="r_INTERVAL_CMP"></a>

INTERVAL\$1CMP は 2 つの間隔を比較し、1 番目の間隔が大きい場合は `1`、2 番目の間隔が大きい場合は `-1`、間隔が等しい場合は `0` をそれぞれ返します。詳細については、「[修飾子構文を使用しない間隔リテラルの例](r_interval_literals.md)」を参照してください。

## 構文
<a name="r_INTERVAL_CMP-syntax"></a>

```
INTERVAL_CMP(interval1, interval2)
```

## 引数
<a name="r_INTERVAL_CMP-arguments"></a>

 *interval1*   
間隔のリテラル値。

 *interval2*   
間隔のリテラル値。

## 戻り型
<a name="r_INTERVAL_CMP-return-type"></a>

INTEGER

## 例
<a name="r_INTERVAL_CMP-examples"></a>

次の例は `3 days` の値と `1 year` を比較しています。

```
select interval_cmp('3 days','1 year');

interval_cmp
--------------
-1
```

この例では値 `7 days` と `1 week` を比較しています。

```
select interval_cmp('7 days','1 week');

interval_cmp
--------------
0
```

次の例は `1 year` の値と `3 days` を比較しています。

```
select interval_cmp('1 year','3 days');

interval_cmp
--------------
1
```

# LAST\$1DAY 関数
<a name="r_LAST_DAY"></a>

LAST\$1DAY は、*date* を含む月の最終日の日付を返します。戻り値の型は、*date* 引数のデータ型にかかわらず常に DATE です。

特定の日付部分の取得の詳細については、「[DATE\$1TRUNC 関数](r_DATE_TRUNC.md)」を参照してください。

## 構文
<a name="r_LAST_DAY-synopsis"></a>

```
LAST_DAY( { date | timestamp } )
```

## 引数
<a name="r_LAST_DAY-arguments"></a>

*date* \$1 *timestamp*

データ型 `DATE` または `TIMESTAMP` の列、あるいは `DATE` 型または `TIMESTAMP` 型に暗黙的に評価される式。

## 戻り型
<a name="r_LAST_DAY-return-type"></a>

DATE

## 例
<a name="r_LAST_DAY-examples"></a>

次の例では、現在の月の最終日の日付が返されます。

```
select last_day(sysdate);

  last_day
------------
 2014-01-31
```

次の例では、月の最後の 7 日間それぞれに販売されたチケット数が返されます。SALETIME 列の値はタイムスタンプです。

```
select datediff(day, saletime, last_day(saletime)) as "Days Remaining", sum(qtysold)
from sales
where datediff(day, saletime, last_day(saletime)) < 7
group by 1
order by 1;

days remaining |  sum
---------------+-------
             0 | 10140
             1 | 11187
             2 | 11515
             3 | 11217
             4 | 11446
             5 | 11708
             6 | 10988
(7 rows)
```

# MONTHS\$1BETWEEN 関数
<a name="r_MONTHS_BETWEEN_function"></a>

MONTHS\$1BETWEEN は、2 つの日付の間の月数を算出します。

1 番目の日付が 2 番目の日付より値の場合、結果は正になります。それ以外の場合、結果は負になります。

どちらかの引数が null の場合、結果は NULL になります。

## 構文
<a name="r_MONTHS_BETWEEN_function-synopsis"></a>

```
MONTHS_BETWEEN( date1, date2 )
```

## 引数
<a name="r_MONTHS_BETWEEN_function-arguments"></a>

 *date1*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

 *date2*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

## 戻り型
<a name="r_MONTHS_BETWEEN_function-return-type"></a>

FLOAT8

結果の整数部分は、日付の年の値と月の値の差分に基づいて決まります。結果の小数部分は、日付の曜日およびタイムスタンプの値から計算され、1 か月が 31 日であると想定しています。

*date1* と *date2* のどちらにも月の同じ日付が含まれているか (1/15/14 と 2/15/14 など)、月の末日が含まれている場合 (8/31/14 と 9/30/14 など)、タイムスタンプ部分 (存在する場合) が一致するかどうかに関係なく、結果は日付の年と月の値に基づく整数となります。

## 例
<a name="r_MONTHS_BETWEEN_function-examples"></a>

次の例では、1969 年 1 月 18 日から 1969 年 3 月 18 日までの月数を返します。

```
select months_between('1969-01-18', '1969-03-18')
as months;

months
----------
-2
```

次の例では、1969 年 1 月 18 日から 1969 年 1 月 18 日までの月数を返します。

```
select months_between('1969-01-18', '1969-01-18')
as months;

months
----------
0
```

 次の例では、イベントの最初の開催から最後の開催までの月数を返します。

```
select eventname, 
min(starttime) as first_show,
max(starttime) as last_show,
months_between(max(starttime),min(starttime)) as month_diff
from event 
group by eventname
order by eventname
limit 5;

eventname         first_show             last_show              month_diff
---------------------------------------------------------------------------
.38 Special       2008-01-21 19:30:00.0  2008-12-25 15:00:00.0  11.12
3 Doors Down      2008-01-03 15:00:00.0  2008-12-01 19:30:00.0  10.94
70s Soul Jam      2008-01-16 19:30:00.0  2008-12-07 14:00:00.0  10.7
A Bronx Tale      2008-01-21 19:00:00.0  2008-12-15 15:00:00.0  10.8
A Catered Affair  2008-01-08 19:30:00.0  2008-12-19 19:00:00.0  11.35
```

# NEXT\$1DAY 関数
<a name="r_NEXT_DAY"></a>

NEXT\$1DAY は、指定の日付より後に指定の曜日となる最初の日付を返します。

*day* 値が指定の日付と同じ曜日の場合、その曜日の次の出現が返されます。

## 構文
<a name="r_NEXT_DAY-synopsis"></a>

```
NEXT_DAY( { date | timestamp }, day )
```

## 引数
<a name="r_NEXT_DAY-arguments"></a>

 *date* \$1 *timestamp*  
データ型 `DATE` または `TIMESTAMP` の列、あるいは `DATE` 型または `TIMESTAMP` 型に暗黙的に評価される式。

 *日*   
任意の曜日の名前を含む文字列。大文字化は関係ありません。  
有効な値は次のとおりです。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_NEXT_DAY.html)

## 戻り型
<a name="r_NEXT_DAY-return-type"></a>

DATE

## 例
<a name="r_NEXT_DAY-example"></a>

次の例では、2014 年 8 月 20 日後の最初の火曜日を返します。

```
select next_day('2014-08-20','Tuesday');

next_day
-----------
2014-08-26
```

次の例では、2008 年 1 月 1 日以降の第 1 火曜日の日付を 5 時 54 分 44 秒に返します。

```
select listtime, next_day(listtime, 'Tue') from listing limit 1;

listtime            | next_day
--------------------+-----------
2008-01-01 05:54:44 | 2008-01-08
```

次の例は、第 3 四半期のターゲットマーケティング日を取得します。

```
select username, (firstname ||' '|| lastname) as name,
eventname, caldate, next_day (caldate, 'Monday') as marketing_target
from sales, date, users, event
where sales.buyerid = users.userid
and sales.eventid = event.eventid
and event.dateid = date.dateid
and date.qtr = 3
order by marketing_target, eventname, name;

username  |     name          |     eventname        |    caldate   |   marketing_target
----------+-------------------+----------------------+--------------+-------------------
MBO26QSG  |   Callum Atkinson | .38 Special          |  2008-07-06  |	2008-07-07
WCR50YIU  |   Erasmus Alvarez | A Doll's House       |  2008-07-03  |	2008-07-07
CKT70OIE  |   Hadassah Adkins | Ana Gabriel          |  2008-07-06  |	2008-07-07
VVG07OUO  |   Nathan Abbott   | Armando Manzanero    |  2008-07-04  |	2008-07-07
GEW77SII  |   Scarlet Avila   | August: Osage County |  2008-07-06  |	2008-07-07
ECR71CVS  |   Caryn Adkins    | Ben Folds            |  2008-07-03  |	2008-07-07
KUW82CYU  |   Kaden Aguilar   | Bette Midler         |  2008-07-01  |	2008-07-07
WZE78DJZ  |   Kay Avila       | Bette Midler         |  2008-07-01  |	2008-07-07
HXY04NVE  |   Dante Austin    | Britney Spears       |  2008-07-02  |	2008-07-07
URY81YWF  |   Wilma Anthony   | Britney Spears       |  2008-07-02  |	2008-07-07
```

# SYSDATE 関数
<a name="r_SYSDATE"></a>

SYSDATE は、現在のセッションのタイムゾーン (デフォルトでは UTC) で現在の日付と時刻を返します。

**注記**  
SYSDATE は現在のステートメントではなく、現在のトランザクションの開始日と時刻を返します。

## 構文
<a name="r_SYSDATE-synopsis"></a>

```
SYSDATE
```

この関数に引数は必要ありません。

## 戻り型
<a name="r_SYSDATE-return-type"></a>

TIMESTAMP

## 例
<a name="r_SYSDATE-examples"></a>

次の例は、SYSDATE 関数を使用して現在の日付の完全なタイムスタンプを返します。

```
select sysdate;

timestamp
----------------------------
2008-12-04 16:10:43.976353
```

次の例は TRUNC 関数内で SYSDATE 関数を使用し、時刻のない現在の日付を返します。

```
select trunc(sysdate);

trunc
------------
2008-12-04
```

次のクエリは、クエリが発行された日付からその 120 日前までの間の日付の販売情報を返します。

```
select salesid, pricepaid, trunc(saletime) as saletime, trunc(sysdate) as now
from sales
where saletime between trunc(sysdate)-120 and trunc(sysdate)
order by saletime asc;

 salesid | pricepaid |  saletime  |    now
---------+-----------+------------+------------
91535    |    670.00 | 2008-08-07 | 2008-12-05
91635    |    365.00 | 2008-08-07 | 2008-12-05
91901    |   1002.00 | 2008-08-07 | 2008-12-05
...
```

# TIMEOFDAY 関数
<a name="r_TIMEOFDAY_function"></a>

TIMEOFDAY は文字列値として曜日、日付、および時刻を返すために使用される特別なエイリアスです。トランザクションブロック内にある場合でも、現在のステートメントの日付文字列の時刻を返します。

## 構文
<a name="r_TIMEOFDAY_function-syntax"></a>

```
TIMEOFDAY()
```

## 戻り型
<a name="r_TIMEOFDAY_function-return-type"></a>

VARCHAR

## 例
<a name="r_TIMEOFDAY_function-examples"></a>

次の例では、TIMEOFDAY 関数を使用して、現在の日付と時刻を返します。

```
select timeofday();

timeofday
------------
Thu Sep 19 22:53:50.333525 2013 UTC
```

# TIMESTAMP\$1CMP 関数
<a name="r_TIMESTAMP_CMP"></a>

2 つのタイムスタンプの値を比較し、整数を返します。タイムスタンプが同じである場合、関数は `0` を返します。最初のタイムスタンプがより大きい場合、関数は `1` を返します。2 番目のタイムスタンプがより大きい場合、関数は `-1` を返します。

## 構文
<a name="r_TIMESTAMP_CMP-synopsis"></a>

```
TIMESTAMP_CMP(timestamp1, timestamp2)
```

## 引数
<a name="r_TIMESTAMP_CMP-arguments"></a>

 *timestamp1*   
データ型 `TIMESTAMP` の列または `TIMESTAMP` 型に暗黙的に評価される式。

 *timestamp2*   
データ型 `TIMESTAMP` の列または `TIMESTAMP` 型に暗黙的に評価される式。

## 戻り型
<a name="r_TIMESTAMP_CMP-return-type"></a>

INTEGER

## 例
<a name="r_TIMESTAMP_CMP-examples"></a>

次の例では、タイムスタンプ間を比較し、比較の結果を示します。

```
SELECT TIMESTAMP_CMP('2008-01-24 06:43:29', '2008-01-24 06:43:29'), TIMESTAMP_CMP('2008-01-24 06:43:29', '2008-02-18 02:36:48'), TIMESTAMP_CMP('2008-02-18 02:36:48', '2008-01-24 06:43:29');

timestamp_cmp  | timestamp_cmp | timestamp_cmp 
---------------+---------------+---------------
             0 |            -1 |             1
```

次の例では、出品の LISTTIME と SALETIME を比較します。販売のタイムスタンプは出品のタイムスタンプより後であるため、すべての出品で TIMESTAMP\$1CMP の値は `-1` です。

```
select listing.listid, listing.listtime,
sales.saletime, timestamp_cmp(listing.listtime, sales.saletime)
from listing, sales
where listing.listid=sales.listid
order by 1, 2, 3, 4
limit 10;

 listid |      listtime       |      saletime       | timestamp_cmp
--------+---------------------+---------------------+---------------
      1 | 2008-01-24 06:43:29 | 2008-02-18 02:36:48 |            -1
      4 | 2008-05-24 01:18:37 | 2008-06-06 05:00:16 |            -1
      5 | 2008-05-17 02:29:11 | 2008-06-06 08:26:17 |            -1
      5 | 2008-05-17 02:29:11 | 2008-06-09 08:38:52 |            -1
      6 | 2008-08-15 02:08:13 | 2008-08-31 09:17:02 |            -1
     10 | 2008-06-17 09:44:54 | 2008-06-26 12:56:06 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-10 02:12:36 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-16 11:59:24 |            -1
     10 | 2008-06-17 09:44:54 | 2008-07-22 02:23:17 |            -1
     12 | 2008-07-25 01:45:49 | 2008-08-04 03:06:36 |            -1
(10 rows)
```

この例は、両方のタイムスタンプが同一の場合に TIMESTAMP\$1CMP が 0 を返すことを示しています。

```
select listid, timestamp_cmp(listtime, listtime)
from listing
order by 1 , 2
limit 10;

 listid | timestamp_cmp
--------+---------------
      1 |             0
      2 |             0
      3 |             0
      4 |             0
      5 |             0
      6 |             0
      7 |             0
      8 |             0
      9 |             0
     10 |             0
(10 rows)
```

# TIMESTAMP\$1CMP\$1DATE 関数
<a name="r_TIMESTAMP_CMP_DATE"></a>

TIMESTAMP\$1CMP\$1DATE は、タイムスタンプの値と日付を比較します。タイムスタンプと日付の値が同じである場合、関数は `0` を返します。タイムスタンプが時間的により大きい場合、関数は `1` を返します。日付がより大きい場合、関数は `-1` を返します。

## 構文
<a name="r_TIMESTAMP_CMP_DATE-syntax"></a>

```
TIMESTAMP_CMP_DATE(timestamp, date)
```

## 引数
<a name="r_TIMESTAMP_CMP_DATE-arguments"></a>

 *timestamp*   
データ型 `TIMESTAMP` の列または `TIMESTAMP` 型に暗黙的に評価される式。

 *date*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

## 戻り型
<a name="r_TIMESTAMP_CMP_DATE-return-type"></a>

INTEGER

## 例
<a name="r_TIMESTAMP_CMP_DATE-examples"></a>

次の例は LISTTIME と日付 `2008-06-18` を比較します。この日付より後に作成されたリストは `1` を返し、この日付より前に作成されたリストは `-1` を返します。LISTTIME の値はタイムスタンプです。

```
select listid, listtime,
timestamp_cmp_date(listtime, '2008-06-18')
from listing
order by 1, 2, 3
limit 10;


 listid |      listtime       | timestamp_cmp_date
--------+---------------------+--------------------
      1 | 2008-01-24 06:43:29 |              -1
      2 | 2008-03-05 12:25:29 |              -1
      3 | 2008-11-01 07:35:33 |               1
      4 | 2008-05-24 01:18:37 |              -1
      5 | 2008-05-17 02:29:11 |              -1
      6 | 2008-08-15 02:08:13 |               1
      7 | 2008-11-15 09:38:15 |               1
      8 | 2008-11-09 05:07:30 |               1
      9 | 2008-09-09 08:03:36 |               1
     10 | 2008-06-17 09:44:54 |              -1
(10 rows)
```

# TIMESTAMP\$1CMP\$1TIMESTAMPTZ 関数
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ"></a>

TIMESTAMP\$1CMP\$1TIMESTAMPTZ は、タイムスタンプ式の値と、タイムゾーン式を含むタイムスタンプを比較します。タイムスタンプと、タイムゾーン付きのタイムスタンプの値が同じである場合、関数は `0` を返します。タイムスタンプが時間的により大きい場合、関数は `1` を返します。タイムゾーン付きのタイムスタンプがより大きい場合、関数は `–1` を返します。

## 構文
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-syntax"></a>

```
TIMESTAMP_CMP_TIMESTAMPTZ(timestamp, timestamptz)
```

## 引数
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-arguments"></a>

 *timestamp*   
データ型 `TIMESTAMP` の値または `TIMESTAMP` 型に暗黙的に評価される式。

 *timestamptz*   
データ型 `TIMESTAMPTZ` の列または `TIMESTAMPTZ` 型に暗黙的に評価される式。

## 戻り型
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-return-type"></a>

INTEGER

## 例
<a name="r_TIMESTAMP_CMP_TIMESTAMPTZ-examples"></a>

次の例では、タイムスタンプと、タイムゾーン付のタイムスタンプを比較し、比較の結果を示します。

```
SELECT TIMESTAMP_CMP_TIMESTAMPTZ('2008-01-24 06:43:29', '2008-01-24 06:43:29+00'), TIMESTAMP_CMP_TIMESTAMPTZ('2008-01-24 06:43:29', '2008-02-18 02:36:48+00'), TIMESTAMP_CMP_TIMESTAMPTZ('2008-02-18 02:36:48', '2008-01-24 06:43:29+00');

timestamp_cmp_timestamptz  | timestamp_cmp_timestamptz | timestamp_cmp_timestamptz 
---------------------------+---------------------------+--------------------------
             0             |            -1             |             1
```

# TIMESTAMPTZ\$1CMP 関数
<a name="r_TIMESTAMPTZ_CMP"></a>

TIMESTAMPTZ\$1CMP は、タイムゾーン値を含む 2 つのタイムスタンプの値を比較し、整数を返します。タイムスタンプが同じである場合、関数は `0` を返します。最初のタイムスタンプが時間的により大きい場合、関数は `1` を返します。2 番目のタイムスタンプがより大きい場合、関数は `–1` を返します。

## 構文
<a name="r_TIMESTAMPTZ_CMP-synopsis"></a>

```
TIMESTAMPTZ_CMP(timestamptz1, timestamptz2)
```

## 引数
<a name="r_TIMESTAMPTZ_CMP-arguments"></a>

 *timestamptz1*   
データ型 `TIMESTAMPTZ` の列または `TIMESTAMPTZ` 型に暗黙的に評価される式。

 *timestamptz2*   
データ型 `TIMESTAMPTZ` の列または `TIMESTAMPTZ` 型に暗黙的に評価される式。

## 戻り型
<a name="r_TIMESTAMPTZ_CMP-return-type"></a>

INTEGER

## 例
<a name="r_TIMESTAMPTZ_CMP-examples"></a>

次の例では、タイムゾーン付きのタイムスタンプ間を比較し、比較の結果を示します。

```
SELECT TIMESTAMPTZ_CMP('2008-01-24 06:43:29+00', '2008-01-24 06:43:29+00'), TIMESTAMPTZ_CMP('2008-01-24 06:43:29+00', '2008-02-18 02:36:48+00'), TIMESTAMPTZ_CMP('2008-02-18 02:36:48+00', '2008-01-24 06:43:29+00');

timestamptz_cmp  | timestamptz_cmp | timestamptz_cmp
-----------------+-----------------+----------------
        0        |       -1        |       1
```

# TIMESTAMPTZ\$1CMP\$1DATE 関数
<a name="r_TIMESTAMPTZ_CMP_DATE"></a>

TIMESTAMPTZ\$1CMP\$1DATE は、タイムスタンプの値と日付を比較します。タイムスタンプと日付の値が同じである場合、関数は `0` を返します。タイムスタンプが時間的により大きい場合、関数は `1` を返します。日付がより大きい場合、関数は `–1` を返します。

## 構文
<a name="r_TIMESTAMPTZ_CMP_DATE-syntax"></a>

```
TIMESTAMPTZ_CMP_DATE(timestamptz, date)
```

## 引数
<a name="r_TIMESTAMPTZ_CMP_DATE-arguments"></a>

 *timestamptz*   
データ型 `TIMESTAMPTZ` の列または `TIMESTAMPTZ` 型に暗黙的に評価される式。

 *date*   
データ型 `DATE` の列または `DATE` 型に暗黙的に評価される式。

## 戻り型
<a name="r_TIMESTAMPTZ_CMP_DATE-return-type"></a>

INTEGER

## 例
<a name="r_TIMESTAMPTZ_CMP_DATE-examples"></a>

次の例では、LISTTIME (タイムゾーン付きのタイムスタンプ) と日付 `2008-06-18` を比較します。この日付より後に作成されたリストは `1` を返し、この日付より前に作成されたリストは `-1` を返します。

```
select listid, CAST(listtime as timestamptz) as tstz,
timestamp_cmp_date(tstz, '2008-06-18')
from listing
order by 1, 2, 3
limit 10;


 listid |          tstz          | timestamptz_cmp_date
--------+------------------------+----------------------
      1 | 2008-01-24 06:43:29+00 |              -1
      2 | 2008-03-05 12:25:29+00 |              -1
      3 | 2008-11-01 07:35:33+00 |               1
      4 | 2008-05-24 01:18:37+00 |              -1
      5 | 2008-05-17 02:29:11+00 |              -1
      6 | 2008-08-15 02:08:13+00 |               1
      7 | 2008-11-15 09:38:15+00 |               1
      8 | 2008-11-09 05:07:30+00 |               1
      9 | 2008-09-09 08:03:36+00 |               1
     10 | 2008-06-17 09:44:54+00 |              -1
(10 rows)
```

# TIMESTAMPTZ\$1CMP\$1TIMESTAMP 関数
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP"></a>

TIMESTAMPTZ\$1CMP\$1TIMESTAMP は、タイムゾーン式を含むタイムスタンプの値とタイムスタンプ式を比較します。タイムゾーン付きのタイムスタンプと、タイムスタンプ値が同じである場合、関数は `0` を返します。タイムゾーン付きのタイムスタンプが時間的に大きい場合、関数は `1` を返します。タイムスタンプがより大きい場合、関数は `–1` を返します。

## 構文
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-syntax"></a>

```
TIMESTAMPTZ_CMP_TIMESTAMP(timestamptz, timestamp)
```

## 引数
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-arguments"></a>

 *timestamptz*   
データ型 `TIMESTAMPTZ` の列または `TIMESTAMPTZ` 型に暗黙的に評価される式。

 *timestamp*   
データ型 `TIMESTAMP` の列または `TIMESTAMP` 型に暗黙的に評価される式。

## 戻り型
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-return-type"></a>

INTEGER

## 例
<a name="r_TIMESTAMPTZ_CMP_TIMESTAMP-examples"></a>

次の例では、タイムゾーン付きタイムスタンプとタイムスタンプを比較し、比較の結果を示しています。

```
SELECT TIMESTAMPTZ_CMP_TIMESTAMP('2008-01-24 06:43:29+00', '2008-01-24 06:43:29'), TIMESTAMPTZ_CMP_TIMESTAMP('2008-01-24 06:43:29+00', '2008-02-18 02:36:48'), TIMESTAMPTZ_CMP_TIMESTAMP('2008-02-18 02:36:48+00', '2008-01-24 06:43:29');

timestamptz_cmp_timestamp  | timestamptz_cmp_timestamp | timestamptz_cmp_timestamp
---------------------------+---------------------------+---------------------------
              0            |            -1             |             1
```

# TIMEZONE 関数
<a name="r_TIMEZONE"></a>

TIMEZONE は、指定されたタイムゾーンのタイムスタンプとタイムスタンプ値を返します。

タイムゾーンの設定方法の詳細と例については、「[timezone](r_timezone_config.md)」を参照してください。

タイムゾーンの変換方法の詳細と例については、「[CONVERT\$1TIMEZONE](CONVERT_TIMEZONE.md)」を参照してください。

## 構文
<a name="r_TIMEZONE-syntax"></a>

```
TIMEZONE('timezone', { timestamp | timestamptz })
```

## 引数
<a name="r_TIMEZONE-arguments"></a>

*timezone*  
戻り値のタイムゾーン。タイムゾーンは、タイムゾーン名 (**'Africa/Kampala'** または **'Singapore'** など) またはタイムゾーンの略名 (**'UTC'** または **'PDT'** など) として指定できます。サポートされるタイムゾーン名のリストを表示するには、次のコマンドを実行します。  

```
select pg_timezone_names();
```
 サポートされるタイムゾーン省略形のリストを表示するには、次のコマンドを実行します。  

```
select pg_timezone_abbrevs();
```
Amazon Redshift は、[IANA タイムゾーンデータベース](https://www.iana.org/time-zones)をタイムゾーン仕様の信頼できるソースとして使用することに注意してください。詳細な説明と例については、[タイムゾーンの使用上の注意](CONVERT_TIMEZONE.md#CONVERT_TIMEZONE-usage-notes) を参照してください。

*timestamp* \$1 *timestamptz*  
TIMESTAMP 型または TIMESTAMPTZ 型となる式、あるいは暗黙的にタイムスタンプまたはタイムゾーン付きのタイムスタンプに強制変換できる値。

## 戻り型
<a name="r_TIMEZONE-return-type"></a>

TIMESTAMP 式で使用する場合は TIMESTAMPTZ。

TIMESTAMPTZ 式で使用する場合は TIMESTAMP。

## 例
<a name="r_TIMEZONE-examples"></a>

次の場合は、PST タイムゾーンからタイムスタンプ `2008-06-17 09:44:54` を使用して UTC タイムゾーンのタイムスタンプを返します。

```
SELECT TIMEZONE('PST', '2008-06-17 09:44:54');

timezone
-----------------------
2008-06-17 17:44:54+00
```

次の場合は、UTC タイムゾーン `2008-06-17 09:44:54+00` を含むタイムスタンプを使用して PST タイムゾーンのタイムスタンプを返します。

```
SELECT TIMEZONE('PST', timestamptz('2008-06-17 09:44:54+00'));

timezone
-----------------------
2008-06-17 01:44:54
```

# TO\$1TIMESTAMP 関数
<a name="r_TO_TIMESTAMP"></a>

TO\$1TIMESTAMP は TIMESTAMP 文字列を TIMESTAMPTZ に返します。Amazon Redshift のその他の日付および時刻関数のリストについては、「[日付および時刻関数](Date_functions_header.md)」を参照してください。

## 構文
<a name="r_TO_TIMESTAMP-syntax"></a>

```
to_timestamp(timestamp, format)
```

```
to_timestamp (timestamp, format, is_strict)
```

## 引数
<a name="r_TO_TIMESTAMP-arguments"></a>

*timestamp*  
*format* により指定された形式でタイムスタンプ値を表す文字列。この引数を空のままにすると、タイムスタンプ値はデフォルトで `0001-01-01 00:00:00` に設定されます。

*format*  
*timestamp* 値の形式を定義する文字列リテラル。タイムゾーン (**TZ**、**tz**、または **OF**) を含む形式は、入力としてサポートされていません。有効なタイムスタンプ形式については、「[日時形式の文字列](r_FORMAT_strings.md)」を参照してください。

*is\$1strict*  
入力タイムスタンプ値が範囲外である場合にエラーを返すかどうかを指定するオプションのブール値。*is\$1strict* が TRUE に設定されている場合、範囲外の値があるとエラーが返されます。*is\$1strict* がデフォルトの FALSE に設定されている場合、オーバーフロー値が受け入れられます。

## 戻り型
<a name="r_TO_TIMESTAMP-return-type"></a>

TIMESTAMPTZ

## 例
<a name="r_TO_TIMESTAMP-examples"></a>

次の例は、TO\$1TIMESTAMP 関数を使用して TIMESTAMP 文字列を TIMESTAMPTZ に変換する方法を示しています。

```
select sysdate, to_timestamp(sysdate, 'YYYY-MM-DD HH24:MI:SS') as second;

timestamp                  | second
--------------------------   ----------------------
2021-04-05 19:27:53.281812 | 2021-04-05 19:27:53+00
```

日付の TO\$1TIMESTAMP 部分を渡すこともできます。残りの日付部分はデフォルト値に設定されます。時刻は出力に含まれません。

```
SELECT TO_TIMESTAMP('2017','YYYY');

to_timestamp
--------------------------
2017-01-01 00:00:00+00
```

次の SQL ステートメントは、文字列「2011-12-18 24:38:15」を TIMESTAMPTZ に変換します。その結果、時間数が 24 時間を超えるため、翌日に該当する TIMESTAMPTZ になります。

```
SELECT TO_TIMESTAMP('2011-12-18 24:38:15', 'YYYY-MM-DD HH24:MI:SS');
         
to_timestamp
----------------------
2011-12-19 00:38:15+00
```

次の SQL ステートメントは、文字列「2011-12-18 24:38:15」を TIMESTAMPTZ に変換します。タイムスタンプの時刻値が 24 時間を超えているため、結果はエラーになります。

```
SELECT TO_TIMESTAMP('2011-12-18 24:38:15', 'YYYY-MM-DD HH24:MI:SS', TRUE);
         
ERROR:  date/time field time value out of range: 24:38:15.0
```

# TRUNC 関数
<a name="r_TRUNC_date"></a>

`TIMESTAMP` を切り捨て、`DATE` を返します。

 この関数は数値を切り捨てることもできます。詳細については、「[TRUNC 関数](r_TRUNC.md)」を参照してください。

## 構文
<a name="r_TRUNC_date-synopsis"></a>

```
TRUNC(timestamp)
```

## 引数
<a name="r_TRUNC_date-arguments"></a>

 *timestamp*   
データ型 `TIMESTAMP` の列または `TIMESTAMP` 型に暗黙的に評価される式。  
`00:00:00` を時刻とするタイムスタンプ値を返すには、関数の結果を `TIMESTAMP` にキャストします。

## 戻り型
<a name="r_TRUNC_date-return-type"></a>

DATE

## 例
<a name="r_TRUNC_date-examples"></a>

次の例では、SYSDATE 関数 (タイムスタンプを返す) の結果から日付部分を返します。

```
SELECT SYSDATE;

+----------------------------+
|         timestamp          |
+----------------------------+
| 2011-07-21 10:32:38.248109 |
+----------------------------+

SELECT TRUNC(SYSDATE);

+------------+
|   trunc    |
+------------+
| 2011-07-21 |
+------------+
```

次の例では、TRUNC 関数を `TIMESTAMP` 列に適用します。戻り型は日付です。

```
SELECT TRUNC(starttime) FROM event
ORDER BY eventid LIMIT 1;

+------------+
|   trunc    |
+------------+
| 2008-01-25 |
+------------+
```

次の例は、TRUNC 関数の結果を `TIMESTAMP` にキャストして、`00:00:00` を時刻とするタイムスタンプ値を返します。

```
SELECT CAST((TRUNC(SYSDATE)) AS TIMESTAMP);

+---------------------+
|        trunc        |
+---------------------+
| 2011-07-21 00:00:00 |
+---------------------+
```

# 日付関数またはタイムスタンプ関数の日付部分
<a name="r_Dateparts_for_datetime_functions"></a>

次のテーブルは、次の関数に対する引数として受け取る、日付部分および時刻部分の名前と略名を指定します。
+ DATEADD 
+ DATEDIFF 
+ DATE\$1PART 
+ EXTRACT 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_Dateparts_for_datetime_functions.html)

## 結果のバリエーション (秒、ミリ秒、マイクロ秒）
<a name="r_Dateparts_for_datetime_functions-variations-in-results"></a>

異なる日付関数が秒、ミリ秒、またはマイクロ秒を日付部分として指定する場合、クエリ結果にわずかな違いが生じます。
+ EXTRACT 関数は、上位および下位の日付部分は無視し、指定された日付部分のみの整数を返します。指定された日付部分が秒の場合、ミリ秒およびマイクロ秒は結果に含まれません。指定された日付部分がミリ秒の場合、秒およびマイクロ秒は結果に含まれません。指定された日付部分がマイクロ秒の場合、秒およびミリ秒は結果に含まれません。
+ DATE\$1PART 関数は、指定された日付部分にかかわらず、タイムスタンプの完全な秒部分を返します。必要に応じて小数値または整数を返します。

例えば、次のクエリの結果を比較します。

```
create table seconds(micro timestamp);

insert into seconds values('2009-09-21 11:10:03.189717');

select extract(sec from micro) from seconds;
               
date_part
-----------
3
               
select date_part(sec, micro) from seconds;
   
pgdate_part
-------------
3.189717
```

## CENTURY、EPOCH、DECADE、および MIL ノート
<a name="r_Dateparts_for_datetime_functions-century"></a>

CENTURY または CENTURIES   
Amazon Redshift は CENTURY を *\$1\$1\$11* の年に始まり `###0` の年に終了すると解釈します。  

```
select extract (century from timestamp '2000-12-16 12:21:13');
date_part
-----------
20

select extract (century from timestamp '2001-12-16 12:21:13');
date_part
-----------
21
```

EPOCH   
Amazon Redshift の EPOCH の実装は、クラスターのあるタイムゾーンから独立した 1970-01-01 00:00:00.000000 に関連します。クラスターが設置されているタイムゾーンによって、時差による結果を補正する必要がある場合があります。  
 次の内容の例を以下に示します。  

1.  EVENT テーブルに基づいて EVENT\$1EXAMPLE というテーブルを作成します。この CREATE AS コマンドは、DATE\$1PART 関数を使用してデータ列 (デフォルトでは PGDATE\$1PART と名づけられる) を作成し、各イベントのエポック値を保存します。

1.  PG\$1TABLE\$1DEF から EVENT\$1EXAMPLE の列とデータタイプを選択します。

1.  EVENT\$1EXAMPLE テーブルから EVENTNAME、STARTTIME と PGDATE\$1PART を選択して、日付と時間の複数の形式を表示します。

1.  EVENTNAME と STARTTIME をそれぞれ選択します。1 秒間隔のタイムゾーンを指定しないタイムスタンプを使って PGDATE\$1PART のエポック値を変換し、CONVERTED\$1TIMESTAMP という列にその結果を返します。

```
create table event_example
as select eventname, starttime, date_part(epoch, starttime) from event;

select "column", type from pg_table_def where tablename='event_example';

     column    |            type
---------------+-----------------------------
 eventname     | character varying(200)
 starttime     | timestamp without time zone
 pgdate_part   | double precision
(3 rows)
```

```
select eventname, starttime, pgdate_part from event_example;

   eventname          |      starttime      | pgdate_part
----------------------+---------------------+-------------
 Mamma Mia!           | 2008-01-01 20:00:00 |  1199217600
 Spring Awakening     | 2008-01-01 15:00:00 |  1199199600
 Nas                  | 2008-01-01 14:30:00 |  1199197800
 Hannah Montana       | 2008-01-01 19:30:00 |  1199215800
 K.D. Lang            | 2008-01-01 15:00:00 |  1199199600
 Spamalot             | 2008-01-02 20:00:00 |  1199304000
 Macbeth              | 2008-01-02 15:00:00 |  1199286000
 The Cherry Orchard   | 2008-01-02 14:30:00 |  1199284200
 Macbeth              | 2008-01-02 19:30:00 |  1199302200
 Demi Lovato          | 2008-01-02 19:30:00 |  1199302200

   
select eventname, 
starttime, 
timestamp with time zone 'epoch' + pgdate_part * interval '1 second' AS converted_timestamp 
from event_example;

       eventname      |      starttime      | converted_timestamp
----------------------+---------------------+---------------------
 Mamma Mia!           | 2008-01-01 20:00:00 | 2008-01-01 20:00:00
 Spring Awakening     | 2008-01-01 15:00:00 | 2008-01-01 15:00:00
 Nas                  | 2008-01-01 14:30:00 | 2008-01-01 14:30:00
 Hannah Montana       | 2008-01-01 19:30:00 | 2008-01-01 19:30:00
 K.D. Lang            | 2008-01-01 15:00:00 | 2008-01-01 15:00:00
 Spamalot             | 2008-01-02 20:00:00 | 2008-01-02 20:00:00
 Macbeth              | 2008-01-02 15:00:00 | 2008-01-02 15:00:00
 The Cherry Orchard   | 2008-01-02 14:30:00 | 2008-01-02 14:30:00
 Macbeth              | 2008-01-02 19:30:00 | 2008-01-02 19:30:00
 Demi Lovato          | 2008-01-02 19:30:00 | 2008-01-02 19:30:00
 ...
```

DECADE または DECADES   
Amazon Redshift は共通カレンダーに基づいて DECADE または DECADES DATEPART を解釈します。例えば、共通カレンダーが年 1 から始まるため、最初の 10 年 (decade 1) は 0001-01-01 から 0009-12-31 であり、2 番目の 10 年 (decade 2) は 0010-01-01 から 0019-12-31 です。例えば、decade 201 は 2000-01-01 から 2009-12-31 の期間に及びます。  

```
select extract(decade from timestamp '1999-02-16 20:38:40');
date_part
-----------
200

select extract(decade from timestamp '2000-02-16 20:38:40');
date_part
-----------
201

select extract(decade from timestamp '2010-02-16 20:38:40');
date_part
-----------
202
```

MIL または MILS   
Amazon Redshift は MIL を *\$1001* の年の初めの日に始まり `#000` の年の最後の日に終了すると解釈します。  

```
select extract (mil from timestamp '2000-12-16 12:21:13');
date_part
-----------
2

select extract (mil from timestamp '2001-12-16 12:21:13');
date_part
-----------
3
```

# ハッシュ関数
<a name="hash-functions"></a>

**Topics**
+ [CHECKSUM 関数](r_CHECKSUM.md)
+ [farmFingerprint64 関数](r_FARMFINGERPRINT64.md)
+ [FUNC\$1SHA1 関数](FUNC_SHA1.md)
+ [FNV\$1HASH 関数](r_FNV_HASH.md)
+ [MD5 関数](r_MD5.md)
+ [SHA 関数](SHA.md)
+ [SHA1 関数](SHA1.md)
+ [SHA2 関数](SHA2.md)
+ [MURMUR3\$132\$1HASH](MURMUR3_32_HASH.md)

ハッシュ関数は、数値入力値を別の値に変換する数学関数です。

# CHECKSUM 関数
<a name="r_CHECKSUM"></a>

ハッシュインデックスを作成するためにチェックサム値を計算します。

## 構文
<a name="r_CHECKSUM-synopsis"></a>

```
CHECKSUM(expression)
```

## 引数
<a name="r_CHECKSUM-argument"></a>

 *expression*   
入力式のデータ型は、VARCHAR、INTEGER、または DECIMAL である必要があります。

## 戻り型
<a name="r_CHECKSUM-return-type"></a>

CHECKSUM 関数は引数を返します。

## 例
<a name="r_CHECKSUM-example"></a>

次の例では、COMMISSION 列のチェックサム値を計算します。

```
select checksum(commission)
from sales
order by salesid
limit 10;

checksum
----------
10920
1140
5250
2625
2310
5910
11820
2955
8865
975
(10 rows)
```

# farmFingerprint64 関数
<a name="r_FARMFINGERPRINT64"></a>

`Fingerprint64` 関数を使用して、入力引数の farmHash の値を計算する。

## 構文
<a name="r_FARMFINGERPRINT64-synopsis"></a>

```
farmFingerprint64(expression)
```

## 引数
<a name="r_FARMFINGERPRINT64-argument"></a>

 *expression*   
入力式は、`VARCHAR` または `VARBYTE` データ型となります。

## 戻り型
<a name="r_FARMFINGERPRINT64-return-type"></a>

この `farmFingerprint64` 関数は `BIGINT` を返します。

## 例
<a name="r_FARMFINGERPRINT64-example"></a>

次の例では、`VARCHAR` データ型として入力された `Amazon Redshift` の `farmFingerprint64` の値を返します。

```
SELECT farmFingerprint64('Amazon Redshift');
```

```
  
  farmfingerprint64
---------------------
 8085098817162212970
```

次の例では、`VARBYTE` データ型として入力された `Amazon Redshift` の `farmFingerprint64` の値を返します。

```
SELECT farmFingerprint64('Amazon Redshift'::varbyte);
```

```
  
  farmfingerprint64
---------------------
 8085098817162212970
```

# FUNC\$1SHA1 関数
<a name="FUNC_SHA1"></a>

SHA1 関数のシノニム。

「[SHA1 関数](SHA1.md)」を参照してください。

# FNV\$1HASH 関数
<a name="r_FNV_HASH"></a>

すべての基本データ型について、64 ビット FNV-1a 非暗号化ハッシュ関数を計算します。

## 構文
<a name="r_FNV_HASH-synopsis"></a>

```
FNV_HASH(value [, seed])
```

## 引数
<a name="r_FNV_HASH-argument-arguments"></a>

 *値*  
ハッシュされる入力値。Amazon Redshift は、値のバイナリ表現を使用して入力値をハッシュします。例えば、INTEGER 値は 4 バイトを使用してハッシュされ、BIGINT 値は 8 バイトを使用してハッシュされます。また、CHAR および VARCHAR 入力をハッシュしても、末尾のスペースは無視されません。

 *seed*  
ハッシュ関数の BIGINT シードはオプションです。指定しない場合、Amazon Redshift はデフォルトの FNV シードを使用します。これにより、変換や連結を行わずに、複数の列のハッシュを組み合わせることができます。

## 戻り型
<a name="r_FNV_HASH-return-type"></a>

BIGINT

## 例
<a name="r_FNV_HASH-example"></a>

次の例では、数値の FNV ハッシュ、文字列「Amazon Redshift」、および 2 つの連結が返されます。

```
select fnv_hash(1);
        fnv_hash
----------------------
 -5968735742475085980
(1 row)
```

```
select fnv_hash('Amazon Redshift');
      fnv_hash
---------------------
 7783490368944507294
(1 row)
```

```
select fnv_hash('Amazon Redshift', fnv_hash(1));
       fnv_hash
----------------------
 -2202602717770968555
(1 row)
```

## 使用に関する注意事項
<a name="r_FNV_HASH-usage-notes"></a>
+ 複数の列を持つテーブルのハッシュを計算するには、最初の列の FNV ハッシュを計算し、2 番目の列のハッシュにシードとして渡します。次に、2 番目の列の FNV ハッシュを、3 番目の列のハッシュにシードとして渡します。

  次の例では、複数の列を持つテーブルをハッシュするシードを作成します。

  ```
  select fnv_hash(column_3, fnv_hash(column_2, fnv_hash(column_1))) from sample_table;
  ```
+ 同じプロパティを使用して、文字列の連結のハッシュを計算することができます。

  ```
  select fnv_hash('abcd');
         fnv_hash
  ---------------------
   -281581062704388899
  (1 row)
  ```

  ```
  select fnv_hash('cd', fnv_hash('ab'));
        fnv_hash
  ---------------------
   -281581062704388899
  (1 row)
  ```
+ ハッシュ関数は、入力のタイプを使用して、ハッシュするバイト数を決定します。必要に応じて、キャストを使用して特定の型を適用します。

  次の例では、異なるタイプの入力を使用して別の結果を生成します。

  ```
  select fnv_hash(1::smallint);
        fnv_hash
  --------------------
   589727492704079044
  (1 row)
  ```

  ```
  select fnv_hash(1);
         fnv_hash
  ----------------------
   -5968735742475085980
  (1 row)
  ```

  ```
  select fnv_hash(1::bigint);
         fnv_hash
  ----------------------
   -8517097267634966620
  (1 row)
  ```

# MD5 関数
<a name="r_MD5"></a>

MD5 暗号化ハッシュ関数を使用して、可変長文字列を 32 文字の文字列に変換します。この 32 文字の文字列は、128 ビットチェックサムの 16 進値をテキストで表記したものです。

## 構文
<a name="r_MD5-syntax"></a>

```
MD5(string)
```

## 引数
<a name="r_MD5-arguments"></a>

 *string*   
可変長文字列。

## 戻り型
<a name="r_MD5-return-type"></a>

MD5 関数は、32 文字の文字列を返します。この 32 文字の文字列は、128 ビットチェックサムの 16 進値をテキストで表記したものです。

## 例
<a name="r_MD5-examples"></a>

以下の例では、文字列 'Amazon Redshift' の 128 ビット値を示します。

```
select md5('Amazon Redshift');
md5
----------------------------------
f7415e33f972c03abd4f3fed36748f7a
(1 row)
```

# SHA 関数
<a name="SHA"></a>

SHA1 関数のシノニム。

「[SHA1 関数](SHA1.md)」を参照してください。

# SHA1 関数
<a name="SHA1"></a>

SHA1 関数は、SHA1 暗号化ハッシュ関数を使用して、可変長文字列を 40 文字の文字列に変換します。この 40 文字の文字列は、160 ビットのチェックサムの 16 進値をテキストで表記したものです。

## 構文
<a name="SHA1-syntax"></a>

SHA1 は [SHA 関数](SHA.md) および [FUNC\$1SHA1 関数](FUNC_SHA1.md) のシノニムです。

```
SHA1(string)
```

## 引数
<a name="SHA1-arguments"></a>

 *string*   
可変長文字列。

## 戻り型
<a name="SHA1-returm-type"></a>

SHA1 関数は、40 文字の文字列を返します。この 40 文字の文字列は、160 ビットのチェックサムの 16 進値をテキストで表記したものです。

## 例
<a name="SHA1-example"></a>

以下の例は、単語 'Amazon Redshift' の 160 ビット値を返します。

```
select sha1('Amazon Redshift');
```

# SHA2 関数
<a name="SHA2"></a>

SHA2 関数は、SHA2 暗号化ハッシュ関数を使用して、可変長文字列を文字列に変換します。この文字列は、指定されたビット数のチェックサムの 16 進値をテキストで表記したものです。

## 構文
<a name="SHA2-syntax"></a>

```
SHA2(string, bits)
```

## 引数
<a name="SHA2-arguments"></a>

 *string*   
可変長文字列。

 * (整数*)   
ハッシュ関数のビット数。有効な値は 0 (256 と同じ)、224、256、384、および 512 です。

## 戻り型
<a name="SHA2-returm-type"></a>

SHA2 関数は、チェックサムの 16 進値をテキストで表記した文字列を返します。また、ビット数が無効な場合は、空の文字列を返します。

## 例
<a name="SHA2-example"></a>

次の例では、単語 'Amazon Redshift' の 256 ビット値を返します。

```
select sha2('Amazon Redshift', 256);
```

# MURMUR3\$132\$1HASH
<a name="MURMUR3_32_HASH"></a>

MURMUR3\$132\$1HASH 関数は、数値型や文字列型を含むすべての一般的なデータ型の 32 ビット Murmur3A 非暗号化ハッシュを計算します。

## 構文
<a name="MURMUR3_32_HASH-syntax"></a>

```
MURMUR3_32_HASH(value [, seed])
```

## 引数
<a name="MURMUR3_32_HASH-arguments"></a>

 *値*   
ハッシュする入力値。Amazon Redshift は、入力値のバイナリ表現をハッシュします。この動作は [FNV\$1HASH 関数](r_FNV_HASH.md) と似ていますが、値は [Apache Iceberg の 32 ビット Murmur3 ハッシュ仕様](https://iceberg.apache.org/spec/#appendix-b-32-bit-hash-requirements)で指定されているバイナリ表現に変換されます。

 *seed*   
ハッシュ関数の INT シード。この引数はオプションです。指定しない場合、Amazon Redshift はデフォルトシードの 0 を使用します。これにより、変換や連結を行わずに、複数の列のハッシュを組み合わせることができます。

## 戻り型
<a name="MURMUR3_32_HASH-return-type"></a>

この関数は INT を返します。

## 例
<a name="MURMUR3_32_HASH-example"></a>

次の例では、数値の Murmur3 ハッシュ、文字列「Amazon Redshift」、および両方の連結を返します。

```
select MURMUR3_32_HASH(1);
    
    MURMUR3_32_HASH
----------------------
 1392991556
(1 row)
```

```
select MURMUR3_32_HASH('Amazon Redshift');
    
    MURMUR3_32_HASH
----------------------
 -1563580564
(1 row)
```

```
select MURMUR3_32_HASH('Amazon Redshift', MURMUR3_32_HASH(1));
    
    MURMUR3_32_HASH
----------------------
 -1346554171
(1 row)
```

## 使用に関する注意事項
<a name="MURMUR3_32_HASH-usage-notes"></a>

複数の列を持つテーブルのハッシュを計算するには、最初の列の Murmur3 ハッシュを計算し、それをシードとして 2 番目の列のハッシュに渡します。次に、2 番目の列の Murmur3 ハッシュをシードとして 3 番目の列のハッシュに渡します。

次の例では、複数の列を持つテーブルをハッシュするシードを作成します。

```
select MURMUR3_32_HASH(column_3, MURMUR3_32_HASH(column_2, MURMUR3_32_HASH(column_1))) from sample_table;
```

同じプロパティを使用して、文字列の連結のハッシュを計算することができます。

```
select MURMUR3_32_HASH('abcd');
   
   MURMUR3_32_HASH
---------------------
 1139631978
(1 row)
```

```
select MURMUR3_32_HASH('cd', MURMUR3_32_HASH('ab'));
   
   MURMUR3_32_HASH
---------------------
 1711522338
(1 row)
```

ハッシュ関数は、入力のタイプを使用して、ハッシュするバイト数を決定します。必要に応じて、キャストを使用して特定の型を適用します。

以下の例では、複数の異なる入力タイプを使用して複数の異なる結果を生成します。

```
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(1));
   
   MURMUR3_32_HASH
--------------------
 -1193428387
(1 row)
```

```
select MURMUR3_32_HASH(1);
   
   MURMUR3_32_HASH
----------------------
 1392991556
(1 row)
```

```
select MURMUR3_32_HASH(1, MURMUR3_32_HASH(2));
   
   MURMUR3_32_HASH
----------------------
 1179621905
(1 row)
```

# HyperLogLog 関数
<a name="hyperloglog-functions"></a>

以下に、Amazon Redshift でサポートされる SQL の HyperLogLog 関数の説明を示します。

**Topics**
+ [HLL 関数](r_HLL_function.md)
+ [HLL\$1CREATE\$1SKETCH 関数](r_HLL_CREATE_SKETCH.md)
+ [HLL\$1CARDINALITY 関数](r_HLL_CARDINALITY.md)
+ [HLL\$1COMBINE 関数](r_HLL_COMBINE.md)
+ [HLL\$1COMBINE\$1SKETCHES 関数](r_HLL_COMBINE_SKETCHES.md)

# HLL 関数
<a name="r_HLL_function"></a>

HLL 関数は、入力式の値の HyperLogLog 基数を返します。HLL 関数は、HLLSKETCH データ型以外のすべてのデータ型で動作します。HLL 関数は NULL 値を無視します。テーブルに行がない場合、またはすべての行が NULL の場合、結果の基数は 0 になります。

## 構文
<a name="r_HLL_function-synopsis"></a>

```
HLL (aggregate_expression)
```

## 引数
<a name="r_HLL_function-argument"></a>

 *aggregate\$1expression*   
集計する値を返す任意の有効な式 (列名など)。この関数は、HLLSKETCH、GEOMETRY、GEOGRAPHY、および VARBYTE を除く,すべてのデータ型を入力としてサポートします。

## 戻り型
<a name="r_HLL_function-return-type"></a>

HLL 関数は、BIGINT または INT8 の値を返します。

## 例
<a name="r_HLL_function-examples"></a>

次の例では、テーブル `a_table` の列 `an_int` の基数を返します。

```
CREATE TABLE a_table(an_int INT);
INSERT INTO a_table VALUES (1), (2), (3), (4);

SELECT hll(an_int) AS cardinality FROM a_table;
cardinality
-------------
4
```

# HLL\$1CREATE\$1SKETCH 関数
<a name="r_HLL_CREATE_SKETCH"></a>

HLL\$1CREATE\$1SKETCH 関数は、入力式の値をカプセル化する HLLSKETCH データ型を返します。HLL\$1CREATE\$1SKETCH 関数は、任意のデータ型で動作し、NULL 値を無視します。テーブルに行がない場合、またはすべての行が NULL の場合、結果のスケッチには `{"version":1,"logm":15,"sparse":{"indices":[],"values":[]}}` などのインデックスと値のペアがありません。

## 構文
<a name="r_HLL_CREATE_SKETCH-synopsis"></a>

```
HLL_CREATE_SKETCH (aggregate_expression)
```

## 引数
<a name="r_HLL_CREATE_SKETCH-argument"></a>

 *aggregate\$1expression*   
集計する値を返す任意の有効な式 (列名など)。NULL 値は無視されます。この関数は、HLLSKETCH、GEOMETRY、GEOGRAPHY、および VARBYTE を除く,すべてのデータ型を入力としてサポートします。

## 戻り型
<a name="r_HLL_CREATE_SKETCH-return-type"></a>

HLL\$1CREATE\$1SKETCH 関数は、HLLSKETCH 値を返します。

## 例
<a name="r_HLL_CREATE_SKETCH-examples"></a>

次の例では、テーブル `a_table` で列 `an_int` の HLLSKETCH タイプを返します。JSON オブジェクトは、スケッチのインポート、エクスポート、または印刷時に、スパースの HyperLogLog スケッチを表すために使用されます。デンス HyperLogLog スケッチを表すには、文字列表現 (Base64 形式) が使用されます。

```
CREATE TABLE a_table(an_int INT);
INSERT INTO a_table VALUES (1), (2), (3), (4);

SELECT hll_create_sketch(an_int) AS sketch FROM a_table;
sketch
-------------------------------------------------------------------------------------------------------
{"version":1,"logm":15,"sparse":{"indices":[20812342,20850007,22362299,47158030],"values":[1,2,1,1]}}
(1 row)
```

# HLL\$1CARDINALITY 関数
<a name="r_HLL_CARDINALITY"></a>

HLL\$1CARDINALITY 関数は、入力 HLLSKETCH データ型の基数を返します。

## 構文
<a name="r_HLL_CARDINALITY-synopsis"></a>

```
HLL_CARDINALITY (hllsketch_expression)
```

## 引数
<a name="r_HLL_CARDINALITY-argument"></a>

 *hllsketch\$1expression*   
列名など、HLLSKETCH 型に評価される有効な式。入力値は HLLSKETCH データ型です。

## 戻り型
<a name="r_HLL_CARDINALITY-return-type"></a>

HLL\$1CARDINALITY 関数は、BIGINT または INT8 の値を返します。

## 例
<a name="r_HLL_CARDINALITY-examples"></a>

次の例では、テーブル `hll_table` の列 `sketch` の基数を返します。

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

SELECT hll_cardinality(sketch) AS cardinality FROM hll_table;
cardinality
-------------
6
4
(2 rows)
```

# HLL\$1COMBINE 関数
<a name="r_HLL_COMBINE"></a>

HLL\$1COMPINE 集計関数は、すべての入力 HLLSKETCH 値を組み合わせた HLLSKETCH データ型を返します。

2 つ以上の HyperLogLog スケッチの組み合わせは、各入力スケッチが表す個別値の結合に関する情報をカプセル化する新しい HLLSKETCH です。スケッチを組み合わせた後、Amazon Redshift は 2 つ以上のデータセット結合の基数を抽出します。複数のスケッチを組み合わせる方法の詳細については、「[例: 複数のスケッチを組み合わせて HyperLogLog スケッチを返す](r_HLL-examples.md#hll-examples-multiple-sketches)」を参照してください。

## 構文
<a name="r_HLL_COMBINE-synopsis"></a>

```
HLL_COMBINE (hllsketch_expression)
```

## 引数
<a name="r_HLL_COMBINE-argument"></a>

 *hllsketch\$1expression*   
列名など、HLLSKETCH 型に評価される有効な式。入力値は HLLSKETCH データ型です。

## 戻り型
<a name="r_HLL_COMBINE-return-type"></a>

HLL\$1COMPINE 関数は、HLLSKETCH 型を返します。

## 例
<a name="r_HLL_COMBINE-examples"></a>

次の例は、テーブル `hll_table` 内の結合された HLLSKETCH 値を返します。

```
CREATE TABLE a_table(an_int INT, b_int INT);
INSERT INTO a_table VALUES (1,1), (2,1), (3,1), (4,1), (1,2), (2,2), (3,2), (4,2), (5,2), (6,2);

CREATE TABLE hll_table (sketch HLLSKETCH);
INSERT INTO hll_table select hll_create_sketch(an_int) from a_table group by b_int;

SELECT hll_combine(sketch) AS sketches FROM hll_table;
sketches
----------------------------------------------------------------------------------------------------------------------------
{"version":1,"logm":15,"sparse":{"indices":[20812342,20850007,22362299,40314817,42650774,47158030],"values":[1,2,1,3,2,1]}}
(1 row)
```

# HLL\$1COMBINE\$1SKETCHES 関数
<a name="r_HLL_COMBINE_SKETCHES"></a>

HLL\$1COMBINE\$1SKETCHES は、2 つの HLLSKETCH 値を入力として使用し、それらを単一の HLLSKETCH に組み合わせるスカラー関数です。

2 つ以上の HyperLogLog スケッチの組み合わせは、各入力スケッチが表す個別値の結合に関する情報をカプセル化する新しい HLLSKETCH です。

## 構文
<a name="r_HLL_COMBINE_SKETCHES-synopsis"></a>

```
HLL_COMBINE_SKETCHES (hllsketch_expression1, hllsketch_expression2)
```

## 引数
<a name="r_HLL_COMBINE_SKETCHES-argument"></a>

 *hllsketch\$1expression1* と *hllsketch\$1expression2*   
列名など、HLLSKETCH 型に評価される有効な式。

## 戻り型
<a name="r_HLL_COMBINE_SKETCHES-return-type"></a>

HLL\$1COMBINE\$1SKETCHES 関数は、HLLSKETCH 型を返します。

## 例
<a name="r_HLL_COMBINE_SKETCHES-examples"></a>

次の例は、テーブル `hll_table` 内の結合された HLLSKETCH 値を返します。

```
WITH tbl1(x, y)
     AS (SELECT Hll_create_sketch(1),
                Hll_create_sketch(2)
         UNION ALL
         SELECT Hll_create_sketch(3),
                Hll_create_sketch(4)
         UNION ALL
         SELECT Hll_create_sketch(5),
                Hll_create_sketch(6)
         UNION ALL
         SELECT Hll_create_sketch(7),
                Hll_create_sketch(8)),
     tbl2(x, y)
     AS (SELECT Hll_create_sketch(9),
                Hll_create_sketch(10)
         UNION ALL
         SELECT Hll_create_sketch(11),
                Hll_create_sketch(12)
         UNION ALL
         SELECT Hll_create_sketch(13),
                Hll_create_sketch(14)
         UNION ALL
         SELECT Hll_create_sketch(15),
                Hll_create_sketch(16)
         UNION ALL
         SELECT Hll_create_sketch(NULL),
                Hll_create_sketch(NULL)),
     tbl3(x, y)
     AS (SELECT *
         FROM   tbl1
         UNION ALL
         SELECT *
         FROM   tbl2)
SELECT Hll_combine_sketches(x, y)
FROM   tbl3;
```

# JSON 関数
<a name="json-functions"></a>

**Topics**
+ [JSON\$1PARSE 関数](JSON_PARSE.md)
+ [CAN\$1JSON\$1PARSE 関数](CAN_JSON_PARSE.md)
+ [JSON\$1SERIALIZE 関数](JSON_SERIALIZE.md)
+ [JSON\$1SERIALIZE\$1TO\$1VARBYTE 関数](JSON_SERIALIZE_TO_VARBYTE.md)
+ [テキストベースの JSON 関数](text-json-functions.md)

**注記**  
JSON を操作するには、次の関数を使用することをお勧めします。  
 [JSON\$1PARSE 関数](JSON_PARSE.md) 
 [CAN\$1JSON\$1PARSE 関数](CAN_JSON_PARSE.md) 
 [JSON\$1SERIALIZE 関数](JSON_SERIALIZE.md) 
 [JSON\$1SERIALIZE\$1TO\$1VARBYTE 関数](JSON_SERIALIZE_TO_VARBYTE.md) 
JSON\$1PARSE では、取り込み時に JSON テキストを SUPER 型の値に 1 回変換するだけで済みます。その後は、SUPER 値に対して操作を行うことができます。Amazon Redshift は、テキストベースの JSON 関数の出力である VARCHAR よりも、SUPER 値をより効率的に解析します。SUPER データ型の操作の詳細については、「[Amazon Redshift の半構造化データ](super-overview.md)」を参照してください。

相対的に小さい一連のキーと値のペアを格納する必要がある場合は、データを JSON 形式で格納すると、スペースを節約できます。JSON 文字列は単一の列に格納できるため、データを表形式で格納するより、JSON を使用する方が効率的である可能性があります。例えば、スパース表があるとします。その表では、すべての属性を完全に表すために列が多数必要ですが、指定された行または指定された列のほとんどの列値が NULL であるとします。格納に JSON を使用することによって、行のデータを単一の JSON 文字列にキーと値のペアで格納できる可能性があり、格納データの少ない表の列を除去できる可能性があります。

さらに、JSON スキーマの変更時に、テーブルに列を追加することなく、JSON 文字列を簡単に変更して追加のキーと値のペアを保存できます。

JSON の使用は控えめにすることをお勧めします。JSON では、単一の列にさまざまなデータが保存され、Amazon Redshift の列保存アーキテクチャが使用されません。したがってこの形式は、大きいデータセットの保存には適していません。Amazon Redshift は CHAR 列と VARCHAR 列で JSON 関数をサポートしていますが、JSON のシリアル化形式でデータを処理するには、SUPER を使用することをお勧めします。SUPER では、階層データを効率的にクエリできる、ポスト解析スキーマレス表現が使用されています。SUPER データ型の詳細については、[Amazon Redshift の半構造化データ](super-overview.md)を参照してください。

JSON は UTF-8 でエンコードされたテキスト文字列を使用するため、JSON 文字列を CHAR データ型または VARCHAR データ型として格納できます。

JSON 文字列は、以下のルールに従って、正しくフォーマットされた JSON である必要があります。
+ ルートレベルの JSON には、JSON オブジェクトまたは JSON 配列を使用できます。JSON オブジェクトは、順序が設定されていない一連のキーと値のペアがカンマで区切られ、中括弧で囲まれたものです。

  例: `{"one":1, "two":2} `
+ JSON 配列は、順序付けられた一連のカンマ区切り値が角括弧で囲まれたものです。

  例は次のとおりです: `["first", {"one":1}, "second", 3, null] `
+ JSON 配列は、0 から始まるインデックスを使用します。配列内の最初の要素の位置は 0 です。JSON のキーと値のペアでは、キーは二重引用符で囲まれた文字列です。
+ JSON 値には次のいずれかを指定できます。
  + JSON オブジェクト 
  + array 
  + string
    + 二重引用符で表される
  + 数値
    + 整数、小数、浮動小数点数を含む
  + boolean
  + null 
+ 空のオブジェクトおよび空の配列は、有効な JSON 値です。
+ JSON フィールドでは、大文字と小文字が区別されます。
+ JSON 構造要素 (`{ }, [ ]` など) は無視されます。

Amazon Redshift JSON 関数および Amazon Redshift COPY コマンドは、同じメソッドを使用して JSON 形式のデータを操作します。JSON の操作方法の詳細については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。

# JSON\$1PARSE 関数
<a name="JSON_PARSE"></a>

JSON\$1PARSE 関数は、JSON 形式のデータを解析して、そのデータを `SUPER` 表現に変換します。

INSERT または UPDATE コマンドを使用して、データを `SUPER` 型として取り込むには、JSON\$1PARSE 関数を使用します。JSON\$1PARSE() を使用して JSON 文字列を `SUPER` 値に解析する場合、特定の制限が適用されます。詳細については、「[SUPER の解析オプション](super-configurations.md#parsing-options-super)」を参照してください。

## 構文
<a name="JSON_PARSE-synopsis"></a>

```
JSON_PARSE( {json_string | binary_value} )
```

## 引数
<a name="JSON_PARSE-arguments"></a>

 *json\$1string*  
シリアル化された JSON を `VARBYTE` 型または `VARCHAR` 型として返す式。

 *binary\$1value*  
VARBYTE データ型のバイナリ値。

## 戻り型
<a name="JSON_PARSE-return"></a>

`SUPER`

## 例
<a name="JSON_PARSE-examples"></a>

JSON 配列 `[10001,10002,"abc"]` を `SUPER` データ型に変換するには、次の例を使用します。

```
SELECT JSON_PARSE('[10001,10002,"abc"]');

+---------------------+
|     json_parse      |
+---------------------+
| [10001,10002,"abc"] |
+---------------------+
```

関数が JSON 配列を `SUPER` データ型に変換したことを確認するには、次の例を使用します。詳細については、[JSON\$1TYPEOF 関数](r_json_typeof.md)を参照してください。

```
SELECT JSON_TYPEOF(JSON_PARSE('[10001,10002,"abc"]'));

+-------------+
| json_typeof |
+-------------+
| array       |
+-------------+
```

# CAN\$1JSON\$1PARSE 関数
<a name="CAN_JSON_PARSE"></a>

CAN\$1JSON\$1PARSE 関数は JSON 形式でデータを解析し、JSON\$1PARSE 関数を使用して結果を `SUPER` 値に変換できる場合は `true` を返します。

## 構文
<a name="CAN_JSON_PARSE-synopsis"></a>

```
CAN_JSON_PARSE( {json_string | binary_value} )
```

## 引数
<a name="CAN_JSON_PARSE-arguments"></a>

 *json\$1string*  
シリアル化された JSON を `VARCHAR` 形式で返す式。

 *binary\$1value*  
VARBYTE データ型のバイナリ値。

## 戻り型
<a name="CAN_JSON_PARSE-return"></a>

`BOOLEAN`

## 使用に関する注意事項
<a name="CAN_JSON_PARSE-usage-notes"></a>
+ CAN\$1JSON\$1PARSE は空の文字列に対して false を返します。入力引数が null の場合は、NULL を返します。

## 例
<a name="CAN_JSON_PARSE-examples"></a>

 次の例は、CASE 条件を使用して適切に形成された JSON 配列に対する CAN\$1JSON\$1PARSE の実行を示しています。これは true を返すため、Amazon Redshift はサンプル値に対して JSON\$1PARSE 関数を実行します。

```
SELECT CASE 
            WHEN CAN_JSON_PARSE('[10001,10002,"abc"]')
            THEN JSON_PARSE('[10001,10002,"abc"]')
        END;

 case
---------------------
'[10001,10002,"abc"]'
```

 次の例は、CASE 条件を使用して JSON 形式ではない値に対する CAN\$1JSON\$1PARSE の実行を示しています。これは false を返すため、Amazon Redshift は代わりに CASE 条件の ELSE 句でセグメントを返します。

```
SELECT CASE 
            WHEN CAN_JSON_PARSE('This is a string.')
            THEN JSON_PARSE('This is a string.')
            ELSE 'This is not JSON.'
        END;

 case
---------------------
"This is not JSON."
```

# JSON\$1SERIALIZE 関数
<a name="JSON_SERIALIZE"></a>

JSON\$1SERIALIZE 関数は、RFC 8259 に従って、`SUPER` 式をテキスト JSON 表現でシリアル化します。詳細については、[The JavaScript Object Notation (JSON) Data Interchange Format](https://tools.ietf.org/html/rfc8259)を参照してください。

`SUPER` のサイズ制限はブロックでの制限とほぼ同じで、`VARCHAR` の制限は `SUPER` でのサイズ制限よりも小さくなっています。したがって、JSON 形式がシステムの VARCHAR 制限を超えると、JSON\$1SERIALIZE 関数はエラーを返します。`SUPER` 式のサイズを確認するには、[JSON\$1SIZE](r_json_size.md) 関数を参照してください。

## 構文
<a name="JSON_SERIALIZE-synopsis"></a>

```
JSON_SERIALIZE(super_expression)
```

## 引数
<a name="JSON_SERIALIZE-arguments"></a>

 *super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="JSON_SERIALIZE-return"></a>

`VARCHAR`

**注記**  
返される VARCHAR 値は、常に null 以外の JSON 文字列になります。*super\$1expression* が NULL の場合、JSON\$1SERIALIZE は JSON 文字列 `'null'` を返します。

## 例
<a name="JSON_SERIALIZE-examples"></a>

`SUPER` 値を文字列にシリアル化するには、次の例を使用します。

```
SELECT JSON_SERIALIZE(JSON_PARSE('[10001,10002,"abc"]'));
   
+---------------------+
|   json_serialize    |
+---------------------+
| [10001,10002,"abc"] |
+---------------------+
```

# JSON\$1SERIALIZE\$1TO\$1VARBYTE 関数
<a name="JSON_SERIALIZE_TO_VARBYTE"></a>

JSON\$1SERIALIZE\$1TO\$1VARBYTE 関数は、`SUPER` 値を JSON\$1SERIALIZE() と同様の JSON 文字列に変換しますが、この関数は `VARBYTE` 値に保存されます。

## 構文
<a name="JSON_SERIALIZE_TO_VARBYTE-synopsis"></a>

```
JSON_SERIALIZE_TO_VARBYTE(super_expression)
```

## 引数
<a name="JSON_SERIALIZE_TO_VARBYTE-arguments"></a>

 *super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="JSON_SERIALIZE_TO_VARBYTE-return"></a>

`VARBYTE`

## 例
<a name="JSON_SERIALIZE_TO_VARBYTE-examples"></a>

`SUPER` 値をシリアル化し、結果を `VARBYTE` 形式で返すには、次の例を使用します。

```
SELECT JSON_SERIALIZE_TO_VARBYTE(JSON_PARSE('[10001,10002,"abc"]'));

+----------------------------------------+
|       json_serialize_to_varbyte        |
+----------------------------------------+
| 5b31303030312c31303030322c22616263225d |
+----------------------------------------+
```

`SUPER` 値をシリアル化し、結果を `VARCHAR` 形式にキャストするには、次の例を使用します。詳細については、「[CAST 関数](r_CAST_function.md)」を参照してください。

```
SELECT CAST((JSON_SERIALIZE_TO_VARBYTE(JSON_PARSE('[10001,10002,"abc"]'))) AS VARCHAR);

+---------------------------+
| json_serialize_to_varbyte |
+---------------------------+
| [10001,10002,"abc"]       |
+---------------------------+
```

# テキストベースの JSON 関数
<a name="text-json-functions"></a>

このセクションの関数は、JSON 値を VARCHAR として解析します。JSON を解析するには、JSON 値を SUPER として解析する以下の関数を代わりに使用することをお勧めします。Amazon Redshift は、VARCHAR よりも SUPER 値をより効率的に解析します。
+  [JSON\$1PARSE 関数](JSON_PARSE.md) 
+  [CAN\$1JSON\$1PARSE 関数](CAN_JSON_PARSE.md) 
+  [JSON\$1SERIALIZE 関数](JSON_SERIALIZE.md) 
+  [JSON\$1SERIALIZE\$1TO\$1VARBYTE 関数](JSON_SERIALIZE_TO_VARBYTE.md) 

**Topics**
+ [IS\$1VALID\$1JSON 関数](IS_VALID_JSON.md)
+ [IS\$1VALID\$1JSON\$1ARRAY 関数](IS_VALID_JSON_ARRAY.md)
+ [JSON\$1ARRAY\$1LENGTH 関数](JSON_ARRAY_LENGTH.md)
+ [JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT 関数](JSON_EXTRACT_ARRAY_ELEMENT_TEXT.md)
+ [JSON\$1EXTRACT\$1PATH\$1TEXT 関数](JSON_EXTRACT_PATH_TEXT.md)

# IS\$1VALID\$1JSON 関数
<a name="IS_VALID_JSON"></a>

**注記**  
CAN\$1JSON\$1PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。  
 IS\$1VALID\$1JSON を使用する代わりに、[CAN\$1JSON\$1PARSE 関数](CAN_JSON_PARSE.md) を使用して JSON 文字列を検証することをお勧めします。

IS\$1VALID\$1JSON 関数は、JSON 文字列を確認します。この関数は、文字列が正しい JSON 形式になっている場合、`true` のブール値を返し、正しい形式ではない場合は、`false` を返します。JSON 配列を検証するには、[IS\$1VALID\$1JSON\$1ARRAY 関数](IS_VALID_JSON_ARRAY.md)を使用します。

詳細については、「[JSON 関数](json-functions.md)」を参照してください。

## 構文
<a name="IS_VALID_JSON-synopsis"></a>

```
IS_VALID_JSON('json_string')
```

## 引数
<a name="IS_VALID_JSON-arguments"></a>

 *json\$1string*  
評価して JSON 文字列を返す文字列または式。

## 戻り型
<a name="IS_VALID_JSON-return"></a>

`BOOLEAN`

## 例
<a name="IS_VALID_JSON-examples"></a>

テーブルを作成し、テスト用の JSON 文字列を挿入するには、次の例を使用します。

```
CREATE TABLE test_json(id int IDENTITY(0,1), json_strings VARCHAR);

-- Insert valid JSON strings --
INSERT INTO test_json(json_strings) VALUES
('{"a":2}'), 
('{"a":{"b":{"c":1}}}'), 
('{"a": [1,2,"b"]}');

-- Insert invalid JSON strings --
INSERT INTO test_json(json_strings) VALUES
('{{}}'), 
('{1:"a"}'), 
('[1,2,3]');
```

前の例の文字列を検証するには、次の例を使用します。

```
SELECT id, json_strings, IS_VALID_JSON(json_strings) 
FROM test_json
ORDER BY id;

+----+---------------------+---------------+
| id |    json_strings     | is_valid_json |
+----+---------------------+---------------+
|  0 | {"a":2}             | true          |
|  4 | {"a":{"b":{"c":1}}} | true          |
|  8 | {"a": [1,2,"b"]}    | true          |
| 12 | {{}}                | false         |
| 16 | {1:"a"}             | false         |
| 20 | [1,2,3]             | false         |
+----+---------------------+---------------+
```

# IS\$1VALID\$1JSON\$1ARRAY 関数
<a name="IS_VALID_JSON_ARRAY"></a>

**注記**  
JSON\$1PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。  
 IS\$1VALID\$1JSON\$1ARRAY を使用する代わりに、[JSON\$1PARSE 関数](JSON_PARSE.md) を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、[IS\$1ARRAY 関数](r_is_array.md) 関数を使用して、配列が適切に形成されていることを確認します。

IS\$1VALID\$1JSON\$1ARRAY 関数は、JSON 配列を確認します。この関数は、配列が正しい JSON 形式になっている場合、`true` のブール値を返し、正しい形式ではない場合は、`false` を返します。JSON 文字列を検証するには、[IS\$1VALID\$1JSON 関数](IS_VALID_JSON.md)を使用します。

詳細については、「[JSON 関数](json-functions.md)」を参照してください。

## 構文
<a name="IS_VALID_JSON_ARRAY-synopsis"></a>

```
IS_VALID_JSON_ARRAY('json_array') 
```

## 引数
<a name="IS_VALID_JSON_ARRAY-arguments"></a>

 *json\$1array*  
評価して JSON 配列を返す文字列または式。

## 戻り型
<a name="IS_VALID_JSON_ARRAY-return"></a>

`BOOLEAN`

## 例
<a name="IS_VALID_JSON_ARRAY-examples"></a>

テーブルを作成し、テスト用の JSON 文字列を挿入するには、次の例を使用します。

```
CREATE TABLE test_json_arrays(id int IDENTITY(0,1), json_arrays VARCHAR);

-- Insert valid JSON array strings --
INSERT INTO test_json_arrays(json_arrays) 
VALUES('[]'), 
('["a","b"]'), 
('["a",["b",1,["c",2,3,null]]]');

-- Insert invalid JSON array strings --
INSERT INTO test_json_arrays(json_arrays) 
VALUES('{"a":1}'),
('a'),
('[1,2,]');
```

前の例の文字列を検証するには、次の例を使用します。

```
SELECT json_arrays, IS_VALID_JSON_ARRAY(json_arrays) 
FROM test_json_arrays ORDER BY id;

+------------------------------+---------------------+
|         json_arrays          | is_valid_json_array |
+------------------------------+---------------------+
| []                           | true                |
| ["a","b"]                    | true                |
| ["a",["b",1,["c",2,3,null]]] | true                |
| {"a":1}                      | false               |
| a                            | false               |
| [1,2,]                       | false               |
+------------------------------+---------------------+
```

# JSON\$1ARRAY\$1LENGTH 関数
<a name="JSON_ARRAY_LENGTH"></a>

**注記**  
JSON\$1PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。  
 JSON\$1ARRAY\$1LENGTH を使用する代わりに、[JSON\$1PARSE 関数](JSON_PARSE.md) を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、[GET\$1ARRAY\$1LENGTH 関数](get_array_length.md) を使用して配列の長さを取得します。

JSON\$1ARRAY\$1LENGTH 関数は、JSON 文字列の外部配列内の要素数を返します。*null\$1if\$1invalid* の引数が `true` に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに `NULL` を返します。

詳細については、「[JSON 関数](json-functions.md)」を参照してください。

## 構文
<a name="JSON_ARRAY_LENGTH-synopsis"></a>

```
JSON_ARRAY_LENGTH('json_array' [, null_if_invalid ] ) 
```

## 引数
<a name="JSON_ARRAY_LENGTH-arguments"></a>

 *json\$1array*  
正しくフォーマットされた JSON 配列。

 *null\$1if\$1invalid*  
(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに `NULL` を返すかどうかを指定する `BOOLEAN` 値。JSON が無効な場合に `NULL` を返すには、`true` (`t`) を指定します。JSON が無効な場合にエラーを返すには、`false` (`f`) を指定します。デフォルトは `false` です。

## 戻り型
<a name="JSON_ARRAY_LENGTH-return"></a>

`INTEGER`

## 例
<a name="JSON_ARRAY_LENGTH-examples"></a>

配列内の要素数を返すには、次の例を使用します。

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14]'); 

+-------------------+
| json_array_length |
+-------------------+
|                 5 |
+-------------------+
```

JSON が無効であるためエラーを返すには、次の例を使用します。

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14');
 
ERROR: invalid json array object [11,12,13,{"f1":21,"f2":[25,26]},14
```

*null\$1if\$1invalid* を *true* に設定し、ステートメントが無効な JSON のエラーを返す代わりに `NULL` を返すようにするには、次の例を使用します。

```
SELECT JSON_ARRAY_LENGTH('[11,12,13,{"f1":21,"f2":[25,26]},14',true);

+-------------------+
| json_array_length |
+-------------------+
| NULL              |
+-------------------+
```

# JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT 関数
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT"></a>

**注記**  
JSON\$1PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。  
JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT を使用する代わりに、[JSON\$1PARSE 関数](JSON_PARSE.md) を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、`value[element position]` 構文を使用し、必要とする配列インデックスが含まれている要素をクエリします。SUPER 値の配列要素に対するクエリ実行の詳細については、「[半構造化データのクエリ](query-super.md)」を参照してください。

JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT 関数は、JSON 文字列の最外部の配列内の JSON 配列要素 (0 から始まるインデックスを使用) を返します。配列内の最初の要素の位置は 0 です。インデックスが負または範囲外である場合、JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT は `NULL` 文字列を返します。*null\$1if\$1invalid* の引数が `TRUE` に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに `NULL` を返します。

詳細については、「[JSON 関数](json-functions.md)」を参照してください。

## 構文
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-synopsis"></a>

```
JSON_EXTRACT_ARRAY_ELEMENT_TEXT('json string', pos [, null_if_invalid ] )
```

## 引数
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-arguments"></a>

 *json\$1string*  
正しくフォーマットされた JSON 文字列。

*pos*  
返される配列要素のインデックスを表す `INTEGER` (0 から始まる配列インデックスを使用)。

*null\$1if\$1invalid*  
(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに `NULL` を返すかどうかを指定する `BOOLEAN` 値。JSON が無効な場合に `NULL` を返すには、`true` (`t`) を指定します。JSON が無効な場合にエラーを返すには、`false` (`f`) を指定します。デフォルトは `false` です。

## 戻り型
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-return"></a>

`VARCHAR`  
*pos* によって参照される JSON 配列要素を表す `VARCHAR` 文字列。

## 例
<a name="JSON_EXTRACT_ARRAY_ELEMENT_TEXT-examples"></a>

配列の位置 2 の要素 (0 から始まる配列インデックスの 3 番目の要素) を返すには、次の例を使用します。

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('[111,112,113]', 2);
 
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
|                             113 |
+---------------------------------+
```

JSON が無効であるためエラーを返すには、次の例を使用します。

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1);
 
ERROR: invalid json array object ["a",["b",1,["c",2,3,null,]]]
```

*null\$1if\$1invalid* を *true* に設定し、ステートメントが無効な JSON のエラーを返す代わりに `NULL` を返すようにするには、次の例を使用します。

```
SELECT JSON_EXTRACT_ARRAY_ELEMENT_TEXT('["a",["b",1,["c",2,3,null,]]]',1,true);
 
+---------------------------------+
| json_extract_array_element_text |
+---------------------------------+
| NULL                            |
+---------------------------------+
```

次のステートメントサンプルについて考えてみます。指定された JSON 文字列またはインデックスが NULL の場合、JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT は他のパラメータの値を問わず、NULL を返します。

```
--Statement where json_string is NULL.
SELECT json_extract_array_element_text(NULL, 0)

 json_extract_array_element_text
---------------------------------
                            NULL

--Statement where pos is NULL and json_string is invalid JSON.
SELECT json_extract_array_element_text('invalid_json', NULL);

 json_extract_array_element_text
---------------------------------
                            NULL

--Statement where json_string is NULL and null_if_invalid is FALSE.
SELECT json_extract_array_element_text(NULL, 0, FALSE);

 json_extract_array_element_text
---------------------------------
                            NULL
```

次のステートメントサンプルについて考えてみます。*null\$1if\$1invalid* が TRUE の場合、*json\$1string* が無効な JSON であれば、JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT は NULL を返します。*null\$1if\$1invalid* が FALSE であったり、設定されていなかったりする場合、*json\$1string* が無効であれば、この関数はエラーを返します。

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_array_element_text('invalid_json', 0, TRUE);

 json_extract_array_element_text
---------------------------------
                            NULL
                            
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_array_element_text('invalid_json', 0);

ERROR:  JSON parsing error
```

*json\$1string* が有効な JSON で、*pos* が JSON `null` 値を参照する、次の例について考えてみます。この場合、JSON\$1EXTRACT\$1ARRAY\$1ELEMENT\$1TEXT は、*null\$1if\$1invalid* の値を問わず、NULL を返します。

```
--Statement selecting a null value.
SELECT json_extract_array_element_text('[null]', 0);

  json_extract_array_element_text 
----------------------------------
                             NULL
```

# JSON\$1EXTRACT\$1PATH\$1TEXT 関数
<a name="JSON_EXTRACT_PATH_TEXT"></a>

**注記**  
JSON\$1PARSE および関連する関数は、JSON 値を SUPER として解析します。Amazon Redshift は、VARCHAR よりも SUPER をより効率的に解析します。  
JSON\$1EXTRACT\$1PATH\$1TEXT を使用する代わりに、[JSON\$1PARSE 関数](JSON_PARSE.md) を使用して JSON 文字列を解析し、SUPER 値を取得することをお勧めします。次に、`value.attribute` 構文を使用する対象の要素をクエリします。SUPER 値の配列要素に対するクエリ実行の詳細については、「[半構造化データのクエリ](query-super.md)」を参照してください。

JSON\$1EXTRACT\$1PATH\$1TEXT 関数は、JSON 文字列内の一連のパス要素から参照されるキーと値のペアを値として返します。JSON パスは、最大 5 レベルの深さまでネストできます。パス要素では、大文字と小文字が区別されます。JSON 文字列にパス要素が存在しない場合、JSON\$1EXTRACT\$1PATH\$1TEXT は `NULL` を返します。

*null\$1if\$1invalid* の引数が `TRUE` に設定され、JSON 文字列が無効になっている場合、この関数はエラーを返す代わりに `NULL` を返します。

JSON\$1EXTRACT\$1PATH\$1TEXT のデータサイズは最大 64 KB です。JSON レコードのサイズが 64 KB を超えると、JSON\$1EXTRACT\$1PATH\$1TEXT での処理エラーになります。

その他の JSON 関数については、「[JSON 関数](json-functions.md)」を参照してください。JSON の操作方法の詳細については、「[JSON 形式からの COPY](copy-usage_notes-copy-from-json.md)」を参照してください。

## 構文
<a name="JSON_EXTRACT_PATH_TEXT-synopsis"></a>

```
JSON_EXTRACT_PATH_TEXT('json_string', 'path_elem' [,'path_elem'[, …] ] [, null_if_invalid ] )
```

## 引数
<a name="JSON_EXTRACT_PATH_TEXT-arguments"></a>

 *json\$1string*  
正しくフォーマットされた JSON 文字列。

*path\$1elem*  
JSON 文字列内のパス要素。1 つのパス要素が必要です。パス要素は、最大 5 レベルの深さまで、追加で指定できます。

*null\$1if\$1invalid*  
(オプション) 入力 JSON 文字列が無効である場合に、エラーを返す代わりに `NULL` を返すかどうかを指定する `BOOLEAN` 値。JSON が無効な場合に `NULL` を返すには、`TRUE` (`t`) を指定します。JSON が無効な場合にエラーを返すには、`FALSE` (`f`) を指定します。デフォルトは `FALSE` です。

JSON 文字列では、Amazon Redshift は `\n` を改行文字として、`\t` をタブ文字として認識します。バックスラッシュをロードするには、バックスラッシュをバックスラッシュでエスケープします (`\\`)。詳細については、「[JSON のエスケープ文字](copy-usage_notes-copy-from-json.md#copy-usage-json-escape-characters)」を参照してください。

## 戻り型
<a name="JSON_EXTRACT_PATH_TEXT-return"></a>

`VARCHAR`  
パス要素から参照される JSON 値を表す `VARCHAR` 文字列。

## 例
<a name="JSON_EXTRACT_PATH_TEXT-examples"></a>

パス `'f4', 'f6'` の値を返すには、次の例を使用します。

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6');

+------------------------+
| json_extract_path_text |
+------------------------+
| star                   |
+------------------------+
```

JSON が無効であるためエラーを返すには、次の例を使用します。

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6');

ERROR: invalid json object {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}
```

*null\$1if\$1invalid* を *TRUE* に設定し、ステートメントがエラーを返す代わりに `NULL` を返すようにするには、次の例を使用します。

```
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}','f4', 'f6',true);

+------------------------+
| json_extract_path_text |
+------------------------+
| NULL                   |
+------------------------+
```

`'farm', 'barn', 'color'` のパスの値を選択する次の例を考えてみます。取得される値は 3 番目のレベルにあります。次の例を使用します。読みやすくするために、このサンプルは JSON Lint ツールを使用してフォーマットされています。

```
SELECT JSON_EXTRACT_PATH_TEXT('{
    "farm": {
        "barn": {
            "color": "red",
            "feed stocked": true
        }
    }
}', 'farm', 'barn', 'color');
+------------------------+
| json_extract_path_text |
+------------------------+
| red                    |
+------------------------+
```

`'color'` 要素がないため `NULL` を返すには、次の例を使用します。このサンプルは JSON Lint ツールでフォーマットされています。

```
SELECT JSON_EXTRACT_PATH_TEXT('{
    "farm": {
        "barn": {}
    }
}', 'farm', 'barn', 'color');

+------------------------+
| json_extract_path_text |
+------------------------+
| NULL                   |
+------------------------+
```

JSON が有効な場合、欠落している要素を抽出しようとすると `NULL` が返されます。

パス `'house', 'appliances', 'washing machine', 'brand'` の値を返すには、次の例を使用します。

```
SELECT JSON_EXTRACT_PATH_TEXT('{
  "house": {
    "address": {
      "street": "123 Any St.",
      "city": "Any Town",
      "state": "FL",
      "zip": "32830"
    },
    "bathroom": {
      "color": "green",
      "shower": true
    },
    "appliances": {
      "washing machine": {
        "brand": "Any Brand",
        "color": "beige"
      },
      "dryer": {
        "brand": "Any Brand",
        "color": "white"
      }
    }
  }
}', 'house', 'appliances', 'washing machine', 'brand');  

+------------------------+
| json_extract_path_text |
+------------------------+
| Any Brand              |
+------------------------+
```

次の例は、サンプルテーブルを作成し、SUPER 値を入力して、両方の行の `'f2'` パスの値を返します。

```
CREATE TABLE json_example(id INT, json_text SUPER);

INSERT INTO json_example VALUES
(1, JSON_PARSE('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}')),
(2, JSON_PARSE('{
    "farm": {
        "barn": {
            "color": "red",
            "feed stocked": true
        }
    }
}'));

SELECT * FROM json_example;
id          | json_text
------------+--------------------------------------------
1           | {"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}
2           | {"farm":{"barn":{"color":"red","feed stocked":true}}}
 

SELECT id, JSON_EXTRACT_PATH_TEXT(JSON_SERIALIZE(json_text), 'f2') FROM json_example;
         
id          | json_text
------------+--------------------------------------------
1           | {"f3":1}
2           |
```

次のステートメントサンプルについて考えてみます。指定された *path\$1elem* が NULL であるため、JSON\$1EXTRACT\$1PATH\$1TEXT は他のパラメータの値を問わず、NULL を返します。

```
--Statement where path_elem is NULL and json_string is valid JSON.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}',NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where only one path_elem is NULL.
SELECT JSON_EXTRACT_PATH_TEXT('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4',NULL);

 json_extract_path_text
------------------------
                   NULL
                   
--Statement where path_elem is NULL and json_string is invalid JSON.
SELECT json_extract_path_text('invalid_json', NULL);

 json_extract_path_text
------------------------
                   NULL

--Statement where path_elem is NULL and null_if_invalid is FALSE.
SELECT json_extract_path_text(NULL, 0, FALSE);

 json_extract_path_text
------------------------
                   NULL
```

次のステートメントサンプルについて考えてみます。*null\$1if\$1invalid* が TRUE の場合、*json\$1string* が無効な JSON であれば、JSON\$1EXTRACT\$1PATH\$1TEXT は NULL を返します。*null\$1if\$1invalid* が FALSE であったり、設定されていなかったりする場合、*json\$1string* が無効であれば、この関数はエラーを返します。

```
--Statement with invalid JSON where null_if_invalid is TRUE.
SELECT json_extract_path_text('invalid_json', 0, TRUE);

 json_extract_path_text
------------------------
                   NULL
                                                    
--Statement with invalid JSON where null_if_invalid is FALSE.
SELECT json_extract_path_text('invalid_json', 0, FALSE);

ERROR:  JSON parsing error
```

*json\$1string* が有効な JSON で、*path\$1elem* が JSON `null` 値を参照する、次の例について考えてみます。この場合、JSON\$1EXTRACT\$1PATH\$1TEXT は NULL を返します。同様に、*path\$1elem* が存在しない値を参照する場合、JSON\$1EXTRACT\$1PATH\$1TEXT は *null\$1if\$1invalid* の値を問わず、NULL を返します。

```
--Statement selecting a null value.
SELECT json_extract_path_text('[null]', 0);

  json_extract_path_text  
-------------------------
                    NULL   
                             
--Statement selecting a non-existing value.               
SELECT json_extract_path_text('{}', 'a');
       
  json_extract_path_text  
-------------------------
                    NULL
```

# 機械学習機能
<a name="ml-function"></a>

Amazon Redshift 機械学習(ML) を使用すると、SQL ステートメントを使用して機械学習モデルをトレーニングし、予測のために SQL クエリでそれらを呼び出すことができます。Amazon Redshift モデルの説明可能性には、トレーニングデータの各属性が予測結果にどのように寄与しているかを理解するのに役立つ特徴量の重要度の値が含まれています。

以下に、Amazon Redshift でサポートされる SQL の機械学習 関数について示します。

**Topics**
+ [EXPLAIN\$1MODEL関数](r_explain_model_function.md)

# EXPLAIN\$1MODEL関数
<a name="r_explain_model_function"></a>

EXPLAIN\$1MODEL 関数は、JSON 形式のモデルの説明可能性レポートを含む SUPER データ型を返します。説明可能性レポートには、すべてのモデル機能の Shapley 値に関する情報が含まれています。

EXPLAIN\$1MODEL 関数は、現在、XGBoost モデルのAUTO ON oまたはAUTO OFF のみをサポートしています。

説明可能性レポートが利用できない場合、関数はモデルの進行状況を示すステータスを返します。たとえば`Waiting for training job to complete`、`Waiting for processing job to complete`、および`Processing job failed`に適用されます。

CREATE MODEL ステートメントを実行すると、説明の状態は次のようになります`Waiting for training job to complete`。モデルがトレーニングされ、説明要求が送信されると、説明の状態は次のようになります`Waiting for processing job to complete`。モデルの説明が正常に完了すると、完全な説明可能性レポートが使用可能になります。それ以外の場合、状態は次のようになります`Processing job failed`。

CREATE MODEL ステートメントを実行するときに、オプションの `MAX_RUNTIME` パラメータを使用してトレーニングにかかる最大時間を指定できます。モデルの作成がその時間に達すると、Amazon Redshift はモデルの作成を停止します。オートパイロットモデルの作成中にその制限時間に達すると、Amazon Redshift はその時点までの最高のモデルを返します。モデルトレーニングが終了すると、モデルの説明可能性を使用できるようになります。`MAX_RUNTIME` を短い時間に設定すると、説明可能性レポートは利用できない場合があります。トレーニング時間はさまざまであり、モデルの複雑さ、データサイズ、その他の要因によって異なります。

## 構文
<a name="r_explain_model_function-synopsis"></a>

```
EXPLAIN_MODEL ('schema_name.model_name')
```

## 引数
<a name="r_explain_model_function-argument"></a>

 *schema\$1name*   
スキーマの名前。スキーマ名 が指定されていない場合は、現在のスキーマが選択されます。

 *model\$1name*   
モデルの名前です。スキーマ内のモデル名は一意でなければなりません。

## 戻り型
<a name="r_explain_model_function-return-type"></a>

EXPLAIN\$1MODEL関数は、次に示すように、SUPERデータ型を返します。

```
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05,"x1":0.10,"x2":0.30,"x3":0.15},"expected_value":0.50}}}}
```

## 例
<a name="r_explain_model_function-examples"></a>

次の例では、説明状態を返します`waiting for training job to complete`。

```
select explain_model('customer_churn_auto_model');
                 explain_model
--------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

モデルの説明が正常に完了すると、次のように完全な説明可能性レポートが利用できます。

```
select explain_model('customer_churn_auto_model');
                                       explain_model
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"version":"1.0","explanations":{"kernel_shap":{"label0":{"global_shap_values":{"x0":0.05386043365892927,"x1":0.10801289723274592,"x2":0.23227865827017378,"x3":0.0676685133940455,"x4":0.0897097667672375,"x5":0.08502141653270926,"x6":0.07581993936077065,"x7":0.16462880604578135},"expected_value":0.8492974042892456}}}}
(1 row)
```

EXPLAIN\$1MODEL 関数は SUPER データ型を返すため、説明可能性レポートをクエリできます。これにより、`global_shap_values`、`expected_value`を抽出できるほか、特徴固有の Shapley 値を指定することができます。

次の例では、このモデル`global_shap_values`を抽出します。

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values from (select explain_model('customer_churn_auto_model') as report) as json_table;
                                                       global_shap_values
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"state":0.10983770427197151,"account_length":0.1772441398408543,"area_code":0.08626823968639591,"phone":0.0736669595282712,"intl_plan":3.344907436910987,"vmail_plan":0.09646600597854467,"vmail_message":0.2064922655089351,"day_mins":2.015038015251777,"day_calls":0.13179511076780168,"day_charge":0.4941091720480879,"eve_mins":0.46081379198626105,"eve_calls":0.16913440417758477,"eve_charge":0.09651014369401761,"night_mins":0.44218153640050845,"night_calls":0.15311640089218997,"night_charge":0.13850366104495426,"intl_mins":0.7583662464883899,"intl_calls":0.47144468610485685,"intl_charge":0.10945894673611875,"cust_serv_calls":0.31822051038387733}
(1 row)
```

次の例では、特徴x0`global_shap_values`を抽出します。

```
select json_table.report.explanations.kernel_shap.label0.global_shap_values.x0 from (select explain_model('customer_churn_auto_model') as report) as json_table;
          x0
------------------------
  0.05386043365892927
(1 row)
```

モデルが特定のスキーマで作成され、作成したモデルにアクセスできる場合は、次に示すように、そのモデルの説明をクエリできます。

```
-- Check the current schema
SHOW search_path;
   search_path
------------------
  $user, public
(1 row)         
-- If you have the privilege to access the model explanation
-- in `test_schema`
SELECT explain_model('test_schema.test_model_name');
                       explain_model
---------------------------------------------------------
{"explanations":"waiting for training job to complete"}
(1 row)
```

# 数学関数
<a name="Math_functions"></a>

**Topics**
+ [数学演算子の記号](r_OPERATOR_SYMBOLS.md)
+ [ABS 関数](r_ABS.md)
+ [ACOS 関数](r_ACOS.md)
+ [ASIN 関数](r_ASIN.md)
+ [ATAN 関数](r_ATAN.md)
+ [ATAN2 関数](r_ATAN2.md)
+ [CBRT 関数](r_CBRT.md)
+ [CEILING (または CEIL）関数](r_CEILING_FLOOR.md)
+ [COS 関数](r_COS.md)
+ [COT 関数](r_COT.md)
+ [DEGREES 関数](r_DEGREES.md)
+ [DEXP 関数](r_DEXP.md)
+ [DLOG1 関数](r_DLOG1.md)
+ [DLOG10 関数](r_DLOG10.md)
+ [EXP 関数](r_EXP.md)
+ [FLOOR 関数](r_FLOOR.md)
+ [LN 関数](r_LN.md)
+ [LOG 関数](r_LOG.md)
+ [MOD 関数](r_MOD.md)
+ [PI 関数](r_PI.md)
+ [POWER 関数](r_POWER.md)
+ [RADIANS 関数](r_RADIANS.md)
+ [RANDOM 関数](r_RANDOM.md)
+ [ROUND 関数](r_ROUND.md)
+ [SIN 関数](r_SIN.md)
+ [SIGN 関数](r_SIGN.md)
+ [SQRT 関数](r_SQRT.md)
+ [TAN 関数](r_TAN.md)
+ [TRUNC 関数](r_TRUNC.md)

このセクションでは、Amazon Redshift でサポートされる数学演算子および数学関数について説明します。

# 数学演算子の記号
<a name="r_OPERATOR_SYMBOLS"></a>

 次の表に、サポートされる数学演算子の一覧を示します。

## サポートされている演算子
<a name="r_OPERATOR_SYMBOLS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_OPERATOR_SYMBOLS.html)

## 例
<a name="r_OPERATOR_SYMBOLS-examples"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

特定の取引において支払われたコミッションに 2.00 USD を加算するには、次の例を使用します。

```
SELECT
    commission,
    (commission + 2.00) AS comm
FROM
    sales
WHERE
    salesid = 10000;

+------------+-------+
| commission | comm  |
+------------+-------+
|      28.05 | 30.05 |
+------------+-------+
```

特定の取引において販売価格の 20% を計算するには、次の例を使用します。

```
SELECT pricepaid, (pricepaid * .20) as twentypct 
FROM sales 
WHERE salesid=10000;

+-----------+-----------+
| pricepaid | twentypct |
+-----------+-----------+
|       187 |      37.4 |
+-----------+-----------+
```

継続的な成長パターンに基づいてチケット販売を予測するには、次の例を使用します。次の例では、サブクエリによって、2008 年に販売されたチケット数が返されます。その結果に、10 年にわたって継続する成長率 5% が指数関数的に乗算されます。

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid AND year=2008)^((5::float/100)*10) AS qty10years;

+------------------+
|    qty10years    |
+------------------+
| 587.664019657491 |
+------------------+
```

日付 ID が 2000 以上である販売の合計支払額および合計コミッションを求めるには、次の例を使用します。その後、合計支払額から合計コミッションを減算します。

```
SELECT SUM(pricepaid) AS sum_price, dateid,
SUM(commission) AS sum_comm, (SUM(pricepaid) - SUM(commission)) AS value
FROM sales 
WHERE dateid >= 2000
GROUP BY dateid 
ORDER BY dateid 
LIMIT 10;

+-----------+--------+----------+-----------+
| sum_price | dateid | sum_comm |   value   |
+-----------+--------+----------+-----------+
|    305885 |   2000 | 45882.75 | 260002.25 |
|    316037 |   2001 | 47405.55 | 268631.45 |
|    358571 |   2002 | 53785.65 | 304785.35 |
|    366033 |   2003 | 54904.95 | 311128.05 |
|    307592 |   2004 |  46138.8 |  261453.2 |
|    333484 |   2005 |  50022.6 |  283461.4 |
|    317670 |   2006 |  47650.5 |  270019.5 |
|    351031 |   2007 | 52654.65 | 298376.35 |
|    313359 |   2008 | 47003.85 | 266355.15 |
|    323675 |   2009 | 48551.25 | 275123.75 |
+-----------+--------+----------+-----------+
```

# ABS 関数
<a name="r_ABS"></a>

 ABS は、数値の絶対値を計算します。この数値は、リテラルでも、数値に評価される式でも構いません。

## 構文
<a name="r_ABS-synopsis"></a>

```
ABS(number)
```

## 引数
<a name="r_ABS-arguments"></a>

 *数値*   
数値、または数値に評価される式。`SMALLINT`、`INTEGER`、`BIGINT`、`DECIMAL`、`FLOAT4`、`FLOAT8`、または `SUPER` 型を使用できます。

## 戻り型
<a name="r_ABS-return-type"></a>

ABS は、その引数と同じデータ型を返します。

## 例
<a name="r_ABS-examples"></a>

`-38` の絶対値を計算するには、次の例を使用します。

```
SELECT ABS(-38);

+-----+
| abs |
+-----+
|  38 |
+-----+
```

`(14-76)` の絶対値を計算するには、次の例を使用します。

```
SELECT ABS(14-76);

+-----+
| abs |
+-----+
|  62 |
+-----+
```

# ACOS 関数
<a name="r_ACOS"></a>

ACOS は、数値のアークコサイン (逆余弦) を返す三角関数です。戻り値はラジアンで、`0`～`PI` の範囲内です。

## 構文
<a name="r_ACOS-synopsis"></a>

```
ACOS(number)
```

## 引数
<a name="r_ACOS-arguments"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_ACOS-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_ACOS-examples"></a>

`-1` のアークコサイン (逆余弦) を返すには、次の例を使用します。

```
SELECT ACOS(-1);

+-------------------+
|       acos        |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

`.5` のアークコサイン (逆余弦) を、その値に相当する度数に変換するには、次の例を使用します。

```
SELECT (ACOS(.5) * 180/(SELECT PI())) AS degrees;

+-------------------+
|      degrees      |
+-------------------+
| 60.00000000000001 |
+-------------------+
```

# ASIN 関数
<a name="r_ASIN"></a>

ASIN は、数値のアークサイン (逆正弦) を返す三角関数です。戻り値はラジアンで、`PI/2`～`-PI/2` の範囲内です。

## 構文
<a name="r_ASIN-synopsis"></a>

```
ASIN(number)
```

## 引数
<a name="r_ASIN-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_ASIN-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_ASIN-examples"></a>

`1` のアークサイン (正弦) を返すには、次の例を使用します。

```
SELECT ASIN(1) AS halfpi;

+--------------------+
|       halfpi       |
+--------------------+
| 1.5707963267948966 |
+--------------------+
```

`.5` のアークサイン (正弦) を、その値に相当する度数に変換するには、次の例を使用します。

```
SELECT (ASIN(.5) * 180/(SELECT PI())) AS degrees;

+--------------------+
|      degrees       |
+--------------------+
| 30.000000000000004 |
+--------------------+
```

# ATAN 関数
<a name="r_ATAN"></a>

ATAN は、数値のアークタンジェント (逆正接) を返す三角関数です。戻り値はラジアンで、`-PI`～`PI` の範囲内です。

## 構文
<a name="r_ATAN-synopsis"></a>

```
ATAN(number)
```

## 引数
<a name="r_ATAN-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_ATAN-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_ATAN-examples"></a>

`1` のアークタンジェント (逆正接) を返し、その値に 4 を乗算するには、次の例を使用します。

```
SELECT ATAN(1) * 4 AS pi;
            
+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

`1` のアークタンジェント (逆正弦) を、その値に相当する度数に変換するには、次の例を使用します。

```
SELECT (ATAN(1) * 180/(SELECT PI())) AS degrees;

+---------+
| degrees |
+---------+
|      45 |
+---------+
```

# ATAN2 関数
<a name="r_ATAN2"></a>

ATAN2 は、一方の数値をもう一方の数値で除算した値のアークタンジェント (逆正接) を返す三角関数です。戻り値はラジアンで、`PI/2`～`-PI/2` の範囲内です。

## 構文
<a name="r_ATAN2-synopsis"></a>

```
ATAN2(number1, number2)
```

## 引数
<a name="r_ATAN2-arguments"></a>

 *number1*   
`DOUBLE PRECISION` 数。

 *number2*   
`DOUBLE PRECISION` 数。

## 戻り型
<a name="r_ATAN2-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_ATAN2-examples"></a>

`2/2` のアークタンジェント (逆正接) を返し、その値に 4 を乗算するには、次の例を使用します。

```
SELECT ATAN2(2,2) * 4 AS PI;

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

`1/0` のアークタンジェント (逆正接) (0 に評価される) を、その値に相当する度数に変換するには、次の例を使用します。

```
SELECT (ATAN2(1,0) * 180/(SELECT PI())) AS degrees;

+---------+
| degrees |
+---------+
|      90 |
+---------+
```

# CBRT 関数
<a name="r_CBRT"></a>

 CBRT 関数は、指定された数値の立方根を計算する数学関数です。

## 構文
<a name="r_CBRT-synopsis"></a>

```
CBRT(number)
```

## 引数
<a name="r_CBRT-argument"></a>

CBRT は `DOUBLE PRECISION` 数を引数として取ります。

## 戻り型
<a name="r_CBRT-return-type"></a>

`DOUBLE PRECISION` 

## 例
<a name="r_CBRT-examples"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

特定の取引において支払われたコミッションの立方根を計算するには、次の例を使用します。

```
SELECT CBRT(commission) FROM sales WHERE salesid=10000;

+--------------------+
|        cbrt        |
+--------------------+
| 3.0383953904884344 |
+--------------------+
```

# CEILING (または CEIL）関数
<a name="r_CEILING_FLOOR"></a>

CEILING 関数または CEIL 関数は、数値を最も近い整数に切り上げるために使用します。([FLOOR 関数](r_FLOOR.md)は、数値を最も近い整数に切り下げます。) 

## 構文
<a name="r_CEILING_FLOOR-synopsis"></a>

```
{CEIL | CEILING}(number)
```

## 引数
<a name="r_CEILING_FLOOR-arguments"></a>

 *数値*   
数値、または数値に評価される式。`SMALLINT`、`INTEGER`、`BIGINT`、`DECIMAL`、`FLOAT4`、`FLOAT8`、または `SUPER` 型を使用できます。

## 戻り型
<a name="r_CEILING_FLOOR-return-type"></a>

CEILING および CEIL は、引数と同じデータ型を返します。

入力が `SUPER` 型の場合、出力は入力と同じ動的型を保持しますが、静的型は SUPER 型のままです。`SUPER` の動的型が数値でない場合、Amazon Redshift は null を返します。

## 例
<a name="r_CEILING_FLOOR-example"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

特定の取引において支払われたコミッションの天井値を計算するには、次の例を使用します。

```
SELECT CEILING(commission) FROM sales
WHERE salesid=10000;

+---------+
| ceiling |
+---------+
|      29 |
+---------+
```

# COS 関数
<a name="r_COS"></a>

COS は、数値のコサイン (余弦) を返す三角関数です。戻り値はラジアンで、`-1` 以上 `1` 以下です。

## 構文
<a name="r_COS-synopsis"></a>

```
COS(double_precision)
```

## 引数
<a name="r_COS-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_COS-return-type"></a>

COS 関数は `DOUBLE PRECISION` 数です。

## 例
<a name="r_COS-examples"></a>

`0` のコサイン (余弦) を返すには、次の例を使用します。

```
SELECT COS(0);

+-----+
| cos |
+-----+
|   1 |
+-----+
```

`pi` のコサイン (余弦) を返すには、次の例を使用します。

```
SELECT COS(PI());

+-----+
| cos |
+-----+
|  -1 |
+-----+
```

# COT 関数
<a name="r_COT"></a>

COT は、数値のコタンジェント (余接) を返す三角関数です。入力パラメータは 0 以外である必要があります。

## 構文
<a name="r_COT-synopsis"></a>

```
COT(number)
```

## 引数
<a name="r_COT-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_COT-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_COT-examples"></a>

1 のコタンジェント (余接) を返すには、次の例を使用します。

```
SELECT COT(1);

+--------------------+
|        cot         |
+--------------------+
| 0.6420926159343306 |
+--------------------+
```

# DEGREES 関数
<a name="r_DEGREES"></a>

ラジアンで指定された角度を、その値に相当する度数に変換します。

## 構文
<a name="r_DEGREES-synopsis"></a>

```
DEGREES(number)
```

## 引数
<a name="r_DEGREES-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_DEGREES-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_DEGREES-examples"></a>

0.5 ラジアンに相当する度数を返すには、次の例を使用します。

```
SELECT DEGREES(.5);

+-------------------+
|      degrees      |
+-------------------+
| 28.64788975654116 |
+-------------------+
```

PI ラジアンを度数に変換するには、次の例を使用します。

```
SELECT DEGREES(pi());

+---------+
| degrees |
+---------+
|     180 |
+---------+
```

# DEXP 関数
<a name="r_DEXP"></a>

DEXP 関数は、倍精度の数値を指数値で返します。DEXP 関数と EXP 関数の唯一の違いは、DEXP のパラメータは `DOUBLE PRECISION` である必要がある点です。

## 構文
<a name="r_DEXP-synopsis"></a>

```
DEXP(number)
```

## 引数
<a name="r_DEXP-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_DEXP-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_DEXP-example"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

DEXP 関数は、継続的な成長パターンに基づいてチケット販売を予測するために使用します。次の例では、サブクエリによって、2008 年に販売されたチケット数が返されます。その結果に、10 年にわたって継続する成長率 7% を指定する DEXP 関数の結果が乗算されます。

```
SELECT (SELECT SUM(qtysold) 
FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * DEXP((7::FLOAT/100)*10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 695447.4837722216 |
+-------------------+
```

# DLOG1 関数
<a name="r_DLOG1"></a>

DLOG1 関数は、入力パラメータの自然対数を返します。[LN 関数](r_LN.md) のシノニム。

# DLOG10 関数
<a name="r_DLOG10"></a>

DLOG10 は、入力パラメータの 10 を底とする対数を返します。

[LOG 関数](r_LOG.md) のシノニム。

## 構文
<a name="r_DLOG10-synopsis"></a>

```
DLOG10(number)
```

## 引数
<a name="r_DLOG10-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_DLOG10-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_DLOG10-example"></a>

数値 100 の 10 を底とする対数を返すには、次の例を使用します。

```
SELECT DLOG10(100);

+--------+
| dlog10 |
+--------+
|      2 |
+--------+
```

# EXP 関数
<a name="r_EXP"></a>

EXP 関数では、数値式、または式の累乗で累乗された自然対数 `e` の基数に対して指数関数を実装します。EXP 関数は、[LN 関数](r_LN.md)の逆です。

## 構文
<a name="r_EXP-synopsis"></a>

```
EXP(expression)
```

## 引数
<a name="r_EXP-argument"></a>

 *expression*   
式は、`INTEGER`、`DECIMAL`、または `DOUBLE PRECISION` データ型である必要があります。

## 戻り型
<a name="r_EXP-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_EXP-example"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

EXP 関数は、継続的な成長パターンに基づいてチケット販売を予測するために使用します。次の例では、サブクエリによって、2008 年に販売されたチケット数が返されます。その結果に、10 年にわたって継続する成長率 7% を指定する EXP 関数の結果が乗算されます。

```
SELECT (SELECT SUM(qtysold) 
FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * EXP((7::FLOAT/100)*10) qty2018;

+-------------------+
|      qty2018      |
+-------------------+
| 695447.4837722216 |
+-------------------+
```

# FLOOR 関数
<a name="r_FLOOR"></a>

FLOOR 関数は、数値を次の整数に切り捨てます。

## 構文
<a name="r_FLOOR-synopsis"></a>

```
FLOOR(number)
```

## 引数
<a name="r_FLOOR-argument"></a>

 *数値*   
数値、または数値に評価される式。`SMALLINT`、`INTEGER`、`BIGINT`、`DECIMAL`、`FLOAT4`、`FLOAT8`、または `SUPER` 型を使用できます。

## 戻り型
<a name="r_FLOOR-return-type"></a>

FLOOR は、その引数と同じデータ型を返します。

入力が `SUPER` 型の場合、出力は入力と同じ動的型を保持しますが、静的型は `SUPER` 型のままです。`SUPER` の動的型が数値でない場合、Amazon Redshift は `NULL` を返します。

## 例
<a name="r_FLOOR-example"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

FLOOR 関数を使用する前と後に特定の販売取引に対して支払われたコミッションの値を示すには、次の例を使用します。

```
SELECT commission 
FROM sales 
WHERE salesid=10000;

+------------+
| commission |
+------------+
|      28.05 |
+------------+

SELECT FLOOR(commission) 
FROM sales 
WHERE salesid=10000;

+-------+
| floor |
+-------+
|    28 |
+-------+
```

# LN 関数
<a name="r_LN"></a>

入力パラメータの自然対数を返します。

[DLOG1 関数](r_DLOG1.md) のシノニム。

## 構文
<a name="r_LN-synopsis"></a>

```
LN(expression)
```

## 引数
<a name="r_LN-argument"></a>

 *expression*   
関数の対象となる列または式。  
この関数は、式の参照先が Amazon Redshift のユーザー作成テーブルである場合、あるいは Amazon Redshift の STL または STV システムテーブルである場合に、データ型のエラーを返します。
式の参照先がユーザー作成テーブルまたはシステムテーブルである場合、式のデータ型が以下のいずれかであるときに、エラーが発生します。以下のデータ型の式は、リーダーノードで排他的に実行されます。  
+ `BOOLEAN` 
+ `CHAR` 
+ `DATE` 
+ `DECIMAL` または `NUMERIC` 
+ `TIMESTAMP` 
+ `VARCHAR` 
以下のデータ型の式は、ユーザー作成テーブルおよび STL または STV システムテーブルで、正常に実行されます。  
+ `BIGINT` 
+ `DOUBLE PRECISION` 
+ `INTEGER` 
+ `REAL` 
+ `SMALLINT` 

## 戻り型
<a name="r_LN-return-type"></a>

LN 関数は、入力*式*と同じ型を返します。

## 例
<a name="r_LN-example"></a>

数値 2.718281828 の自然対数、または `e` を底とする対数を返すには、次の例を使用します。

```
SELECT LN(2.718281828);

+--------------------+
|         ln         |
+--------------------+
| 0.9999999998311267 |
+--------------------+
```

解は 1 の近似値になることに注意してください。

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

USERS テーブル内の userid 列の値の自然対数を返すには、次の例を使用します。

```
SELECT username, LN(userid) FROM users ORDER BY userid LIMIT 10;

+----------+--------------------+
| username |         ln         |
+----------+--------------------+
| JSG99FHE |                  0 |
| PGL08LJI | 0.6931471805599453 |
| IFT66TXU | 1.0986122886681098 |
| XDZ38RDD | 1.3862943611198906 |
| AEB55QTM | 1.6094379124341003 |
| NDQ15VBM |  1.791759469228055 |
| OWY35QYB | 1.9459101490553132 |
| AZG78YIP | 2.0794415416798357 |
| MSD36KVR | 2.1972245773362196 |
| WKW41AIW |  2.302585092994046 |
+----------+--------------------+
```

# LOG 関数
<a name="r_LOG"></a>

数値の対数を返します。

この関数を使用して 10 を底とする対数を計算する場合は、[DLOG10 関数](r_DLOG10.md) も使用できます。

## 構文
<a name="r_LOG-synopsis"></a>

```
LOG([base, ]argument)
```

## パラメータ
<a name="r_LOG-argument"></a>

 *base*   
(オプション) 対数関数の基数。この数値は正でなければならず、`1` と等しくすることはできません。このパラメータを省略すると、Amazon Redshift は*引数*の 10 を底とする対数を計算します。

 *argument*   
対数関数の引数。この数字は正でなければなりません。*引数*が `1` 値である場合、この関数は `0` を返します。

## 戻り型
<a name="r_LOG-return-type"></a>

LOG 関数は `DOUBLE PRECISION` 数を返します。

## 例
<a name="r_LOG-example"></a>

100 の 2 を底とする対数を求めるには、次の例を使用します。

```
SELECT LOG(2, 100);
+-------------------+
|        log        |
+-------------------+
| 6.643856189774725 |
+-------------------+
```

100 の 10 を底とする対数を求めるには、次の例を使用します。ベースパラメータを省略した場合、Amazon Redshift は底が 10 であると仮定することに注意してください。

```
SELECT LOG(100);
            
+-----+
| log |
+-----+
|   2 |
+-----+
```

# MOD 関数
<a name="r_MOD"></a>

2 つの数値の余りを返します。*モジュロ*演算とも呼ばれます。結果を計算するには、最初のパラメータを 2 番目のパラメータで除算します。

## 構文
<a name="r_MOD-synopsis"></a>

```
MOD(number1, number2)
```

## 引数
<a name="r_MOD-arguments"></a>

 *number1*   
最初の入力パラメータは、`INTEGER`、`SMALLINT`、`BIGINT`、または `DECIMAL` 数です。一方のパラメータが `DECIMAL` 型である場合は、もう一方のパラメータも `DECIMAL` 型である必要があります。一方のパラメータが `INTEGER` である場合、もう一方のパラメータは `INTEGER`、`SMALLINT`、または `BIGINT` のいずれかにします。両方のパラメータを `SMALLINT` または `BIGINT` にすることもできますが、一方のパラメータが `BIGINT` である場合に、もう一方のパラメータを `SMALLINT` にすることはできません。

 *number2*   
2 番目のパラメータは、`INTEGER`、`SMALLINT`、`BIGINT`、または `DECIMAL` 数です。*number1* と同じデータ型ルールが *number2* に適用されます。

## 戻り型
<a name="r_MOD-return-type"></a>

両方の入力パラメータが同じ型である場合、MOD 関数の戻り型は、入力パラメータと同じ数値型になります。ただし、一方の入力パラメータが `INTEGER` である場合は、戻り型も `INTEGER` になります。有効な戻り値の型は、`DECIMAL`、`INT`、`SMALLINT`、および `BIGINT` です。

## 使用に関する注意事項
<a name="r_MOD-usage-notes"></a>

`%` をモジュロ演算子として使用できます。

## 例
<a name="r_MOD-example"></a>

ある数値を別の数値で除算したときの余りを返すには、次の例を使用します。

```
SELECT MOD(10, 4);
               
+-----+
| mod |
+-----+
|   2 |
+-----+
```

MOD 関数を使用するときに `DECIMAL` の結果を返すには、次の例を使用します。

```
SELECT MOD(10.5, 4);
               
+-----+
| mod |
+-----+
| 2.5 |
+-----+
```

MOD 関数を実行する前に数値をキャストするには、次の例を使用します。詳細については、「[CAST 関数](r_CAST_function.md)」を参照してください。

```
SELECT MOD(CAST(16.4 AS INTEGER), 5);
               
+-----+
| mod |
+-----+
|   1 |
+-----+
```

最初のパラメータを 2 で割って偶数かどうかをチェックするには、次の例を使用します。

```
SELECT mod(5,2) = 0 AS is_even;
               
+---------+
| is_even |
+---------+
| false   |
+---------+
```

モジュロ演算子として *%* を使用するには、次の例を使用します。

```
SELECT 11 % 4 as remainder;
               
 +-----------+
| remainder |
+-----------+
|         3 |
+-----------+
```

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATEGORY テーブル内の奇数カテゴリの情報を返すには、次の例を使用します。

```
SELECT catid, catname
FROM category
WHERE MOD(catid,2)=1
ORDER BY 1,2;

+-------+-----------+
| catid |  catname  |
+-------+-----------+
|     1 | MLB       |
|     3 | NFL       |
|     5 | MLS       |
|     7 | Plays     |
|     9 | Pop       |
|    11 | Classical |
+-------+-----------+
```

# PI 関数
<a name="r_PI"></a>

pi 関数は、PI の値を小数第 14 位まで返します。

## 構文
<a name="r_PI-synopsis"></a>

```
PI()
```

## 戻り型
<a name="r_PI-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_PI-examples"></a>

pi の値を返すには、次の例を使用します。

```
SELECT PI();

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# POWER 関数
<a name="r_POWER"></a>

 POWER 関数は指数関数であり、最初の数値式がべき乗の底、2 番目の数値式がべき乗の指数です。例えば、2 の 3 乗は `POWER(2,3)` と表され、結果は `8` になります。

## 構文
<a name="r_POWER-synopsis"></a>

```
{POW | POWER}(expression1, expression2)
```

## 引数
<a name="r_POWER-arguments"></a>

 *expression1*   
べき乗の底とする数値式。`INTEGER`、`DECIMAL`、または `FLOAT` データ型である必要があります。

 *expression2*   
*expression1* を底とするべき乗の指数。`INTEGER`、`DECIMAL`、または `FLOAT` データ型である必要があります。

## 戻り型
<a name="r_POWER-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_POWER-examples"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

次の例では、2008 年に販売されたチケット数 (サブクエリの結果) に基づいて今後 10 年間のチケット販売の状況を予測するために、POWER 関数が使用されています。この例の成長率は、1 年当たり 7% に設定されています。

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100),10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 679353.7540885945 |
+-------------------+
```

次の例は、成長率が 1 年あたり 7% である前の例を基に、間隔を月単位で (120 か月間、つまり 10 年間に) 設定したものです。

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100/12),120) qty2010;

+-----------------+
|     qty2010     |
+-----------------+
| 694034.54678046 |
+-----------------+
```

# RADIANS 関数
<a name="r_RADIANS"></a>

RADIANS 関数は、角度 (度数) をそれに相当するラジアンに変換します。

## 構文
<a name="r_RADIANS-synopsis"></a>

```
RADIANS(number)
```

## 引数
<a name="r_RADIANS-argument"></a>

 *数値*   
入力パラメータは `DOUBLE PRECISION` 数です。

## 戻り型
<a name="r_RADIANS-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_RADIANS-examples"></a>

180 度に相当するラジアンを返すには、次の例を使用します。

```
SELECT RADIANS(180);

+-------------------+
|      radians      |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# RANDOM 関数
<a name="r_RANDOM"></a>

RANDOM 関数は、0.0 (この値を含む) ～1.0 (この値は含まない) のランダム値を生成します。

## 構文
<a name="r_RANDOM-synopsis"></a>

```
RANDOM()
```

## 戻り型
<a name="r_RANDOM-return-type"></a>

`DOUBLE PRECISION`

## 使用に関する注意事項
<a name="r_RANDOM_usage_notes"></a>

[SET](r_SET.md) コマンドでシード値を設定した後、RANDOM を呼び出すと、RANDOM が予測可能な順序で数値を生成します。

## 例
<a name="r_RANDOM-examples"></a>

0～99 のランダム値を計算するには、次の例を使用します。ランダムな数値が 0～1 である場合、このクエリは、0～100 のランダムな数値を生成します。

```
SELECT CAST(RANDOM() * 100 AS INT);

+------+
| int4 |
+------+
|   59 |
+------+
```

次の例では、[SET](r_SET.md)コマンドを使用して SEED 値を設定します。これにより RANDOM が、予測可能な順序で数値を生成します。

SEED 値を設定せずに 3 つの RANDOM 整数を返すには、次の例を使用します。

```
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|    6 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   68 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   56 |
+------+
```

SEED 値を `.25` に設定し、さらに 3 つの RANDOM 数を返すには、次の例を使用します。

```
SET SEED TO .25;
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   21 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   79 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   12 |
+------+
```

SEED 値を `.25` にリセットして、RANDOM が前の 3 つの呼び出しと同じ結果を返すことを検証するには、次の例を使用します。

```
SET SEED TO .25;
SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   21 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   79 |
+------+

SELECT CAST(RANDOM() * 100 AS INT);
+------+
| int4 |
+------+
|   12 |
+------+
```

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

SALES テーブルから、10 個の項目の一様なランダムサンプルを取得するには、次の例を使用します。

```
SELECT * 
FROM sales
ORDER BY RANDOM()
LIMIT 10;

+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
| salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
|   45422 |  51114 |     5983 |   24482 |    4369 |   2118 |       1 |       195 |      29.25 | 2008-10-19 05:20:07 |
|   42481 |  47638 |     4573 |    6198 |    6479 |   1987 |       4 |      1140 |        171 | 2008-06-10 09:39:19 |
|   31494 |  34759 |    18895 |    4719 |    7753 |   2090 |       4 |      1024 |      153.6 | 2008-09-21 03:44:26 |
|  119388 | 136685 |    21815 |   41905 |    2071 |   1884 |       1 |       359 |      53.85 | 2008-02-27 10:43:10 |
|  166990 | 225037 |    18529 |    7628 |     746 |   2113 |       1 |      2009 |     301.35 | 2008-10-14 10:07:44 |
|   11146 |  12096 |    42685 |    6619 |    1876 |   2123 |       1 |        29 |       4.35 | 2008-10-24 06:23:54 |
|  148537 | 172056 |    15102 |   11787 |    6122 |   1923 |       2 |       480 |         72 | 2008-04-07 03:58:23 |
|   68945 |  78387 |     7359 |   18323 |    6636 |   1910 |       1 |       457 |      68.55 | 2008-03-25 08:31:03 |
|   52796 |  59576 |     9909 |   15102 |    7958 |   1951 |       1 |       479 |      71.85 | 2008-05-05 02:25:08 |
|   90684 | 103522 |    38052 |   21549 |    7384 |   2117 |       1 |       313 |      46.95 | 2008-10-18 05:43:11 |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
```

10 個のアイテムのランダムサンプルを取得するが、料金に比例してアイテムを選択するには、次の例を使用します。例えば、別の料金の 2 倍のアイテムは、クエリ結果に表示される可能性が 2 倍になります。

```
SELECT * 
FROM sales
ORDER BY -LOG(RANDOM()) / pricepaid
LIMIT 10;

+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
| salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission |      saletime       |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
|  158340 | 208208 |    17082 |   42018 |    1211 |   2160 |       4 |      6852 |     1027.8 | 2008-11-30 12:21:43 |
|   53250 |  60069 |    12644 |    7066 |    7942 |   1838 |       4 |      1528 |      229.2 | 2008-01-12 11:24:56 |
|   22929 |  24938 |    47314 |    6503 |     179 |   2000 |       3 |       741 |     111.15 | 2008-06-23 08:04:50 |
|  164980 | 221181 |     1949 |   19670 |    1471 |   1906 |       1 |      1330 |      199.5 | 2008-03-21 07:59:51 |
|  159641 | 211179 |    44897 |   16652 |    7458 |   2128 |       1 |      1019 |     152.85 | 2008-10-29 02:02:15 |
|   73143 |  83439 |     5716 |    5727 |    7314 |   1903 |       1 |       248 |       37.2 | 2008-03-18 11:07:42 |
|   84778 |  96749 |    46608 |   32980 |    3883 |   1999 |       2 |       958 |      143.7 | 2008-06-22 12:13:31 |
|  171096 | 232929 |    43683 |    8536 |    8353 |   1870 |       1 |       929 |     139.35 | 2008-02-13 01:36:36 |
|   74212 |  84697 |    39809 |   15569 |    5525 |   2105 |       2 |       896 |      134.4 | 2008-10-06 11:47:50 |
|  158011 | 207556 |    25399 |   16881 |     232 |   2088 |       2 |      2526 |      378.9 | 2008-09-19 06:00:26 |
+---------+--------+----------+---------+---------+--------+---------+-----------+------------+---------------------+
```

# ROUND 関数
<a name="r_ROUND"></a>

ROUND 関数は、数値を四捨五入して、最も近い整数または 10 進数にします。

ROUND 関数にはオプションで、2 番目の引数として `INTEGER` を指定できます。この整数は、四捨五入後の小数点以下または小数点以上の桁数を指定します。2 番目の引数を指定しない場合、関数は最も近い整数に四捨五入されます。2 番目の引数 *integer* が指定されている場合、この関数は小数点以下 *integer* 桁の精度で最も近い数値に四捨五入されます。

## 構文
<a name="r_ROUND-synopsis"></a>

```
ROUND(number [ , integer ] )
```

## 引数
<a name="r_ROUND-argument"></a>

 *数値*   
数値、または数値に評価される式。`DECIMAL`、`FLOAT8`、または `SUPER` 型を使用できます。Amazon Redshift は、他の数値データ型を暗黙的に変換できます。

* (整数*)  
(オプション) 小数点以上または小数点以下の桁数を示す `INTEGER`。`SUPER` データ型は、この引数ではサポートされていません。

## 戻り型
<a name="r_ROUND-return-type"></a>

ROUND は、入力と同じ *number* データ型を返します。

入力が `SUPER` 型の場合、出力は入力と同じ動的型を保持しますが、静的型は `SUPER` 型のままです。`SUPER` の動的型が数値でない場合、Amazon Redshift は `NULL` を返します。

## 例
<a name="r_ROUND-examples"></a>

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

特定の取引において支払われたコミッションを四捨五入して、最も近い整数にするには、次の例を使用します。

```
SELECT commission, ROUND(commission)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |    28 |
+------------+-------+
```

特定の取引において支払われたコミッションを四捨五入して、小数点以下第 1 位までの数値にするには、次の例を使用します。

```
SELECT commission, ROUND(commission, 1)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |  28.1 |
+------------+-------+
```

精度を前の例と逆方向に拡張するには、次の例を使用します。

```
SELECT commission, ROUND(commission, -1)
FROM sales WHERE salesid=10000;

+------------+-------+
| commission | round |
+------------+-------+
|      28.05 |    30 |
+------------+-------+
```

# SIN 関数
<a name="r_SIN"></a>

SIN は、数値のサイン (正弦) を返す三角関数です。戻り値は、`-1`～`1` です。

## 構文
<a name="r_SIN-synopsis"></a>

```
SIN(number)
```

## 引数
<a name="r_SIN-argument"></a>

 *数値*   
ラジアン単位の `DOUBLE PRECISION` 数。

## 戻り型
<a name="r_SIN-return-type"></a>

`DOUBLE PRECISION` 

## 例
<a name="r_SIN-examples"></a>

`-PI` のサイン (正弦) を返すには、次の例を使用します。

```
SELECT SIN(-PI());

+-------------------------+
|           sin           |
+-------------------------+
| -0.00000000000000012246 |
+-------------------------+
```

# SIGN 関数
<a name="r_SIGN"></a>

 SIGN 関数は、数の符号 (正または負) を返します。SIGN 関数の結果は、引数が正の場合は `1`、引数が負の場合は `-1`、引数が `0` の場合は `0` になります。

## 構文
<a name="r_SIGN-synopsis"></a>

```
SIGN(number)
```

## 引数
<a name="r_SIGN-argument"></a>

 *数値*   
数値、または数値に評価される式。`DECIMAL`、`FLOAT8`、または `SUPER` 型を使用できます。その他のデータ型は、暗黙的変換ルールに従って Amazon Redshift によって変換できます。

## 戻り型
<a name="r_SIGN-return-type"></a>

SIGN は、入力引数と同じ数値データ型を返します。入力が `DECIMAL` の場合、出力は `DECIMAL(1,0)` になります。

入力が `SUPER` 型の場合、出力は入力と同じ動的型を保持しますが、静的型は `SUPER` 型のままです。`SUPER` の動的型が数値でない場合、Amazon Redshift は `NULL` を返します。

## 例
<a name="r_SIGN-examples"></a>

次の例は、入力が `DOUBLE PRECISION` であるため、テーブル t2 の列 `d` の型が `DOUBLE PRECISION` であり、入力が `NUMERIC` であるため、テーブル t2 の列 `n` の出力は `NUMERIC(1,0)` であることを示しています。

```
CREATE TABLE t1(d DOUBLE PRECISION, n NUMERIC(12, 2));
INSERT INTO t1 VALUES (4.25, 4.25), (-4.25, -4.25);
CREATE TABLE t2 AS SELECT SIGN(d) AS d, SIGN(n) AS n FROM t1;
SELECT table_name, column_name, data_type FROM SVV_REDSHIFT_COLUMNS WHERE table_name='t1' OR table_name='t2';
 
+------------+-------------+-----------------------+
| table_name | column_name |       data_type       |
+------------+-------------+-----------------------+
| t1         | d           | double precision      |
| t1         | n           | numeric(12,2)         |
| t2         | d           | double precision      |
| t2         | n           | numeric(1,0)          |
| t1         | col1        | character varying(20) |
+------------+-------------+-----------------------+
```

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

SALES テーブルから、特定の取引において支払われたコミッションの符号を判別するには、次の例を使用します。

```
SELECT commission, SIGN(commission)
FROM sales WHERE salesid=10000;

+------------+------+
| commission | sign |
+------------+------+
|      28.05 |    1 |
+------------+------+
```

# SQRT 関数
<a name="r_SQRT"></a>

 SQRT 関数は、`NUMERIC` 値の平方根を返します。平方根は、与えられた値を得るためにそれ自体を掛けた数値です。

## 構文
<a name="r_SQRT-synopsis"></a>

```
SQRT(expression)
```

## 引数
<a name="r_SQRT-argument"></a>

 *expression*   
式には `INTEGER`、`DECIMAL`、または `FLOAT` データ型、あるいはそれらのデータ型に暗黙的に変換されるデータ型が必要です。*式* には関数を含めることができます。

## 戻り型
<a name="r_SQRT-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_SQRT-examples"></a>

16 の平方根を返すには、次の例を使用します。

```
SELECT SQRT(16);
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

暗黙的な型変換を使用して文字列 `16` の平方根を返すには、次の例を使用します。

```
SELECT SQRT('16');
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

ROUND 関数を使用した後に 16.4 の平方根を返すには、次の例を使用します。

```
SELECT SQRT(ROUND(16.4));
               
+------+
| sqrt |
+------+
|    4 |
+------+
```

円のエリアを指定したときの半径の長さを返すには、次の例を使用します。例えば、エリアを平方インチで指定すると、半径をインチで計算します。サンプルのエリアは 20 です。

```
SELECT SQRT(20/PI()) AS radius;
               
+--------------------+
|      radius        |
+--------------------+
| 2.5231325220201604 |
+--------------------+
```

次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

SALES テーブルから COMMISSION 値の平方根を返すには、次の例を使用します。COMMISSION 列は `DECIMAL` 型列です。この例は、より複雑な条件ロジックを含むクエリで関数を使用する方法を示しています。

```
SELECT SQRT(commission)
FROM sales WHERE salesid < 10 ORDER BY salesid;

+--------------------+
|        sqrt        |
+--------------------+
| 10.449880382090505 |
| 3.3763886032268267 |
|  7.245688373094719 |
|  5.123475382979799 |
|  4.806245936279167 |
|  7.687652437513028 |
| 10.871982339941507 |
| 5.4359911699707535 |
|   9.41541289588513 |
+--------------------+
```

上記と同じ COMMISSION 値の四捨五入された平方根を返すには、次の例を使用します。

```
SELECT ROUND(SQRT(commission))
FROM sales WHERE salesid < 10 ORDER BY salesid;

+-------+
| round |
+-------+
|    10 |
|     3 |
|     7 |
|     5 |
|     5 |
|     8 |
|    11 |
|     5 |
|     9 |
+-------+
```

# TAN 関数
<a name="r_TAN"></a>

TAN は、数値のタンジェントを返す三角関数です。入力引数は数値 (ラジアン単位) です。

## 構文
<a name="r_TAN-synopsis"></a>

```
TAN(number)
```

## 引数
<a name="r_TAN-argument"></a>

 *数値*   
`DOUBLE PRECISION` 数。

## 戻り型
<a name="r_TAN-return-type"></a>

`DOUBLE PRECISION`

## 例
<a name="r_TAN-examples"></a>

1 のタンジェント (正接) を返すには、次の例を使用します。

```
SELECT TAN(0);

+-----+
| tan |
+-----+
|   0 |
+-----+
```

# TRUNC 関数
<a name="r_TRUNC"></a>

TRUNC 関数は、数値を前の整数または小数に切り捨てます。

TRUNC 関数にはオプションで、2 番目の引数として `INTEGER` を指定できます。この整数は、四捨五入後の小数点以下または小数点以上の桁数を指定します。2 番目の引数を指定しない場合、関数は最も近い整数に四捨五入されます。2 番目の引数 *integer* が指定されている場合、この関数は小数点以下 *integer* 桁の精度で最も近い数値に四捨五入されます。

 この関数は `TIMESTAMP` を切り捨て、`DATE` を返すこともできます。詳細については、「[TRUNC 関数](r_TRUNC_date.md)」を参照してください。

## 構文
<a name="r_TRUNC-synopsis"></a>

```
TRUNC(number [ , integer ])
```

## 引数
<a name="r_TRUNC-arguments"></a>

 *数値*   
数値、または数値に評価される式。`DECIMAL`、`FLOAT8`、または `SUPER` 型を使用できます。その他のデータ型は、暗黙的変換ルールに従って Amazon Redshift によって変換できます。

 * (整数*)  
(オプション) 小数点以上または小数点以下の精度の桁数を示す `INTEGER`。この *integer* が指定されなかった場合は、数値が切り捨てられて整数になります。この *integer* が指定された場合は、数値が切り捨てられて、指定された桁数になります。これは `SUPER` データ型ではサポートされていません。

## 戻り型
<a name="r_TRUNC-return-type"></a>

TRUNC は、最初の入力 *number* と同じデータ型を返します。

入力が `SUPER` 型の場合、出力は入力と同じ動的型を保持しますが、静的型は `SUPER` 型のままです。`SUPER` の動的型が数値でない場合、Amazon Redshift は `NULL` を返します。

## 例
<a name="r_TRUNC-examples"></a>

次の一部の例では、TICKIT サンプルデータベースを使用しています。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

特定の取引において支払われたコミッションを切り捨てるには、次の例を使用します。

```
SELECT commission, TRUNC(commission)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 |   111 |
+------------+-------+
```

同じコミッション値を切り捨てて、小数点以下第 1 位までの数値にするには、次の例を使用します。

```
SELECT commission, TRUNC(commission,1)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 | 111.1 |
+------------+-------+
```

2 番目の引数に対して負の値でコミッションを切り捨てるには、次の例を使用します。`111.15` は `110` に切り下げられることに注意してください。

```
SELECT commission, TRUNC(commission,-1)
FROM sales WHERE salesid=784;

+------------+-------+
| commission | trunc |
+------------+-------+
|     111.15 |   110 |
+------------+-------+
```

# オブジェクト関数
<a name="Object_Functions"></a>

次に、SUPER 型オブジェクトの作成と操作のために Amazon Redshift がサポートする SQL オブジェクト関数を示します。

**Topics**
+ [GET\$1NUMBER\$1ATTRIBUTES 関数](get_number_attributes.md)
+ [LOWER\$1ATTRIBUTE\$1NAMES 関数](r_lower_attribute_names.md)
+ [OBJECT 関数](r_object_function.md)
+ [OBJECT\$1TRANSFORM 関数](r_object_transform_function.md)
+ [UPPER\$1ATTRIBUTE\$1NAMES 関数](r_upper_attribute_names.md)

# GET\$1NUMBER\$1ATTRIBUTES 関数
<a name="get_number_attributes"></a>

ディクショナリオブジェクトのルートレベルに存在するキーと値のペアの数を返します。

## 構文
<a name="get_number_attributes-syntax"></a>

```
GET_NUMBER_ATTRIBUTES( super_expression )
```

## 引数
<a name="get_number_attributes-arguments"></a>

 *super\$1expression*   
ディクショナリ形式の SUPER 式。

## 戻り型
<a name="get_number_attributes-return-type"></a>

GET\$1NUMBER\$1ATTRIBUTES 関数は INT 型を返します。

## 注記
<a name="get_number_attributes-note"></a>

この関数は直接の属性のみをカウントし、ネストされたディクショナリ内のペアは含まれません。

## 例
<a name="get_number_attributes-example"></a>

次の例は、GET\$1NUMBER\$1ATTRIBUTES 関数を示しています。

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": 2, "c": 3}'));
 get_number_attributes
-----------------------
            3
(1 row)
```

GET\$1NUMBER\$1ATTRIBUTES 関数は、ディクショナリの最初のレベルでのみ動作します。

```
SELECT GET_NUMBER_ATTRIBUTES(JSON_PARSE('{"a": 1, "b": {"c": 3}}'));
 get_number_attributes
-----------------------
            2
(1 row)
```

# LOWER\$1ATTRIBUTE\$1NAMES 関数
<a name="r_lower_attribute_names"></a>

[LOWER 関数](r_LOWER.md) と同じ大文字/小文字の変換ルーチンを使用して、SUPER 値のすべての該当する属性名を小文字に変換します。LOWER\$1ATTRIBUTE\$1NAMES は、UTF-8 マルチバイト文字をサポートします (1 文字につき最大 4 バイトまで)。

 SUPER 属性名を大文字に変換するには、[UPPER\$1ATTRIBUTE\$1NAMES 関数](r_upper_attribute_names.md) を使用します。

## 構文
<a name="r_lower_attribute_names-synopsis"></a>

```
LOWER_ATTRIBUTE_NAMES( super_expression )
```

## 引数
<a name="r_lower_attribute_names-arguments"></a>

*super\$1expression*  
SUPER 式。

## 戻り型
<a name="r_lower_attribute_names-return-type"></a>

`SUPER`

## 使用に関する注意事項
<a name="r_lower_attribute_names-usage-notes"></a>

Amazon Redshift では、従来、列識別子の大文字と小文字を区別せずに小文字に変換します。JSON などの大文字と小文字を区別するデータ形式からデータを取り込むと、データには大文字と小文字が混在する属性名が含まれることがあります。

次の例を考えます。

```
CREATE TABLE t1 (s) AS SELECT JSON_PARSE('{"AttributeName": "Value"}');


SELECT s.AttributeName FROM t1;  

attributename
-------------
NULL


SELECT s."AttributeName" FROM t1;

attributename
-------------
NULL
```

Amazon Redshift は、両方のクエリに対して NULL を返します。`AttributeName` をクエリするには、LOWER\$1ATTRIBUTE\$1NAMES を使用してデータの属性名を小文字に変換します。次の例を考えます。

```
CREATE TABLE t2 (s) AS SELECT LOWER_ATTRIBUTE_NAMES(s) FROM t1;


SELECT s.attributename FROM t2;

attributename
-------------
"Value"


SELECT s.AttributeName FROM t2; 

attributename
-------------
"Value"


SELECT s."attributename" FROM t2;

attributename
-------------
"Value"


SELECT s."AttributeName" FROM t2;

attributename
-------------
"Value"
```

大文字と小文字が混在するオブジェクト属性名を使用するための関連オプションは、`enable_case_sensitive_super_attribute` 設定オプションです。これにより、Amazon Redshift は SUPER 属性名の大文字と小文字を認識できます。これは、LOWER\$1ATTRIBUTE\$1NAMES の代替ソリューションとして使用できます。`enable_case_sensitive_super_attribute` の詳細については、「[enable\$1case\$1sensitive\$1super\$1attribute](r_enable_case_sensitive_super_attribute.md)」を参照してください。

## 例
<a name="r_lower_attribute_names_examples"></a>

**SUPER 属性名を小文字に変換する**  
次の例では、LOWER\$1ATTRIBUTE\$1NAMES を使用して、テーブル内のすべての SUPER 値の属性名を変換します。

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'A'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "B"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"C": "C"},
        "Subarray": [{"D": "D"}, "E"]
      }]'));

-- Convert all attribute names to lowercase.
UPDATE t SET s = LOWER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "A"
 3 | {"attributename":"B"}
 4 | [{"subobject":{"c":"C"},"subarray":[{"d":"D"}, "E"]}]
```

LOWER\$1ATTRIBUTE\$1NAMES がどのように機能するかを確認します。
+  NULL 値とスカラー SUPER 値 (`"A"` など) は変更されません。
+  SUPER オブジェクトでは、すべての属性名は小文字に変更されますが、`"B"` などの属性値は変更されません。
+  LOWER\$1ATTRIBUTE\$1NAMES は、SUPER 配列内または別のオブジェクト内にネストされているすべての SUPER オブジェクトに再帰的に適用されます。

**重複する属性名を持つ SUPER オブジェクトでの LOWER\$1ATTRIBUTE\$1NAMES の使用**  
SUPER オブジェクトに大文字と小文字だけが異なる名前の属性が含まれている場合、LOWER\$1ATTRIBUTE\$1NAMES はエラーを発生させます。次の例を考えます。

```
SELECT LOWER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# OBJECT 関数
<a name="r_object_function"></a>

SUPER データ型のオブジェクトを作成します。

## 構文
<a name="r_object_function-synopsis"></a>

```
OBJECT ( [ key1, value1 ], [ key2, value2 ...] )
```

## 引数
<a name="r_object_function-arguments"></a>

*key1, key2*  
VARCHAR 型の文字列に評価される式。

*value1, value2*  
Amazon Redshift では、日時の型は SUPER データ型にキャストされないため、すべての Amazon Redshift データ型の式では日時の型は除外されます。日時の型の詳細については、「[日時型](r_Datetime_types.md)」を参照してください。  
オブジェクト内の `value` 式は、同じデータ型である必要はありません。

## 戻り型
<a name="r_object_function-returns"></a>

`SUPER`

## 例
<a name="r_object_function_example"></a>

```
-- Creates an empty object.
select object();

object
--------
{}
(1 row)
            
-- Creates objects with different keys and values.
select object('a', 1, 'b', true, 'c', 3.14);

object
---------------------------
{"a":1,"b":true,"c":3.14}
(1 row)
               
select object('a', object('aa', 1), 'b', array(2,3), 'c', json_parse('{}'));
               
object
---------------------------------
{"a":{"aa":1},"b":[2,3],"c":{}}
(1 row)
            
-- Creates objects using columns from a table.
create table bar (k varchar, v super);
insert into bar values ('k1', json_parse('[1]')), ('k2', json_parse('{}'));
select object(k, v) from bar;

object
------------
{"k1":[1]}
{"k2":{}}
(2 rows)
            
-- Errors out because DATE type values can't be converted to SUPER type.
select object('k', '2008-12-31'::date);

ERROR:  OBJECT could not convert type date to super
```

# OBJECT\$1TRANSFORM 関数
<a name="r_object_transform_function"></a>

SUPER オブジェクトを変換します。

## 構文
<a name="r_object_transform_function-synopsis"></a>

```
OBJECT_TRANSFORM(
  input
  [KEEP path1, ...]
  [SET
    path1, value1,
    ...,  ...
  ]
)
```

## 引数
<a name="r_object_transform_function-arguments"></a>

* の入力*:  
SUPER 型オブジェクトに解決される式。

*KEEP*  
この句で指定された *path* 値はすべて保持され、出力オブジェクトに引き継がれます。  
この句はオプションです。

*path1*, *path2*, ...  
二重引用符で囲まれたパスコンポーネントをピリオドで区切った形式の定数文字列リテラル。例えば、`'"a"."b"."c"'` は有効なパス値です。これは KEEP 句と SET 句の両方のパスパラメーターに当てはまります。

*SET*  
*path* と *value* のペアを使用して既存のパスを変更するか、新しいパスを追加し、出力オブジェクトにそのパスの値を設定します。  
この句はオプションです。

*value1*, *value2*, ...  
SUPER 型の値に解決される式。数値型、テキスト型、ブール型は SUPER に解決可能であることに注意してください。

## 戻り型
<a name="r_object_transform_function-returns"></a>

`SUPER`

## 使用に関する注意事項
<a name="r_object_transform_function-usage-notes"></a>

OBJECT\$1TRANSFORM は、KEEP で指定された *input* からのパス値と、SET で指定された *path* と *value* のペアを含む SUPER 型のオブジェクトを返します。

KEEP と SET の両方が空の場合、OBJECT\$1TRANSFORM は *input* を返します。

*input* が SUPER 型の *object* でない場合、OBJECT\$1TRANSFORM は KEEP 値や SET 値に関係なく *input* を返します。

## 例
<a name="r_object_transform_function-example"></a>

次の例では、SUPER オブジェクトを別の SUPER オブジェクトに変換します。

```
CREATE TABLE employees (
    col_person SUPER
);

INSERT INTO employees
VALUES
    (
        json_parse('
            {
                "name": {
                    "first": "John",
                    "last": "Doe"
                },
                "age": 25,
                "ssn": "111-22-3333",
                "company": "Company Inc.",
                "country": "U.S."
            }
        ')
    ),
    (
        json_parse('
            {
                "name": {
                    "first": "Jane",
                    "last": "Appleseed"
                },
                "age": 34,
                "ssn": "444-55-7777",
                "company": "Organization Org.",
                "country": "Ukraine"
            }
        ')
    )
;

SELECT
    OBJECT_TRANSFORM(
        col_person
        KEEP
            '"name"."first"',
            '"age"',
            '"company"',
            '"country"'
        SET
            '"name"."first"', UPPER(col_person.name.first::TEXT),
            '"age"', col_person.age + 5,
            '"company"', 'Amazon'
    ) AS col_person_transformed
FROM employees;
    
--This result is formatted for ease of reading.
                  col_person_transformed
-------------------------------------------------------------
{
    "name": {
        "first": "JOHN"
    },
    "age": 30,
    "company": "Amazon",
    "country": "U.S."
}
{
    "name": {
        "first": "JANE"
    },
    "age": 39,
    "company": "Amazon",
    "country": "Ukraine"
}
```

# UPPER\$1ATTRIBUTE\$1NAMES 関数
<a name="r_upper_attribute_names"></a>

[UPPER 関数](r_UPPER.md) と同じ大文字/小文字の変換ルーチンを使用して、SUPER 値のすべての該当する属性名を大文字に変換します。UPPER\$1ATTRIBUTE\$1NAMES は、UTF-8 マルチバイト文字をサポートします (1 文字につき最大 4 バイトまで)。

 SUPER 属性名を小文字に変換するには、[LOWER\$1ATTRIBUTE\$1NAMES 関数](r_lower_attribute_names.md) を使用します。

## 構文
<a name="r_upper_attribute_names-synopsis"></a>

```
UPPER_ATTRIBUTE_NAMES( super_expression )
```

## 引数
<a name="r_upper_attribute_names-arguments"></a>

*super\$1expression*  
SUPER 式。

## 戻り型
<a name="r_upper_attribute_names-return-type"></a>

`SUPER`

## 例
<a name="r_upper_attribute_names_examples"></a>

**SUPER 属性名を大文字に変換する**  
次の例では、UPPER\$1ATTRIBUTE\$1NAMES を使用して、テーブル内のすべての SUPER 値の属性名を変換します。

```
-- Create a table and insert several SUPER values.
CREATE TABLE t (i INT, s SUPER);

INSERT INTO t VALUES
  (1, NULL), 
  (2, 'a'::SUPER),
  (3, JSON_PARSE('{"AttributeName": "b"}')),
  (4, JSON_PARSE(
     '[{"Subobject": {"c": "c"},
        "Subarray": [{"d": "d"}, "e"]
      }]'));

-- Convert all attribute names to uppercase.
UPDATE t SET s = UPPER_ATTRIBUTE_NAMES(s);

SELECT i, s FROM t ORDER BY i;

 i |                        s
---+--------------------------------------------------
 1 | NULL
 2 | "a"
 3 | {"ATTRIBUTENAME":"B"}
 4 | [{"SUBOBJECT":{"C":"c"},"SUBARRAY":[{"D":"d"}, "e"]}]
```

UPPER\$1ATTRIBUTE\$1NAMES がどのように機能するかを確認します。
+  NULL 値とスカラー SUPER 値 (`"a"` など) は変更されません。
+  SUPER オブジェクトでは、すべての属性名が大文字に変更されますが、`"b"` などの属性値は変更されません。
+  UPPER\$1ATTRIBUTE\$1NAMES は、SUPER 配列内または別のオブジェクト内にネストされているすべての SUPER オブジェクトに再帰的に適用されます。

**重複する属性名を持つ SUPER オブジェクトでの UPPER\$1ATTRIBUTE\$1NAMES の使用**  
SUPER オブジェクトに大文字と小文字だけが異なる名前の属性が含まれている場合、UPPER\$1ATTRIBUTE\$1NAMES はエラーを発生させます。次の例を考えます。

```
SELECT UPPER_ATTRIBUTE_NAMES(JSON_PARSE('{"A": "A", "a": "a"}'));      

error:   Invalid input
code:    8001
context: SUPER value has duplicate attributes after case conversion.
```

# 空間関数
<a name="geospatial-functions"></a>

ジオメトリオブジェクト間の関係は、DE-9IM (Dimensionally Extended nine-Intersection Model) に基づいています。このモデルは、EQUALS、CONTAINS、COVERS などの述語を定義します。空間的関係の定義についての詳細は、ウィキペディアの [DE-9IM](https://en.wikipedia.org/wiki/DE-9IM) を参照してください。

Amazon Redshift で空間データを使用する方法の詳細については、「[Amazon Redshift での空間データのクエリ](geospatial-overview.md)」を参照してください。

Amazon Redshift には、`GEOMETRY` および `GEOGRAPHY` のデータ型で動作する空間関数が用意されています。以下に、`GEOGRAPHY` データ型をサポートする関数を一覧で示します。
+ [ST\$1Area](ST_Area-function.md)
+ [ST\$1AsEWKT](ST_AsEWKT-function.md)
+ [ST\$1AsGeoJSON](ST_AsGeoJSON-function.md)
+ [ST\$1AsHexEWKB](ST_AsHexEWKB-function.md)
+ [ST\$1AsHexWKB](ST_AsHexWKB-function.md)
+ [ST\$1AsText](ST_AsText-function.md)
+ [ST\$1Distance](ST_Distance-function.md)
+ [ST\$1GeogFromText](ST_GeogFromText-function.md)
+ [ST\$1GeogFromWKB](ST_GeogFromWKB-function.md)
+ [ST\$1Length](ST_Length-function.md)
+ [ST\$1NPoints](ST_NPoints-function.md)
+ [ST\$1Perimeter](ST_Perimeter-function.md)

Amazon Redshift でサポートされているすべての空間関数を以下に示します。

**Topics**
+ [AddBBox](AddBBox-function.md)
+ [DropBBox](DropBBox-function.md)
+ [GeometryType](GeometryType-function.md)
+ [H3\$1Boundary](H3_Boundary-function.md)
+ [H3\$1Center](H3_Center-function.md)
+ [H3\$1FromLongLat](H3_FromLongLat-function.md)
+ [H3\$1FromPoint](H3_FromPoint-function.md)
+ [H3\$1IsValid](H3_IsValid-function.md)
+ [H3\$1Polyfill](H3_Polyfill-function.md)
+ [H3\$1Resolution](H3_Resolution-function.md)
+ [H3\$1ToChildren](H3_ToChildren-function.md)
+ [H3\$1ToParent](H3_ToParent-function.md)
+ [ST\$1AddPoint](ST_AddPoint-function.md)
+ [ST\$1Angle](ST_Angle-function.md)
+ [ST\$1Area](ST_Area-function.md)
+ [ST\$1AsBinary](ST_AsBinary-function.md)
+ [ST\$1AsEWKB](ST_AsEWKB-function.md)
+ [ST\$1AsEWKT](ST_AsEWKT-function.md)
+ [ST\$1AsGeoJSON](ST_AsGeoJSON-function.md)
+ [ST\$1AsHexWKB](ST_AsHexWKB-function.md)
+ [ST\$1AsHexEWKB](ST_AsHexEWKB-function.md)
+ [ST\$1AsText](ST_AsText-function.md)
+ [ST\$1Azimuth](ST_Azimuth-function.md)
+ [ST\$1Boundary](ST_Boundary-function.md)
+ [ST\$1Buffer](ST_Buffer-function.md)
+ [ST\$1Centroid](ST_Centroid-function.md)
+ [ST\$1Collect](ST_Collect-function.md)
+ [ST\$1Contains](ST_Contains-function.md)
+ [ST\$1ContainsProperly](ST_ContainsProperly-function.md)
+ [ST\$1ConvexHull](ST_ConvexHull-function.md)
+ [ST\$1CoveredBy](ST_CoveredBy-function.md)
+ [ST\$1Covers](ST_Covers-function.md)
+ [ST\$1Crosses](ST_Crosses-function.md)
+ [ST\$1Dimension](ST_Dimension-function.md)
+ [ST\$1Disjoint](ST_Disjoint-function.md)
+ [ST\$1Distance](ST_Distance-function.md)
+ [ST\$1DistanceSphere](ST_DistanceSphere-function.md)
+ [ST\$1DWithin](ST_DWithin-function.md)
+ [ST\$1EndPoint](ST_EndPoint-function.md)
+ [ST\$1Envelope](ST_Envelope-function.md)
+ [ST\$1Equals](ST_Equals-function.md)
+ [ST\$1ExteriorRing](ST_ExteriorRing-function.md)
+ [ST\$1Force2D](ST_Force2D-function.md)
+ [ST\$1Force3D](ST_Force3D-function.md)
+ [ST\$1Force3DM](ST_Force3DM-function.md)
+ [ST\$1Force3DZ](ST_Force3DZ-function.md)
+ [ST\$1Force4D](ST_Force4D-function.md)
+ [ST\$1GeoHash](ST_GeoHash-function.md)
+ [ST\$1GeogFromText](ST_GeogFromText-function.md)
+ [ST\$1GeogFromWKB](ST_GeogFromWKB-function.md)
+ [ST\$1GeometryN](ST_GeometryN-function.md)
+ [ST\$1GeometryType](ST_GeometryType-function.md)
+ [ST\$1GeomFromEWKB](ST_GeomFromEWKB-function.md)
+ [ST\$1GeomFromEWKT](ST_GeomFromEWKT-function.md)
+ [ST\$1GeomFromGeoHash](ST_GeomFromGeoHash-function.md)
+ [ST\$1GeomFromGeoJSON](ST_GeomFromGeoJSON-function.md)
+ [ST\$1GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md)
+ [ST\$1GeomFromText](ST_GeomFromText-function.md)
+ [ST\$1GeomFromWKB](ST_GeomFromWKB-function.md)
+ [ST\$1GeoSquare](ST_GeoSquare-function.md)
+ [ST\$1InteriorRingN](ST_InteriorRingN-function.md)
+ [ST\$1Intersects](ST_Intersects-function.md)
+ [ST\$1Intersection](ST_Intersection-function.md)
+ [ST\$1IsPolygonCCW](ST_IsPolygonCCW-function.md)
+ [ST\$1IsPolygonCW](ST_IsPolygonCW-function.md)
+ [ST\$1IsClosed](ST_IsClosed-function.md)
+ [ST\$1IsCollection](ST_IsCollection-function.md)
+ [ST\$1IsEmpty](ST_IsEmpty-function.md)
+ [ST\$1IsRing](ST_IsRing-function.md)
+ [ST\$1IsSimple](ST_IsSimple-function.md)
+ [ST\$1IsValid](ST_IsValid-function.md)
+ [ST\$1Length](ST_Length-function.md)
+ [ST\$1LengthSphere](ST_LengthSphere-function.md)
+ [ST\$1Length2D](ST_Length2D-function.md)
+ [ST\$1LineFromMultiPoint](ST_LineFromMultiPoint-function.md)
+ [ST\$1LineInterpolatePoint](ST_LineInterpolatePoint-function.md)
+ [ST\$1M](ST_M-function.md)
+ [ST\$1MakeEnvelope](ST_MakeEnvelope-function.md)
+ [ST\$1MakeLine](ST_MakeLine-function.md)
+ [ST\$1MakePoint](ST_MakePoint-function.md)
+ [ST\$1MakePolygon](ST_MakePolygon-function.md)
+ [ST\$1MemSize](ST_MemSize-function.md)
+ [ST\$1MMax](ST_MMax-function.md)
+ [ST\$1MMin](ST_MMin-function.md)
+ [ST\$1Multi](ST_Multi-function.md)
+ [ST\$1NDims](ST_NDims-function.md)
+ [ST\$1NPoints](ST_NPoints-function.md)
+ [ST\$1NRings](ST_NRings-function.md)
+ [ST\$1NumGeometries](ST_NumGeometries-function.md)
+ [ST\$1NumInteriorRings](ST_NumInteriorRings-function.md)
+ [ST\$1NumPoints](ST_NumPoints-function.md)
+ [ST\$1Perimeter](ST_Perimeter-function.md)
+ [ST\$1Perimeter2D](ST_Perimeter2D-function.md)
+ [ST\$1Point](ST_Point-function.md)
+ [ST\$1PointN](ST_PointN-function.md)
+ [ST\$1Points](ST_Points-function.md)
+ [ST\$1Polygon](ST_Polygon-function.md)
+ [ST\$1RemovePoint](ST_RemovePoint-function.md)
+ [ST\$1Reverse](ST_Reverse-function.md)
+ [ST\$1SetPoint](ST_SetPoint-function.md)
+ [ST\$1SetSRID](ST_SetSRID-function.md)
+ [ST\$1Simplify](ST_Simplify-function.md)
+ [ST\$1SRID](ST_SRID-function.md)
+ [ST\$1StartPoint](ST_StartPoint-function.md)
+ [ST\$1Touches](ST_Touches-function.md)
+ [ST\$1Transform](ST_Transform-function.md)
+ [ST\$1Union](ST_Union-function.md)
+ [ST\$1Within](ST_Within-function.md)
+ [ST\$1X](ST_X-function.md)
+ [ST\$1XMax](ST_XMax-function.md)
+ [ST\$1XMin](ST_XMin-function.md)
+ [ST\$1Y](ST_Y-function.md)
+ [ST\$1YMax](ST_YMax-function.md)
+ [ST\$1YMin](ST_YMin-function.md)
+ [ST\$1Z](ST_Z-function.md)
+ [ST\$1ZMax](ST_ZMax-function.md)
+ [ST\$1ZMin](ST_ZMin-function.md)
+ [SupportsBBox](SupportsBBox-function.md)

# AddBBox
<a name="AddBBox-function"></a>

AddBBox は、事前に計算された境界ボックスによるエンコーディングをサポートする、入力ジオメトリのコピーを返します。境界ボックスのサポートの詳細については、「[境界ボックス](spatial-terminology.md#spatial-terminology-bounding-box)」を参照してください。

## 構文
<a name="AddBBox-function-syntax"></a>

```
AddBBox(geom)
```

## 引数
<a name="AddBBox-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="AddBBox-function-return"></a>

`GEOMETRY`

*geom* が null の場合、null が返されます。

## 例
<a name="AddBBox-function-examples"></a>

次の SQL は、境界ボックスによるエンコードをサポートする、入力ポリゴンジオメトリのコピーを返します。

```
SELECT ST_AsText(AddBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
 st_astext
----------
 POLYGON((0 0,1 0,0 1,0 0))
```

# DropBBox
<a name="DropBBox-function"></a>

DropBBox は、事前計算された境界ボックスによるエンコーディングをサポートしていない、入力ジオメトリのコピーを返します。境界ボックスのサポートの詳細については、「[境界ボックス](spatial-terminology.md#spatial-terminology-bounding-box)」を参照してください。

## 構文
<a name="DropBBox-function-syntax"></a>

```
DropBBox(geom)
```

## 引数
<a name="DropBBox-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="DropBBox-function-return"></a>

`GEOMETRY`

*geom* が null の場合、null が返されます。

## 例
<a name="DropBBox-function-examples"></a>

次の SQL は、境界ボックスによるエンコードをサポートしない、入力ポリゴンジオメトリのコピーを返します。

```
SELECT ST_AsText(DropBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
 st_astext
----------
 POLYGON((0 0,1 0,0 1,0 0))
```

# GeometryType
<a name="GeometryType-function"></a>

GeometryType は、入力ジオメトリのサブタイプを文字列として返します。

## 構文
<a name="GeometryType-function-syntax"></a>

```
GeometryType(geom)
```

## 引数
<a name="GeometryType-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="GeometryType-function-return"></a>

*geom* のサブタイプを表す `VARCHAR`。

*geom* が null の場合、null が返されます。

返される値は次のとおりです。


| 2D、3DZ、4D ジオメトリの場合に返される文字列値 | 3DM ジオメトリの場合に返される文字列値 | ジオメトリのサブタイプ | 
| --- | --- | --- | 
| `POINT` | `POINTM` | *geom* が `POINT` サブタイプの場合に返されます  | 
| `LINESTRING` | `LINESTRINGM` | *geom* が `LINESTRING` サブタイプの場合に返されます  | 
| `POLYGON` | `POLYGONM` | *geom* が `POLYGON` サブタイプの場合に返されます  | 
| `MULTIPOINT` | `MULTIPOINTM` | *geom* が `MULTIPOINT` サブタイプの場合に返されます  | 
| `MULTILINESTRING` | `MULTILINESTRINGM` | *geom* が `MULTILINESTRING` サブタイプの場合に返されます  | 
| `MULTIPOLYGON` | `MULTIPOLYGONM` | *geom* が `MULTIPOLYGON` サブタイプの場合に返されます  | 
| `GEOMETRYCOLLECTION` | `GEOMETRYCOLLECTIONM` | *geom* が `GEOMETRYCOLLECTION` サブタイプの場合に返されます  | 

## 例
<a name="GeometryType-function-examples"></a>

次の SQL は、ポリゴンの WKT (Well-Known Text) 表現を変換し、`GEOMETRY` サブタイプを文字列として返します。

```
SELECT GeometryType(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
geometrytype
-------------
 POLYGON
```

# H3\$1Boundary
<a name="H3_Boundary-function"></a>

H3\$1Boundary は、入力インデックスから H3 セル ID の境界を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_Boundary-function-syntax"></a>

```
H3_Boundary(index)
```

## 引数
<a name="H3_Boundary-function-arguments"></a>

 * インデックス*   
H3 セルのインデックスを表すデータ型 `BIGINT` または `VARCHAR` の値。または、これらのデータ型のいずれかに評価される式。

## 戻り型
<a name="H3_Boundary-function-return"></a>

`POLYGON` – 空間参照系識別子 (SRID) が `0` のポリゴンを表します。

*index* が有効でない場合、エラーが返されます。

## 例
<a name="H3_Boundary-function-examples"></a>

次の SQL は、H3 セルのインデックスを表す `VARCHAR` を入力して、入力 H3 セルの境界を表す SRID 0 の POLYGON を返します。H3\$1Boundary の出力は ST\$1AwEWKT に入力され、Extended Well-Known Text (EWKT) 表現で表示されます。

```
SELECT ST_AsEWKT(H3_Boundary('8025fffffffffff'));
```

```
 st_asewkt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 POLYGON((87.7729641223953 52.6542030078627,86.7082098104731 40.3127667561966,98.2285042557705 33.6210697806835,110.694610548823 37.163896485796,116.212895637138 47.3094513028131,106.40349563788 56.210610737585,87.7729641223953 52.6542030078627))
```

次の SQL は、H3 セルのインデックスを表す `BIGINT` を入力して、入力 H3 セルの境界を表す SRID 0 の POLYGON を返します。H3\$1Boundary の出力は ST\$1AwEWKT に入力され、Extended Well-Known Text (EWKT) 表現で表示されます。

```
SELECT ST_AsEWKT(H3_Boundary(577129255373111295)); 
```

```
 st_asewkt
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON((87.7729641223953 52.6542030078627,86.7082098104731 40.3127667561966,98.2285042557705 33.6210697806835,110.694610548823 37.163896485796,116.212895637138 47.3094513028131,106.40349563788 56.210610737585,87.7729641223953 52.6542030078627))
```

# H3\$1Center
<a name="H3_Center-function"></a>

H3\$1Center は、入力インデックスから H3 セル ID の幾何中心を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_Center-function-syntax"></a>

```
H3_Center(index)
```

## 引数
<a name="H3_Center-function-arguments"></a>

 * インデックス*   
H3 セルのインデックスを表すデータ型 `BIGINT` または `VARCHAR` の値。または、これらのデータ型のいずれかに評価される式。

## 戻り型
<a name="H3_Center-function-return"></a>

`POINT` – 空間参照系識別子 (SRID) が `0` のH3 セルの幾何中心を表します。

*index* が有効でない場合、エラーが返されます。

## 例
<a name="H3_Center-function-examples"></a>

次の SQL は、H3 セルのインデックスを表す `VARCHAR` を入力して、入力 H3 セルの幾何中心を表す SRID 0 の POINT を返します。

```
SELECT H3_Center('8025fffffffffff');
```

```
 h3_center
--------------------------------------------
 010100000070707A550B605940AEE9D70B327E4640
```

次の SQL は、H3 セルのインデックスを表す `BIGINT` を入力して、入力 H3 セルの幾何中心を表す SRID 0 の POINT を返します。

```
SELECT H3_Center(577129255373111295);
```

```
 h3_center
--------------------------------------------
 010100000070707A550B605940AEE9D70B327E4640
```

次の SQL は、H3 セルのインデックスを表す `VARCHAR` を入力して、入力 H3 セルの幾何中心を表す SRID 0 の POINT を返します。H3\$1Center の出力は ST\$1AwEWKT に入力され、Extended Well-Known Text (EWKT) 表現で表示されます。

```
SELECT ST_AsEWKT(H3_Center('8075fffffffffff'));
```

```
 st_asewkt
-----------------------------------------
POINT(-5.24539029677733 2.30088211162675)
```

# H3\$1FromLongLat
<a name="H3_FromLongLat-function"></a>

H3\$1FromLongLat は、入力された経度、緯度、および解像度から対応する H3 セル ID を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_FromLongLat-function-syntax"></a>

```
H3_FromLongLat(longitude, latitude, resolution)
```

## 引数
<a name="H3_FromLongLat-function-arguments"></a>

 *longitude*: , ,   
データ型 `DOUBLE PRECISION` の値または `DOUBLE PRECISION` 型と評価される式の値。

 *latitude*: ,   
データ型 `DOUBLE PRECISION` の値または `DOUBLE PRECISION` 型と評価される式の値。

 *resolution*   
データ型 `INTEGER` の値または `INTEGER` 型と評価される式の値。この値は H3 グリッドシステムの解像度を表します。この値は 0〜15 の整数である必要があります。`0` が最も粗く、`15` が最も細かいです。

## 戻り型
<a name="H3_FromLongLat-function-return"></a>

`BIGINT` — H3 セル ID を表します。

*resolution* が範囲外の場合、エラーが返されます。

## 例
<a name="H3_FromLongLat-function-examples"></a>

次の SQL は、経度 `0`、緯度 `0`、解像度 `10` から H3 セル ID を返します。

```
SELECT H3_FromLongLat(0, 0, 10);
```

```
 h3_fromlonglat
-------------------
 623560421467684863
```

# H3\$1FromPoint
<a name="H3_FromPoint-function"></a>

H3\$1FromPoint は、入力されたジオメトリポイントおよび解像度から対応する H3 セル ID を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_FromPoint-function-syntax"></a>

```
H3_FromPoint(geom, resolution)
```

## 引数
<a name="H3_FromPoint-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。*geom* は `POINT` である必要があります。

 *resolution*   
データ型 `INTEGER` の値または `INTEGER` 型と評価される式の値。この値は H3 グリッドシステムの解像度を表します。この値は 0〜15 の整数である必要があります。`0` が最も粗く、`15` が最も細かいです。

## 戻り型
<a name="H3_FromPoint-function-return"></a>

`BIGINT` — H3 セル ID を表します。

*geom* が `POINT` でない場合、エラーが返されます。

*resolution* が範囲外の場合、エラーが返されます。

*geom* が空の場合、NULL が返されます。

## 例
<a name="H3_FromPoint-function-examples"></a>

次の SQL は、ポイント `0,0` と解像度 `10` から H3 セル ID を返します。

```
SELECT H3_FromPoint(ST_GeomFromText('POINT(0 0)'), 10);
```

```
 h3_frompoint
-------------------
 623560421467684863
```

# H3\$1IsValid
<a name="H3_IsValid-function"></a>

H3\$1IsValid は、入力が H3 セル ID を表す場合は true、それ以外の場合は false を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_IsValid-function-syntax"></a>

```
H3_IsValid(index)
```

## 引数
<a name="H3_IsValid-function-arguments"></a>

 * インデックス*   
データ型 `BIGINT` または `VARCHAR` の値、またはこれらのデータ型のいずれかに評価される式。

## 戻り型
<a name="H3_IsValid-function-return"></a>

`BOOLEAN` – 入力が有効な H3 セル ID を表す場合は true、それ以外の場合は false。

*index* が NULL の場合、NULL が返されます。

## 例
<a name="H3_IsValid-function-examples"></a>

次の SQL は、H3 セル ID を表す VARCHAR を入力し、true を返します。

```
SELECT H3_IsValid('8025fffffffffff');
```

```
 h3_isvalid
------------
 true
```

次の SQL は、H3 セル ID を表す BIGINT を入力し、true を返します。

```
SELECT H3_IsValid(577129255373111295);
```

```
 h3_isvalid
------------
 true
```

次の SQL は無効な H3 セル ID を入力し、false を返します。

```
SELECT H3_IsValid('');
```

```
 h3_isvalid
------------
 false
```

# H3\$1Polyfill
<a name="H3_Polyfill-function"></a>

H3\$1Polyfill は、指定された解像度の入力ポリゴンに含まれる六角形と五角形に対応する H3 セル ID を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_Polyfill-function-syntax"></a>

```
H3_Polyfill(geom, resolution)
```

## 引数
<a name="H3_Polyfill-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。*geom* は `POLYGON` である必要があります。

 *resolution*   
データ型 `INTEGER` の値または `INTEGER` 型と評価される式の値。この値は H3 グリッドシステムの解像度を表します。この値は 0〜15 の整数である必要があります。`0` が最も粗く、`15` が最も細かいです。

## 戻り型
<a name="H3_Polyfill-function-return"></a>

`SUPER` — H3 セル ID のリストを表します。

*geom* が `POLYGON` でない場合、エラーが返されます。

*resolution* が範囲外の場合、エラーが返されます。

*geom* が空の場合、NULL が返されます。

## 例
<a name="H3_Polyfill-function-examples"></a>

次の SQL は、ポリゴンと解像度 `4` から H3 セル ID の SUPER データ型の配列を返します。

```
SELECT H3_Polyfill(ST_GeomFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'), 4);
```

```
 h3_polyfill
----------------------------------------------------------------------------------------------------------------------------------------------------------
 [596538848238895103,596538805289222143,596538856828829695,596538813879156735,596537920525959167,596538685030137855,596538693620072447,596538839648960511]
```

# H3\$1Resolution
<a name="H3_Resolution-function"></a>

H3\$1Resolution は、入力インデックスから H3 セル ID の解像度を返します。解像度は 0 (最も粗い) から 15 (最も精細) までの整数です。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_Resolution-function-syntax"></a>

```
H3_Resolution(index)
```

## 引数
<a name="H3_Resolution-function-arguments"></a>

 * インデックス*   
H3 セルのインデックスを表すデータ型 `BIGINT` または `VARCHAR` の値、またはこれらのデータ型のいずれかに評価される式。

## 戻り型
<a name="H3_Resolution-function-return"></a>

`INTEGER` – 入力 H3 セル ID の解像度を表します。

*index* が NULL の場合、NULL が返されます。

*index* が有効でない場合、エラーが返されます。

## 例
<a name="H3_Resolution-function-examples"></a>

次の SQL は、H3 セルのインデックスを表す VARCHAR を入力し、入力 H3 セルの解像度を表す INTEGER を返します。

```
SELECT H3_Resolution('8025fffffffffff');
```

```
 h3_resolution
---------------
 0
```

次の SQL は、H3 セルのインデックスを表す BIGINT を入力し、入力 H3 セルの解像度を表す INTEGER を返します。

```
SELECT H3_Resolution(614553222213795839);
```

```
 h3_resolution
---------------
 8
```

# H3\$1ToChildren
<a name="H3_ToChildren-function"></a>

H3\$1ToChildren は、特定の H3 インデックスの指定された解像度で子 H3 セル ID のリストを返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_ToChildren-function-syntax"></a>

```
H3_ToChildren(index, resolution)
```

## 引数
<a name="H3_ToChildren-function-arguments"></a>

 * インデックス*   
H3 セルのインデックスを表すデータ型 `BIGINT` または `VARCHAR` の値、またはこれらのデータ型のいずれかに評価される式。

 *resolution*   
データ型 `INTEGER` の値または `INTEGER` 型と評価される式の値。値は、子セル ID の解像度を表します。値は、入力された*インデックス*の解像度から 15 までの整数である必要があります。

## 戻り型
<a name="H3_ToChildren-function-return"></a>

`SUPER` — H3 セル ID のリストを表します。

*インデックス*または*解像度*が NULL の場合、NULL が返されます。

*index* が有効でない場合、エラーが返されます。

*解像度*が*インデックス*の解像度と 15 の間 (両端の数値を含む) にない場合、エラーが返されます。

出力サイズが SUPER の最大サイズ制限を超えると、エラーが返されます。

## 例
<a name="H3_ToChildren-function-examples"></a>

次の SQL は、H3 セルのインデックスを表す VARCHAR と、すべての子の目的の解像度を表す INTEGER を入力し、解像度 6 で子を含む SUPER 配列を返します。

```
SELECT H3_ToChildren('85283473fffffff', 6);
```

```
 h3_tochildren                                                
--------------------------------------------------------------------------------------------------------------------------------------
 [604189641121202175,604189641255419903,604189641389637631,604189641523855359,604189641658073087,604189641792290815,604189641926508543]
```

次の SQL は、H3 セルのインデックスを表す BIGINT と、すべての子の望ましい解像度を表す INTEGER を入力し、解像度 6 で子を含む SUPER 配列を返します。

```
SELECT H3_ToChildren(599686042433355775, 6);
```

```
 h3_tochildren                                              
--------------------------------------------------------------------------------------------------------------------------------------
 [604189641121202175,604189641255419903,604189641389637631,604189641523855359,604189641658073087,604189641792290815,604189641926508543]
```

注: *解像度*と*インデックス*解像度の差は 7 以下であれば安全です。

次の例は、SUPER サイズ制限を超えるクエリの回避策を示しています。入力 H3 インデックスと目的の子解像度の解像度の差が大きすぎる (7 より大きい) 場合。この手順では、小さなステップ (一度に最大 5 つの解像度レベル) で子を段階的に拡張し、最終的な結果をユーザーが作成したテーブルに保存することで問題を解決します。

```
CREATE OR REPLACE PROCEDURE generate_h3_children()
LANGUAGE plpgsql
AS $$
BEGIN
    -- Drop and create h3_children table that will contain the results
    DROP TABLE IF EXISTS h3_children;
    CREATE TABLE h3_children (
        h3_index BIGINT,
        child_res INTEGER,
        children SUPER
    );

    -- Create temporary table for steps
    DROP TABLE IF EXISTS h3_steps;
    CREATE TABLE h3_steps (
        h3_index BIGINT,
        current_res INTEGER,
        target_res INTEGER,
        h3_array SUPER
    );

    -- Initial insert into h3_steps
    INSERT INTO h3_steps
    SELECT h3_index, H3_Resolution(h3_index), child_res, ARRAY(h3_index)
    FROM h3_indexes; -- Insert from your table with h3_index and child_res as columns

    -- Loop until we reach target resolution
    -- We expect at most 3 iterations considering that we can start at resolution
    -- 0 and target/child resolution equal to 15 (0 -> 5 -> 10 -> 15)
    WHILE EXISTS (
        SELECT 1
        FROM h3_steps h
        GROUP BY h3_index, target_res
        HAVING MAX(current_res) < target_res
    ) LOOP
        -- Populate the h3_steps table with the tables that need to
        -- reach closer to the target res
        INSERT INTO h3_steps
        SELECT
            h.h3_index,
            LEAST(h.current_res + 5, h.target_res), -- Do not exceed target res
            h.target_res,
            -- Take the children of the child cell at resolution current_res of the
            -- h3_index
            H3_ToChildren(c.child::BIGINT, LEAST(h.current_res + 5, h.target_res))
        FROM h3_steps h, UNNEST(h.h3_array) AS c(child)
        WHERE h.current_res < h.target_res
        AND h.current_res = (SELECT MAX(current_res)
                           FROM h3_steps
                           WHERE h3_index = h.h3_index
        );
    END LOOP;

    -- Store final results
    INSERT INTO h3_children
    SELECT h3_index AS h3_index, target_res AS child_res, h3_array AS children
    FROM h3_steps
    WHERE current_res = target_res;
END;
$$;

-- Create the source table for H3_ToChildren queries
CREATE TABLE h3_indexes (
    h3_index BIGINT,
    child_res INTEGER,
    PRIMARY KEY (h3_index, child_res)
);
INSERT INTO h3_indexes (h3_index, child_res)
VALUES (x'8001fffffffffff'::BIGINT, 11);

-- Execute the procedure
CALL generate_h3_children();

-- View results
SELECT * FROM h3_children;
```

# H3\$1ToParent
<a name="H3_ToParent-function"></a>

H3\$1ToParent は、特定の H3 インデックスの指定された親解像度で親 H3 セル ID を返します。H3 インデックスの詳細については、「[H3](spatial-terminology.md#spatial-terminology-h3)」を参照してください。

## 構文
<a name="H3_ToParent-function-syntax"></a>

```
H3_ToParent(index, resolution)
```

## 引数
<a name="H3_ToParent-function-arguments"></a>

 * インデックス*   
H3 セルのインデックスを表すデータ型 `BIGINT` または `VARCHAR` の値、またはこれらのデータ型のいずれかに評価される式。

 *resolution*   
データ型 `INTEGER` の値または `INTEGER` 型と評価される式の値。この値は親セル ID の解像度を表します。値は 0 から*インデックス*の解像度まで (両端の数値を含む) である必要があります。

## 戻り型
<a name="H3_ToParent-function-return"></a>

`BIGINT` — 親の H3 セル ID を表します。

*インデックス*または*解像度*が NULL の場合、NULL が返されます。

*index* が有効でない場合、エラーが返されます。

*解像度*が 0 未満または*インデックス*の解像度より大きい場合、エラーが返されます。

## 例
<a name="H3_ToParent-function-examples"></a>

次の SQL は、H3 セルのインデックスを表す VARCHAR と、特定の親の目的の解像度を表す INTEGER を入力し、入力 H3 セルの解像度 0 で親を表す BIGINT を返します。

```
SELECT H3_ToParent('85283473fffffff', 0);
```

```
 h3_toparent
--------------------
 577199624117288959
```

次の SQL は、H3 セルのインデックスを表す BIGINT と、特定の親の目的の解像度を表す INTEGER を入力し、入力 H3 セルの解像度 0 で親を表す BIGINT を返します。

```
SELECT H3_ToParent(646078419604526808, 8);
```

```
 h3_toparent
--------------------
 614553222213795839
```

# ST\$1AddPoint
<a name="ST_AddPoint-function"></a>

ST\$1AddPoint は、入力ジオメトリと同じラインストリングジオメトリにポイントを追加して返します。インデックスが指定されている場合、ポイントはインデックスの位置に追加されます。インデックスが -1 または指定されていない場合、ポイントはラインストリングに付加されます。

このインデックスは 0 から始まります。結果の空間参照系識別子 (SRID) は、入力ジオメトリのものと同じです。

結果のジオメトリのディメンションは、*geom1* 値 のものと同じです。*geom1* と *geom2* でディメンションが異なる場合、*geom2* が *geom1* のディメンションに射影されます。

## 構文
<a name="ST_AddPoint-function-syntax"></a>

```
ST_AddPoint(geom1, geom2)
```

```
ST_AddPoint(geom1, geom2, index)
```

## 引数
<a name="ST_AddPoint-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT` である必要があります。ポイントは空のポイントにすることができます。

 *index*   
0 から始まるインデックスの位置を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_AddPoint-function-return"></a>

`GEOMETRY` 

*geom1*、*geom2*、または *index* が null の場合、null が返されます。

*geom2* が空のポイントの場合、*geom1* のコピーが返されます。

*geom1* が `LINESTRING` でない場合、エラーが返されます。

*geom2* が `POINT` でない場合、エラーが返されます。

*index* が範囲外の場合、エラーが返されます。インデックスの位置の有効な値は、-1 または 0 から `ST_NumPoints(geom1)` の間の値です。

## 例
<a name="ST_AddPoint-function-examples"></a>

次の SQL は、ラインストリングにポイントを追加して、閉じたラインストリングにします。

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_AddPoint(g, ST_StartPoint(g))) FROM tmp;
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5,0 5,0 0)
```

次の SQL は、ラインストリングの特定の位置にポイントを追加します。

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_AddPoint(g, ST_SetSRID(ST_Point(5, 10), 4326), 3)) FROM tmp;
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 10,5 5,0 5)
```

# ST\$1Angle
<a name="ST_Angle-function"></a>

ST\$1Angle は、次のように時計回りに測定されたポイント間の角度をラジアン単位で返します。
+ 3 つのポイントを入力した場合、戻り角度 P1-P2-P3 は、P1 から P3 まで P2 を中心に時計回りに回転して、獲得した角度として測定されます。
+ 4 つのポイントを入力した場合、有向線 P1-P2 と P3-P4 がなす時計回りの角度が返されます。入力が縮退の場合 (つまり、P1 が P2 に等しい、または P3 が P4 に等しい場合)、null が返されます。

戻り値はラジアンで、範囲は [0, 2π) です。

ST\$1Angle は、入力ジオメトリの 2D 射影に対して動作します。

## 構文
<a name="ST_Angle-function-syntax"></a>

```
ST_Angle(geom1, geom2, geom3)
```

```
ST_Angle(geom1, geom2, geom3, geom4)
```

## 引数
<a name="ST_Angle-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT` である必要があります。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT` である必要があります。

 *geom3*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT` である必要があります。

 *geom4*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT` である必要があります。

## 戻り型
<a name="ST_Angle-function-return"></a>

`DOUBLE PRECISION`. 

*geom1* が *geom2* と等しい場合、または *geom2* が *geom3* と等しい場合は、null が返されます。

*geom1*、*geom2*、*geom3*、または *geom4* が null の場合は、null が返されます。

*geom1*、*geom2*、*geom3*、または *geom4* のいずれかが空のポイントである場合は、エラーが返されます。

*geom1*、*geom2*、*geom3*、*geom4* の空間参照系識別子 (SRID) が同じ値ではない場合は、エラーが返されます。

## 例
<a name="ST_Angle-function-examples"></a>

次の SQL は、3 つの入力ポイントの角度に変換された角度を返します。

```
SELECT ST_Angle(ST_Point(1,1), ST_Point(0,0), ST_Point(1,0)) / Pi() * 180.0 AS angle;
```

```
 angle
---------------
    45
```

次の SQL は、4 つの入力ポイントの角度に変換された角度を返します。

```
SELECT ST_Angle(ST_Point(1,1), ST_Point(0,0), ST_Point(1,0), ST_Point(2,0)) / Pi() * 180.0 AS angle;
```

```
 angle
---------------
   225
```

# ST\$1Area
<a name="ST_Area-function"></a>

ST\$1Area は、入力ジオメトリの 2D 射影におけるデカルト座標系での面積を返します。面積の単位は、入力ジオメトリの座標を表す単位と同じです。ポイント、ラインストリング、マルチポイント、マルチラインストリングの場合、この関数は 0 を返します。ジオメトリコレクションの場合は、コレクションのジオメトリの合計の面積を返します。

入力がジオグラフィの場合、ST\$1Area では、SRID で決定される回転楕円体上で計算され与えられた面積ジオグラフィについて、その 2D 射影に関する測地座標系での面積を返します。面積の単位は平方メートルです。この関数は、ポイント、マルチポイント、および線形ジオグラフィに対して 0 を返します。入力がジオメトリコレクションの場合、この関数は、コレクション内の面積ジオグラフィの面積を合計して返します。

## 構文
<a name="ST_Area-function-syntax"></a>

```
ST_Area(geo)
```

## 引数
<a name="ST_Area-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

## 戻り型
<a name="ST_Area-function-return"></a>

`DOUBLE PRECISION`

*geo* が null の場合、null が返されます。

## 例
<a name="ST_Area-function-examples"></a>

次のSQLは、マルチポリゴンのデカルト座標系での面積を返します。

```
SELECT ST_Area(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_area
---------
     100
```

次の SQL は、ポリゴンの面積をジオグラフィで返します。

```
SELECT ST_Area(ST_GeogFromText('polygon((34 35, 28 30, 25 34, 34 35))'));
```

```
     st_area
------------------
 201824655743.383
```

次の SQL は、線形ジオグラフィに対して 0 を返します。

```
SELECT ST_Area(ST_GeogFromText('multipoint(0 0, 1 1, -21.32 121.2)'));
```

```
 st_area
---------
       0
```

# ST\$1AsBinary
<a name="ST_AsBinary-function"></a>

ST\$1AsBinary は、入力ジオメトリの 16 進数の well-known binary (WKB) 式を返します。3DZ、3DM、および 4D ジオメトリの場合、ST\$1AsBinary はジオメトリタイプとして、Open Geospatial Consortium (OGC) の標準値を使用します。

## 構文
<a name="ST_AsBinary-function-syntax"></a>

```
ST_AsBinary(geom)
```

## 引数
<a name="ST_AsBinary-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_AsBinary-function-return"></a>

`VARBYTE`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_AsBinary-function-examples"></a>

次の SQL は、ポリゴンの 16 進数の WKB 表現を返します。

```
SELECT ST_AsBinary(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_asbinary
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1AsEWKB
<a name="ST_AsEWKB-function"></a>

ST\$1AsEWKB は、入力ジオメトリの Extended Well-Known Binary (EWKB) 表現を返します。3DZ、3DM、および 4D ジオメトリの場合、ST\$1AsEWKB はジオメトリタイプとして、Open Geospatial Consortium (OGC) の標準値を使用します。

## 構文
<a name="ST_AsEWKB-function-syntax"></a>

```
ST_AsEWKB(geom)
```

## 引数
<a name="ST_AsEWKB-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_AsEWKB-function-return"></a>

`VARBYTE`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_AsEWKB-function-examples"></a>

次の SQL は、ポリゴンの 16 進数の EWKB 表現を返します。

```
SELECT ST_AsEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_asewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1AsEWKT
<a name="ST_AsEWKT-function"></a>

ST\$1AsEWKT は、入力されたジオメトリもしくはジオグラフィの、EWKT (Extended Well-Known Text) 表現を返します。ジオメトリが 3DZ、3DM、および 4D の場合、ST\$1AsEWKT は、ジオメトリタイプの WKT 値に Z、M、または ZM を追加します。

## 構文
<a name="ST_AsEWKT-function-syntax"></a>

```
ST_AsEWKT(geo)
```

```
ST_AsEWKT(geo, precision)
```

## 引数
<a name="ST_AsEWKT-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

 *precision*   
データ型 の 値`INTEGER` ジオメトリについての *geo* の座標は、1～20 で指定された精度を使用して表示されます。*precision* が指定されていない場合は、デフォルトは 15 です。ジオブラフィの場合、*geo* の座標は指定された精度を使用して表示されます。*precision* が指定されていない場合は、デフォルトは 15 です。

## 戻り型
<a name="ST_AsEWKT-function-return"></a>

`VARCHAR`

*geo* が null の場合、null が返されます。

*precision* が null の場合、null が返されます。

結果が 64-KB `VARCHAR` よりも大きい場合、エラーが返されます。

## 例
<a name="ST_AsEWKT-function-examples"></a>

次の SQL は、LINESTRING の EWKT 表現を返します。

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326));
```

```
st_asewkt
--------------------------------
 SRID=4326;LINESTRING(3.14159265358979 -6.28318530717959,2.71828182845905 -1.41421356237309)
```

次の SQL は、LINESTRING の EWKT 表現を返します。ジオメトリの座標は 6 桁の精度で表示されます。

```
SELECT ST_AsEWKT(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326), 6);
```

```
st_asewkt
--------------------------------
 SRID=4326;LINESTRING(3.14159 -6.28319,2.71828 -1.41421)
```

次の SQL は、ジオブラフィの EWKT 表現を返します。

```
SELECT ST_AsEWKT(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
                  st_asewkt
----------------------------------------------
 SRID=4326;LINESTRING(110 40,2 3,-10 80,-7 9)
```

# ST\$1AsGeoJSON
<a name="ST_AsGeoJSON-function"></a>

ST\$1AsGeoJSON は、入力されたジオメトリもしくはジオグラフィの、GeoJSON 表現を返します。GeoJSON に関する詳細は、ウィキペディアの [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) を参照してください。

3DZ および 4D ジオメトリの場合、出力ジオメトリは、入力の 3DZ または 4D ジオメトリの 3DZ 射影となります。すなわち、出力には `x`、`y`、および `z` 座標が含まれます。3DM ジオメトリの場合、出力ジオメトリは入力 3DM ジオメトリの 2D 射影となります。つまり、出力は `x` および `y` 座標のみを含みます。

ST\$1AsGeoJSON は、入力ジオグラフィの GeoJSON 表現を返します。このジオグラフィの座標は、指定された精度を使用して表示されます。

## 構文
<a name="ST_AsGeoJSON-function-syntax"></a>

```
ST_AsGeoJSON(geo)
```

```
ST_AsGeoJSON(geo, precision)
```

## 引数
<a name="ST_AsGeoJSON-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

 *precision*   
データ型 の 値`INTEGER` ジオメトリについての *geo* の座標は、1～20 で指定された精度を使用して表示されます。*precision* が指定されていない場合は、デフォルトは 15 です。ジオブラフィの場合、*geo* の座標は指定された精度を使用して表示されます。*precision* が指定されていない場合は、デフォルトは 15 です。

## 戻り型
<a name="ST_AsGeoJSON-function-return"></a>

`VARCHAR`

*geo* が null の場合、null が返されます。

*precision* が null の場合、null が返されます。

結果が 64-KB `VARCHAR` よりも大きい場合、エラーが返されます。

## 例
<a name="ST_AsGeoJSON-function-examples"></a>

次の SQL は、LINESTRING の GeoJSON 表現を返します。

```
SELECT ST_AsGeoJSON(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)'));
```

```
st_asgeojson
----------------------------------------------------------------------------------------------------------------
 {"type":"LineString","coordinates":[[3.14159265358979,-6.28318530717959],[2.71828182845905,-1.41421356237309]]}
```

次の SQL は、LINESTRING の GeoJSON 表現を返します。ジオメトリの座標は 6 桁の精度で表示されます。

```
SELECT ST_AsGeoJSON(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)'), 6);
```

```
st_asgeojson
-----------------------------------------------------------------------------
  {"type":"LineString","coordinates":[[3.14159,-6.28319],[2.71828,-1.41421]]}
```

次の SQL は、ジオグラフィの GeoJSON 表現を返します。

```
SELECT ST_AsGeoJSON(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
                             st_asgeojson
----------------------------------------------------------------------
 {"type":"LineString","coordinates":[[110,40],[2,3],[-10,80],[-7,9]]}
```

# ST\$1AsHexWKB
<a name="ST_AsHexWKB-function"></a>

ST\$1AsHexWKB は、ASCII 文字 (0～9、A～F) で記述した 16 進数を使用して、入力ジオメトリもしくは入力ジオグラフィの 16 進数による WKB (Well-known binary) 表現を返します。ジオメトリもしくはジオグラフィが 3DZ、3DM、および 4D の場合、ST\$1AsHexWKB は対象のジオメトリもしくはジオグラフィのタイプとして、Open Geospatial Consortium (OGC) 標準による値を使用します。

## 構文
<a name="ST_AsHexWKB-function-syntax"></a>

```
ST_AsHexWKB(geo)
```

## 引数
<a name="ST_AsHexWKB-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

## 戻り型
<a name="ST_AsHexWKB-function-return"></a>

`VARCHAR`

*geo* が null の場合、null が返されます。

結果が 64-KB `VARCHAR` よりも大きい場合、エラーが返されます。

## 例
<a name="ST_AsHexWKB-function-examples"></a>

次の SQL は、ジオメトリ内ポリゴンの 16 進数 WKB 表現を返します。

```
SELECT ST_AsHexWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_ashexwkb
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

次の SQL は、ジオグラフィ内ポリゴンの 16 進数 WKB 表現を返します。

```
SELECT ST_AsHexWKB(ST_GeogFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

```
st_ashexwkb
--------------------------------
01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1AsHexEWKB
<a name="ST_AsHexEWKB-function"></a>

ST\$1AsHexEWKB は、ASCII 文字 (0～9、A～F) で記述された 16 進数を使用して、入力ジオメトリもしくは入力ジオグラフィの EWKB (extended well-known binary) 表現を返します。ジオメトリあるいはジオグラフィが 3DZ、3DM、および 4D の場合、ST\$1AsHexEWKB は、そのジオメトリもしくはジオグラフィのタイプに PostGIS 拡張 WKB 値を使用します。

## 構文
<a name="ST_AsHexEWKB-function-syntax"></a>

```
ST_AsHexEWKB(geo)
```

## 引数
<a name="ST_AsHexEWKB-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

## 戻り型
<a name="ST_AsHexEWKB-function-return"></a>

`VARCHAR`

*geo* が null の場合、null が返されます。

結果が 64-KB `VARCHAR` よりも大きい場合、エラーが返されます。

## 例
<a name="ST_AsHexEWKB-function-examples"></a>

次の SQL は、ジオメトリ内ポリゴンの 16 進数 EWKB 表現を返します。

```
SELECT ST_AsHexEWKB(ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326));
```

```
st_ashexewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

次の SQL は、ジオグラフィ内ポリゴンの 16 進数 EWKB 表現を返します。

```
SELECT ST_AsHexEWKB(ST_GeogFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))'));
```

```
st_ashexewkb
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1AsText
<a name="ST_AsText-function"></a>

ST\$1AsText は、入力されたジオメトリもしくはジオグラフィの WKT (Well-Known Text) 表現を返します。ジオメトリもしくはジオグラフィが 3DZ、3DM、および 4D の場合、ST\$1AsEWKT は、そのジオメトリもしくはジオグラフィのタイプを表す WKT 値に、Z、M、または ZM を追加します。

## 構文
<a name="ST_AsText-function-syntax"></a>

```
ST_AsText(geo)
```

```
ST_AsText(geo, precision)
```

## 引数
<a name="ST_AsText-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

 *precision*   
データ型 の 値`INTEGER` ジオメトリについての *geo* の座標は、1～20 で指定された精度を使用して表示されます。*precision* が指定されていない場合は、デフォルトは 15 です。ジオグラフィの場合、*geom* の座標は指定された精度を使用して表示されます。*precision* が指定されていない場合は、デフォルトは 15 です。

## 戻り型
<a name="ST_AsText-function-return"></a>

`VARCHAR`

*geo* が null の場合、null が返されます。

*precision* が null の場合、null が返されます。

結果が 64-KB `VARCHAR` よりも大きい場合、エラーが返されます。

## 例
<a name="ST_AsText-function-examples"></a>

次の SQL は、LINESTRING の WKT 表現を返します。

```
SELECT ST_AsText(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326));
```

```
st_astext
--------------------------------
LINESTRING(3.14159265358979 -6.28318530717959,2.71828182845905 -1.41421356237309)
```

次の SQL は、LINESTRING の WKT 表現を返します。ジオメトリの座標は 6 桁の精度で表示されます。

```
SELECT ST_AsText(ST_GeomFromText('LINESTRING(3.141592653589793 -6.283185307179586,2.718281828459045 -1.414213562373095)', 4326), 6);
```

```
st_astext
----------------------------------------------
 LINESTRING(3.14159 -6.28319,2.71828 -1.41421)
```

次の SQL は、ジオグラフィの WKT 表現を返します。

```
SELECT ST_AsText(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
             st_astext
------------------------------------
 LINESTRING(110 40,2 3,-10 80,-7 9)
```

# ST\$1Azimuth
<a name="ST_Azimuth-function"></a>

ST\$1Azimuth は、2 つの入力ポイントの 2D 射影を使用して、北を基準としたデカルト方位角を返します。

## 構文
<a name="ST_Azimuth-function-syntax"></a>

```
ST_Azimuth(point1, point2)
```

## 引数
<a name="ST_Azimuth-function-arguments"></a>

 *point1*   
データ型 `POINT` の `GEOMETRY` 値。*point1* の空間リファレンスシステム識別子 (SRID) は *point2* の SRID と一致する必要があります。

 *point2*   
データ型 `POINT` の `GEOMETRY` 値。*point2* の SRID は、*point1* の SRID と一致する必要があります。

## 戻り型
<a name="ST_Azimuth-function-return"></a>

`DOUBLE PRECISION` データ型のラジアンの角度である数字。値の範囲は 0 (包括的) から 2 pi (排他的) です。

*point1* または *point2* が空のポイントの場合は、エラーが返されます。

*point1* または *point2* のいずれかが null の場合、null が返されます。

*point1* および *point2* が等しい場合、null が返されます。

*point1* または *point2* がポイントでない場合、エラーが返されます。

*geom1* および *geom2* に空間リファレンスシステム識別子 (SRID) の値がない場合、エラーが返されます。

## 例
<a name="ST_Azimuth-function-examples"></a>

次の SQL は、入力ポイントの方位角を返します。

```
SELECT ST_Azimuth(ST_Point(1,2), ST_Point(5,6));
```

```
st_azimuth
-------------------
 0.7853981633974483
```

# ST\$1Boundary
<a name="ST_Boundary-function"></a>

ST\$1Boundary は、次のように入力ジオメトリの境界を返します。
+ 入力ジオメトリが空の場合 (つまり、ポイントが含まれていない場合)、そのまま返されます。
+ 入力ジオメトリがポイントまたは空ではないマルチポイントの場合、空のジオメトリコレクションが返されます。
+ 入力がライン文字列またはマルチライン文字列の場合、境界上のすべてのポイントを含むマルチポイントが返されます。マルチポイントが空である可能性があります)。
+ 入力が内部リングのないポリゴンである場合、その境界を表す閉じたライン文字列が返されます。
+ 入力が内部リングのあるポリゴンであるか、マルチポリゴンである場合、マルチライン文字列が返されます。マルチライン文字列には、面積ジオメトリ内のすべてのリングのすべての境界が閉じたライン文字列として含まれます。

ポイントの等価性を判断するために、ST\$1Boundary は入力ジオメトリの 2D 射影に対して作用します。入力ジオメトリが空の場合、入力のコピーが同じディメンションで返されます。空でない 3DM および 4D ジオメトリの場合、`m` 座標はドロップされます。3DZ および 4D マルチライン文字列の特殊なケースでは、マルチラインストリングの境界ポイントにおける `z` 座標は、同じ 2D 射影法を使用するライン文字列の境界ポイントにおける、個別の Z 値の平均として計算されます。

## 構文
<a name="ST_Boundary-function-syntax"></a>

```
ST_Boundary(geom)
```

## 引数
<a name="ST_Boundary-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Boundary-function-return"></a>

`GEOMETRY`

*geom* が null の場合、null が返されます。

*geom* が `GEOMETRYCOLLECTION` である場合、エラーが返されます。

## 例
<a name="ST_Boundary-function-examples"></a>

次の SQL は、入力ポリゴンの境界をマルチライン文字列として返します。

```
SELECT ST_AsEWKT(ST_Boundary(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1))')));
```

```
st_asewkt
--------------------
 MULTILINESTRING((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1))
```

# ST\$1Buffer
<a name="ST_Buffer-function"></a>

ST\$1Buffer は、xy-デカルト平面に投影された入力ジオメトリからの距離が入力距離以下であるすべてのポイントを表す 2D ジオメトリを返します。

## 構文
<a name="ST_Buffer-function-syntax"></a>

```
ST_Buffer(geom, distance)
```

```
ST_Buffer(geom, distance, number_of_segments_per_quarter_circle)
```

## 引数
<a name="ST_Buffer-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *distance*   
バッファの距離 (半径) を表すデータ型 `DOUBLE PRECISION` の値。

 *number\$1of\$1segments\$1per\$1quarter\$1circle*   
データ型 `INTEGER` の値。この値は、入力ジオメトリの各頂点の周りの四分円を近似するためのポイントの数を決定します。負の値はデフォルトでゼロになります。デフォルトは 8 です。

## 戻り型
<a name="ST_Buffer-function-return"></a>

`GEOMETRY`

ST\$1Buffer 関数は、xy-デカルト平面内の 2 次元 (2D) ジオメトリを返します。

*geom* が `GEOMETRYCOLLECTION` である場合、エラーが返されます。

## 例
<a name="ST_Buffer-function-examples"></a>

以下の SQL は、入力ラインストリングのバッファを返します。

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('LINESTRING(1 2,5 2,5 8)'), 2));
```

```
               st_asewkt  
POLYGON((-1 2,-0.96157056080646 2.39018064403226,-0.847759065022573 2.76536686473018,-0.662939224605089 3.11114046603921,-0.414213562373093 3.4142135623731,-0.111140466039201 3.66293922460509,0.234633135269824 3.84775906502257,0.609819355967748 3.96157056080646,1 4,3 4,3 8,3.03842943919354 8.39018064403226,3.15224093497743 8.76536686473018,3.33706077539491 9.11114046603921,3.58578643762691 9.4142135623731,3.8888595339608 9.66293922460509,4.23463313526982 9.84775906502257,4.60981935596775 9.96157056080646,5 10,5.39018064403226 9.96157056080646,5.76536686473018 9.84775906502257,6.11114046603921 9.66293922460509,6.4142135623731 9.41421356237309,6.66293922460509 9.1111404660392,6.84775906502258 8.76536686473017,6.96157056080646 8.39018064403225,7 8,7 2,6.96157056080646 1.60981935596774,6.84775906502257 1.23463313526982,6.66293922460509 0.888859533960796,6.41421356237309 0.585786437626905,6.1111404660392 0.33706077539491,5.76536686473018 0.152240934977427,5.39018064403226 0.0384294391935391,5 0,1 0,0.609819355967744 0.0384294391935391,0.234633135269821 0.152240934977427,-0.111140466039204 0.337060775394909,-0.414213562373095 0.585786437626905,-0.662939224605091 0.888859533960796,-0.847759065022574 1.23463313526982,-0.961570560806461 1.60981935596774,-1 2))
```

以下の SQL は、円を近似する入力ポイントジオメトリのバッファを返します。このコマンドは四分円あたりのセグメント数を指定しないため、関数はデフォルト値の 8 セグメントを使用して四分円を近似します。

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('POINT(3 4)'), 2));
```

```
               st_asewkt
POLYGON((1 4,1.03842943919354 4.39018064403226,1.15224093497743 4.76536686473018,1.33706077539491 5.11114046603921,1.58578643762691 5.4142135623731,1.8888595339608 5.66293922460509,2.23463313526982 5.84775906502257,2.60981935596775 5.96157056080646,3 6,3.39018064403226 5.96157056080646,3.76536686473019 5.84775906502257,4.11114046603921 5.66293922460509,4.4142135623731 5.41421356237309,4.66293922460509 5.1111404660392,4.84775906502258 4.76536686473017,4.96157056080646 4.39018064403225,5 4,4.96157056080646 3.60981935596774,4.84775906502257 3.23463313526982,4.66293922460509 2.8888595339608,4.41421356237309 2.58578643762691,4.1111404660392 2.33706077539491,3.76536686473018 2.15224093497743,3.39018064403226 2.03842943919354,3 2,2.60981935596774 2.03842943919354,2.23463313526982 2.15224093497743,1.8888595339608 2.33706077539491,1.58578643762691 2.58578643762691,1.33706077539491 2.8888595339608,1.15224093497743 3.23463313526982,1.03842943919354 3.60981935596774,1 4))
```

以下の SQL は、円を近似する入力ポイントジオメトリのバッファを返します。このコマンドは四分円あたりのセグメント数として 3 を指定するため、関数は 3 つのセグメントを使用して四分円を近似します。

```
SELECT ST_AsEwkt(ST_Buffer(ST_GeomFromText('POINT(3 4)'), 2, 3));
```

```
               st_asewkt
POLYGON((1 4,1.26794919243112 5,2 5.73205080756888,3 6,4 5.73205080756888,4.73205080756888 5,5 4,4.73205080756888 3,4 2.26794919243112,3 2,2 2.26794919243112,1.26794919243112 3,1 4))
```

# ST\$1Centroid
<a name="ST_Centroid-function"></a>

ST\$1CentroID は、ジオメトリの重心を表すポイントを次のように返します。
+ `POINT` ジオメトリの場合、ジオメトリ内にあるポイントの座標の平均を座標とするポイントを返します。
+ `LINESTRING` ジオメトリの場合、ジオメトリのセグメントの中間点の加重平均を座標とするポイントを返します。この際、加重はジオメトリのセグメントの長さとなります。
+ `POLYGON` ジオメトリの場合、面積ジオメトリの三角形分割における重心の加重平均を座標とするポイントを返します。ここで加重は、三角形分割を構成する三角形の面積が使用されます。
+ ジオメトリコレクションの場合、ジオメトリコレクション内の最大トポロジディメンションの、ジオメトリにおける重心の加重平均を返します。

## 構文
<a name="ST_Centroid-function-syntax"></a>

```
ST_Centroid(geom)
```

## 引数
<a name="ST_Centroid-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Centroid-function-return"></a>

`GEOMETRY` 

*geom* が null の場合、null が返されます。

*geom* が空の場合、null が返されます。

## 例
<a name="ST_Centroid-function-examples"></a>

次の SQL は、入力ラインストリングの中心点を返します。

```
SELECT ST_AsEWKT(ST_Centroid(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9, -22 -33)', 4326)))
```

```
                     st_asewkt
----------------------------------------------------
 SRID=4326;POINT(15.6965103455214 27.0206782881905)
```

# ST\$1Collect
<a name="ST_Collect-function"></a>

ST\$1Collect には 2 つの変形があります。1 つは 2 つのジオメトリを受け入れ、もう 1 つは集約式を受け入れます。

ST\$1Collect の 1 番目の変形は、入力ジオメトリからジオメトリを作成します。入力ジオメトリの順序は保持されます。このバリアントは次のように動作します。
+ 両方の入力ジオメトリがポイントの場合、2 つのポイントを持つ `MULTIPOINT` が返されます。
+ 両方の入力ジオメトリがライン文字列である場合、2 つのライン文字列を持つ `MULTILINESTRING` が返されます。
+ 両方の入力ジオメトリがポリゴンの場合、2 つのポリゴンを持つ `MULTIPOLYGON` が返されます。
+ それ以外の場合は、2 つの入力ジオメトリを持つ `GEOMETRYCOLLECTION` が返されます。

ST\$1Collect の 2 番目の変形は、ジオメトリ列のジオメトリからジオメトリを作成します。ジオメトリの戻り順序が決定されていません。WITHIN GROUP (ORDER BY...) 句を指定して、返されるジオメトリの順序を指定します。このバリアントは次のように動作します。
+ 入力集計式の NULL 以外の行がすべてポイントである場合、集計式のすべてのポイントを含むマルチポイントが返されます。
+ 集約式の NULL 以外の行がすべてライン文字列の場合、集約式内のすべてのライン文字列を含むマルチライン文字列が返されます。
+ 集約式内の NULL 以外の行がすべてポリゴンの場合、その結果は、集約式内のすべてのポリゴンを含むマルチポリゴンが返されます。
+ それ以外の場合は、集計式のすべてのジオメトリを含む `GEOMETRYCOLLECTION` が返されます。

ST\$1Collect は、入力ジオメトリと同じディメンションのジオメトリを返します。入力ジオメトリはすべて、同じディメンションにする必要があります。

## 構文
<a name="ST_Collect-function-syntax"></a>

```
ST_Collect(geom1, geom2)
```

```
ST_Collect(aggregate_expression)  [WITHIN GROUP (ORDER BY sort_expression1 [ASC | DESC] [, sort_expression2 [ASC | DESC] ...])]
```

## 引数
<a name="ST_Collect-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *aggregate\$1expression*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の列。

 [WITHIN GROUP (ORDER BY *sort\$1expression1* [ASC \$1 DESC] [, *sort\$1expression2* [ASC \$1 DESC] ...])]   
オプションの集計値のソート順を指定する句。ORDER BY 句には、ソート式のリストが含まれています。ソート式は、列名など、クエリ選択リストの有効なソート式に似た式です。昇順 (`ASC`) または降順 (`DESC`) の順を指定できます。デフォルトは `ASC` です。

## 戻り型
<a name="ST_Collect-function-return"></a>

サブタイプ `MULTIPOINT`、`MULTILINESTRING`、`MULTIPOLYGON`、または `GEOMETRYCOLLECTION` の `GEOMETRY`。

返されたジオメトリの空間リファレンス識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom1* または *geom2* が両方とも null の場合、null が返されます。

*aggregate\$1expression* のすべての行が null の場合、null が返されます。

*geom1* が null の場合、*geom2* のコピーが返されます。同様に、*geom2* が null の場合、*geom1* のコピーが返されます。

*geom1* および *geom2* の SRID 値が異なる場合、エラーが返されます。

*aggregate\$1expression* の 2 つのジオメトリの SRID 値が異なる場合、エラーが返されます。

返されるジオメトリが `GEOMETRY` の最大サイズよりも大きい場合、エラーが返されます。

*geom1* と *geom2* が異なるディメンションの場合は、エラーが返されます。

*aggregate\$1expression* 内の 2 つのジオメトリの ディメンションが異なる場合、エラーが返されます。

## 例
<a name="ST_Collect-function-examples"></a>

次の SQL は、2 つの入力ジオメトリを含むジオメトリコレクションを返します。

```
SELECT ST_AsText(ST_Collect(ST_GeomFromText('LINESTRING(0 0,1 1)'), ST_GeomFromText('POLYGON((10 10,20 10,10 20,10 10))')));
```

```
st_astext
-----------
 GEOMETRYCOLLECTION(LINESTRING(0 0,1 1),POLYGON((10 10,20 10,10 20,10 10)))
```

次の SQL は、テーブルからジオメトリコレクションにすべてのジオメトリを収集します。

```
WITH tbl(g) AS (SELECT ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT NULL::geometry UNION ALL
SELECT ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326))
SELECT ST_AsEWKT(ST_Collect(g)) FROM tbl;
```

```
st_astext
-----------
 SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),LINESTRING(0 0,10 0),MULTIPOINT((13 4),(8 5),(4 4)),POLYGON((0 0,10 0,0 10,0 0)))
```

次の SQL は、id 列でグループ化され、この ID で並べ替えられたテーブル内のすべてのジオメトリを収集します。この例では、結果のジオメトリは ID によって次のようにグループ化されます。
+ id 1 – マルチポイント内のポイント。
+ id 2 – マルチライン文字列内のライン文字列。
+ id 3 – ジオメトリコレクションに含まれる混在サブタイプ。
+ id 4 – マルチポリゴンのポリゴン。
+ id 5 – null であり、結果はnull です。

```
WITH tbl(id, g) AS (SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL
SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL
SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry)
SELECT id, ST_AsEWKT(ST_Collect(g)) FROM tbl GROUP BY id ORDER BY id;
```

```
 id |                                                 st_asewkt                                                 
----+-----------------------------------------------------------------------------------------------------------
  1 | SRID=4326;MULTIPOINT((1 2),(4 5))
  2 | SRID=4326;MULTILINESTRING((0 0,10 0),(10 0,20 -5))
  3 | SRID=4326;GEOMETRYCOLLECTION(MULTIPOINT((13 4),(8 5),(4 4)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)))
  4 | SRID=4326;MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((20 20,20 30,30 20,20 20)))
  5 |
```

次の SQL は、ジオメトリコレクションのテーブルからすべてのジオメトリを収集します。結果は `id` の降順で並べられ、次に最小および最大の x 座標に基づいて辞書式の順で並べられます。

```
WITH tbl(id, g) AS (
SELECT 1, ST_GeomFromText('POINT(4 5)', 4326) UNION ALL
SELECT 1, ST_GeomFromText('POINT(1 2)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(10 0,20 -5)', 4326) UNION ALL
SELECT 2, ST_GeomFromText('LINESTRING(0 0,10 0)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTIPOINT(13 4,8 5,4 4)', 4326) UNION ALL
SELECT 3, ST_GeomFromText('MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((20 20,20 30,30 20,20 20))', 4326) UNION ALL
SELECT 4, ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))', 4326) UNION ALL
SELECT 1, NULL::geometry UNION ALL SELECT 2, NULL::geometry UNION ALL
SELECT 5, NULL::geometry UNION ALL SELECT 5, NULL::geometry)
SELECT ST_AsEWKT(ST_Collect(g) WITHIN GROUP (ORDER BY id DESC, ST_XMin(g), ST_XMax(g))) FROM tbl;
```

```
                                                                                                                  st_asewkt                                                                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=4326;GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),POLYGON((20 20,20 30,30 20,20 20)),MULTILINESTRING((-1 -1,-2 -2),(-3 -3,-5 -5)),MULTIPOINT((13 4),(8 5),(4 4)),LINESTRING(0 0,10 0),LINESTRING(10 0,20 -5),POINT(1 2),POINT(4 5)
```

# ST\$1Contains
<a name="ST_Contains-function"></a>

ST\$1Contains は、最初の入力ジオメトリの 2D 投影に、2 番目の入力ジオメトリの 2D 投影が含まれている場合に true を返します。`A` のすべてのポイントが `B` のポイントであり、それらの内部の交差が空ではない場合に、ジオメトリ `B` はジオメトリ `A` を含みます。

ST\$1Contains(`A`、`B`) は ST\$1Within(`B`、`A`) と同等です。

## 構文
<a name="ST_Contains-function-syntax"></a>

```
ST_Contains(geom1, geom2)
```

## 引数
<a name="ST_Contains-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。この値を *geom1* と比較して、*geom1* に含まれているかどうかを判断します。

## 戻り型
<a name="ST_Contains-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Contains-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のポリゴンを含むかどうかを確認します。

```
SELECT ST_Contains(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_contains
-----------
 false
```

# ST\$1ContainsProperly
<a name="ST_ContainsProperly-function"></a>

両方の入力ジオメトリが空ではなく、2 番目のジオメトリにおける 2D 射影のすべてのポイントが、1 番目のジオメトリにおける 2D 射影の内部ポイントである場合、ST\$1ContainsProperly は true を返します。

## 構文
<a name="ST_ContainsProperly-function-syntax"></a>

```
ST_ContainsProperly(geom1, geom2)
```

## 引数
<a name="ST_ContainsProperly-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `GEOMETRYCOLLECTION` にすることはできません。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `GEOMETRYCOLLECTION` にすることはできません。この値を *geom1* と比較して、そのすべてのポイントが *geom1* の内部ポイントであるかどうかを判断します。

## 戻り型
<a name="ST_ContainsProperly-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_ContainsProperly-function-examples"></a>

次の SQL は、ST\$1Contains および ST\$1ContainsProperly の値を返します。ここで、入力ライン文字列は、入力ポリゴンの内部と境界で交差しますが、外部では交差しません。ポリゴンにはライン文字列が含まれていますが、含まれているライン文字列が正しくありません。

```
WITH tmp(g1, g2) 
AS (SELECT ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('LINESTRING(5 5,10 5,10 6,5 5)')) SELECT ST_Contains(g1, g2), ST_ContainsProperly(g1, g2) 
FROM tmp;
```

```
 st_contains | st_containsproperly 
-------------+---------------------
 t           | f
```

# ST\$1ConvexHull
<a name="ST_ConvexHull-function"></a>

ST\$1ConvexHull は、入力ジオメトリに含まれる、空でないポイントの凸包を表すジオメトリを返します。

入力が空の場合は、結果のジオメトリは入力ジオメトリと同じになります。空でないすべての入力に対して、この関数は入力ジオメトリの 2D 射影を処理します。ただし、出力ジオメトリのディメンションは、入力ジオメトリのディメンションによって異なります。具体的には、入力が空でない 3DM または 3D ジオメトリの場合、`m` 座標がドロップされます。つまり、返されるジオメトリのディメンションは、それぞれ 2D または 3DZ となります。入力が空でない 2D または 3DZ ジオメトリの場合、結果のジオメトリのディメンションは同じになります。

## 構文
<a name="ST_ConvexHull-function-syntax"></a>

```
ST_ConvexHull(geom)
```

## 引数
<a name="ST_ConvexHull-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_ConvexHull-function-return"></a>

`GEOMETRY`

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* が null の場合、null が返されます。

返される値は次のとおりです。


| 凸包上のポイント数 | ジオメトリのサブタイプ | 
| --- | --- | 
| 0 | *geom* のコピーが返されます。 | 
| 1 | `POINT` サブタイプが返されます。 | 
| 2 | `LINESTRING` サブタイプが返されます。返されるライン文字列の 2 つのポイントは、辞書式の順序になっています。 | 
| 3 以上 | 内部リングのない `POLYGON` サブタイプが返されます。ポリゴンは時計回りに向けられており、外部リングの最初のポイントは、辞書式順序でリングの最小のポイントです。 | 

## 例
<a name="ST_ConvexHull-function-examples"></a>

次の SQL は、LINESTRING の拡張された well-known text (EWKT) 表現を返します。この場合、返される凸包はポリゴンです。

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('LINESTRING(0 0,1 0,0 1,1 1,0.5 0.5)'))) as output;
```

```
output
-------------
POLYGON((0 0,0 1,1 1,1 0,0 0))
```

次の SQL は、LINESTRING の EWKT 表現を返します。この場合、返される凸包はライン文字列です。

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('LINESTRING(0 0,1 1,0.2 0.2,0.6 0.6,0.5 0.5)'))) as output;
```

```
output
-------------
LINESTRING(0 0,1 1)
```

次の SQL は、マルチポイントの EWKT 表現を返します。この場合、返される凸包はポイントです。

```
SELECT ST_AsEWKT(ST_ConvexHull(ST_GeomFromText('MULTIPOINT(0 0,0 0,0 0)'))) as output;
```

```
output
-------------
POINT(0 0)
```

# ST\$1CoveredBy
<a name="ST_CoveredBy-function"></a>

ST\$1CoveredBy は、最初の入力ジオメトリの 2D 射影が、 2 番目の入力ジオメトリの 2D 射影に包含される場合 true を返します。どちらも空ではなく、`A` のすべてのポイントが `B` のポイントである場合、ジオメトリ `A` はジオメトリ `B` で覆われます。

ST\$1CoveredBy(`A`、`B`) は ST\$1Covers(`B`、`A`) と同等です。

## 構文
<a name="ST_CoveredBy-function-syntax"></a>

```
ST_CoveredBy(geom1, geom2)
```

## 引数
<a name="ST_CoveredBy-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。この値を *geom2* と比較して、*geom2* でカバーされているかどうかを判断します。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_CoveredBy-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_CoveredBy-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のポリゴンで覆われるかどうかを確認します。

```
SELECT ST_CoveredBy(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_coveredby
-----------
 true
```

# ST\$1Covers
<a name="ST_Covers-function"></a>

ST\$1Covers は、最初の入力ジオメトリの 2D 射影が、2 番目の入力ジオメトリの 2D 射影を包含する場合、true を返します。両方が空でなく、`A` のすべてのポイントが `B` のポイントである場合に、ジオメトリ `B` は、ジオメトリ `A` を覆います。

ST\$1Covers(`A`、`B`) は ST\$1CoveredBy(`B`、`A`) と同等です。

## 構文
<a name="ST_Covers-function-syntax"></a>

```
ST_Covers(geom1, geom2)
```

## 引数
<a name="ST_Covers-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。この値を *geom1* と比較して、*geom1* をカバーしているかどうかを判断します。

## 戻り型
<a name="ST_Covers-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Covers-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のポリゴンを覆うかどうかを確認します。

```
SELECT ST_Covers(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_covers
-----------
 false
```

# ST\$1Crosses
<a name="ST_Crosses-function"></a>

ST\$1Crosses は、2 つの入力ジオメトリの 2D 射影が互いに交差する場合に true を返します。

## 構文
<a name="ST_Crosses-function-syntax"></a>

```
ST_Crosses(geom1, geom2)
```

## 引数
<a name="ST_Crosses-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Crosses-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

## 例
<a name="ST_Crosses-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のマルチポイントと交差するかどうかを確認します。この例では、マルチポイントがポリゴンの内部と外部の両方と交差しているため、ST\$1Crosses は true を返します。

```
SELECT ST_Crosses (ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('multipoint(5 5,0 0,-1 -1)'));
```

```
st_crosses              
-------------
 true
```

次の SQL は、最初のポリゴンが 2 番目のマルチポイントと交差するかどうかを確認します。この例では、マルチポイントはポリゴンの内部ではなく外部と交差します。そのため、ST\$1Crosses は false を返します。

```
SELECT ST_Crosses (ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))'), ST_GeomFromText('multipoint(0 0,-1 -1)'));
```

```
st_crosses              
-------------
 false
```

# ST\$1Dimension
<a name="ST_Dimension-function"></a>

ST\$1Dimension は、入力ジオメトリの固有のディメンションを返します。*inherent dimension* は、ジオメトリで定義されているサブタイプのディメンション値です。

ST\$1Dimension は、3DM、3DZ、4D ジオメトリが入力された場合、2D ジオメトリが入力された場合と同じ結果を返します。

## 構文
<a name="ST_Dimension-function-syntax"></a>

```
ST_Dimension(geom)
```

## 引数
<a name="ST_Dimension-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Dimension-function-return"></a>

`INTEGER` は *geom* 固有のディメンションを表します。

*geom* が null の場合、null が返されます。

返される値は次のとおりです。


| 戻り値 | ジオメトリのサブタイプ | 
| --- | --- | 
| 0 | *geom* が `POINT` または `MULTIPOINT` サブタイプの場合に返されます | 
| 1 | *geom* が `LINESTRING` または `MULTILINESTRING` サブタイプの場合に返されます | 
| 2 | *geom* が `POLYGON` または `MULTIPOLYGON` サブタイプの場合に返されます | 
| 0 | *geom* が空の `GEOMETRYCOLLECTION` サブタイプの場合に返されます | 
| コレクションのコンポーネントの最大ディメンション | *geom* が `GEOMETRYCOLLECTION` サブタイプの場合に返されます | 

## 例
<a name="ST_Dimension-function-examples"></a>

次の SQL は、4 ポイントの LINESTRING の WKT (Well-Known Text) 表現を GEOMETRY オブジェクトに変換し、LINESTRING のディメンションを返します。

```
SELECT ST_Dimension(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_dimension
-------------
1
```

# ST\$1Disjoint
<a name="ST_Disjoint-function"></a>

ST\$1Disjoint は、2 つの入力ジオメトリの 2D 射影に共通するポイントがない場合に true を返します。

## 構文
<a name="ST_Disjoint-function-syntax"></a>

```
ST_Disjoint(geom1, geom2)
```

## 引数
<a name="ST_Disjoint-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Disjoint-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Disjoint-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のポリゴンから切り離されているかどうかを確認します。

```
SELECT ST_Disjoint(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'), ST_Point(4, 4));
```

```
st_disjoint               
-----------
 true
```

# ST\$1Distance
<a name="ST_Distance-function"></a>

入力がジオメトリの場合、ST\$1Distance は 2 つのジオメトリの 2D 射影による値の間で、最短のユークリッド距離を返します。

ジオメトリが 3DM、3DZ、4D の場合、ST\$1Distance は、2 つの入力ジオメトリ値の 2D 間のユークリッド距離を返します。

入力ジオグラフィの場合、ST\$1Distance は 2 つの 2D ポイントの測地的距離を返します。距離の単位はメートルです。ポイントと空ポイント以外のジオグラフィの場合、エラーが返されます。

## 構文
<a name="ST_Distance-function-syntax"></a>

```
ST_Distance(geo1, geo2)
```

## 引数
<a name="ST_Distance-function-arguments"></a>

 *geo1*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。*geo1* のデータ型は *geo2* と同じである必要があります。

 *geo2*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。*geo2* のデータ型は *geo1* と同じである必要があります。

## 戻り型
<a name="ST_Distance-function-return"></a>

`DOUBLE PRECISION`入力のジオメトリもしくはジオグラフィと同じ単位の です。

*geo1* または *geo2* が null または空の場合、null が返されます。

*geo1* および *geo2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geo1* または *geo2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Distance-function-examples"></a>

次の SQL は、2 つのポリゴン間の距離を返します。

```
SELECT ST_Distance(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 -3,-2 -1,0 -3,-1 -3))'));
```

```
  st_distance
-----------
1.4142135623731
```

次の SQL は、GEOGRAPHY データ型を使用して、ベルリンのブランデンブルク門と国会議事堂の間の距離 (メートル単位) を返します。

```
SELECT ST_Distance(ST_GeogFromText('POINT(13.37761826722198 52.516411678282445)'), ST_GeogFromText('POINT(13.377950831464005 52.51705102546893)'));
```

```
   st_distance
------------------
 74.64129172609631
```

# ST\$1DistanceSphere
<a name="ST_DistanceSphere-function"></a>

ST\$1DistanceSphere は、球面の 2 つのポイントのジオメトリ間の距離を返します。

## 構文
<a name="ST_DistanceSphere-function-syntax"></a>

```
ST_DistanceSphere(geom1, geom2)
```

```
ST_DistanceSphere(geom1, geom2, radius)
```

## 引数
<a name="ST_DistanceSphere-function-arguments"></a>

 *geom1*   
球面のデータ型 `GEOMETRY` の角度のポイント値。ポイントの最初の座標は経度の値です。ポイントの 2 番目の座標は緯度の値です。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。

 *geom2*   
球面のデータ型 `GEOMETRY` の角度のポイント値。ポイントの最初の座標は経度の値です。ポイントの 2 番目の座標は緯度の値です。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。

 *radius*   
データ型 `DOUBLE PRECISION` の球の半径。*radius* が指定されていない場合、球体はデフォルトで地球に設定され、半径は楕円体の WGS (World Geodetic System) 84 表現から計算されます。

## 戻り型
<a name="ST_DistanceSphere-function-return"></a>

`DOUBLE PRECISION`半径と同じユニットの 。半径が指定されていない場合、距離はメートル単位です。

*geom1* または *geom2* が null または空の場合、null が返されます。

*radius* が指定されていない場合、地球の表面に沿った結果がメートルで表示されます。

*radius* が負数である場合、エラーが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がポイントでない場合、エラーが返されます。

## 例
<a name="ST_DistanceSphere-function-examples"></a>

次の SQL の例では、地球上の 2 点間の距離をキロメートル単位で計算します。

```
SELECT ROUND(ST_DistanceSphere(ST_Point(-122, 47), ST_Point(-122.1, 47.1))/ 1000, 0);
```

```
  round
-----------
 13
```

次の SQL の例では、ドイツのベルリンテーゲル空港 (TXL)、ミュンヘン空港 (MUC)、フランクフルト空港 (FRA) の 3 つのポイントの場所の間の距離をキロメートルで計算します。

```
WITH airports_raw(code,lon,lat) AS (
(SELECT 'MUC', 11.786111, 48.353889) UNION
(SELECT 'FRA', 8.570556, 50.033333) UNION
(SELECT 'TXL', 13.287778, 52.559722)),
airports1(code,location) AS (SELECT code, ST_Point(lon, lat) FROM airports_raw),
airports2(code,location) AS (SELECT * from airports1)
SELECT (airports1.code || ' <-> ' || airports2.code) AS airports,
round(ST_DistanceSphere(airports1.location, airports2.location) / 1000, 0) AS distance_in_km
FROM airports1, airports2 WHERE airports1.code < airports2.code ORDER BY 1;
```

```
  airports   | distance_in_km 
-------------+----------------
 FRA <-> MUC |            299
 FRA <-> TXL |            432
 MUC <-> TXL |            480
```

# ST\$1DWithin
<a name="ST_DWithin-function"></a>

ST\$1DWithin は、2 つの入力ジオメトリの 2D 射影値の間のユークリッド距離が、しきい値以下の場合に true を返します。

## 構文
<a name="ST_DWithin-function-syntax"></a>

```
ST_DWithin(geom1, geom2, threshold)
```

## 引数
<a name="ST_DWithin-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *threshold*   
データ型 の 値`DOUBLE PRECISION` この値は入力引数のユニットです。

## 戻り型
<a name="ST_DWithin-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*threshold* が負数の場合、エラーが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_DWithin-function-examples"></a>

次の SQL は、2 つのポリゴン間の距離が 5 ユニットいないであるかどうかを確認します。

```
SELECT ST_DWithin(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'),5);
```

```
st_dwithin
-----------
 true
```

# ST\$1EndPoint
<a name="ST_EndPoint-function"></a>

ST\$1EndPoint は、入力ラインストリングの最後のポイントを返します。結果の空間参照系識別子 (SRID) の値は、入力ジオメトリのものと同じです。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_EndPoint-function-syntax"></a>

```
ST_EndPoint(geom)
```

## 引数
<a name="ST_EndPoint-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。

## 戻り型
<a name="ST_EndPoint-function-return"></a>

`GEOMETRY` 

*geom* が null の場合、null が返されます。

*geom* が空の場合、null が返されます。

*geom* が `LINESTRING` でない場合、null が返されます。

## 例
<a name="ST_EndPoint-function-examples"></a>

次の SQL は、`LINESTRING` オブジェクトの 4 つのポイントを持つ `GEOMETRY` の EWKT (Extended well-known text) 表現を返し、そのラインストリングの最後のポイントを返します。

```
SELECT ST_AsEWKT(ST_EndPoint(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 5)
```

# ST\$1Envelope
<a name="ST_Envelope-function"></a>

ST\$1Envelope は、次のように、入力ジオメトリの最小の境界ボックスを返します。
+ 入力ジオメトリが空の場合、返されるジオメトリは入力ジオメトリのコピーです。
+ 入力ジオメトリの最小の境界ボックスに含まれるのが 1 つのポイントのみの場合、返されるジオメトリは 1 つのポイントです。
+ 入力ジオメトリの最小の境界ボックスが 1 次元である場合、2 つのポイントのラインストリングが返されます。
+ 上記のいずれにも該当しない場合、この関数は、その頂点を最小の境界ボックスの角とする時計回りのポリゴンを返します。

返されるジオメトリの空間参照系識別子 (SRID) の値は、入力ジオメトリのものと同じです。

空でないすべての入力に対して、この関数は入力ジオメトリの 2D 射影を処理します。

## 構文
<a name="ST_Envelope-function-syntax"></a>

```
ST_Envelope(geom)
```

## 引数
<a name="ST_Envelope-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Envelope-function-return"></a>

`GEOMETRY` 

*geom* が null の場合、null が返されます。

## 例
<a name="ST_Envelope-function-examples"></a>

次の SQL は、`LINESTRING` オブジェクトの 4 つのポイントを持つ `GEOMETRY` の WKT (Well-known text) 表現を変換し、その頂点を最小の境界ボックスの角とするポリゴンを返します。

```
SELECT ST_AsText(ST_Envelope(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))')));
```

```
    st_astext
------------------------------------
  POLYGON((0 0,0 10,20 10,20 0,0 0))
```

# ST\$1Equals
<a name="ST_Equals-function"></a>

ST\$1Equals は、それぞれの入力ジオメトリの 2D 射影が、幾何学的に等しい場合に true を返します。ジオメトリは、ポイントセットが等しく、内部の交差が空でない場合に幾何学的に等しいと考えられます。

## 構文
<a name="ST_Equals-function-syntax"></a>

```
ST_Equals(geom1, geom2)
```

## 引数
<a name="ST_Equals-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。この値を *geom1* と比較して、*geom1* と等しいかどうかを判断します。

## 戻り型
<a name="ST_Equals-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、エラーが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Equals-function-examples"></a>

次の SQL は、2 つのポリゴンが幾何学的に等しいかどうかを確認します。

```
SELECT ST_Equals(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_equals
-----------
 false
```

次の SQL は、2 つの LINESTRING が幾何学的に等しいかどうかを確認します。

```
SELECT ST_Equals(ST_GeomFromText('LINESTRING(1 0,10 0)'), ST_GeomFromText('LINESTRING(1 0,5 0,10 0)'));
```

```
st_equals
-----------
 true
```

# ST\$1ExteriorRing
<a name="ST_ExteriorRing-function"></a>

ST\$1ExteriorRing は、入力ポリゴンの外部リングを表す、閉じたライン文字列を返します。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_ExteriorRing-function-syntax"></a>

```
ST_ExteriorRing(geom)
```

## 引数
<a name="ST_ExteriorRing-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_ExteriorRing-function-return"></a>

`GEOMETRY`サブタイプ の `LINESTRING`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* が null の場合、null が返されます。

*geom* がポリゴンでない場合、null が返されます。

*geom* が空の場合、空のポリゴンが返されます。

## 例
<a name="ST_ExteriorRing-function-examples"></a>

次の SQL は、ポリゴンの外部リングを閉じたライン文字列として返します。

```
SELECT ST_AsEWKT(ST_ExteriorRing(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))')));
```

```
st_asewkt
-----------
 LINESTRING(7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9)
```

# ST\$1Force2D
<a name="ST_Force2D-function"></a>

ST\$1Force2D は、入力ジオメトリの 2D ジオメトリを返します。2D ジオメトリの場合、入力のコピーが返されます。ジオメトリが 3DZ、3DM、4D の場合、ST\$1Force2D はジオメトリを XY デカルト平面に射影します。入力ジオメトリの空のポイントは、出力ジオメトリでも空のポイントのままで維持されます。

## 構文
<a name="ST_Force2D-function-syntax"></a>

```
ST_Force2D(geom)
```

## 引数
<a name="ST_Force2D-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Force2D-function-return"></a>

`GEOMETRY`. 

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* が null の場合、null が返されます。

*geom* が空の場合、空のジオメトリが返されます。

## 例
<a name="ST_Force2D-function-examples"></a>

次の SQL は、3DZ ジオメトリから 2D ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Force2D(ST_GeomFromText('MULTIPOINT Z(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT((0 1),EMPTY,(2 3),(5 6))
```

# ST\$1Force3D
<a name="ST_Force3D-function"></a>

ST\$1Force3D は、ST\$1Force3DZ のエイリアスです。詳細については、「[ST\$1Force3DZ](ST_Force3DZ-function.md)」を参照してください。

# ST\$1Force3DM
<a name="ST_Force3DM-function"></a>

ST\$1Force3DM は、入力ジオメトリの 3DM ジオメトリを返します。2D ジオメトリの場合、出力ジオメトリ内の空でないポイントのための `m` 座標は、すべて `0` に設定されます。3DM ジオメトリの場合、入力ジオメトリのコピーが返されます。3DZ ジオメトリの場合、ジオメトリは XY デカルト平面に射影され、出力ジオメトリ内の空でないポイントの `m` 座標は、すべて `0` に設定されます。4D ジオメトリの場合、ジオメトリは XYM デカルト空間に射影されます。入力ジオメトリの空のポイントは、出力ジオメトリでも空のポイントのままで維持されます。

## 構文
<a name="ST_Force3DM-function-syntax"></a>

```
ST_Force3DM(geom)
```

## 引数
<a name="ST_Force3DM-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Force3DM-function-return"></a>

`GEOMETRY`. 

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* が null の場合、null が返されます。

*geom* が空の場合、空のジオメトリが返されます。

## 例
<a name="ST_Force3DM-function-examples"></a>

次の SQL は、3DZ ジオメトリから 3DM ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Force3DM(ST_GeomFromText('MULTIPOINT Z(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT M ((0 1 0),EMPTY,(2 3 0),(5 6 0))
```

# ST\$1Force3DZ
<a name="ST_Force3DZ-function"></a>

ST\$1Force3DZ は、入力ジオメトリから 3DZ ジオメトリを返します。2D ジオメトリの場合、出力ジオメトリ内の空でないポイントのための `z` 座標は、すべて `0` に設定されます。ジオメトリが 3DM の場合、ジオメトリは XY デカルト平面上に射影され、出力ジオメトリ内の空でないポイントの `z` 座標は、すべて `0` に設定されます。ジオメトリが 3DZ の場合には、入力ジオメトリのコピーが返されます。4D ジオメトリの場合は、ジオメトリは XYZ デカルト空間に射影されます。入力ジオメトリの空のポイントは、出力ジオメトリでも空のポイントのままで維持されます。

## 構文
<a name="ST_Force3DZ-function-syntax"></a>

```
ST_Force3DZ(geom)
```

## 引数
<a name="ST_Force3DZ-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Force3DZ-function-return"></a>

`GEOMETRY`. 

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* が null の場合、null が返されます。

*geom* が空の場合、空のジオメトリが返されます。

## 例
<a name="ST_Force3DZ-function-examples"></a>

次の SQL は、3DM ジオメトリから 3DZ ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Force3DZ(ST_GeomFromText('MULTIPOINT M(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT Z ((0 1 0),EMPTY,(2 3 0),(5 6 0))
```

# ST\$1Force4D
<a name="ST_Force4D-function"></a>

ST\$1Force4D は、入力ジオメトリの 4D ジオメトリを返します。2D ジオメトリの場合、出力ジオメトリ内の空でないポイントにおける `z` および `m` 座標は、すべて `0` に設定されます。ジオメトリが 3DM の場合は、出力ジオメトリ内の空でないポイントの `z` 座標は、すべて `0` 設定されます。ジオメトリが 3DZ の場合は、出力ジオメトリ内の空でないポイントの `m` 座標は、すべて `0` に設定されます。4D ジオメトリの場合には、入力ジオメトリのコピーが返されます。入力ジオメトリの空のポイントは、出力ジオメトリでも空のポイントのままで維持されます。

## 構文
<a name="ST_Force4D-function-syntax"></a>

```
ST_Force4D(geom)
```

## 引数
<a name="ST_Force4D-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Force4D-function-return"></a>

`GEOMETRY`. 

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* が null の場合、null が返されます。

*geom* が空の場合、空のジオメトリが返されます。

## 例
<a name="ST_Force4D-function-examples"></a>

次の SQL は、3DM ジオメトリから 4D ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Force4D(ST_GeomFromText('MULTIPOINT M(0 1 2, EMPTY, 2 3 4, 5 6 7)')));
```

```
st_asewkt
-----------
  MULTIPOINT ZM ((0 1 0 2),EMPTY,(2 3 0 4),(5 6 0 7))
```

# ST\$1GeoHash
<a name="ST_GeoHash-function"></a>

ST\$1GeoHash は、指定された精度で入力ポイントの `geohash` 表現を返します。デフォルトの精度値は 20 です。geohash の定義についての詳細は、Wikipedia の「[ジオハッシュ](https://en.wikipedia.org/wiki/Geohash)」を参照してください。

## 構文
<a name="ST_GeoHash-function-syntax"></a>

```
ST_GeoHash(geom)
```

```
ST_GeoHash(geom, precision)
```

## 引数
<a name="ST_GeoHash-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *precision*   
データ型 の 値`INTEGER` デフォルトは 20 です。

## 戻り型
<a name="ST_GeoHash-function-return"></a>

`GEOMETRY`

この関数は、入力ポイントの `geohash` 表現を返します。

入力ポイントが空の場合、関数は null を返します。

入力ジオメトリがポイントではない場合、関数はエラーを返します。

## 例
<a name="ST_GeoHash-function-examples"></a>

以下の SQL は、入力ポイントの geohash 表現を返します。

```
SELECT ST_GeoHash(ST_GeomFromText('POINT(45 -45)'), 25) AS geohash;
```

```
          geohash
---------------------------
 m000000000000000000000gzz
```

以下の SQL は、入力ポイントが空であることから null を返します。

```
SELECT ST_GeoHash(ST_GeomFromText('POINT EMPTY'), 10) IS NULL AS result;
```

```
 result
---------
 true
```

# ST\$1GeogFromText
<a name="ST_GeogFromText-function"></a>

ST\$1GeogFromText は、入力ジオメトリの WKT (Well-Known Text) もしくは EWKT (拡張 Well-Known Text) 表現を基に、ジオメトリオブジェクトを構築します。

## 構文
<a name="ST_GeogFromText-function-syntax"></a>

```
ST_GeogFromText(wkt_string)
```

## 引数
<a name="ST_GeogFromText-function-arguments"></a>

 *wkt\$1string*   
ジオグラフィの WKT もしくは EWKT 表現であるデータ型 `VARCHAR` の値です。

## 戻り型
<a name="ST_GeogFromText-function-return"></a>

`GEOGRAPHY`

入力で指定された値に SRID 値が設定されている場合。SRID が指定されていない場合は、`4326` がセットされます。

*wkt\$1string* が null の場合、null が返されます。

*wkt\$1string* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeogFromText-function-examples"></a>

次の SQL は、SRID 値を持つジオグラフィオブジェクトからポリゴンを作成します。

```
SELECT ST_AsEWKT(ST_GeogFromText('SRID=4324;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))'));
```

```
  st_asewkt
------------------------------------------------
 SRID=4324;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))
```

次の SQL は、Geograpy オブジェクトからポリゴンを作成します。SRID の値は `4326` にセットされます。

```
SELECT ST_AsEWKT(ST_GeogFromText('POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))'));
```

```
 st_asewkt
------------------------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,10 10,1 0,0 0))
```

# ST\$1GeogFromWKB
<a name="ST_GeogFromWKB-function"></a>

ST\$1GeogFromWKB は、入力ジオグラフィの 16 進数による WKB (Well-Known Binary) 表現からジオグラフィオブジェクトを作成します。

## 構文
<a name="ST_GeogFromWKB-function-syntax"></a>

```
ST_GeogFromWKB(wkb_string)
```

## 引数
<a name="ST_GeogFromWKB-function-arguments"></a>

 *wkb\$1string*   
ジオグラフィの 16 進数 WKB 表現であるデータ型 `VARCHAR` の値。

## 戻り型
<a name="ST_GeogFromWKB-function-return"></a>

`GEOGRAPHY`

SRID 値が指定されている場合、指定された値に設定されます。SRID が指定されていない場合、`4326` に設定されます。

*wkb\$1string* が null の場合、null が返されます。

*wkb\$1string* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeogFromWKB-function-examples"></a>

次の SQL は、16 進数 WKB 値からジオグラフィを構築します。

```
SELECT ST_AsEWKT(ST_GeogFromWKB('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));
```

```
 st_asewkt
------------------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1GeometryN
<a name="ST_GeometryN-function"></a>

ST\$1GeometryN は、次のように、入力ジオメトリの入力インデックスで指定されているジオメトリを返します。
+ 入力がポイント、ラインストリング、またはポリゴンの場合、インデックスが 1 の場合はジオメトリがそのまま返され、インデックスが 1 以外の場合は null が返されます。
+ 入力がマルチポイント、マルチラインストリング、マルチポリゴン、またはジオメトリコレクションの場合、ポイント、ラインストリング、ポリゴン、またはジオメトリコレクションは入力インデックスでの指定に従って返されます。

このインデックスは 1 から始まります。結果の空間参照系識別子 (SRID) は、入力ジオメトリのものと同じです。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_GeometryN-function-syntax"></a>

```
ST_GeometryN(geom, index)
```

## 引数
<a name="ST_GeometryN-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *index*   
1 から始まるインデックスの位置を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_GeometryN-function-return"></a>

`GEOMETRY` 

*geom* または *index* が null の場合、null が返されます。

*index* が範囲外の場合、エラーが返されます。

## 例
<a name="ST_GeometryN-function-examples"></a>

次の SQL は、ジオメトリコレクションに含まれているジオメトリを返します。

```
WITH tmp1(idx) AS (SELECT 1 UNION SELECT 2),
tmp2(g) AS (SELECT ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))'))
SELECT idx, ST_AsEWKT(ST_GeometryN(g, idx)) FROM tmp1, tmp2 ORDER BY idx;
```

```
 idx |          st_asewkt           
-----+------------------------------
   1 | POLYGON((0 0,10 0,0 10,0 0))
   2 | LINESTRING(20 10,20 0,10 0)
```

# ST\$1GeometryType
<a name="ST_GeometryType-function"></a>

ST\$1GeometryType は、入力ジオメトリのサブタイプを文字列として返します。

入力のジオメトリが 3DM、3DZ、4D の場合、ST\$1GeometryType は、2D ジオメトリ入力の場合と同じ結果を返します。

## 構文
<a name="ST_GeometryType-function-syntax"></a>

```
ST_GeometryType(geom)
```

## 引数
<a name="ST_GeometryType-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_GeometryType-function-return"></a>

*geom* のサブタイプを表す `VARCHAR`。

*geom* が null の場合、null が返されます。

返される値は次のとおりです。


| 返される文字列値 | ジオメトリのサブタイプ | 
| --- | --- | 
| `ST_Point` | *geom* が `POINT` サブタイプの場合に返されます  | 
| `ST_LineString` | *geom* が `LINESTRING` サブタイプの場合に返されます  | 
| `ST_Polygon` | *geom* が `POLYGON` サブタイプの場合に返されます  | 
| `ST_MultiPoint` | *geom* が `MULTIPOINT` サブタイプの場合に返されます  | 
| `ST_MultiLineString` | *geom* が `MULTILINESTRING` サブタイプの場合に返されます  | 
| `ST_MultiPolygon` | *geom* が `MULTIPOLYGON` サブタイプの場合に返されます  | 
| `ST_GeometryCollection` | *geom* が `GEOMETRYCOLLECTION` サブタイプの場合に返されます  | 

## 例
<a name="ST_GeometryType-function-examples"></a>

次の SQL は、入力 LINESTRING ジオメトリのサブタイプを返します。

```
SELECT ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_geometrytype
-------------
 ST_LineString
```

# ST\$1GeomFromEWKB
<a name="ST_GeomFromEWKB-function"></a>

ST\$1GeomFromEWKB は、入力ジオメトリの EWKB (Extended Well-Known Binary) 表現からジオメトリオブジェクトを作成します。

ST\$1GeomFromEWKB は、WKB および EWKB の 16 進形式で記述された 3DZ、3DM、および 4D ジオメトリを受け入れます。

## 構文
<a name="ST_GeomFromEWKB-function-syntax"></a>

```
ST_GeomFromEWKB(ewkb_string)
```

## 引数
<a name="ST_GeomFromEWKB-function-arguments"></a>

 *ewkb\$1string*   
ジオメトリ の 16 進数の EWKB 表現であるデータ型 `VARCHAR` の値。

## 戻り型
<a name="ST_GeomFromEWKB-function-return"></a>

`GEOMETRY`

*ewkb\$1string* が null の場合、null が返されます。

*ewkb\$1string* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeomFromEWKB-function-examples"></a>

次の SQL は、EWKB 値からポリゴンを作成し、ポリゴンの EWKT 表現を返します。

```
SELECT ST_AsEWKT(ST_GeomFromEWKB('0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));
```

```
 st_asewkt
--------------------------------
 SRID=4326;POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1GeomFromEWKT
<a name="ST_GeomFromEWKT-function"></a>

ST\$1GeomFromEWKT は、入力ジオメトリの拡張 well-known text (EWKT) 表現からジオメトリオブジェクトを構築します。

ST\$1GeomFromEWKT は、3DZ、3DM、および 4D を受け入れます。この場合、各ジオメトリタイプの先頭には Z、M、または ZM がプレフィックスされます。

## 構文
<a name="ST_GeomFromEWKT-function-syntax"></a>

```
ST_GeomFromEWKT(ewkt_string)
```

## 引数
<a name="ST_GeomFromEWKT-function-arguments"></a>

 *ewkt\$1string*   
データ型 `VARCHAR` の値、または `VARCHAR` 型に評価される式、つまりジオメトリの EWKT 表現。  
WKT キーワード `EMPTY` を使用すると、空のポイント、空のポイントを持つマルチポイント、あるいは空のポイントを持つジオメトリコレクションを指定することができます。次の例では、空のポイントを 1 つ作成します。  

```
ST_GeomFromEWKT('SRID=4326;POINT EMPTY');
```

## 戻り型
<a name="ST_GeomFromEWKT-function-return"></a>

`GEOMETRY`

*ewkt\$1string* が null の場合、null が返されます。

*ewkt\$1string* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeomFromEWKT-function-examples"></a>

次の SQL は、EWKT 値からマルチライン文字列を作成し、ジオメトリを返します。また、ジオメトリの ST\$1AsEWKT 結果を返します。

```
SELECT ST_GeomFromEWKT('SRID=4326;MULTILINESTRING((1 0,1 0),(2 0,3 0),(4 0,5 0,6 0))') as geom, ST_AsEWKT(geom);
```

```
                                                                                                                                                       geom                                                                                                                                                       |                          st_asewkt                           
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------
 0105000020E610000003000000010200000002000000000000000000F03F0000000000000000000000000000F03F00000000000000000102000000020000000000000000000040000000000000000000000000000008400000000000000000010200000003000000000000000000104000000000000000000000000000001440000000000000000000000000000018400000000000000000 | SRID=4326;MULTILINESTRING((1 0,1 0),(2 0,3 0),(4 0,5 0,6 0))
```

# ST\$1GeomFromGeoHash
<a name="ST_GeomFromGeoHash-function"></a>

ST\$1GeomFromGeoHash は、入力ジオメトリの geohash 表現からジオメトリオブジェクトを作成します。ST\$1GeomFromGeoHash は、空間参照識別子 (SRID) がゼロ (0) の 2 次元 (2D) ジオメトリを返します。geohash フォーマットに関する詳細は、ウィキペディアの「[Geohash](https://en.wikipedia.org/wiki/Geohash)」を参照してください。

## 構文
<a name="ST_GeomFromGeoHash-function-syntax"></a>

```
ST_GeomFromGeoHash(geohash_string)
```

```
ST_GeomFromGeoHash(geohash_string, precision)
```

## 引数
<a name="ST_GeomFromGeoHash-function-arguments"></a>

 *geohash\$1string*   
データ型 `VARCHAR` の値、または `VARCHAR` 型に評価される式、つまりジオメトリの geohash 表現。

 *precision*   
geohash の精度を表すデータ型 `INTEGER` の値。値は、精度として使用される geohash の文字数です。値が指定されていない場合、ゼロより小さい場合、または *geohash\$1string* の長さを越えている場合、*geohash\$1string* の長さが使用されます。

## 戻り型
<a name="ST_GeomFromGeoHash-function-return"></a>

`GEOMETRY`

*geohash\$1string* が null の場合、null が返されます。

*geohash\$1string* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeomFromGeoHash-function-examples"></a>

次の SQL は、高精度のポリゴンを返します。

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0'));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646,-115.172816 36.114646))
```

次の SQL は、高精度のポイントを返します。

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz00'));
```

```
 st_asewkt       
-----------------------
 POINT(-115.172816 36.114646)
```

次の SQL は、低精度のポリゴンを返します。

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qq'));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.3125 35.15625,-115.3125 36.5625,-113.90625 36.5625,-113.90625 35.15625,-115.3125 35.15625))
```

次の SQL は、精度 3 のポリゴンを返します。

```
SELECT ST_AsText(ST_GeomFromGeoHash('9qqj7nmxncgyy4d0dbxqz0', 3));
```

```
 st_asewkt       
-----------------------
 POLYGON((-115.3125 35.15625,-115.3125 36.5625,-113.90625 36.5625,-113.90625 35.15625,-115.3125 35.15625))
```

# ST\$1GeomFromGeoJSON
<a name="ST_GeomFromGeoJSON-function"></a>

ST\$1GeomFromGeoJSON は、入力ジオメトリの GeoJSON 表現からジオメトリオブジェクトを作成します。GeoJSON フォーマットに関する詳細は、ウィキペディアの [GeoJSON](https://en.wikipedia.org/wiki/GeoJSON) を参照してください。

3 つ以上の座標を持つ点が少なくとも 1 つ存在する場合、結果のジオメトリは 3DZ になります。ここで、座標が 2 つしかない点の Z コンポーネントはゼロになります。入力 GeoJSON のすべてのポイントに 2 つの座標が含まれているか、空の場合、ST\$1GeomFromGeoJSON は 2D ジオメトリを返します。返されたジオメトリには、必ず空間リファレンスシステム識別子 (SRID) 値 4326 が含まれます。

## 構文
<a name="ST_GeomFromGeoJSON-function-syntax"></a>

```
ST_GeomFromGeoJSON(geojson_string)
```

## 引数
<a name="ST_GeomFromGeoJSON-function-arguments"></a>

 *geojson\$1string*   
データ型 `VARCHAR` または `SUPER` の値、または `VARCHAR` 型に評価される式、つまりジオメトリの GeoJSON 表現。

## 戻り型
<a name="ST_GeomFromGeoJSON-function-return"></a>

`GEOMETRY`

*geojson\$1string* が null の場合、null が返されます。

*geojson\$1string* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeomFromGeoJSON-function-examples"></a>

次の SQL は、入力 GeoJSON で表される 2D ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Point","coordinates":[1,2]}'));
```

```
 st_asewkt       
-----------------------
 SRID=4326;POINT(1 2)
```

次の SQL は、入力 GeoJSON で表される 3DZ ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"LineString","coordinates":[[1,2,3],[4,5,6],[7,8,9]]}'));
```

```
 st_asewkt  
------------------------------------------
 SRID=4326;LINESTRING Z (1 2 3,4 5 6,7 8 9)
```

次の SQL は、入力 GeoJSON で 1 つの点だけが 3 つの座標を持ち、他のすべてのポイントが 2 つの座標を持つ場合に 3DZ ジオメトリを返します。

```
SELECT ST_AsEWKT(ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[0, 0],[0, 1, 8],[1, 0],[0, 0]]]}'));
```

```
 st_asewkt  
------------------------------------------------
 SRID=4326;POLYGON Z ((0 0 0,0 1 8,1 0 0,0 0 0))
```

# ST\$1GeomFromGeoSquare
<a name="ST_GeomFromGeoSquare-function"></a>

ST\$1GeomFromGeoSquare は、入力された geosquare 値で表されるエリアをカバーするジオメトリを返します。返されるジオメトリは常に 2 次元です。geosquare 値を計算するには、「[ST\$1GeoSquare](ST_GeoSquare-function.md)」を参照してください。

## 構文
<a name="ST_GeomFromGeoSquare-function-syntax"></a>

```
ST_GeomFromGeoSquare(geosquare)
```

```
ST_GeomFromGeoSquare(geosquare, max_depth)
```

## 引数
<a name="ST_GeomFromGeoSquare-function-arguments"></a>

 *geosquare*   
データ型の値 `BIGINT` または、目的の正方形になるように最初のドメインで作成される区分の順序を表す geosquare 値である `BIGINT` 型に評価される式。この値は [ST\$1GeoSquare](ST_GeoSquare-function.md) で計算されます。

 *max\$1depth*   
初期ドメインで行われたドメインの分割の最大数を表すデータ型 `INTEGER` の値。この値は、`1` 以上にする必要があります。

## 戻り型
<a name="ST_GeomFromGeoSquare-function-return"></a>

`GEOMETRY`

*geosquare* が有効でない場合、関数はエラーを返します。

入力 *max\$1depth* が範囲内にない場合、関数はエラーを返します。

## 例
<a name="ST_GeomFromGeoSquare-function-examples"></a>

次の SQL は、geosquare 値からジオメトリを返します。

```
SELECT ST_AsText(ST_GeomFromGeoSquare(797852));
```

```
 st_astext       
--------------------------------------------------------------------------------------------------------------------
 POLYGON((13.359375 52.3828125,13.359375 52.734375,13.7109375 52.734375,13.7109375 52.3828125,13.359375 52.3828125))
```

次の SQL は、geosquare 値と `3` の最大深度からジオメトリを返します。

```
SELECT ST_AsText(ST_GeomFromGeoSquare(797852, 3));
```

```
 st_astext       
--------------------------------------
 POLYGON((0 45,0 90,45 90,45 45,0 45))
```

次の SQL は、最初に x 座標を経度、y 座標を緯度 (-122.3、47.6) として指定して、シアトルの geosquare 値を計算します。次に、geosquare のポリゴンを返します。出力は 2 次元のジオメトリですが、これを使用して経度と緯度の空間データを計算できます。

```
SELECT ST_AsText(ST_GeomFromGeoSquare(ST_GeoSquare(ST_Point(-122.3, 47.6))));
```

```
 st_astext
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
POLYGON((-122.335167014971 47.6080129947513,-122.335167014971 47.6080130785704,-122.335166931152 47.6080130785704,-122.335166931152 47.6080129947513,-122.335167014971 47.6080129947513))
```

# ST\$1GeomFromText
<a name="ST_GeomFromText-function"></a>

ST\$1GeomFromText は、入力ジオメトリの WKT (Well-Known Text) 表現からジオメトリオブジェクトを作成します。

ST\$1GeomFromText は、(ジオメトリタイプに Z、M、または ZM がプレフィックスされた) 3DZ、3DM、および 4D を受け入れます。

## 構文
<a name="ST_GeomFromText-function-syntax"></a>

```
ST_GeomFromText(wkt_string)
```

```
ST_GeomFromText(wkt_string, srid)
```

## 引数
<a name="ST_GeomFromText-function-arguments"></a>

 *wkt\$1string*   
ジオメトリの WKT 表現であるデータ型 `VARCHAR` の値。  
WKT キーワード `EMPTY` を使用すると、空のポイント、空のポイントを持つマルチポイント、あるいは空のポイントを持つジオメトリコレクションを指定することができます。次の例では、空のポイントと空でないポイントを、それぞれ1 つ持つマルチポイントを作成します。  

```
ST_GeomFromEWKT('MULTIPOINT(1 0,EMPTY)');
```

 *srid*   
空間リファレンス識別子 (SRID) であるデータ型 `INTEGER` の値。SRID 値が指定されている場合、返されたジオメトリはこの SRID 値を持ちます。指定されていない場合は、返されるジオメトリの SRID 値は 0 に設定されます。

## 戻り型
<a name="ST_GeomFromText-function-return"></a>

`GEOMETRY`

*wkt\$1string* または *srid* が null の場合、null が返されます。

*srid* が負数の場合、null が返されます。

*wkt\$1string* が有効でない場合、エラーが返されます。

*srid* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeomFromText-function-examples"></a>

次の SQL は、WKT 表現と SRID 値からジオメトリオブジェクトを作成します。

```
SELECT ST_GeomFromText('POLYGON((0 0,0 1,1 1,1 0,0 0))',4326);
```

```
st_geomfromtext
--------------------------------
0103000020E61000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000
```

# ST\$1GeomFromWKB
<a name="ST_GeomFromWKB-function"></a>

ST\$1GeomFromWKB は、入力ジオメトリの 16 進数の WKB (Well-Known Binary) 表現からジオメトリオブジェクトを作成します。

ST\$1GeomFromWKB は、WKB の 16 進形式で記述された 3DZ、3DM、および 4D ジオメトリを受け入れます。

## 構文
<a name="ST_GeomFromWKB-function-syntax"></a>

```
ST_GeomFromWKB(wkb_string)
```

```
ST_GeomFromWKB(wkb_string, srid)
```

## 引数
<a name="ST_GeomFromWKB-function-arguments"></a>

 *wkb\$1string*   
ジオメトリの 16 進数の WKB 表現であるデータ型 `VARCHAR` の値。

 *srid*   
空間リファレンス識別子 (SRID) であるデータ型 `INTEGER` の値。SRID 値が指定されている場合、返されたジオメトリはこの SRID 値を持ちます。そうでない場合は、返されたジオメトリの SRID 値は 0 に設定されます。

## 戻り型
<a name="ST_GeomFromWKB-function-return"></a>

`GEOMETRY`

*wkb\$1string* または *srid* が null の場合、null が返されます。

*srid* が負数の場合、null が返されます。

*wkb\$1string* が有効でない場合、エラーが返されます。

*srid* が有効でない場合、エラーが返されます。

## 例
<a name="ST_GeomFromWKB-function-examples"></a>

次の SQL は、WKB 値からポリゴンを作成し、ポリゴンの WKT 表現を返します。

```
SELECT ST_AsText(ST_GeomFromWKB('01030000000100000005000000000000000000000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F000000000000F03F000000000000000000000000000000000000000000000000'));            
```

```
 st_astext
--------------------------------
 POLYGON((0 0,0 1,1 1,1 0,0 0))
```

# ST\$1GeoSquare
<a name="ST_GeoSquare-function"></a>

ST\$1GeoSquare は、ドメイン ([-180, 180]、[-90, 90]) を、指定された深さまで *geosquare* と呼ばれる等しい正方形の領域に再帰的に分割します。分割は、指定されたポイントの位置に基づいて行われます。ポイントを含む geosquare の 1 つが、最大深度に達するまで各ステップで分割されます。この geosquare の選択は安定しています。つまり、関数の結果は入力引数のみに依存します。この関数は、ポイントが位置する最終的な geosquare を識別する固有の値を返します。

ST\$1GeoSquare は、x 座標が経度を表し、y 座標が緯度を表すポイントを受け入れます。経度と緯度はそれぞれ [-180, 180] と [-90, 90] に制限されます。ST\$1GeoSquare の出力は、[ST\$1GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md) 関数への入力として使用できます。

地球の赤道円弧の周囲は 360° あり、2 つの半球 (東と西) に分かれており、それぞれの半球には 0° の経線 (子午線) から 180° の子午線があります。慣例により、デカルト平面の x 軸に投影すると、東経は「\$1」(正) 座標になり、西経はデカルト平面の x 軸に投影すると「-」(負) 座標になります。地球の赤道円周 0° の北と南には 90° の緯度線があり、それぞれが地球の赤道円周 0° と平行です。慣例により、北緯線はデカルト平面に投影すると「\$1」(正) の y 軸と交差し、南緯線はデカルト平面に投影すると「-」(負) の y 軸と交差します。経線と緯線が交わることによって形成される球状グリッドは、標準の正と負の x 座標、およびデカルト平面上の正と負の y 座標により、デカルト平面に投影されたグリッドに変換されます。

ST\$1GeoSquare の目的は、近いポイントに同じコード値でタグ付けする、またはマークを付けることです。同じ geosquare にあるポイントには、同じコード値が割り当てられます。geosquare は、地理座標 (緯度と経度) を整数にエンコードするために使用されます。大きな領域をグリッドに分割して、さまざまな解像度のマップ上のエリアを表します。geosquare は、空間インデックス作成、空間ビニング、近接検索、位置検索、および固有の場所識別子の作成に使用できます。[ST\$1GeoHash](ST_GeoHash-function.md) 関数は、領域をグリッドに分割するプロセスと似たプロセスに従いますが、エンコーディングが異なります。

## 構文
<a name="ST_GeoSquare-function-syntax"></a>

```
ST_GeoSquare(geom)
```

```
ST_GeoSquare(geom, max_depth)
```

## 引数
<a name="ST_ST_GeoSquare-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` のポイント値またはポイントのサブタイプに評価される式。ポイントの x 座標 (経度) は `-180`～`180` の範囲内である必要があります。ポイントの y 座標 (緯度) は `-90`～`90` の範囲内である必要があります。

 *max\$1depth*   
データ型 `INTEGER` の値。ポイントを含むドメインが再帰的に分割される最大回数。値は 1～32 の整数にする必要があります。デフォルトは 32 です。分割の実際の最終数は、指定した *max\$1depth* 以下です。

## 戻り型
<a name="ST_GeoSquare-function-return"></a>

`BIGINT`

この関数は、入力ポイントが位置する最終的な geosquare を識別する固有の値を返します。

入力 *geom* がポイントではない場合、関数はエラーを返します。

入力ポイントが空の場合、戻り値は [ST\$1GeomFromGeoSquare](ST_GeomFromGeoSquare-function.md) 関数への有効な入力ではありません。[ST\$1IsEmpty](ST_IsEmpty-function.md) 関数を使用すると、ポイントが空の ST\$1GeoSquare を呼び出するのを防ぐことができます。

入力ポイントが範囲内にない場合、関数はエラーを返します。

入力 *max\$1depth* が範囲外の場合、関数はエラーを返します。

## 例
<a name="ST_ST_GeoSquare-function-examples"></a>

次の SQL は、入力ポイントから geosquare を返します。

```
SELECT ST_GeoSquare(ST_Point(13.5, 52.5));
```

```
  st_geosquare
-----------------------
 -4410772491521635895
```

次の SQL は、最大深度が `10` の入力ポイントから geosquare を返します。

```
SELECT ST_GeoSquare(ST_Point(13.5, 52.5), 10);
```

```
 st_geosquare
--------------
 797852
```

# ST\$1InteriorRingN
<a name="ST_InteriorRingN-function"></a>

ST\$1InteriorRingN は、インデックス位置にある入力ポリゴンの内部リングに対応する閉じたライン文字列を返します。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_InteriorRingN-function-syntax"></a>

```
ST_InteriorRingN(geom, index)
```

## 引数
<a name="ST_InteriorRingN-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *index*   
1 から始まるインデックスのリング位置を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_InteriorRingN-function-return"></a>

`GEOMETRY`サブタイプ の `LINESTRING`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom* または *index* が null の場合、null が返されます。

*index* が範囲外の場合、null が返されます。

*geom* がポリゴンでない場合、null が返されます。

*geom* が空のポリゴンである場合、null が返されます。

## 例
<a name="ST_InteriorRingN-function-examples"></a>

次の SQL は、ポリゴンの 2 番目のリングを閉じたライン文字列として返します。

```
SELECT ST_AsEWKT(ST_InteriorRingN(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'),2));
```

```
st_asewkt
-----------
 LINESTRING(12 14,15 14,13 11,12 14)
```

# ST\$1Intersects
<a name="ST_Intersects-function"></a>

ST\$1Intersects は、2 つの入力ジオメトリの 2D 射影が少なくとも 1 つの共通したポイントを持つ場合、true を返します。

## 構文
<a name="ST_Intersects-function-syntax"></a>

```
ST_Intersects(geom1, geom2)
```

## 引数
<a name="ST_Intersects-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Intersects-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Intersects-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のポリゴンと交差するかどうかを確認します。

```
SELECT ST_Intersects(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(2 2,2 5,5 5,5 2,2 2))'), ST_GeomFromText('MULTIPOINT((4 4),(6 6))'));
```

```
st_intersects              
-------------
 true
```

# ST\$1Intersection
<a name="ST_Intersection-function"></a>

ST\$1Intersection は、2 つのジオメトリのポイントセットの交差か所を表すジオメトリを返します。つまり、2 つの入力ジオメトリ間で共有されている部分を返します。

## 構文
<a name="ST_Intersection-function-syntax"></a>

```
ST_Intersection(geom1, geom2)
```

## 引数
<a name="ST_Intersection-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Intersection-function-return"></a>

`GEOMETRY`

*geom1* と *geom2* が空間を共有しない (互いに離れている) 場合、空のジオメトリが返されます。

*geom1* もしくは *geom2* が空の場合、空のジオメトリが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

*geom1* もしくは *geom2* が 二次元の (2D) ジオメトリでない場合、エラーが返されます。

## 例
<a name="ST_Intersection-function-examples"></a>

次の SQL は、2 つの入力ジオメトリの交差を表す、空でないジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Intersection(ST_GeomFromText('polygon((0 0,100 100,0 200,0 0))'), ST_GeomFromText('polygon((0 0,10 0,0 10,0 0))')));
```

```
        st_asewkt        
-------------------------
 POLYGON((0 0,0 10,5 5,0 0))
```

次の SQL は、離れている (交差しない) ジオメトリを入力に渡した場合、空のジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Intersection(ST_GeomFromText('linestring(0 100,0 0)'), ST_GeomFromText('polygon((1 0,10 0,1 10,1 0))')));
```

```
    st_asewkt     
------------------
 LINESTRING EMPTY
```

# ST\$1IsPolygonCCW
<a name="ST_IsPolygonCCW-function"></a>

ST\$1IsPolygonCCW は、入力ポリゴンまたはマルチポリゴンの 2D 射影が、反時計回りの場合に true を返します。入力ジオメトリがポイント、ライン文字列、マルチポイント、またはマルチライン文字列の場合、true が返されます。ジオメトリコレクションの場合、ST\$1IsPolygonCCW は、コレクション内のすべてのジオメトリが反時計回りの場合、true を返します。

## 構文
<a name="ST_IsPolygonCCW-function-syntax"></a>

```
ST_IsPolygonCCW(geom)
```

## 引数
<a name="ST_IsPolygonCCW-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsPolygonCCW-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsPolygonCCW-function-examples"></a>

次の SQL は、ポリゴンが反時計回りであるかどうかを確認します。

```
SELECT ST_IsPolygonCCW(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'));
```

```
 st_ispolygonccw
----------
 true
```

# ST\$1IsPolygonCW
<a name="ST_IsPolygonCW-function"></a>

ST\$1IsPolygonCW は、入力ポリゴンまたはマルチポリゴンの 2D 射影が、時計回りの場合に true を返します。入力ジオメトリがポイント、ライン文字列、マルチポイント、またはマルチライン文字列の場合、true が返されます。ジオメトリコレクションの場合、ST\$1IsPolygonCW は、コレクション内のすべてのジオメトリが時計回りの場合、true を返します。

## 構文
<a name="ST_IsPolygonCW-function-syntax"></a>

```
ST_IsPolygonCW(geom)
```

## 引数
<a name="ST_IsPolygonCW-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsPolygonCW-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsPolygonCW-function-examples"></a>

次の SQL は、ポリゴンが時計回りであるかどうかを確認します。

```
SELECT ST_IsPolygonCW(ST_GeomFromText('POLYGON((7 9,8 7,11 6,15 8,16 6,17 7,17 10,18 12,17 14,15 15,11 15,10 13,9 12,7 9),(9 9,10 10,11 11,11 10,10 8,9 9),(12 14,15 14,13 11,12 14))'));
```

```
 st_ispolygonccw
----------
 true
```

# ST\$1IsClosed
<a name="ST_IsClosed-function"></a>

ST\$1IsClosed は、入力ジオメトリの 2D 射影がクローズされている場合に true を返します。次のルールによって、クローズされたジオメトリが定義されます。
+ 入力ジオメトリがポイントまたはマルチポイントである。
+ 入力ジオメトリが LINESTRING で、LINESTRING のスタートポイントとエンドポイントが一致する。
+ 入力ジオメトリが空ではない MULTILINESTRING で、すべての LINESTRING がクローズされている。
+ 入力ジオメトリが空でないポリゴンで、すべてのポリゴンのリングが空でなく、すべてのリングのスタートポイントとエンドポイントが一致する。
+ 入力ジオメトリが空でないマルチポリゴンで、すべてのポリゴンがクローズされている。
+ 入力ジオメトリが空でないジオメトリコレクションで、すべてのコンポーネントがクローズされている。

## 構文
<a name="ST_IsClosed-function-syntax"></a>

```
ST_IsClosed(geom)
```

## 引数
<a name="ST_IsClosed-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsClosed-function-return"></a>

`BOOLEAN`

*geom* が空のポイントである場合、false が返されます。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsClosed-function-examples"></a>

次の SQL は、ポリゴンがクローズされているかどうかを確認します。

```
SELECT ST_IsClosed(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_isclosed
-----------
 true
```

# ST\$1IsCollection
<a name="ST_IsCollection-function"></a>

ST\$1IsCollection は、入力ジオメトリが `GEOMETRYCOLLECTION`、`MULTIPOINT`、`MULTILINESTRING`、`MULTIPOLYGON` のいずれかのサブタイプである場合、true を返します。

## 構文
<a name="ST_IsCollection-function-syntax"></a>

```
ST_IsCollection(geom)
```

## 引数
<a name="ST_IsCollection-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsCollection-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsCollection-function-examples"></a>

次の SQL は、ポリゴンがコレクションであるかどうかを確認します。

```
SELECT ST_IsCollection(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_iscollection
-----------
 false
```

# ST\$1IsEmpty
<a name="ST_IsEmpty-function"></a>

ST\$1IsEmpty は、入力ジオメトリが空の場合、true を返します。ジオメトリに空でない点が少なくとも 1 つ含まれていれば、そのジオメトリは空ではありません。

ST\$1IsEmpty は、入力ジオメトリに空でないポイントが少なくとも 1 つ含まれる場合、true を返します。

## 構文
<a name="ST_IsEmpty-function-syntax"></a>

```
ST_IsEmpty(geom)
```

## 引数
<a name="ST_IsEmpty-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsEmpty-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsEmpty-function-examples"></a>

次の SQL は、ポリゴンが空であるかどうかを確認します。

```
SELECT ST_IsEmpty(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'));
```

```
st_isempty
-----------
 false
```

# ST\$1IsRing
<a name="ST_IsRing-function"></a>

ST\$1IsRing は、入力ライン文字列がリングの場合、true を返します。閉じており、かつ単純なライン文字列はリングです。

## 構文
<a name="ST_IsRing-function-syntax"></a>

```
ST_IsRing(geom)
```

## 引数
<a name="ST_IsRing-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。ジオメトリは `LINESTRING` である必要があります。

## 戻り型
<a name="ST_IsRing-function-return"></a>

`BOOLEAN`

*geom* が `LINESTRING` でない場合、エラーが返されます。

## 例
<a name="ST_IsRing-function-examples"></a>

次の SQL は、指定されたライン文字列がリングであるかどうかを確認します。

```
SELECT ST_IsRing(ST_GeomFromText('linestring(0 0, 1 1, 1 2, 0 0)'));
```

```
st_isring
-----------
 true
```

# ST\$1IsSimple
<a name="ST_IsSimple-function"></a>

ST\$1IsSimple は、入力ジオメトリの 2D 射影が単純な場合、true を返します。単純なジオメトリ定義の詳細については、[幾何学的な単純度](spatial-terminology.md#spatial-terminology-simplicity) を参照してください。

## 構文
<a name="ST_IsSimple-function-syntax"></a>

```
ST_IsSimple(geom)
```

## 引数
<a name="ST_IsSimple-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsSimple-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsSimple-function-examples"></a>

次の SQL は、指定されたライン文字列がシンプルであるかどうかを確認します。この例では、自己交差があるため、単純ではありません。

```
SELECT ST_IsSimple(ST_GeomFromText('LINESTRING(0 0,10 0,5 5,5 -5)'));
```

```
 st_issimple
-----------
 false
```

# ST\$1IsValid
<a name="ST_IsValid-function"></a>

ST\$1IsValid は、入力ジオメトリ 2D 射影が有効である場合、true を返します。有効なジオメトリ定義の詳細については、[幾何学的妥当性](spatial-terminology.md#spatial-terminology-validity) を参照してください。

## 構文
<a name="ST_IsValid-function-syntax"></a>

```
ST_IsValid(geom)
```

## 引数
<a name="ST_IsValid-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_IsValid-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="ST_IsValid-function-examples"></a>

次の SQL は、指定されたポリゴンが有効であるかどうかを確認します。この例では、ポリゴンの内部が単純に接続されていないため、ポリゴンは無効です。

```
SELECT ST_IsValid(ST_GeomFromText('POLYGON((0 0,10 0,10 10,0 10,0 0),(5 0,10 5,5 10,0 5,5 0))'));
```

```
 st_isvalid
-----------
 false
```

# ST\$1Length
<a name="ST_Length-function"></a>

線形ジオメトリの場合、ST\$1Length は 2D 射影のデカルト座標系での長さを返します。長さの単位は、入力ジオメトリの座標を表す単位と同じです。この関数は、ポイント、マルチポイント、および面積ジオメトリに対して 0 を返します。入力がジオメトリコレクションの場合、この関数はコレクションのジオメトリの長さの合計を返します。

ジオグラフィに対して ST\$1Length は、SRID で決定される回転楕円体上で計算され与えられた、線形ジオグラフィの 2D 射影について測地座標系での長さが返します。長さの単位はメートルです。この関数は、ポイント、マルチポイント、および面積ジオグラフィに対して 0 を返します。入力がジオメトリコレクションの場合、この関数はコレクション内にあるジオグラフィの長さの合計を返します。

## 構文
<a name="ST_Length-function-syntax"></a>

```
ST_Length(geo)
```

## 引数
<a name="ST_Length-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

## 戻り型
<a name="ST_Length-function-return"></a>

`DOUBLE PRECISION`

*geo* が null の場合、null が返されます。

SRID 値が見つからない場合、エラーが返されます。

## 例
<a name="ST_Length-function-examples"></a>

次のSQLは、マルチラインストリングのデカルト座標系での長さを返します。

```
SELECT ST_Length(ST_GeomFromText('MULTILINESTRING((0 0,10 0,0 10),(10 0,20 0,20 10))'));
```

```
st_length
--------------------------------
  44.142135623731
```

次の SQL は、ジオグラフィ内にあるライン文字列の長さを返します。

```
SELECT ST_Length(ST_GeogFromText('SRID=4326;LINESTRING(5 0,6 0,4 0)'));
```

```
 st_length 
------------------
 333958.472379804
```

次の SQL は、ジオグラフィ内にあるポイントの長さを返します。

```
SELECT ST_Length(ST_GeogFromText('SRID=4326;POINT(4 5)'));
```

```
 st_length 
-----------
 0
```

# ST\$1LengthSphere
<a name="ST_LengthSphere-function"></a>

ST\$1LengthSphere は、線形ジオメトリの長さをメートル単位で返します。ポイントジオメトリ、マルチポイントジオメトリ、および面積ジオメトリの場合、ST\$1LengthSphere は 0 を返します。ジオメトリコレクションの場合、ST\$1LengthSphere は、コレクション内の線形ジオメトリの全長をメートル単位で返します。

ST\$1LengthSphere は、入力ジオメトリの各ポイントの座標を経度および緯度 (度単位) として解釈します。3DZ、3DM、または 4D ジオメトリの場合、最初の 2 つの座標のみが使用されます。

## 構文
<a name="ST_LengthSphere-function-syntax"></a>

```
ST_LengthSphere(geom)
```

## 引数
<a name="ST_LengthSphere-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_LengthSphere-function-return"></a>

`DOUBLE PRECISION` の長さ (メートル単位)。長さの計算は、地球の世界測地系 (WGS) 84 楕円体モデルの地球平均半径を半径とする地球の球形モデルに基づいています。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_LengthSphere-function-examples"></a>

次の SQL 例では、ライン文字列の長さをメートル単位で計算します。

```
SELECT ST_LengthSphere(ST_GeomFromText('LINESTRING(10 10,45 45)'));
```

```
 st_lengthsphere  
------------------
 5127736.08292556
```

# ST\$1Length2D
<a name="ST_Length2D-function"></a>

ST\$1Length2D は、ST\$1Length のエイリアスです。詳細については、「[ST\$1Length](ST_Length-function.md)」を参照してください。

# ST\$1LineFromMultiPoint
<a name="ST_LineFromMultiPoint-function"></a>

ST\$1LineFromMultiPoint は、入力マルチポイントジオメトリからラインストリングを返します。ポイントの順序は保持されます。返されるジオメトリの空間参照系識別子 (SRID) の値は、入力ジオメトリのものと同じです。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_LineFromMultiPoint-function-syntax"></a>

```
ST_LineFromMultiPoint(geom)
```

## 引数
<a name="ST_LineFromMultiPoint-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `MULTIPOINT` である必要があります。

## 戻り型
<a name="ST_LineFromMultiPoint-function-return"></a>

`GEOMETRY`

*geom* が null の場合、null が返されます。

*geom* が空の場合、空の `LINESTRING` が返されます。

*geom* に空のポイントが含まれている場合、これらの空のポイントは無視されます。

*geom* が `MULTIPOINT` でない場合、エラーが返されます。

## 例
<a name="ST_LineFromMultiPoint-function-examples"></a>

次の SQL は、マルチポイントからラインストリングを作成します。

```
SELECT ST_AsEWKT(ST_LineFromMultiPoint(ST_GeomFromText('MULTIPOINT(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
 st_asewkt
---------------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5,0 5)
```

# ST\$1LineInterpolatePoint
<a name="ST_LineInterpolatePoint-function"></a>

ST\$1LineInterpolatePoint は、ラインの開始点からの分数距離にあるラインに沿ったポイントを返します。

ポイントの等価性を判断するために、ST\$1LineInterpolatePoint は、入力ジオメトリの 2D 射影を処理します。入力ジオメトリが空の場合、入力のコピーが同じディメンションで返されます。3DZ、3DM、4D ジオメトリの場合、`z` または `m` 座標は、ポイントが置かれているセグメントの `z` または `m` 座標の平均になります。

## 構文
<a name="ST_LineInterpolatePoint-function-syntax"></a>

```
ST_LineInterpolatePoint(geom, fraction)
```

## 引数
<a name="ST_LineInterpolatePoint-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` です。

 *分数*   
ラインのライン文字列に沿った点の位置を表すデータ型 `DOUBLE PRECISION` の値。値は、0～1 の範囲の小数部です。

## 戻り型
<a name="ST_LineInterpolatePoint-function-return"></a>

`GEOMETRY`サブタイプ の `POINT`。

*geom* または *fraction* が null の場合、null が返されます。

*geom* が空の場合、空のポイントが返されます。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*fraction* が範囲外の場合、エラーが返されます。

*geom* が LINESTRING でない場合、エラーが返されます。

## 例
<a name="ST_LineInterpolatePoint-function-examples"></a>

次の SQL は、ライン文字列に沿ってポイントを返します。

```
SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.50));
```

```
st_asewkt
-----------
 POINT(5 5)
```

次の SQL は、ライン文字列に沿って 90% のポイントを返します。

```
SELECT ST_AsEWKT(ST_LineInterpolatePoint(ST_GeomFromText('LINESTRING(0 0, 5 5, 7 7, 10 10)'), 0.90));
```

```
st_asewkt
-----------
 POINT(9 9)
```

# ST\$1M
<a name="ST_M-function"></a>

ST\$1M は、入力ポイントの `m` 座標を返します。

## 構文
<a name="ST_M-function-syntax"></a>

```
ST_M(point)
```

## 引数
<a name="ST_M-function-arguments"></a>

 *point*   
データ型 `POINT` の `GEOMETRY` 値。

## 戻り型
<a name="ST_M-function-return"></a>

`m` 座標系の `DOUBLE PRECISION` 値。

*point* が null の場合、null が返されます。

*point* が 2D または 3DZ ポイントの場合、null が返されます。

*point* が空のポイントの場合、null が返されます。

*point* が `POINT` でない場合、エラーが返されます。

## 例
<a name="ST_M-function-examples"></a>

次の SQL は、ポイントの `m` 座標を、3DM ジオメトリで返します。

```
SELECT ST_M(ST_GeomFromEWKT('POINT M (1 2 3)'));
```

```
st_m
-----------
 3
```

次の SQL は、1 つのポイントの `m` 座標を、4D ジオメトリで返します。

```
SELECT ST_M(ST_GeomFromEWKT('POINT ZM (1 2 3 4)'));
```

```
st_m
-----------
 4
```

# ST\$1MakeEnvelope
<a name="ST_MakeEnvelope-function"></a>

ST\$1MakeEnvelope は以下のようにジオメトリを返します。
+ 入力座標でポイントを指定すると、返されるジオメトリはポイントになります。
+ 入力座標がラインを指定している場合、返されるジオメトリはライン文字列です。
+ それ以外の場合、返されるジオメトリはポリゴンであり、入力座標はボックスの左下隅と右上隅を指定します。

指定されている場合、返されたジオメトリの空間リファレンス識別子 (SRID) 値が、入力 SRID 値に設定されます。

## 構文
<a name="ST_MakeEnvelope-function-syntax"></a>

```
ST_MakeEnvelope(xmin, ymin, xmax, ymax)
```

```
ST_MakeEnvelope(xmin, ymin, xmax, ymax, srid)
```

## 引数
<a name="ST_MakeEnvelope-function-arguments"></a>

 *xmin*   
データ型 の 値`DOUBLE PRECISION` この値は、ボックスの左下隅の最初の座標です。

 *ymin*   
データ型 の 値`DOUBLE PRECISION` この値は、ボックスの左下隅の 2 番目の座標です。

 *xmax*   
データ型 の 値`DOUBLE PRECISION` この値は、ボックスの右上隅の最初の座標です。

 *ymax*   
データ型 の 値`DOUBLE PRECISION` この値は、ボックスの右上隅の 2 番目の座標です。

 *srid*   
空間リファレンス識別子 (SRID) を表すデータ型 `INTEGER` の値。SRID 値が指定されていない場合、0 に設定されます。

## 戻り型
<a name="ST_MakeEnvelope-function-return"></a>

サブタイプ `POINT`、`LINESTRING`、または `POLYGON` の `GEOMETRY`。

返されたジオメトリの SRID は、`srid` に設定され、`srid` が設定されていない場合は 0 に設定されます。

*xmin*、*ymin*、*xmax*、*ymax*、または *srid* が null の場合は、null が返されます。

*srid* が負数の場合、エラーが返されます。

## 例
<a name="ST_MakeEnvelope-function-examples"></a>

次の SQL は、4 つの入力座標値によって定義されたエンベロープを表すポリゴンを返します。

```
SELECT ST_AsEWKT(ST_MakeEnvelope(2,4,5,7));
```

```
 st_astext
---------------
 POLYGON((2 4,2 7,5 7,5 4,2 4))
```

次の SQL は、4 つの入力座標値と SRID 値によって定義されたエンベロープを表すポリゴンを返します。

```
SELECT ST_AsEWKT(ST_MakeEnvelope(2,4,5,7,4326));
```

```
 st_astext
----------------------------------
 SRID=4326;POLYGON((2 4,2 7,5 7,5 4,2 4))
```

# ST\$1MakeLine
<a name="ST_MakeLine-function"></a>

ST\$1MakeLine は、入力ジオメトリから LINESTRING を作成します。

結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。両方の入力ジオメトリは、同じディメンションである必要があります。

## 構文
<a name="ST_MakeLine-function-syntax"></a>

```
ST_MakeLine(geom1, geom2)
```

## 引数
<a name="ST_MakeLine-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT`、`LINESTRING`、または `MULTIPOINT` である必要があります。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT`、`LINESTRING`、または `MULTIPOINT` である必要があります。

## 戻り型
<a name="ST_MakeLine-function-return"></a>

`GEOMETRY`サブタイプ の `LINESTRING`。

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* が空のポイントであるか、空のポイントが含まれている場合には、これらの空のポイントは無視されます。

*geom1* および *geom2* が空の場合、空の `LINESTRING` が返されます。

返されたジオメトリの空間リファレンス識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom1* および *geom2* の SRID 値が異なる場合、エラーが返されます。

*geom1* または *geom2* が `POINT`、`LINESTRING`、`MULTIPOINT` のいずれでもない場合は、エラーが返されます。

*geom1* と *geom2* のディメンションが異なる場合、エラーが返されます。

## 例
<a name="ST_MakeLine-function-examples"></a>

次の SQL は、2 つの入力 LINESTRING から LINESTRING を作成します。

```
SELECT ST_MakeLine(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'), ST_GeomFromText('LINESTRING(88.29 39.07,88.42 39.26,88.27 39.31,88.29 39.07)'));
```

```
st_makeline
-----------
 010200000008000000C3F5285C8F52534052B81E85EB113D407B14AE47E15A5340C3F5285C8F423D40E17A14AE475153408FC2F5285C4F3D40C3F5285C8F52534052B81E85EB113D40C3F5285C8F125640295C8FC2F58843407B14AE47E11A5640E17A14AE47A14340E17A14AE4711564048E17A14AEA74340C3F5285C8F125640295C8FC2F5884340
```

# ST\$1MakePoint
<a name="ST_MakePoint-function"></a>

ST\$1MakePoint は、座標値が入力値であるポイントジオメトリを返します。

## 構文
<a name="ST_MakePoint-function-syntax"></a>

```
ST_MakePoint(x, y)
```

```
ST_MakePoint(x, y, z)
```

```
ST_MakePoint(x, y, z, m)
```

## 引数
<a name="ST_MakePoint-function-arguments"></a>

 *x*   
最初の座標を表すデータ型 `DOUBLE PRECISION` の値。

 *y*   
2 番目の座標を表すデータ型 `DOUBLE PRECISION` の値。

 *z*   
3 番目の座標を表すデータ型 `DOUBLE PRECISION` の値。

 *m*   
4 番目の座標を表すデータ型 `DOUBLE PRECISION` の値。

## 戻り型
<a name="ST_MakePoint-function-return"></a>

`GEOMETRY`サブタイプ の `POINT`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が 0 に設定されます。

*x*、*y*、*z*、または *m* が null の場合は、null が返されます。

## 例
<a name="ST_MakePoint-function-examples"></a>

次の SQL は、提供された座標を持つサブタイプ `POINT` の `GEOMETRY` タイプを返します。

```
SELECT ST_AsText(ST_MakePoint(1,3));
```

```
st_astext
-----------
 POINT(1 3)
```

次の SQL は、提供された座標を持つサブタイプ `GEOMETRY` の `POINT` タイプを返します。

```
SELECT ST_AsEWKT(ST_MakePoint(1, 2, 3));
```

```
st_asewkt
----------------
 POINT Z (1 2 3)
```

次の SQL は、提供された座標を持つサブタイプ `GEOMETRY` の `POINT` タイプを返します。

```
SELECT ST_AsEWKT(ST_MakePoint(1, 2, 3, 4));
```

```
st_asewkt
-------------------
 POINT ZM (1 2 3 4)
```

# ST\$1MakePolygon
<a name="ST_MakePolygon-function"></a>

ST\$1MakePolygon には、ポリゴンを返す 2 つの変形があります。1 つは単一のジオメトリを取り、もう 1 つは 2 つのジオメトリを取ります。
+ 最初の変形の入力は、出力ポリゴンの外リングを定義するライン文字列です。
+ 2 番目の変形の入力は、ライン文字列とマルチライン文字列です。どちらも空であるか、閉じられています。

  出力ポリゴンの外部リングの境界は入力ライン文字列であり、ポリゴンの内部リングの境界は入力マルチライン文字列のライン文字列です。入力ライン文字列が空の場合、空のポリゴンが返されます。マルチライン文字列内の空のライン文字列は無視されます。結果ジオメトリの空間リファレンス識別子 (SRID) は、2 つの入力ジオメトリの共通 SRID です。

結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。外部リングと内部リングは同じディメンションでなければなりません。

## 構文
<a name="ST_MakePolygon-function-syntax"></a>

```
ST_MakePolygon(geom1)
```

```
ST_MakePolygon(geom1, geom2)
```

## 引数
<a name="ST_MakePolygon-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。*linestring* 値はクローズされているか、空である必要があります。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `MULTILINESTRING` である必要があります。

## 戻り型
<a name="ST_MakePolygon-function-return"></a>

`GEOMETRY`サブタイプ の `POLYGON`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) は、入力の SRID と等しくなります。

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* が linestring でない場合、エラーが返されます。

*geom2* がマルチライン文字列でない場合、エラーが返されます。

*geom1* がクローズされていない場合、エラーが返されます。

*geom1* が単一のポイントであるか、クローズされていない場合、エラーが返されます。

*geom2* に、単一のポイントを持つ、または閉じられていないライン文字列が少なくとも 1 つ含まれている場合、エラーが返されます。

*geom1* および *geom2* の SRID 値が異なる場合、エラーが返されます。

*geom1* と *geom2* のディメンションが異なる場合、エラーが返されます。

## 例
<a name="ST_MakePolygon-function-examples"></a>

次の SQL は、入力 LINESTRING からポリゴンを返します。

```
SELECT ST_AsText(ST_MakePolygon(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')));
```

```
 st_astext
---------------
POLYGON((77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07))
```

次の SQL では、閉じたライン文字列と閉じたマルチライン文字列からポリゴンを作成します。ライン文字列は、ポリゴンの外部リングに使用されます。マルチライン文字列のライン文字列は、ポリゴンの内部リングに使用されます。

```
SELECT ST_AsEWKT(ST_MakePolygon(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,0 10,0 0)'), ST_GeomFromText('MULTILINESTRING((1 1,1 2,2 1,1 1),(3 3,3 4,4 3,3 3))')));
```

```
 st_astext
----------------------------------
POLYGON((0 0,10 0,10 10,0 10,0 0),(1 1,1 2,2 1,1 1),(3 3,3 4,4 3,3 3))
```

# ST\$1MemSize
<a name="ST_MemSize-function"></a>

ST\$1MemSize は、入力ジオメトリによって使用されるメモリ容量 (バイト) を返します。このサイズは、Amazon Redshift でのジオメトリの内部的な表現に依存するため、内部的な表現が変更されると変わる場合があります。このサイズは、Amazon Redshift でのジオメトリオブジェクトの相対的なサイズを示すために使用できます。

## 構文
<a name="ST_MemSize-function-syntax"></a>

```
ST_MemSize(geom)
```

## 引数
<a name="ST_MemSize-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_MemSize-function-return"></a>

`INTEGER` は *geom* 固有のディメンションを表します。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_MemSize-function-examples"></a>

次の SQL は、ジオメトリコレクションのメモリサイズを返します。

```
SELECT ST_MemSize(ST_GeomFromText('GEOMETRYCOLLECTION(POLYGON((0 0,10 0,0 10,0 0)),LINESTRING(20 10,20 0,10 0))'))::varchar + ' bytes';
```

```
 ?column?  
-----------
 172 bytes
```

# ST\$1MMax
<a name="ST_MMax-function"></a>

ST\$1MMax は、入力ジオメトリの最大の `m` 座標を返します。

## 構文
<a name="ST_MMax-function-syntax"></a>

```
ST_MMax(geom)
```

## 引数
<a name="ST_MMax-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_MMax-function-return"></a>

最大の `m` 座標の `DOUBLE PRECISION` 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

*geom* が 2D または 3DZ ジオメトリの場合、null が返されます。

## 例
<a name="ST_MMax-function-examples"></a>

次の SQL は、ライン文字列の最大の `m` 座標を、3DM ジオメトリで返します。

```
SELECT ST_MMax(ST_GeomFromEWKT('LINESTRING M (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_mmax
-----------
  8
```

次の SQL は、ライン文字列の最大の `m` 座標を、4D ジオメトリで返します。

```
SELECT ST_MMax(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_mmax
-----------
  11
```

# ST\$1MMin
<a name="ST_MMin-function"></a>

ST\$1MMin は、入力ジオメトリの最小の `m` 座標を返します。

## 構文
<a name="ST_MMin-function-syntax"></a>

```
ST_MMin(geom)
```

## 引数
<a name="ST_MMin-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_MMin-function-return"></a>

最小の `m` 座標の `DOUBLE PRECISION` 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

*geom* が 2D または 3DZ ジオメトリの場合、null が返されます。

## 例
<a name="ST_MMin-function-examples"></a>

次の SQL は、ライン文字列の最小の `m` 座標を、3DM ジオメトリで返します。

```
SELECT ST_MMin(ST_GeomFromEWKT('LINESTRING M (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_mmin
-----------
  2
```

次の SQL は、ライン文字列の最小の `m` 座標を、4D ジオメトリで返します。

```
SELECT ST_MMin(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_mmin
-----------
  3
```

# ST\$1Multi
<a name="ST_Multi-function"></a>

ST\$1Multi は、ジオメトリを対応するマルチタイプに変換します。入力ジオメトリがすでにマルチタイプまたはジオメトリコレクションである場合は、そのコピーが返されます。入力ジオメトリがポイント、ライン文字列、またはポリゴンである場合、入力ジオメトリを含むマルチポイント、マルチライン文字列、またはマルチポリゴンがそれぞれ返されます。

## 構文
<a name="ST_Multi-function-syntax"></a>

```
ST_Multi(geom)
```

## 引数
<a name="ST_Multi-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Multi-function-return"></a>

サブタイプ `MULTIPOINT`、`MULTILINESTRING`、`MULTIPOLYGON`、または `GEOMETRYCOLLECTION` の `GEOMETRY`。

返されるジオメトリの空間参照系識別子 (SRID) の値は、入力ジオメトリのものと同じです。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_Multi-function-examples"></a>

次の SQL は、入力マルチポイントからマルチポイントを返します。

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('MULTIPOINT((1 2),(3 4))', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;MULTIPOINT((1 2),(3 4))
```

次の SQL は、入力ポイントからマルチポイントを返します。

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('POINT(1 2)', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;MULTIPOINT((1 2))
```

次の SQL は、入力ジオメトリからジオメトリコレクションを返します。

```
SELECT ST_AsEWKT(ST_Multi(ST_GeomFromText('GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT((1 2),(3 4)))', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;GEOMETRYCOLLECTION(POINT(1 2),MULTIPOINT((1 2),(3 4)))
```

# ST\$1NDims
<a name="ST_NDims-function"></a>

ST\$1NDims は、ジオメトリの座標ディメンションを返します。ST\$1NDims では、ジオメトリのトポロジディメンションは考慮されません。代わりに、ジオメトリのディメンションに応じた定数値を返します。

## 構文
<a name="ST_NDims-function-syntax"></a>

```
ST_NDims(geom)
```

## 引数
<a name="ST_NDims-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_NDims-function-return"></a>

`INTEGER` は *geom* 固有のディメンションを表します。

*geom* が null の場合、null が返されます。

返される値は次のとおりです。


| 戻り値 | 入力ジオメトリのディメンション | 
| --- | --- | 
| 2 | 2D | 
| 3 | 3DZ もしくは 3DM | 
| 4 | 4D | 

## 例
<a name="ST_NDims-function-examples"></a>

次の SQL は、2D のライン文字列における、ディメンションの数を返します。

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING(0 0,1 1,2 2,0 0)'));
```

```
st_ndims
-------------
 2
```

次の SQL は、3DZ のライン文字列における、ディメンションの数を返します。

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING Z(0 0 3,1 1 3,2 2 3,0 0 3)'));
```

```
st_ndims
-------------
 3
```

次の SQL は、3DM のライン文字列における、ディメンションの数を返します。

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING M(0 0 4,1 1 4,2 2 4,0 0 4)'));
```

```
st_ndims
-------------
 3
```

次の SQL は、4D のライン文字列における、ディメンションの数を返します。

```
SELECT ST_NDims(ST_GeomFromText('LINESTRING ZM(0 0 3 4,1 1 3 4,2 2 3 4,0 0 3 4)'));
```

```
st_ndims
-------------
 4
```

# ST\$1NPoints
<a name="ST_NPoints-function"></a>

ST\$1NPoints は、入力されたジオメトリもしくはジオグラフィ内の、空ではないポイントの数を返します。

## 構文
<a name="ST_NPoints-function-syntax"></a>

```
ST_NPoints(geo)
```

## 引数
<a name="ST_NPoints-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

## 戻り型
<a name="ST_NPoints-function-return"></a>

`INTEGER`

*geo* が空のポイントの場合、`0` が返されます。

*geo* が null の場合、null が返されます。

## 例
<a name="ST_NPoints-function-examples"></a>

次の SQL は、LINESTRING のポイントの数を返します。

```
SELECT ST_NPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_npoints
-------------
 4
```

次の SQL は、ジオグラフィ内のライン文字列のポイント数を返します。

```
SELECT ST_NPoints(ST_GeogFromText('LINESTRING(110 40, 2 3, -10 80, -7 9)'));
```

```
st_npoints
-------------
 4
```

# ST\$1NRings
<a name="ST_NRings-function"></a>

ST\$1NRings は、入力ジオメトリでリングの数を返します。

## 構文
<a name="ST_NRings-function-syntax"></a>

```
ST_NRings(geom)
```

## 引数
<a name="ST_NRings-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_NRings-function-return"></a>

`INTEGER`

*geom* が null の場合、null が返されます。

返される値は次のとおりです。


| 戻り値 | ジオメトリのサブタイプ | 
| --- | --- | 
| 0 | *geom* が `POINT`、`LINESTRING`、`MULTIPOINT`、`MULTILINESTRING` サブタイプの場合に返されます。 | 
| リングの数。 | *geom* が `POLYGON` または `MULTIPOLYGON` サブタイプの場合に返されます | 
| すべてのコンポーネントのリングの数 | *geom* が `GEOMETRYCOLLECTION` サブタイプの場合に返されます | 

## 例
<a name="ST_NRings-function-examples"></a>

次の SQL は、マルチポリゴンのリングの数を返します。

```
SELECT ST_NRings(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((0 0,-10 0,0 -10,0 0)))'));
```

```
 st_nrings
-------------
 2
```

# ST\$1NumGeometries
<a name="ST_NumGeometries-function"></a>

ST\$1NumGeometries は、入力ジオメトリのジオメトリの数を返します。

## 構文
<a name="ST_NumGeometries-function-syntax"></a>

```
ST_NumGeometries(geom)
```

## 引数
<a name="ST_NumGeometries-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_NumGeometries-function-return"></a>

`INTEGER` は *geom* 内のジオメトリの数を表します。

*geom* が null の場合、null が返されます。

*geom* が単一の空のジオメトリの場合、`0` が返されます。

*geom* が、空ではない単一のジオメトリの場合、`1` が返されます。

*geom* が `GEOMETRYCOLLECTION` または `MULTI` のサブタイプの場合、ジオメトリの数が返されます。

## 例
<a name="ST_NumGeometries-function-examples"></a>

次の SQL は、入力 MULTILINESTRING のジオメトリの数を返します。

```
SELECT ST_NumGeometries(ST_GeomFromText('MULTILINESTRING((0 0,1 0,0 5),(3 4,13 26))'));
```

```
st_numgeometries
-------------
 2
```

# ST\$1NumInteriorRings
<a name="ST_NumInteriorRings-function"></a>

ST\$1NumInteriorRings は、入力ポリゴンジオメトリのリングの数を返します。

## 構文
<a name="ST_NumInteriorRings-function-syntax"></a>

```
ST_NumInteriorRings(geom)
```

## 引数
<a name="ST_NumInteriorRings-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_NumInteriorRings-function-return"></a>

`INTEGER`

*geom* が null の場合、null が返されます。

*geom* がポリゴンでない場合、null が返されます。

## 例
<a name="ST_NumInteriorRings-function-examples"></a>

次の SQL は、入力ポリゴンの内部リングの数を返します。

```
SELECT ST_NumInteriorRings(ST_GeomFromText('POLYGON((0 0,100 0,100 100,0 100,0 0),(1 1,1 5,5 1,1 1),(7 7,7 8,8 7,7 7))'));
```

```
 st_numinteriorrings
-------------
 2
```

# ST\$1NumPoints
<a name="ST_NumPoints-function"></a>

ST\$1NumPoints は、入力ジオメトリのポイントの数を返します。

## 構文
<a name="ST_NumPoints-function-syntax"></a>

```
ST_NumPoints(geom)
```

## 引数
<a name="ST_NumPoints-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_NumPoints-function-return"></a>

`INTEGER`

*geom* が null の場合、null が返されます。

*geom* がサブタイプ `LINESTRING` でない場合は、null が返されます。

## 例
<a name="ST_NumPoints-function-examples"></a>

次の SQL は、入力 LINESTRING のポイントの数を返します。

```
SELECT ST_NumPoints(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_numpoints
-------------
4
```

次の SQL は、入力 *geom* がサブタイプ `LINESTRING` ではないため、null を返します。

```
SELECT ST_NumPoints(ST_GeomFromText('MULTIPOINT(1 2,3 4)'));
```

```
st_numpoints
-------------
```

# ST\$1Perimeter
<a name="ST_Perimeter-function"></a>

ST\$1Perimeter は入力された面積ジオメトリに対して、その 2D 射影の周長 (境界の長さ) をデカルト座標系で返します。周長の単位は、入力ジオメトリの座標を表す単位と同じです。この関数は、ポイント、マルチポイント、および線形ジオメトリに対して 0 を返します。入力がジオメトリコレクションの場合、この関数はコレクションのジオメトリの周長の合計を返します。

入力がジオグラフィの場合、ST\$1Perimeter では、SRID で決定される回転楕円体上で計算され与えられた面積ジオグラフィについて、その 2D 射影に関する測地座標系での周長 (境界の長さ) を返します。周長の単位はメートルです。この関数は、ポイント、マルチポイント、および線形地形に対して 0 を返します。入力がジオメトリコレクションの場合、この関数はコレクション内にあるジオグラフィの周長の合計を返します。

## 構文
<a name="ST_Perimeter-function-syntax"></a>

```
ST_Perimeter(geo)
```

## 引数
<a name="ST_Perimeter-function-arguments"></a>

 *geo*   
データ型 `GEOMETRY` または `GEOGRAPHY` の値、または `GEOMETRY` もしくは `GEOGRAPHY` 型として評価される式です。

## 戻り型
<a name="ST_Perimeter-function-return"></a>

`DOUBLE PRECISION`

*geo* が null の場合、null が返されます。

SRID 値が見つからない場合、エラーが返されます。

## 例
<a name="ST_Perimeter-function-examples"></a>

次の SQL は、マルチポリゴンのデカルト座標系での周長を返します。

```
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_perimeter
--------------------------------
    68.2842712474619
```

次の SQL は、マルチポリゴンのデカルト座標系での周長を返します。

```
SELECT ST_Perimeter(ST_GeomFromText('MULTIPOLYGON(((0 0,10 0,0 10,0 0)),((10 0,20 0,20 10,10 0)))'));
```

```
 st_perimeter
--------------------------------
    68.2842712474619
```

次の SQL は、ジオグラフィ内にあるポリゴンの周長を返します。

```
SELECT ST_Perimeter(ST_GeogFromText('SRID=4326;POLYGON((0 0,1 0,0 1,0 0))'));
```

```
 st_perimeter 
------------------
 378790.428393693
```

次の SQL は、ジオグラフィ内にあるライン文字列の周長を返します。

```
SELECT ST_Perimeter(ST_GeogFromText('SRID=4326;LINESTRING(5 0,10 0)'));
```

```
 st_perimeter 
--------------
 0
```

# ST\$1Perimeter2D
<a name="ST_Perimeter2D-function"></a>

ST\$1Perimeter2D は、ST\$1Perimeter のエイリアスです。詳細については、「[ST\$1Perimeter](ST_Perimeter-function.md)」を参照してください。

# ST\$1Point
<a name="ST_Point-function"></a>

ST\$1Point は、入力座標値からポイントジオメトリを返します。

## 構文
<a name="ST_Point-function-syntax"></a>

```
ST_Point(x, y)
```

## 引数
<a name="ST_Point-function-arguments"></a>

 *x*   
最初の座標を表すデータ型 `DOUBLE PRECISION` の値。

 *\$1y*   
2 番目の座標を表すデータ型 `DOUBLE PRECISION` の値。

## 戻り型
<a name="ST_Point-function-return"></a>

`GEOMETRY`サブタイプ の `POINT`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が 0 に設定されます。

*x* または *y* が null の場合、null が返されます。

## 例
<a name="ST_Point-function-examples"></a>

次の SQL は、入力座標からポイントジオメトリを作成します。

```
SELECT ST_AsText(ST_Point(5.0, 7.0));
```

```
st_astext
-------------
POINT(5 7)
```

# ST\$1PointN
<a name="ST_PointN-function"></a>

ST\$1PointN は、インデックス値で指定されたラインストリングのポイントを返します。負のインデックス値は、ラインストリングの末尾から逆方向にカウントされるため、-1 は最後のポイントになります。

結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_PointN-function-syntax"></a>

```
ST_PointN(geom, index)
```

## 引数
<a name="ST_PointN-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。

 * インデックス*   
ラインストリングのポイントのインデックスを表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_PointN-function-return"></a>

`GEOMETRY`サブタイプ の `POINT`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が 0 に設定されます。

*geom* または *index* が null の場合、null が返されます。

*index* が範囲外の場合、null が返されます。

*geom* が空の場合、null が返されます。

*geom* が `LINESTRING` でない場合、null が返されます。

## 例
<a name="ST_PointN-function-examples"></a>

次の SQL は、`LINESTRING` オブジェクトの 6 つのポイントを持つ `GEOMETRY` の EWKT (Extended well-known text) 表現を返し、そのラインストリングのインデックス 5 のポイントを返します。

```
SELECT ST_AsEWKT(ST_PointN(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5,0 0)',4326), 5));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 5)
```

# ST\$1Points
<a name="ST_Points-function"></a>

ST\$1Points は、入力ジオメトリ内の空でないポイントをすべて含むマルチポイントジオメトリを返します。ST\$1Points は、リングジオメトリの開始点と終了点を含め、入力で重複しているポイントを削除しません。

## 構文
<a name="ST_Points-function-syntax"></a>

```
ST_Points(geom)
```

## 引数
<a name="ST_Points-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Points-function-return"></a>

`GEOMETRY`サブタイプ の `MULTIPOINT`。

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値は、*geom* と同じです。

*geom* が null の場合、null が返されます。

*geom* が空の場合、空のマルチポイントが返されます。

## 例
<a name="ST_Points-function-examples"></a>

次の SQL 例では、入力ジオメトリからマルチポイントジオメトリを作成します。その結果、入力ジオメトリ内の空でないポイントを含むマルチポイントジオメトリが作成されます。

```
SELECT ST_AsEWKT(ST_Points(ST_SetSRID(ST_GeomFromText('LINESTRING(1 0,2 0,3 0)'), 4326)));
```

```
st_asewkt
-------------
SRID=4326;MULTIPOINT((1 0),(2 0),(3 0))
```

```
SELECT ST_AsEWKT(ST_Points(ST_SetSRID(ST_GeomFromText('MULTIPOLYGON(((0 0,1 0,0 1,0 0)))'), 4326)));
```

```
st_asewkt
-------------
SRID=4326;MULTIPOINT((0 0),(1 0),(0 1),(0 0))
```

# ST\$1Polygon
<a name="ST_Polygon-function"></a>

ST\$1Polygon は、アウターリングが空間リファレンスシステム識別子 (SRID) に入力された値を持つ入力 LINESTRING であるポリゴンジオメトリを返します。

結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_Polygon-function-syntax"></a>

```
ST_Polygon(linestring, srid)
```

## 引数
<a name="ST_Polygon-function-arguments"></a>

 *linestring*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは、LINESTRING を表す `LINESTRING` である必要があります。*linestring* 値はクローズされている必要があります。

 *srid*   
SRID を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_Polygon-function-return"></a>

`GEOMETRY`サブタイプ の `POLYGON`。

返されたジオメトリの SRID 値は、*srid* に設定されます。

*linestring* または *srid* が null の場合、null が返されます。

*linestring* が LINESTRING でない場合、エラーが返されます。

*linestring* がクローズされていない場合、エラーが返されます。

*srid* が負数の場合、エラーが返されます。

## 例
<a name="ST_Polygon-function-examples"></a>

次の SQL は SRID 値を使用してポリゴンを作成します。

```
SELECT ST_AsEWKT(ST_Polygon(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'),4356));
```

```
st_asewkt
-------------
 SRID=4356;POLYGON((77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07))
```

# ST\$1RemovePoint
<a name="ST_RemovePoint-function"></a>

ST\$1RemovePoint は、入力ジオメトリのインデックスの位置にあるポイントを削除したラインストリングジオメトリを返します。

このインデックスは 0 から始まります。結果の空間参照系識別子 (SRID) は、入力ジオメトリのものと同じです。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_RemovePoint-function-syntax"></a>

```
ST_RemovePoint(geom, index)
```

## 引数
<a name="ST_RemovePoint-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。

 *index*   
0 から始まるインデックスの位置を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_RemovePoint-function-return"></a>

`GEOMETRY` 

*geom* または *index* が null の場合、null が返されます。

*geom* がサブタイプ `LINESTRING` でない場合、エラーが返されます。

*index* が範囲外の場合、エラーが返されます。インデックスの位置の有効な値は、0 から `ST_NumPoints(geom)` の間の値と -1 です。

## 例
<a name="ST_RemovePoint-function-examples"></a>

次の SQL は、ラインストリングの最後のポイントを削除します。

```
WITH tmp(g) AS (SELECT ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326))
SELECT ST_AsEWKT(ST_RemovePoint(g, ST_NumPoints(g) - 1)) FROM tmp;
```

```
   st_asewkt
-----------------------------------------
 SRID=4326;LINESTRING(0 0,10 0,10 10,5 5)
```

# ST\$1Reverse
<a name="ST_Reverse-function"></a>

ST\$1Reverse は、線形ジオメトリと面積ジオメトリの頂点の順序を逆にします。ポイントジオメトリまたはマルチポイントジオメトリの場合、元のジオメトリのコピーが返されます。ジオメトリコレクションの場合、ST\$1Reverse は、コレクション内の各ジオメトリの頂点の順序を逆にします。

結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_Reverse-function-syntax"></a>

```
ST_Reverse(geom)
```

## 引数
<a name="ST_Reverse-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Reverse-function-return"></a>

`GEOMETRY` 

返されるジオメトリの空間参照系識別子 (SRID) の値は、入力ジオメトリのものと同じです。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_Reverse-function-examples"></a>

次の SQL は、LINESTRING のポイントの順序を逆にします。

```
SELECT ST_AsEWKT(ST_Reverse(ST_GeomFromText('LINESTRING(1 0,2 0,3 0,4 0)', 4326)));
```

```
    st_asewkt
------------------------------------
  SRID=4326;LINESTRING(4 0,3 0,2 0,1 0)
```

# ST\$1SetPoint
<a name="ST_SetPoint-function"></a>

ST\$1SetPoint は、インデックスで指定された入力ライン文字列の位置に関して更新された座標を持つライン文字列を返します。新しい座標は、入力ポイントの座標です。

結果のジオメトリのディメンションは、*geom1* 値 のものと同じです。*geom1* と *geom2* でディメンションが異なる場合、*geom2* が *geom1* のディメンションに射影されます。

## 構文
<a name="ST_SetPoint-function-syntax"></a>

```
ST_SetPoint(geom1, index, geom2)
```

## 引数
<a name="ST_SetPoint-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。

 * インデックス*   
インデックスの位置を表すデータ型 `INTEGER` の値。`0` はライン文字列の左からの最初のポイントを指し、`1` は 2 番目のポイントを指します。インデックスには負の値を指定できます。`-1` はライン文字列の右から最初のポイントを指し、`-2` はライン文字列の右から 2 番目のポイントを指します。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `POINT` である必要があります。

## 戻り型
<a name="ST_SetPoint-function-return"></a>

`GEOMETRY`

*geom2* が空のポイントである場合、*geom1* が返されます。

*geom1*、*geom2*、または *index* が null の場合、null が返されます。

*geom1* が linestring でない場合、エラーが返されます。

*インデックス*が有効なインデックス範囲内にない場合、エラーが返されます。

*geom2* が point でない場合、エラーが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

## 例
<a name="ST_SetPoint-function-examples"></a>

次の SQL は、入力ライン文字列の 2 番目のポイントを指定されたポイントに設定する新しいライン文字列を返します。

```
SELECT ST_AsText(ST_SetPoint(ST_GeomFromText('LINESTRING(1 2, 3 2, 5 2, 1 2)'), 2, ST_GeomFromText('POINT(7 9)')));
```

```
st_astext              
-------------
 LINESTRING(1 2,3 2,7 9,1 2)
```

次の SQL 例では、新しいライン文字列を返します。ここでは、指定したポイントを持つライン文字列の右から 3 番目のポイント (インデックスは負の値) を設定します。

```
SELECT ST_AsText(ST_SetPoint(ST_GeomFromText('LINESTRING(1 2, 3 2, 5 2, 1 2)'), -3, ST_GeomFromText('POINT(7 9)')));
```

```
st_astext              
-------------
 LINESTRING(1 2,7 9,5 2,1 2)
```

# ST\$1SetSRID
<a name="ST_SetSRID-function"></a>

ST\$1SetSRID は、入力ジオメトリと同じジオメトリを返します。空間リファレンスシステム識別子 (SRID) に入力された値で更新された場合を除きます。

## 構文
<a name="ST_SetSRID-function-syntax"></a>

```
ST_SetSRID(geom, srid)
```

## 引数
<a name="ST_SetSRID-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *srid*   
SRID を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_SetSRID-function-return"></a>

`GEOMETRY`

返されたジオメトリの SRID 値は、*srid* に設定されます。

*geom* または *srid* が null の場合、null が返されます。

*srid* が負数の場合、エラーが返されます。

## 例
<a name="ST_SetSRID-function-examples"></a>

次の SQL は、LINESTRING の SRID 値を設定します。

```
SELECT ST_AsEWKT(ST_SetSRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'),50));
```

```
st_asewkt
-------------
 SRID=50;LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)
```

# ST\$1Simplify
<a name="ST_Simplify-function"></a>

ST\$1Simplify は、指定された許容値で Ramer-Douglas-Peucker アルゴリズムを使用して、入力ジオメトリの簡略化されたコピーを返します。入力ジオメトリのトポロジが保持されない場合があります。アルゴリズムの詳細については、ウィキペディアで [Ramer—Douglas—Peucker アルゴリズム](https://en.wikipedia.org/wiki/Ramer–Douglas–Peucker_algorithm)を参照してください。

ST\$1Simplify が距離を計算してジオメトリを単純化する際は、その計算で入力ジオメトリの 2D 射影が処理されます。

## 構文
<a name="ST_Simplify-function-syntax"></a>

```
ST_Simplify(geom, tolerance)
```

## 引数
<a name="ST_Simplify-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *許容値*   
Ramer-Douglas-Peucker アルゴリズムの許容レベルを表すデータ型 `DOUBLE PRECISION` の値。*許容値*が負の数の場合、0 が使用されます。

## 戻り型
<a name="ST_Simplify-function-return"></a>

`GEOMETRY`. 

返されたジオメトリの空間リファレンスシステム識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_Simplify-function-examples"></a>

次の SQL では、Ramer-Douglas-Peucker アルゴリズムを使用したユークリッド距離の許容値 1 を使用して、入力ライン文字列を簡略化しています。距離の単位は、ジオメトリ座標の単位と同じです。

```
SELECT ST_AsEWKT(ST_Simplify(ST_GeomFromText('LINESTRING(0 0,1 2,1 1,2 2,2 1)'), 1));
```

```
 st_asewkt
-----------
LINESTRING(0 0,1 2,2 1)
```

# ST\$1SRID
<a name="ST_SRID-function"></a>

ST\$1SRID は、入力ジオメトリの空間リファレンスシステム識別子 (SRID) を返します。SRID の詳細については、「[Amazon Redshift での空間データのクエリ](geospatial-overview.md)」を参照してください。

## 構文
<a name="ST_SRID-function-syntax"></a>

```
ST_SRID(geom)
```

## 引数
<a name="ST_SRID-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_SRID-function-return"></a>

`INTEGER` は *geom* の SRID 値を表します。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_SRID-function-examples"></a>

次の SQL は、SRID `4326` に設定された linestring の SRID 値を返します。

```
SELECT ST_SRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)',4326));
```

```
st_srid
-------------
 4326
```

次の SQL は、作成時に設定されない linestring の SRID 値を返します。この結果、SRID 値が `0` になります。

```
SELECT ST_SRID(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_srid
-------------
 0
```

# ST\$1StartPoint
<a name="ST_StartPoint-function"></a>

ST\$1StartPoint は、入力ラインストリングの最初のポイントを返します。結果の空間参照系識別子 (SRID) の値は、入力ジオメトリのものと同じです。結果のジオメトリのディメンションは、入力ジオメトリのものと同じです。

## 構文
<a name="ST_StartPoint-function-syntax"></a>

```
ST_StartPoint(geom)
```

## 引数
<a name="ST_StartPoint-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。サブタイプは `LINESTRING` である必要があります。

## 戻り型
<a name="ST_StartPoint-function-return"></a>

`GEOMETRY` 

*geom* が null の場合、null が返されます。

*geom* が空の場合、null が返されます。

*geom* が `LINESTRING` でない場合、null が返されます。

## 例
<a name="ST_StartPoint-function-examples"></a>

次の SQL は、`LINESTRING` オブジェクトの 4 つのポイントを持つ `GEOMETRY` の EWKT (Extended well-known text) 表現を返し、そのラインストリングの最初のポイントを返します。

```
SELECT ST_AsEWKT(ST_StartPoint(ST_GeomFromText('LINESTRING(0 0,10 0,10 10,5 5,0 5)',4326)));
```

```
st_asewkt
-------------
 SRID=4326;POINT(0 0)
```

# ST\$1Touches
<a name="ST_Touches-function"></a>

ST\$1Touches は、2 つの入力ジオメトリの 2D 射影が接している場合に true を返します。2 つのジオメトリは、空ではなく、交わっており、共通の内部ポイントがない場合に接します。

## 構文
<a name="ST_Touches-function-syntax"></a>

```
ST_Touches(geom1, geom2)
```

## 引数
<a name="ST_Touches-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Touches-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Touches-function-examples"></a>

次の SQL は、ポリゴンがラインストリングに接しているかどうかをチェックします。

```
SELECT ST_Touches(ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))'), ST_GeomFromText('LINESTRING(20 10,20 0,10 0)'));
```

```
 st_touches              
-------------
 t
```

# ST\$1Transform
<a name="ST_Transform-function"></a>

ST\$1Transform は、入力された空間参照系識別子 (SRID) によって定義される空間参照系に変換された座標を使用する、新しいジオメトリを返します。

## 構文
<a name="ST_Transform-function-syntax"></a>

```
ST_Transform(geom, srid)
```

## 引数
<a name="ST_Transform-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *srid*   
SRID を表すデータ型 `INTEGER` の値。

## 戻り型
<a name="ST_Transform-function-return"></a>

`GEOMETRY`.

返されたジオメトリの SRID 値は、*srid* に設定されます。

*geom* または *srid* が null の場合、null が返されます。

入力の *geom* に関連付けられている SRID 値が存在しない場合は、エラーが返されます。

*srid* が存在しない場合、エラーが返されます。

## 例
<a name="ST_Transform-function-examples"></a>

次の SQL は、空のジオメトリコレクションの SRID を変換します。

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('GEOMETRYCOLLECTION EMPTY', 3857), 4326));
```

```
             st_asewkt
------------------------------------
 SRID=4326;GEOMETRYCOLLECTION EMPTY
```

次の SQL は、ライン文字列の SRID 値を設定します。

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('LINESTRING(110 40, 2 3, -10 80, -7 9, -22 -33)', 4326), 26918));
```

```
                                                                                            st_asewkt
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=26918;LINESTRING(73106.6977300955 15556182.9688576,14347201.5059964 1545178.32934967,1515090.41262989 9522193.25115316,10491250.83295 2575457.28410878,5672303.72135968 -5233682.61176205)
```

次の SQL は、ポリゴンの SRID を変換します。

```
SELECT ST_AsEWKT(ST_Transform(ST_GeomFromText('POLYGON Z ((-10 10 -7, -65 10 -6, -10 64 -5, -10 10 -7), (-11 11 5, -11 12 6, -12 11 7, -11 11 5))', 6989), 6317));
```

```
                                                                                                                                                                                                                      st_asewkt
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 SRID=6317;POLYGON Z ((6186430.2771091 -1090834.57212608 1100247.33216237,2654831.67853801 -5693304.90741276 1100247.50581055,2760987.41750022 -486836.575101877 5709710.44137268,6186430.2771091 -1090834.57212608 1100247.33216237),(6146675.25029258 -1194792.63532103 1209007.1115113,6125027.87562215 -1190584.81194058 1317403.77865723,6124888.99555252 -1301885.3455052 1209007.49312929,6146675.25029258 -1194792.63532103 1209007.1115113))
```

# ST\$1Union
<a name="ST_Union-function"></a>

ST\$1Union は、2 つのジオメトリの和集合を表すジオメトリを返します。つまり、入力ジオメトリをマージして、オーバーラップのない結果のジオメトリを生成します。

## 構文
<a name="ST_Union-function-syntax"></a>

```
ST_Union(geom1, geom2)
```

## 引数
<a name="ST_Union-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Union-function-return"></a>

`GEOMETRY`

返されたジオメトリの空間リファレンス識別子 (SRID) 値が、入力ジオメトリの SRID 値です。

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* もしくは *geom2* が空の場合、空のジオメトリが返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) が同じ値でない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクション、linestring、または multilinestring である場合、エラーが返されます。

*geom1* もしくは *geom2* が 二次元の (2D) ジオメトリでない場合、エラーが返されます。

## 例
<a name="ST_Union-function-examples"></a>

次の SQL は、2 つの入力ジオメトリの和集合を表す、空でないジオメトリを返します。

```
SELECT ST_AsEWKT(ST_Union(ST_GeomFromText('POLYGON((0 0,100 100,0 200,0 0))'), ST_GeomFromText('POLYGON((0 0,10 0,0 10,0 0))')));
```

```
        st_asewkt        
-------------------------
 POLYGON((0 0,0 200,100 100,5 5,10 0,0 0))
```

# ST\$1Within
<a name="ST_Within-function"></a>

ST\$1Within は、最初の入力ジオメトリの 2D 射影が 2 番目の入力ジオメトリの 2D 射影内にある場合、true を返します。

例えば、`A` のすべてのポイントが `B` のポイントであり、内部の交差が空でない場合にジオメトリ `A` はジオメトリ `B` 内にあります。

ST\$1Within(`A`、`B`) は ST\$1Contains(`B`、`A`) と等しいものです。

## 構文
<a name="ST_Within-function-syntax"></a>

```
ST_Within(geom1, geom2)
```

## 引数
<a name="ST_Within-function-arguments"></a>

 *geom1*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。この値を *geom2* と比較して、*geom2* 内にあるかどうかを判断します。

 *geom2*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_Within-function-return"></a>

`BOOLEAN`

*geom1* または *geom2* が null の場合、null が返されます。

*geom1* および *geom2* の空間リファレンスシステム識別子 (SRID) 値が同じでない場合、エラーが返されます。

*geom1* または *geom2* がジオメトリコレクションである場合、エラーが返されます。

## 例
<a name="ST_Within-function-examples"></a>

次の SQL は、最初のポリゴンが 2 番目のポリゴン内にあるかどうかを確認します。

```
SELECT ST_Within(ST_GeomFromText('POLYGON((0 2,1 1,0 -1,0 2))'), ST_GeomFromText('POLYGON((-1 3,2 1,0 -3,-1 3))'));
```

```
st_within
-----------
 true
```

# ST\$1X
<a name="ST_X-function"></a>

ST\$1X は、入力ポイントの最初の座標を返します。

## 構文
<a name="ST_X-function-syntax"></a>

```
ST_X(point)
```

## 引数
<a name="ST_X-function-arguments"></a>

 *point*   
データ型 `POINT` の `GEOMETRY` 値。

## 戻り型
<a name="ST_X-function-return"></a>

`DOUBLE PRECISION`最初の座標の 値。

*point* が null の場合、null が返されます。

*point* が空のポイントの場合、null が返されます。

*point* が `POINT` でない場合、エラーが返されます。

## 例
<a name="ST_X-function-examples"></a>

次の SQL は、ポイントの最初の座標を返します。

```
SELECT ST_X(ST_Point(1,2));
```

```
st_x
-----------
 1.0
```

# ST\$1XMax
<a name="ST_XMax-function"></a>

ST\$1XMax は、入力ジオメトリの最大の最初の座標を返します。

## 構文
<a name="ST_XMax-function-syntax"></a>

```
ST_XMax(geom)
```

## 引数
<a name="ST_XMax-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_XMax-function-return"></a>

`DOUBLE PRECISION`最大の最初の座標の 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_XMax-function-examples"></a>

次の SQL は、LINESTRING の最大の最初の座標を返します。

```
SELECT ST_XMax(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_xmax
-----------
 77.42
```

# ST\$1XMin
<a name="ST_XMin-function"></a>

ST\$1XMin は、入力ジオメトリの最小の最初の座標を返します。

## 構文
<a name="ST_XMin-function-syntax"></a>

```
ST_XMin(geom)
```

## 引数
<a name="ST_XMin-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_XMin-function-return"></a>

`DOUBLE PRECISION`最小の最初の座標の 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_XMin-function-examples"></a>

次の SQL は、LINESTRING の最小の最初の座標を返します。

```
SELECT ST_XMin(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_xmin
-----------
 77.27
```

# ST\$1Y
<a name="ST_Y-function"></a>

ST\$1Y は、入力ポイントの 2 番目の座標を返します。

## 構文
<a name="ST_Y-function-syntax"></a>

```
ST_Y(point)
```

## 引数
<a name="ST_Y-function-arguments"></a>

 *point*   
データ型 `POINT` の `GEOMETRY` 値。

## 戻り型
<a name="ST_Y-function-return"></a>

`DOUBLE PRECISION`2 番目の座標の 値。

*point* が null の場合、null が返されます。

*point* が空のポイントの場合、null が返されます。

*point* が `POINT` でない場合、エラーが返されます。

## 例
<a name="ST_Y-function-examples"></a>

次の SQL は、ポイントの 2 番目の座標を返します。

```
SELECT ST_Y(ST_Point(1,2));
```

```
st_y
-----------
 2.0
```

# ST\$1YMax
<a name="ST_YMax-function"></a>

ST\$1YMax は、入力ジオメトリの最大の 2 番目の座標を返します。

## 構文
<a name="ST_YMax-function-syntax"></a>

```
ST_YMax(geom)
```

## 引数
<a name="ST_YMax-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_YMax-function-return"></a>

`DOUBLE PRECISION`最大の 2 番目の座標 の 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_YMax-function-examples"></a>

次の SQL は、LINESTRING の 最大の 2 番目の座標を返します。

```
SELECT ST_YMax(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_ymax
-----------
 29.31
```

# ST\$1YMin
<a name="ST_YMin-function"></a>

ST\$1YMin 入力ジオメトリの最小の 2 番目の座標を返します。

## 構文
<a name="ST_YMin-function-syntax"></a>

```
ST_YMin(geom)
```

## 引数
<a name="ST_YMin-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_YMin-function-return"></a>

`DOUBLE PRECISION`最小の 2 番目の座標の 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

## 例
<a name="ST_YMin-function-examples"></a>

次の SQL は、LINESTRING の 最小の 2 番目の座標を返します。

```
SELECT ST_YMin(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
```

```
st_ymin
-----------
 29.07
```

# ST\$1Z
<a name="ST_Z-function"></a>

ST\$1Z は、入力ポイントの `z` 座標を返します。

## 構文
<a name="ST_Z-function-syntax"></a>

```
ST_Z(point)
```

## 引数
<a name="ST_Z-function-arguments"></a>

 *point*   
データ型 `POINT` の `GEOMETRY` 値。

## 戻り型
<a name="ST_Z-function-return"></a>

`m` 座標系の `DOUBLE PRECISION` 値。

*point* が null の場合、null が返されます。

*point* が 2D または 3DM のポイントの場合、null が返されます。

*point* が空のポイントの場合、null が返されます。

*point* が `POINT` でない場合、エラーが返されます。

## 例
<a name="ST_Z-function-examples"></a>

次の SQL は、1 つのポイントの `z` 座標を、3DZ ジオメトリで返します。

```
SELECT ST_Z(ST_GeomFromEWKT('POINT Z (1 2 3)'));
```

```
st_z
-----------
 3
```

次の SQL は、1 つのポイントの `z` 座標を、4D ジオメトリで返します。

```
SELECT ST_Z(ST_GeomFromEWKT('POINT ZM (1 2 3 4)'));
```

```
st_z
-----------
 3
```

# ST\$1ZMax
<a name="ST_ZMax-function"></a>

ST\$1ZMax は、入力ジオメトリの最大の `z` 座標を返します。

## 構文
<a name="ST_ZMax-function-syntax"></a>

```
ST_ZMax(geom)
```

## 引数
<a name="ST_ZMax-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_ZMax-function-return"></a>

最大の `z` 座標の `DOUBLE PRECISION` 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

*geom* が、2D または 3DM ジオメトリの場合、null が返されます。

## 例
<a name="ST_ZMax-function-examples"></a>

次の SQL は、ライン文字列の最大の `z` 座標を、3DZ ジオメトリで返します。

```
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING Z (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_zmax
-----------
  8
```

次の SQL は、ライン文字列の最大の `z` 座標を、4D ジオメトリで返します。

```
SELECT ST_ZMax(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_zmax
-----------
  10
```

# ST\$1ZMin
<a name="ST_ZMin-function"></a>

ST\$1ZMin は、入力ジオメトリの最小の `z` 座標を返します。

## 構文
<a name="ST_ZMin-function-syntax"></a>

```
ST_ZMin(geom)
```

## 引数
<a name="ST_ZMin-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="ST_ZMin-function-return"></a>

最小の `z` 座標の `DOUBLE PRECISION` 値。

*geom* が空の場合、null が返されます。

*geom* が null の場合、null が返されます。

*geom* が、2D または 3DM ジオメトリの場合、null が返されます。

## 例
<a name="ST_ZMin-function-examples"></a>

次の SQL は、ライン文字列の最小の `z` 座標を、3DZ ジオメトリで返します。

```
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING Z (0 1 2, 3 4 5, 6 7 8)'));
```

```
st_zmin
-----------
  2
```

次の SQL は、ライン文字列の最小の `z` 座標を、4D ジオメトリで返します。

```
SELECT ST_ZMin(ST_GeomFromEWKT('LINESTRING ZM (0 1 2 3, 4 5 6 7, 8 9 10 11)'));
```

```
st_zmin
-----------
  2
```

# SupportsBBox
<a name="SupportsBBox-function"></a>

SupportsBBox は、入力ジオメトリが、事前に計算された境界ボックスによるエンコーディングをサポートしている場合に true を返します。バウンディングボックスのサポートの詳細については、「[境界ボックス](spatial-terminology.md#spatial-terminology-bounding-box)」を参照してください。

## 構文
<a name="SupportsBBox-function-syntax"></a>

```
SupportsBBox(geom)
```

## 引数
<a name="SupportsBBox-function-arguments"></a>

 *geom*   
データ型 `GEOMETRY` の値または `GEOMETRY` 型と評価される式の値。

## 戻り型
<a name="SupportsBBox-function-return"></a>

`BOOLEAN`

*geom* が null の場合、null が返されます。

## 例
<a name="SupportsBBox-function-examples"></a>

次の SQL は、入力ポイントジオメトリが境界ボックスによるエンコードをサポートしているため、true を返します。

```
SELECT SupportsBBox(AddBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
supportsbbox
--------------
t
```

次の SQL は、入力ポイントジオメトリが境界ボックスによるエンコードをサポートしていないため、false を返します。

```
SELECT SupportsBBox(DropBBox(ST_GeomFromText('POLYGON((0 0,1 0,0 1,0 0))')));
```

```
supportsbbox
--------------
f
```

# 文字列関数
<a name="String_functions_header"></a>

**Topics**
+ [\$1\$1 (連結）演算子](r_concat_op.md)
+ [ASCII 関数](r_ASCII.md)
+ [BPCHARCMP 関数](r_BPCHARCMP.md)
+ [BTRIM 関数](r_BTRIM.md)
+ [BTTEXT\$1PATTERN\$1CMP 関数](r_BTTEXT_PATTERN_CMP.md)
+ [CHAR\$1LENGTH 関数](r_CHAR_LENGTH.md)
+ [CHARACTER\$1LENGTH 関数](r_CHARACTER_LENGTH.md)
+ [CHARINDEX 関数](r_CHARINDEX.md)
+ [CHR 関数](r_CHR.md)
+ [COLLATE 関数](r_COLLATE.md)
+ [CONCAT 関数](r_CONCAT.md)
+ [CRC32 関数](crc32-function.md)
+ [DIFFERENCE 関数](DIFFERENCE.md)
+ [INITCAP 関数](r_INITCAP.md)
+ [LEFT 関数および RIGHT 関数](r_LEFT.md)
+ [LEN 関数](r_LEN.md)
+ [LENGTH 関数](r_LENGTH.md)
+ [LOWER 関数](r_LOWER.md)
+ [LPAD 関数および RPAD 関数](r_LPAD.md)
+ [LTRIM 関数](r_LTRIM.md)
+ [OCTETINDEX 関数](OCTETINDEX.md)
+ [OCTET\$1LENGTH 関数](r_OCTET_LENGTH.md)
+ [POSITION 関数](r_POSITION.md)
+ [QUOTE\$1IDENT 関数](r_QUOTE_IDENT.md)
+ [QUOTE\$1LITERAL 関数](r_QUOTE_LITERAL.md)
+ [REGEXP\$1COUNT 関数](REGEXP_COUNT.md)
+ [REGEXP\$1INSTR 関数](REGEXP_INSTR.md)
+ [REGEXP\$1REPLACE 関数](REGEXP_REPLACE.md)
+ [REGEXP\$1SUBSTR 関数](REGEXP_SUBSTR.md)
+ [REPEAT 関数](r_REPEAT.md)
+ [REPLACE 関数](r_REPLACE.md)
+ [REPLICATE 関数](r_REPLICATE.md)
+ [REVERSE 関数](r_REVERSE.md)
+ [RTRIM 関数](r_RTRIM.md)
+ [SOUNDEX 関数](SOUNDEX.md)
+ [SPLIT\$1PART 関数](SPLIT_PART.md)
+ [STRPOS 関数](r_STRPOS.md)
+ [STRTOL 関数](r_STRTOL.md)
+ [SUBSTRING 関数](r_SUBSTRING.md)
+ [TEXTLEN 関数](r_TEXTLEN.md)
+ [TRANSLATE 関数](r_TRANSLATE.md)
+ [TRIM 関数](r_TRIM.md)
+ [UPPER 関数](r_UPPER.md)

文字列関数は、文字列、または文字列に評価される式を処理します。これらの関数の *string* 引数がリテラル値である場合は、その値を一重引用符で囲む必要があります。サポートされるデータ型には、CHAR や VARCHAR があります。

次のセクションでは、サポートされる関数の関数名と構文を示し、それらについて説明します。文字列のオフセットはすべて 1 から始まります。
<a name="string-functions-deprecated"></a>
**廃止されたリーダーノード専用の関数**  
次の文字列関数は、リーダーノードのみで実行されるため、非推奨となりました。詳細については、「[リーダーノード専用関数](c_SQL_functions_leader_node_only.md)」を参照してください。
+ GET\$1BYTE
+ SET\$1BIT
+ SET\$1BYTE
+ TO\$1ASCII

# \$1\$1 (連結）演算子
<a name="r_concat_op"></a>

`||` 記号の両側にある 2 つの式を連結し、連結した式を返します。

[CONCAT 関数](r_CONCAT.md) と同様です。

**注記**  
一方または両方の式が null の場合、連結の結果は `NULL` になります。

## 構文
<a name="r_concat_op-synopsis"></a>

```
expression1 || expression2
```

## 引数
<a name="r_concat_op-arguments"></a>

 *expression1*   
`CHAR` 文字列、`VARCHAR` 文字列、バイナリ式、またはこれらの型のいずれかに評価される式。

 *expression2*   
`CHAR` 文字列、`VARCHAR` 文字列、バイナリ式、またはこれらの型のいずれかに評価される式。

## 戻り型
<a name="r_concat_op-return-type"></a>

 文字列の戻り型は、入力引数の型と同じです。例えば、`VARCHAR` 型の 2 つの文字列を連結すると、`VARCHAR` 型の文字列が返されます。

## 例
<a name="r_concat_op-example"></a>

 以下の例では、TICKIT サンプルデータベースの USERS テーブルと VENUE テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

サンプルデータベースで USERS テーブルの FIRSTNAME フィールドと LASTNAME フィールドを連結するには、次の例を使用します。

```
SELECT (firstname || ' ' || lastname) as fullname
FROM users
ORDER BY 1
LIMIT 10;

+-----------------+
|    fullname     |
+-----------------+
| Aaron Banks     |
| Aaron Booth     |
| Aaron Browning  |
| Aaron Burnett   |
| Aaron Casey     |
| Aaron Cash      |
| Aaron Castro    |
| Aaron Dickerson |
| Aaron Dixon     |
| Aaron Dotson    |
+-----------------+
```

 Null を含む可能性がある列を連結するには、[NVL および COALESCE 関数](r_NVL_function.md)式を使用します。次の例は、NVL を使用して、`NULL` が発生するたびに `0` を返します。

```
SELECT (venuename || ' seats ' || NVL(venueseats, 0)) as seating
FROM venue
WHERE venuestate = 'NV' or venuestate = 'NC'
ORDER BY 1
LIMIT 10;

+-------------------------------------+
|               seating               |
+-------------------------------------+
| Ballys Hotel seats 0                |
| Bank of America Stadium seats 73298 |
| Bellagio Hotel seats 0              |
| Caesars Palace seats 0              |
| Harrahs Hotel seats 0               |
| Hilton Hotel seats 0                |
| Luxor Hotel seats 0                 |
| Mandalay Bay Hotel seats 0          |
| Mirage Hotel seats 0                |
| New York New York seats 0           |
+-------------------------------------+
```

# ASCII 関数
<a name="r_ASCII"></a>

ASCII 関数は、指定した文字列の最初の文字の ASCII コード、または Unicode コードポイントを返します。文字列が空の場合、関数は `0` を返します。文字列が null の場合は、`NULL` を返します。

## 構文
<a name="r_ASCII-synopsis"></a>

```
ASCII('string')
```

## 引数
<a name="r_ASCII-arguments"></a>

 *string*   
`CHAR` 文字列または `VARCHAR` 文字列。

## 戻り型
<a name="r_ASCII-return-type"></a>

 INTEGER 

## 例
<a name="r_ASCII-examples"></a>

`NULL` を返すには、次の例を使用します。2 つの引数が同じである場合、NULLIF 関数は `NULL` を返し、ASCII 関数の入力引数は `NULL` になります。詳細については、「[NULLIF 関数](r_NULLIF_function.md)」を参照してください。

```
SELECT ASCII(NULLIF('',''));

+-------+
| ascii |
+-------+
|  NULL |
+-------+
```

ASCII コード 0 を返すには、次の例を使用します。

```
SELECT ASCII('');

+-------+
| ascii |
+-------+
|     0 |
+-------+
```

amazon という単語の 1 文字目の ASCII コード 97 を返すには、次の例を使用します。

```
SELECT ASCII('amazon');

+-------+
| ascii |
+-------+
|    97 |
+-------+
```

Amazon という単語の 1 文字目の ASCII コード 65 を返すには、次の例を使用します。

```
SELECT ASCII('Amazon');

+-------+
| ascii |
+-------+
|    65 |
+-------+
```

# BPCHARCMP 関数
<a name="r_BPCHARCMP"></a>

2 つの文字列の値を比較し、整数を返します。文字列が同じである場合、関数は `0` を返します。1 番目の文字列がアルファベット順でより大きい場合、関数は `1` を返します。2 番目の文字列がより大きい場合、関数は `-1` を返します。

マルチバイトの文字の場合は、バイトエンコーディングを基に比較が行われます。

[BTTEXT\$1PATTERN\$1CMP 関数](r_BTTEXT_PATTERN_CMP.md) のシノニム。

## 構文
<a name="r_BPCHARCMP-synopsis"></a>

```
BPCHARCMP(string1, string2)
```

## 引数
<a name="r_BPCHARCMP-arguments"></a>

 *string1*   
`CHAR` 文字列または `VARCHAR` 文字列。

 *string2*   
`CHAR` 文字列または `VARCHAR` 文字列。

## 戻り型
<a name="r_BPCHARCMP-return-type"></a>

 INTEGER 

## 例
<a name="r_BPCHARCMP-examples"></a>

 以下の例では、TICKIT サンプルデータベースの USERS テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

USERS テーブル内の最初の 10 個のエントリについて、ユーザーの名と姓をアルファベット順で比較し、名が姓よりアルファベット順で先になるかどうかを判別するには、次の例を使用します。FIRSTNAME の文字列が LASTNAME の文字列よりアルファベット順で後になるエントリについては、関数は `1` を返します。LASTNAME が FIRSTNAME よりアルファベット順で後になる場合、関数は `-1` を返します。

```
SELECT userid, firstname, lastname, BPCHARCMP(firstname, lastname)
FROM users
ORDER BY 1, 2, 3, 4
LIMIT 10;

+--------+-----------+-----------+-----------+
| userid | firstname | lastname  | bpcharcmp |
+--------+-----------+-----------+-----------+
|      1 | Rafael    | Taylor    |        -1 |
|      2 | Vladimir  | Humphrey  |         1 |
|      3 | Lars      | Ratliff   |        -1 |
|      4 | Barry     | Roy       |        -1 |
|      5 | Reagan    | Hodge     |         1 |
|      6 | Victor    | Hernandez |         1 |
|      7 | Tamekah   | Juarez    |         1 |
|      8 | Colton    | Roy       |        -1 |
|      9 | Mufutau   | Watkins   |        -1 |
|     10 | Naida     | Calderon  |         1 |
+--------+-----------+-----------+-----------+
```

この関数が `0` を返す、USERS テーブル内のすべてのエントリを返すには、次の例を使用します。FIRSTNAME と LASTNAME が同じである場合、この関数は `0` を返します。

```
SELECT userid, firstname, lastname,
BPCHARCMP(firstname, lastname)
FROM users 
WHERE BPCHARCMP(firstname, lastname)=0
ORDER BY 1, 2, 3, 4;

+--------+-----------+----------+-----------+
| userid | firstname | lastname | bpcharcmp |
+--------+-----------+----------+-----------+
|     62 | Chase     | Chase    |         0 |
|   4008 | Whitney   | Whitney  |         0 |
|  12516 | Graham    | Graham   |         0 |
|  13570 | Harper    | Harper   |         0 |
|  16712 | Cooper    | Cooper   |         0 |
|  18359 | Chase     | Chase    |         0 |
|  27530 | Bradley   | Bradley  |         0 |
|  31204 | Harding   | Harding  |         0 |
+--------+-----------+----------+-----------+
```

# BTRIM 関数
<a name="r_BTRIM"></a>

BTRIM 関数は、先頭および末尾の空白を削除するか、またはオプションで指定された文字列と一致する先頭および末尾の文字を削除することによって、文字列を切り捨てます。

## 構文
<a name="r_BTRIM-synopsis"></a>

```
BTRIM(string [, trim_chars ] )
```

## 引数
<a name="r_BTRIM-arguments"></a>

 *string*   
切り捨てる入力 VARCHAR 文字列。

 *trim\$1chars*   
イッチする文字を含む VARCHAR 文字列。

## 戻り型
<a name="r_BTRIM-return-type"></a>

BTRIM 関数は、VARCHAR 型の文字列を返します。

## 例
<a name="r_BTRIM-examples"></a>

次の例では、文字列 `' abc '` の先頭および末尾の空白を切り捨てます。

```
select '     abc    ' as untrim, btrim('     abc    ') as trim;

untrim    | trim
----------+------
   abc    | abc
```

次の例では、文字列 `'xyzaxyzbxyzcxyz'` から先頭および末尾の文字列 `'xyz'` を削除します。先頭および末尾にある `'xyz'` は削除されますが、文字列内部にあるその文字列は削除されません。

```
select 'xyzaxyzbxyzcxyz' as untrim,
btrim('xyzaxyzbxyzcxyz', 'xyz') as trim;

     untrim      |   trim
-----------------+-----------
 xyzaxyzbxyzcxyz | axyzbxyzc
```

次の例では、*trim\$1chars* リスト `'tes'` のいずれかの文字と一致する文字列 `'setuphistorycassettes'` の先頭と末尾の部分を削除します。入力文字列の先頭または末尾にある *trim\$1chars* リストに含まれていない別の文字の前に出現する `t`、`e` または `s` が削除されます。

```
SELECT btrim('setuphistorycassettes', 'tes');

     btrim      
-----------------
 uphistoryca
```

# BTTEXT\$1PATTERN\$1CMP 関数
<a name="r_BTTEXT_PATTERN_CMP"></a>

BPCHARCMP 関数のシノニム。

詳細については、「[BPCHARCMP 関数](r_BPCHARCMP.md)」を参照してください。

# CHAR\$1LENGTH 関数
<a name="r_CHAR_LENGTH"></a>

LEN 関数のシノニム。

「[LEN 関数](r_LEN.md)」を参照してください。

# CHARACTER\$1LENGTH 関数
<a name="r_CHARACTER_LENGTH"></a>

LEN 関数のシノニム。

「[LEN 関数](r_LEN.md)」を参照してください。

# CHARINDEX 関数
<a name="r_CHARINDEX"></a>

文字列内の指定されたサブ文字列の位置を返します。

同様の関数については、「[POSITION 関数](r_POSITION.md)」および「[STRPOS 関数](r_STRPOS.md)」を参照してください。

## 構文
<a name="r_CHARINDEX-synopsis"></a>

```
CHARINDEX( substring, string )
```

## 引数
<a name="charindex-arguments"></a>

 *substring*   
*string* 内を検索するサブ文字列。

 *string*   
検索する文字列または列。

## 戻り型
<a name="charindex-return-type"></a>

 INTEGER   
CHARINDEX 関数は、サブ文字列の位置 (0 ではなく 1 から始まる) に対応する `INTEGER` を返します。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。文字列内でサブ文字列が見つからなかった場合、CHARINDEX は `0` を返します。

## 例
<a name="sub-charindex-usage-notes-examples"></a>

`dog` という語の中での文字列 `fish` の位置を返すには、次の例を使用します。

```
SELECT CHARINDEX('fish', 'dog');

+-----------+
| charindex |
+-----------+
|         0 |
+-----------+
```

`dogfish` という語の中での文字列 `fish` の位置を返すには、次の例を使用します。

```
SELECT CHARINDEX('fish', 'dogfish');

+-----------+
| charindex |
+-----------+
|         4 |
+-----------+
```

 以下の例は、TICKIT サンプルデータベースの SALES テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

SALES テーブル内でコミッションが 999.00 を上回る販売取引の数を返すには、次の例を使用します。このコマンドは、999.00 を超えるコミッションをカウントします。これは、小数点以下の桁数がコミッション値の先頭から 4 桁より大きいかどうかを調べることでカウントされます。

```
SELECT DISTINCT CHARINDEX('.', commission), COUNT (CHARINDEX('.', commission))
FROM sales 
WHERE CHARINDEX('.', commission) > 4 
GROUP BY CHARINDEX('.', commission)
ORDER BY 1,2;

+-----------+-------+
| charindex | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```

# CHR 関数
<a name="r_CHR"></a>

CHR 関数は、入力パラメータに指定された ASCII コードポイント値と一致する文字を返します。

## 構文
<a name="r_CHR-synopsis"></a>

```
CHR(number)
```

## 引数
<a name="r_CHR-argument"></a>

 *数値*   
入力パラメータは、ASCII コードポイント値を表す `INTEGER` です。

## 戻り型
<a name="r_CHR-return-type"></a>

 CHAR   
ASCII 文字が入力値と一致した場合、CHR 関数は `CHAR` 型の文字列を返します。入力された数値に一致する ASCII が存在しない場合、この関数は `NULL` を返します。

## 例
<a name="r_CHR-example"></a>

ASCII コードポイント 0 に対応する文字を返すには、次の例を使用します。CHR 関数は入力 `0` に対して `NULL` を返すことに注意してください。

```
SELECT CHR(0);

+-----+
| chr |
+-----+
|     |
+-----+
```

ASCII コードポイント 65 に対応する文字を返すには、次の例を使用します。

```
SELECT CHR(65);

+-----+
| chr |
+-----+
| A   |
+-----+
```

大文字 A (ASCII コードポイント 65) で始まる固有のイベント名を返すには、次の例を使用します。次の例では、TICKIT サンプルデータベースの EVENT テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
SELECT DISTINCT eventname FROM event
WHERE SUBSTRING(eventname, 1, 1)=CHR(65) LIMIT 5;

+-----------------------+
|       eventname       |
+-----------------------+
| A Catered Affair      |
| As You Like It        |
| A Man For All Seasons |
| Alan Jackson          |
| Armando Manzanero     |
+-----------------------+
```

# COLLATE 関数
<a name="r_COLLATE"></a>

COLLATE 関数は、文字列の列または表現に関する照合をオーバーライドします。

データベースの照合を使用してテーブルを作成する方法については、「[CREATE TABLE](r_CREATE_TABLE_NEW.md)」を参照してください。

データベース照合を使用してデータベースを作成する方法については、「[CREATE DATABASE](r_CREATE_DATABASE.md)」を参照してください。

## 構文
<a name="r_COLLATE-synopsis"></a>

```
COLLATE( string, 'case_sensitive' | 'cs' | 'case_insensitive' | 'ci');
```

## 引数
<a name="r_COLLATE-argument"></a>

 *string*   
上書きする先の文字列の列または式です。

 *'case\$1sensitive'* \$1 *'cs'* \$1 *'case\$1insensitive'* \$1 *'ci'*  
照合名を示す文字列定数です。Amazon Redshift は、このパラメータに対して以下の値のみをサポートしています。  
+  *case\$1sensitive* 
+  *cs* 
+  *case\$1insensitive* 
+  *ci (クリーンスレートインストール* 
*case\$1sensitive* と *cs* は互換性があり、同じ結果が得られます。同様に、*case\$1insensitive* と *ci* は互換性があり、同じ結果が得られます。

## 戻り型
<a name="r_COLLATE-return-type"></a>

COLLATE 関数は、最初の入力式の型に応じて `VARCHAR`、`CHAR` または `SUPER` を返します。この関数は、最初の入力引数についての照合を変更するだけで、出力値は変更されません。

## 例
<a name="r_COLLATE-example"></a>

テーブル T を作成し、テーブル T の col1 を`case_sensitive` と定義するには、次の例を使用します。

```
CREATE TABLE T ( col1 Varchar(20) COLLATE case_sensitive );

INSERT INTO T VALUES ('john'),('JOHN');
```

 最初のクエリを実行すると、Amazon Redshift は `john` だけを返します。col1 上で COLLATE 関数が実行された後、照合は `case_insensitive` になります。2 番目のクエリは `john` と `JOHN` の両方を返します。

```
SELECT * FROM T WHERE col1 = 'john';

+------+
| col1 |
+------+
| john |
+------+

SELECT * FROM T WHERE COLLATE(col1, 'case_insensitive') = 'john';

+------+
| col1 |
+------+
| john |
| JOHN |
+------+
```

テーブル A を作成し、テーブル A の col1 を `case_insensitive` と定義するには、次の例を使用します。

```
CREATE TABLE A ( col1 Varchar(20) COLLATE case_insensitive );

INSERT INTO A VALUES ('john'),('JOHN');
```

 最初のクエリを実行すると、Amazon Redshift は `john` と `JOHN` の両方を返します。col1 上で COLLATE 関数が実行された後、照合は `case_sensitive` になります。2 番目のクエリは `john` のみを返します。

```
SELECT * FROM A WHERE col1 = 'john';

+------+
| col1 |
+------+
| john |
| JOHN |
+------+

SELECT * FROM A WHERE COLLATE(col1, 'case_sensitive') = 'john';

+------+
| col1 |
+------+
| john |
+------+
```

# CONCAT 関数
<a name="r_CONCAT"></a>

CONCAT 関数は、2 つの式を連結し、結果の表現を返します。3 つ以上の式を連結するには、CONCAT 関数をネストして使用します。2 つの式の間に連結演算子 (`||`) を指定した場合も、CONCAT 関数と同じ結果が返されます。

## 構文
<a name="r_CONCAT-synopsis"></a>

```
CONCAT ( expression1, expression2 )
```

## 引数
<a name="r_CONCAT-arguments"></a>

 *expression1*, *expression2*   
どちらの引数にも、固定長文字列、可変長文字列、バイナリ式、またはこれらの入力のいずれかとして評価される式を指定できます。

## 戻り型
<a name="r_CONCAT-return-type"></a>

 CONCAT は式を返します。式のデータ型は、入力引数の型と同じです。

入力式の型が異なる場合、Amazon Redshift はそれらの式の 1 つを暗黙的に型キャストしようとします。値を型キャストできない場合は、エラーが返されます。

## 使用に関する注意事項
<a name="r_CONCAT-usage-notes"></a>
+ CONCAT 関数ならびに連結演算子のどちらにおいても、一方または両方の表現が null である場合は、連結の結果も null になります。

## 例
<a name="r_CONCAT-examples"></a>

次の例では、2 つの文字リテラルを連結します。

```
SELECT CONCAT('December 25, ', '2008');

concat
-------------------
December 25, 2008
(1 row)
```

次のクエリでは、CONCAT ではなく `||` 演算子を使用しており、同じ結果が返されます。

```
SELECT 'December 25, '||'2008';

?column?
-------------------
December 25, 2008
(1 row)
```

次の例では、ネストされた CONCAT 関数を別の CONCAT 関数の中で使用して 3 つの文字列を連結します。

```
SELECT CONCAT('Thursday, ', CONCAT('December 25, ', '2008'));

concat
-----------------------------
Thursday, December 25, 2008
(1 row)
```

NULL を含む可能性のある列を連結するには、[NVL および COALESCE 関数](r_NVL_function.md) を使用し、NULL に遭遇したときに特定の値を返します。次の例は、NVL を使用して、NULL が発生するたびに 0 を返します。

```
SELECT CONCAT(venuename, CONCAT(' seats ', NVL(venueseats, 0))) AS seating
FROM venue WHERE venuestate = 'NV' OR venuestate = 'NC'
ORDER BY 1
LIMIT 5;

seating                            
-----------------------------------
Ballys Hotel seats 0               
Bank of America Stadium seats 73298
Bellagio Hotel seats 0             
Caesars Palace seats 0             
Harrahs Hotel seats 0              
(5 rows)
```

次のクエリでは、VENUE テーブル内の CITY 値と STATE 値を連結します。

```
SELECT CONCAT(venuecity, venuestate)
FROM venue
WHERE venueseats > 75000
ORDER BY venueseats;

concat
-------------------
DenverCO
Kansas CityMO
East RutherfordNJ
LandoverMD
(4 rows)
```

次のクエリでは、ネストされた CONCAT 関数を使用しています。このクエリは、VENUE テーブル内の CITY 値と STATE 値を連結しますが、結果の文字列をカンマおよびスペースで区切ります。

```
SELECT CONCAT(CONCAT(venuecity,', '),venuestate)
FROM venue
WHERE venueseats > 75000
ORDER BY venueseats;

concat
---------------------
Denver, CO
Kansas City, MO
East Rutherford, NJ
Landover, MD
(4 rows)
```

次の例では、2 つのバイナリ式を連結します。ここで、`abc`は `616263` の 16 進数表現を含む 2 進数値 であり、`def`は `646566` の 16 進数表現を含む 2 進数値です。結果は、バイナリ値の 16 進数表現として自動的に出力されます。

```
SELECT CONCAT('abc'::VARBYTE, 'def'::VARBYTE);

concat
-------------------
616263646566
```

# CRC32 関数
<a name="crc32-function"></a>

CRC32 はエラー検出に使用される機能です。この関数は、CRC32 アルゴリズムを使用して、ソースデータとターゲットデータの間の変更を検出します。CRC32 関数は、可変長文字列を 8 文字の文字列に変換します。この 8 文字の文字列は、32 ビットバイナリシーケンスの 16 進値をテキストで表記したものです。ソースデータとターゲットデータ間の変更を検出するには、ソースデータに CRC32 関数を使用して出力を保存します。次に、ターゲットデータに CRC32 関数を使用して、その出力をソースデータからの出力と比較します。データが変更されていない場合は出力が同じになり、データが変更されている場合は出力が異なります。

## 構文
<a name="crc32-function-syntax"></a>

```
CRC32(string)
```

## 引数
<a name="crc32-function-arguments"></a>

 *string*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

## 戻り型
<a name="crc32-function-return-type"></a>

CRC32 関数は、8 文字の文字列を返します。この 8 文字の文字列は、32 ビットバイナリシーケンスの 16 進値をテキストで表記したものです。Amazon Redshift の CRC32 関数は CRC-32C の多項式に基づいています。

## 例
<a name="crc32-function-example"></a>

文字列 `Amazon Redshift` の 8 ビット値を表示するには。

```
SELECT CRC32('Amazon Redshift');

+----------+
|  crc32   |
+----------+
| f2726906 |
+----------+
```

# DIFFERENCE 関数
<a name="DIFFERENCE"></a>

DIFFERENCE 関数は 2 つの文字列の American Soundex コードを比較します。この関数は `INTEGER` を返し、Soundex コード間で一致する文字の数を示します。

 Soundex コードは 4 文字の長さの文字列です。Soundex コードは、単語のスペルではなく発音方法を表します。例えば、`Smith` と `Smyth` は同じ Soundex コードを持ちます。

## 構文
<a name="DIFFERENCE-synopsis"></a>

```
DIFFERENCE(string1, string2)
```

## 引数
<a name="DIFFERENCE-arguments"></a>

 *string1*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

 *string2*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

## 戻り型
<a name="DIFFERENCE-return-type"></a>

 INTEGER   
DIFFERENCE 関数は、American Soundex コードで 2 つの文字列内の一致する文字の数をカウントする `INTEGER` 値 0～4 を返します。Soundex コードは 4 文字であるため、文字列の American Soundex コード値の 4 文字すべてが同じ場合、DIFFERENCE 関数は `4` を返します。2 つの文字列のうちの 1 つが空の場合、DIFFERENCE は `0` を返します。この関数は、どちらの文字列にも有効な文字が含まれていない場合、`1` を返します。DIFFERENCE 関数は、a～z および A～Z を含む、英字のアルファベットで小文字または大文字の ASCII 文字のみを変換します。DIFFERENCE 関数は、他の文字を無視します。

## 例
<a name="DIFFERENCE-examples"></a>

文字列 `%` および `@` の Soundex 値を比較するには、次の例を使用します。この関数は、どちらの文字列にも有効な文字が含まれていないため、`1` を返します。

```
SELECT DIFFERENCE('%', '@');

+------------+
| difference |
+------------+
|          1 |
+------------+
```

`Amazon` および空の文字列の Soundex 値を比較するには、次の例を使用します。2 つの文字列のうちの 1 つが空であるため、この関数は `0` を返します。

```
SELECT DIFFERENCE('Amazon', '');

+------------+
| difference |
+------------+
|          0 |
+------------+
```

文字列 `Amazon` および `Ama` の Soundex 値を比較するには、次の例を使用します。文字列の Soundex 値の 2 文字が同じであるため、この関数は `2` を返します。

```
SELECT DIFFERENCE('Amazon', 'Ama');

+------------+
| difference |
+------------+
|          2 |
+------------+
```

文字列 `Amazon` および `+-*/%Amazon` の Soundex 値を比較するには、次の例を使用します。文字列の Soundex 値の 4 文字すべてが同じであるため、この関数は `4` を返します。この関数は、2 番目の文字列の無効な文字 `+-*/%` を無視することに注目してください。

```
SELECT DIFFERENCE('Amazon', '+-*/%Amazon');

+------------+
| difference |
+------------+
|          4 |
+------------+
```

文字列 `AC/DC` および `Ay See Dee See` の Soundex 値を比較するには、次の例を使用します。文字列の Soundex 値の 4 文字すべてが同じであるため、この関数は `4` を返します。

```
SELECT DIFFERENCE('AC/DC', 'Ay See Dee See');

+------------+
| difference |
+------------+
|          4 |
+------------+
```

# INITCAP 関数
<a name="r_INITCAP"></a>

指定された文字列内の各単語の先頭文字を大文字にします。INITCAP は、UTF-8 マルチバイト文字に対応しています (1 文字につき最大で 4 バイトまで)。

## 構文
<a name="r_INITCAP-synopsis"></a>

```
INITCAP(string)
```

## 引数
<a name="r_INITCAP-argument"></a>

 *string*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

## 戻り型
<a name="r_INITCAP-return-type"></a>

VARCHAR

## 使用に関する注意事項
<a name="r_INITCAP_usage_notes"></a>

INITCAP 関数は、文字列内の各単語の先頭文字を大文字にして、2 文字目以降を小文字 (のまま) にします。そのため、単語区切り文字として機能する文字 (スペース文字以外) を理解することが重要です。*単語区切り*文字は、任意の非英数字 (句読点、記号、および制御文字を含む) です。以下の文字はすべて、単語区切り文字です。

```
! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 
```

タブ、改行文字、フォームフィード、ラインフィード、およびキャリッジリターンも単語区切り文字です。

## 例
<a name="r_INITCAP-examples"></a>

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルと USERS テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATDESC 列内の各単語の先頭文字を大文字にするには、次の例を使用します。

```
SELECT catid, catdesc, INITCAP(catdesc)
FROM category
ORDER BY 1, 2, 3;

+-------+--------------------------------------------+--------------------------------------------+
| catid |                  catdesc                   |                  initcap                   |
+-------+--------------------------------------------+--------------------------------------------+
|     1 | Major League Baseball                      | Major League Baseball                      |
|     2 | National Hockey League                     | National Hockey League                     |
|     3 | National Football League                   | National Football League                   |
|     4 | National Basketball Association            | National Basketball Association            |
|     5 | Major League Soccer                        | Major League Soccer                        |
|     6 | Musical theatre                            | Musical Theatre                            |
|     7 | All non-musical theatre                    | All Non-Musical Theatre                    |
|     8 | All opera and light opera                  | All Opera And Light Opera                  |
|     9 | All rock and pop music concerts            | All Rock And Pop Music Concerts            |
|    10 | All jazz singers and bands                 | All Jazz Singers And Bands                 |
|    11 | All symphony, concerto, and choir concerts | All Symphony, Concerto, And Choir Concerts |
+-------+--------------------------------------------+--------------------------------------------+
```

INITCAP 関数が先頭文字以外の大文字を大文字として保存しないことを示すには、次の例を使用します。例えば、文字列 `MLB` は `Mlb` になります。

```
SELECT INITCAP(catname)
FROM category
ORDER BY catname;

+-----------+
|  initcap  |
+-----------+
| Classical |
| Jazz      |
| Mlb       |
| Mls       |
| Musicals  |
| Nba       |
| Nfl       |
| Nhl       |
| Opera     |
| Plays     |
| Pop       |
+-----------+
```

スペース関数以外の英数字以外の文字を単語の区切り文字として使用するには、次の例を使用します。各文字列のいくつかの文字が大文字になります。

```
SELECT email, INITCAP(email)
FROM users
ORDER BY userid DESC LIMIT 5;

+------------------------------------+------------------------------------+
|               email                |              initcap               |
+------------------------------------+------------------------------------+
| urna.Ut@egetdictumplacerat.edu     | Urna.Ut@Egetdictumplacerat.Edu     |
| nibh.enim@egestas.ca               | Nibh.Enim@Egestas.Ca               |
| in@Donecat.ca                      | In@Donecat.Ca                      |
| sodales@blanditviverraDonec.ca     | Sodales@Blanditviverradonec.Ca     |
| sociis.natoque.penatibus@vitae.org | Sociis.Natoque.Penatibus@Vitae.Org |
+------------------------------------+------------------------------------+
```

# LEFT 関数および RIGHT 関数
<a name="r_LEFT"></a>

これらの関数は、文字列の左端または右端にある指定数の文字を返します。

number はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。

## 構文
<a name="r_LEFT-synopsis"></a>

```
LEFT( string,  integer )

RIGHT( string,  integer )
```

## 引数
<a name="r_LEFT-arguments"></a>

 *string*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 文字列に評価される式。

 * (整数*)   
正の整数。

## 戻り型
<a name="r_LEFT-return-type"></a>

VARCHAR

## 例
<a name="r_LEFT-example"></a>

次の例では、TICKIT サンプルデータベースの EVENT テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

イベント ID が 1000～1005 であるイベント名の左端 5 文字および右端 5 文字を返すには、次の例を使用します。

```
SELECT eventid, eventname,
LEFT(eventname,5) AS left_5,
RIGHT(eventname,5) AS right_5
FROM event
WHERE eventid BETWEEN 1000 AND 1005
ORDER BY 1;

+---------+----------------+--------+---------+
| eventid |   eventname    | left_5 | right_5 |
+---------+----------------+--------+---------+
|    1000 | Gypsy          | Gypsy  | Gypsy   |
|    1001 | Chicago        | Chica  | icago   |
|    1002 | The King and I | The K  | and I   |
|    1003 | Pal Joey       | Pal J  | Joey    |
|    1004 | Grease         | Greas  | rease   |
|    1005 | Chicago        | Chica  | icago   |
+---------+----------------+--------+---------+
```

# LEN 関数
<a name="r_LEN"></a>

指定された文字列の長さを文字列数として返します。

## 構文
<a name="r_LEN-synopsis"></a>

LEN は [LENGTH 関数](r_LENGTH.md)、[CHAR\$1LENGTH 関数](r_CHAR_LENGTH.md)、[CHARACTER\$1LENGTH 関数](r_CHARACTER_LENGTH.md)、および [TEXTLEN 関数](r_TEXTLEN.md) のシノニムです。

```
LEN(expression)
```

## 引数
<a name="r_LEN-argument"></a>

 *expression*   
`CHAR` 文字列、`VARCHAR` 文字列、`VARBYTE` 式、あるいは `CHAR`、`VARCHAR`、または `VARBYTE` 型に暗黙的に評価される式。

## 戻り型
<a name="r_LEN-return-type"></a>

 INTEGER   
LEN 関数は、入力文字列の文字数を示す整数を返します。  
入力が文字列の場合、LEN 関数は、マルチバイト文字列のバイト数ではなく、この文字列の実際の文字数を返します。例えば、4 バイトの中国語文字を 3 つ保存するためには、`VARCHAR(12)` 列が必要です。LEN 関数は、その文字列に対して `3` を返します。文字列の長さをバイト単位で取得するには、[OCTET\$1LENGTH](r_OCTET_LENGTH.md)関数を使用します。

## 使用に関する注意事項
<a name="r_LEN_usage_notes"></a>

*式*が `CHAR` 文字列である場合、末尾のスペースはカウントされません。

*式*が `VARCHAR` 文字列である場合、末尾のスペースはカウントされます。

## 例
<a name="r_LEN-example"></a>

文字列 `français` のバイト数および文字数を返すには、次の例を使用します。

```
SELECT OCTET_LENGTH('français'), 
LEN('français');

+--------------+-----+
| octet_length | len |
+--------------+-----+
|            9 |   8 |
+--------------+-----+
```

OCTET\$1LENGTH 関数を使用せずに、文字列 `français` のバイト数および文字数を返すには、次の例を使用します。詳細については、「[CAST 関数](r_CAST_function.md)」を参照してください。

```
SELECT LEN(CAST('français' AS VARBYTE)) as bytes, LEN('français');

+-------+-----+
| bytes | len |
+-------+-----+
|     9 |   8 |
+-------+-----+
```

末尾にスペースのない文字列 `cat`、末尾にスペースが 3 つある `cat `、末尾にスペースが 3 つあり、長さ 6 の `CHAR` にキャストされる `cat `、末尾にスペースが 3 つあり、長さ 6 の `VARCHAR` にキャストされる `cat ` の文字数を返すには、次の例を使用します。この関数は `CHAR` 文字列の末尾のスペースをカウントしませんが、`VARCHAR` 文字列の末尾のスペースはカウントすることに注意してください。

```
SELECT LEN('cat'), LEN('cat   '), LEN(CAST('cat   ' AS CHAR(6))) AS len_char, LEN(CAST('cat   ' AS VARCHAR(6))) AS len_varchar;

+-----+-----+----------+-------------+
| len | len | len_char | len_varchar |
+-----+-----+----------+-------------+
|   3 |   6 |        3 |           6 |
+-----+-----+----------+-------------+
```

次の例では、TICKIT サンプルデータベースの VENUE テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

VENUE テーブル内で最長の venue 名を 10 個返すには、次の例を使用します。

```
SELECT venuename, LEN(venuename)
FROM venue
ORDER BY 2 DESC, 1
LIMIT 10;

+-----------------------------------------+-----+
|                venuename                | len |
+-----------------------------------------+-----+
| Saratoga Springs Performing Arts Center |  39 |
| Lincoln Center for the Performing Arts  |  38 |
| Nassau Veterans Memorial Coliseum       |  33 |
| Jacksonville Municipal Stadium          |  30 |
| Rangers BallPark in Arlington           |  29 |
| University of Phoenix Stadium           |  29 |
| Circle in the Square Theatre            |  28 |
| Hubert H. Humphrey Metrodome            |  28 |
| Oriole Park at Camden Yards             |  27 |
| Dick's Sporting Goods Park              |  26 |
+-----------------------------------------+-----+
```

# LENGTH 関数
<a name="r_LENGTH"></a>

LEN 関数のシノニム。

「[LEN 関数](r_LEN.md)」を参照してください。

# LOWER 関数
<a name="r_LOWER"></a>

文字列を小文字に変換します。LOWER は、UTF-8 マルチバイト文字に対応しています (1 文字につき最大で 4 バイトまで)。

## 構文
<a name="r_LOWER-synopsis"></a>

```
LOWER(string)
```

## 引数
<a name="r_LOWER-argument"></a>

 *string*   
`VARCHAR` 型に評価される `VARCHAR` 文字列または式。

## 戻り型
<a name="r_LOWER-return-type"></a>

 string   
LOWER 関数は、入力文字列と同じデータ型の文字列を返します。例えば、入力が `CHAR` 文字列の場合、この関数は `CHAR` 文字列を返します。

## 例
<a name="r_LOWER-examples"></a>

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATGROUP 列の文字列 `VARCHAR` を小文字に変換するには、次の例を使用します。

```
SELECT catname, LOWER(catname) FROM category ORDER BY 1,2;

+-----------+-----------+
|  catname  |   lower   |
+-----------+-----------+
| Classical | classical |
| Jazz      | jazz      |
| MLB       | mlb       |
| MLS       | mls       |
| Musicals  | musicals  |
| NBA       | nba       |
| NFL       | nfl       |
| NHL       | nhl       |
| Opera     | opera     |
| Plays     | plays     |
| Pop       | pop       |
+-----------+-----------+
```

# LPAD 関数および RPAD 関数
<a name="r_LPAD"></a>

これらの関数は、指定された長さに基づいて、文字列の前または後に文字を付加します。

## 構文
<a name="r_LPAD-synopsis"></a>

```
LPAD(string1, length, [ string2 ])
```

```
RPAD(string1, length, [ string2 ])
```

## 引数
<a name="r_LPAD-arguments"></a>

 *string1*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

 *length*   
関数の結果の長さを定義する整数。文字列の長さはバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。指定された長さより *string1* が長い場合は、(右側が) 切り捨てられます。*length* がゼロまたは負の数値である場合は、関数の結果が空の文字列になります。

 *string2*   
(オプション) *string1* の前または後に付加する 1 つ以上の文字。この引数が指定されなかった場合は、スペースが使用されます。

## 戻り型
<a name="r_LPAD-return-type"></a>

VARCHAR

## 例
<a name="r_LPAD-examples"></a>

次の例では、TICKIT サンプルデータベースの EVENT テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

指定された一連のイベント名を切り捨てて 20 文字にして、20 文字に満たない名前の前にはスペースを付加するには、次の例を使用します。

```
SELECT LPAD(eventname, 20) FROM event
WHERE eventid BETWEEN 1 AND 5 ORDER BY 1;

+---------------------+
|         lpad        |
+---------------------+
|              Salome |
|        Il Trovatore |
|       Boris Godunov |
|     Gotterdammerung |
|La Cenerentola (Cind |
+-----------------------+
```

上記と同じ一連のイベント名を切り捨てて 20 文字にするが、20 文字に満たない名前の後には `0123456789` を付加するには、次の例を使用します。

```
SELECT RPAD(eventname, 20,'0123456789') FROM event
WHERE eventid BETWEEN 1 AND 5 ORDER BY 1;

+----------------------+
|         rpad         |
+----------------------+
| Boris Godunov0123456 |
| Gotterdammerung01234 |
| Il Trovatore01234567 |
| La Cenerentola (Cind |
| Salome01234567890123 |
+----------------------+
```

# LTRIM 関数
<a name="r_LTRIM"></a>

文字列の先頭から文字を切り捨てます。トリム文字リスト内の文字のみを含む最長の文字列を削除します。入力文字列にトリム文字がないときには、トリミングは完了です。

## 構文
<a name="r_LTRIM-synopsis"></a>

```
LTRIM( string [, trim_chars] )
```

## 引数
<a name="r_LTRIM-arguments"></a>

 *string*   
トリミングする文字列列、式、または文字列リテラル。

 *trim\$1chars*   
*文字列*の先頭からトリミングする文字を表す、文字列の列、式、または文字列リテラル。指定しなかった場合、スペースがトリム文字として使用されます。

## 戻り型
<a name="r_LTRIM-return-type"></a>

LTRIM 関数は、入力*文字列*のデータ型 (CHAR または VARCHAR) と同じデータ型の文字列を返します。

## 例
<a name="r_LTRIM-example"></a>

次の例は、`listime` 列から年をトリミングします。文字列リテラル `'2008-'` のトリム文字は、左からトリミングされる文字を示します。トリム文字 `'028-'` を使用した場合も、同じ結果が得られます。

```
select listid, listtime, ltrim(listtime, '2008-')
from listing
order by 1, 2, 3
limit 10;            

listid |      listtime       |     ltrim
-------+---------------------+----------------
     1 | 2008-01-24 06:43:29 | 1-24 06:43:29
     2 | 2008-03-05 12:25:29 | 3-05 12:25:29
     3 | 2008-11-01 07:35:33 | 11-01 07:35:33
     4 | 2008-05-24 01:18:37 | 5-24 01:18:37
     5 | 2008-05-17 02:29:11 | 5-17 02:29:11
     6 | 2008-08-15 02:08:13 | 15 02:08:13
     7 | 2008-11-15 09:38:15 | 11-15 09:38:15
     8 | 2008-11-09 05:07:30 | 11-09 05:07:30
     9 | 2008-09-09 08:03:36 | 9-09 08:03:36
    10 | 2008-06-17 09:44:54 | 6-17 09:44:54
```

LTRIM は、*文字列*の先頭にあるとき、*trim\$1chars* の文字をすべて削除します。次の例は、文字 'C'、'D'、および 'G' が VENUENAME の先頭にある場合 (VARCHAR 列) 、これらの文字を切り捨てます。

```
select venueid, venuename, ltrim(venuename, 'CDG')
from venue
where venuename like '%Park'
order by 2
limit 7;             

venueid | venuename                  | btrim                    
--------+----------------------------+--------------------------
    121 | ATT Park                   | ATT Park                
    109 | Citizens Bank Park         | itizens Bank Park        
    102 | Comerica Park              | omerica Park             
      9 | Dick's Sporting Goods Park | ick's Sporting Goods Park
     97 | Fenway Park                | Fenway Park              
    112 | Great American Ball Park   | reat American Ball Park  
    114 | Miller Park                | Miller Park
```

次の例では、`venueid` 列から取得されたしたトリム文字 `2` を使用します。

```
select ltrim('2008-01-24 06:43:29', venueid) 
from venue where venueid=2;              

ltrim
------------------
008-01-24 06:43:29
```

次の例では、`2` が `'0'` トリム文字の前にあるため、文字はトリミングされません。

```
select ltrim('2008-01-24 06:43:29', '0');              

ltrim
-------------------
2008-01-24 06:43:29
```

次の例では、デフォルトのスペーストリム文字を使用して、文字列の先頭から 2 つのスペースをトリミングします。

```
select ltrim('  2008-01-24 06:43:29');              

ltrim
-------------------
2008-01-24 06:43:29
```

# OCTETINDEX 関数
<a name="OCTETINDEX"></a>

OCTETINDEX 関数は、文字列内の部分文字列の位置をバイト数として返します。

## 構文
<a name="OCTETINDEX-synopsis"></a>

```
OCTETINDEX(substring, string)
```

## 引数
<a name="OCTETINDEX-arguments"></a>

 *substring*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

 *string*   
`CHAR` 文字列、`VARCHAR` 文字列、あるいは `CHAR` または `VARCHAR` 型に暗黙的に評価される式。

## 戻り型
<a name="OCTETINDEX-return-type"></a>

 INTEGER   
OCTETINDEX 関数は、*string* 内の *substring* の位置に対応する `INTEGER` 値をバイト数として返します。ここで、*string* の最初の文字は 1 としてカウントされます。*string* にマルチバイト文字が含まれていない場合、結果は CHARINDEX 関数の結果と等しくなります。*string* に *substring* が含まれない場合、この関数は `0` を返します。*substring* が空の場合、この関数は `1` を返します。

## 例
<a name="OCTETINDEX-examples"></a>

文字列 `Amazon Redshift` のサブ文字列 `q` の位置を返すには、次の例を使用します。*substring* は *string* に含まれていないため、この例では `0` を返します。

```
SELECT OCTETINDEX('q', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          0 |
+------------+
```

文字列 `Amazon Redshift` の空のサブ文字列の位置を返すには、次の例を使用します。*substring* は空であるため、この例では `1` を返します。

```
SELECT OCTETINDEX('', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          1 |
+------------+
```

文字列 `Amazon Redshift` のサブ文字列 `Redshift` の位置を返すには、次の例を使用します。この例では、*substring* が *string* の 8 バイト目から始まるため、`8` を返します。

```
SELECT OCTETINDEX('Redshift', 'Amazon Redshift');

+------------+
| octetindex |
+------------+
|          8 |
+------------+
```

文字列 `Amazon Redshift` のサブ文字列 `Redshift` の位置を返すには、次の例を使用します。この例では、*string* の最初の 6 文字が 2 バイト文字であるため、`21` を返します。

```
SELECT OCTETINDEX('Redshift', 'Άμαζον Amazon Redshift');

+------------+
| octetindex |
+------------+
|         21 |
+------------+
```

# OCTET\$1LENGTH 関数
<a name="r_OCTET_LENGTH"></a>

指定された文字列の長さをバイト数として返します。

## 構文
<a name="r_OCTET_LENGTH-synopsis"></a>

```
OCTET_LENGTH(expression)
```

## 引数
<a name="r_OCTET_LENGTH-argument"></a>

 *expression*   
`CHAR` 文字列、`VARCHAR` 文字列、`VARBYTE` 式、あるいは `CHAR`、`VARCHAR`、または `VARBYTE` 型に暗黙的に評価される式。

## 戻り型
<a name="r_OCTET_LENGTH-return-type"></a>

 INTEGER   
OCTET\$1LENGTH 関数は、入力文字列のバイト数を示す整数を返します。  
入力が文字列の場合、[LEN](r_LEN.md)関数は、マルチバイト文字列のバイト数ではなく、この文字列の実際の文字数を返します。例えば、4 バイトの中国語文字を 3 つ保存するためには、`VARCHAR(12)` 列が必要です。OCTET\$1LENGTH 関数はその文字の `12` を返し、LEN 関数は同じ文字列に対して `3` を返します。

## 使用に関する注意事項
<a name="r_OCTET_LENGTH_usage_notes"></a>

*式*が `CHAR` 文字列である場合、この関数は `CHAR` 文字列の長さを返します。例えば、`CHAR(6)` 入力の出力は `CHAR(6)` です。

*式*が `VARCHAR` 文字列である場合、末尾のスペースはカウントされます。

## 例
<a name="r_OCTET_LENGTH-example"></a>

末尾にスペースが 3 つある文字列 `francais` が `CHAR` および `VARCHAR` 型にキャストされる場合に、バイト数を返すには、次の例を使用します。詳細については、「[CAST 関数](r_CAST_function.md)」を参照してください。

```
SELECT OCTET_LENGTH(CAST('francais   ' AS CHAR(15))) AS octet_length_char, OCTET_LENGTH(CAST('francais   ' AS VARCHAR(15))) AS octet_length_varchar;

+-------------------+----------------------+
| octet_length_char | octet_length_varchar |
+-------------------+----------------------+
|                15 |                   11 |
+-------------------+----------------------+
```

文字列 `français` のバイト数および文字数を返すには、次の例を使用します。

```
SELECT OCTET_LENGTH('français'), LEN('français');

+--------------+-----+
| octet_length | len |
+--------------+-----+
|            9 |   8 |
+--------------+-----+
```

文字列 `français` が `VARBYTE` にキャストされる場合にバイト数を返すには、次の例を使用します。

```
SELECT OCTET_LENGTH(CAST('français' AS VARBYTE));

+--------------+
| octet_length |
+--------------+
|            9 |
+--------------+
```

# POSITION 関数
<a name="r_POSITION"></a>

文字列内の指定されたサブ文字列の位置を返します。

同様の関数については、「[CHARINDEX 関数](r_CHARINDEX.md)」および「[STRPOS 関数](r_STRPOS.md)」を参照してください。

## 構文
<a name="position-synopsis"></a>

```
POSITION(substring IN string )
```

## 引数
<a name="r_POSITION-arguments"></a>

 *substring*   
*string* 内を検索するサブ文字列。

 *string*   
検索する文字列または列。

## 戻り型
<a name="position-return-type"></a>

POSITION 関数は、サブ文字列の位置 (0 ではなく 1 から始まる) に対応する `INTEGER` を返します。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。文字列内のサブ文字列がない場合、POSITION は `0` を返します。

## 例
<a name="sub-r_POSITION_usage_notes-examples"></a>

`dog` という語の中での文字列 `fish` の位置を返すには、次の例を使用します。

```
SELECT POSITION('fish' IN 'dog');

+-----------+
|  position |
+-----------+
|         0 |
+-----------+
```

`dogfish` という語の中での文字列 `fish` の位置を返すには、次の例を使用します。

```
SELECT POSITION('fish' IN 'dogfish');

+-----------+
|  position |
+-----------+
|         4 |
+-----------+
```

 以下の例は、TICKIT サンプルデータベースの SALES テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

SALES テーブル内でコミッションが 999.00 を上回る販売取引の数を返すには、次の例を使用します。このコマンドは、999.00 を超えるコミッションをカウントします。これは、小数点以下の桁数がコミッション値の先頭から 4 桁より大きいかどうかを調べることでカウントされます。

```
SELECT DISTINCT POSITION('.' IN commission), COUNT (POSITION('.' IN commission))
FROM sales 
WHERE POSITION('.' IN commission) > 4 
GROUP BY POSITION('.' IN commission)
ORDER BY 1,2;

+-----------+-------+
|  position | count |
+-----------+-------+
|         5 |   629 |
+-----------+-------+
```

# QUOTE\$1IDENT 関数
<a name="r_QUOTE_IDENT"></a>

QUOTE\$1IDENT 関数は、指定された文字列の先頭と末尾を二重引用符で囲んだ文字列として返します。この関数の出力は、SQL ステートメントで識別子として使用できます。二重引用符が埋め込まれている場合、この関数は適宜これを二重化します。

QUOTE\$1IDENT は、文字列が非識別子文字あるいは小文字になってしまう場合に、有効な識別子を作成するために必要な場所のみに二重引用符を追加します。いつでも一重引用符の文字列に戻るには、[QUOTE\$1LITERAL](r_QUOTE_LITERAL.md) を使用します。

## 構文
<a name="r_QUOTE_IDENT-synopsis"></a>

```
QUOTE_IDENT(string)
```

## 引数
<a name="r_QUOTE_IDENT-argument"></a>

 *string*   
`CHAR` または `VARCHAR` 文字列。

## 戻り型
<a name="r_QUOTE_IDENT-return-type"></a>

QUOTE\$1IDENT 関数は、入力 *string* と同じ型を返します。

## 例
<a name="r_QUOTE_IDENT-example"></a>

二重引用符で囲んで文字列 `"CAT"` を返すには、次の例を使用します。

```
SELECT QUOTE_IDENT('"CAT"');

+-------------+
| quote_ident |
+-------------+
| """CAT"""   |
+-------------+
```

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATNAME 列を引用符で囲んで返すには、次の例を使用します。

```
SELECT catid, QUOTE_IDENT(catname)
FROM category
ORDER BY 1,2;

+-------+-------------+
| catid | quote_ident |
+-------+-------------+
|     1 | "MLB"       |
|     2 | "NHL"       |
|     3 | "NFL"       |
|     4 | "NBA"       |
|     5 | "MLS"       |
|     6 | "Musicals"  |
|     7 | "Plays"     |
|     8 | "Opera"     |
|     9 | "Pop"       |
|    10 | "Jazz"      |
|    11 | "Classical" |
+-------+-------------+
```

# QUOTE\$1LITERAL 関数
<a name="r_QUOTE_LITERAL"></a>

QUOTE\$1LITERAL 関数は、指定された文字列を一重引用符付き文字列として返します。これにより、SQL ステートメントで文字列リテラルとして使用できます。入力パラメータが数値である場合、QUOTE\$1LITERAL はそれを文字列として扱います。埋め込まれている一重引用符およびバックスラッシュは適宜、二重引用符に変更されます。

## 構文
<a name="r_QUOTE_LITERAL-synopsis"></a>

```
QUOTE_LITERAL(string)
```

## 引数
<a name="r_QUOTE_LITERAL-argument"></a>

 *string*   
`CHAR` または `VARCHAR` 文字列。

## 戻り型
<a name="r_QUOTE_LITERAL-return-type"></a>

QUOTE\$1LITERAL 関数は、入力 *string* と同じデータ型である `CHAR` または `VARCHAR` の文字列を返します。

## 例
<a name="r_QUOTE_LITERAL-example"></a>

一重引用符を付けて文字列 `''CAT''` を返すには、次の例を使用します。

```
SELECT QUOTE_LITERAL('''CAT''');

+---------------+
| quote_literal |
+---------------+
| '''CAT'''     |
+---------------+
```

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATNAME 列を一重引用符で囲んで返すには、次の例を使用します。

```
SELECT catid, QUOTE_LITERAL(catname)
FROM category
ORDER BY 1,2;

+-------+---------------+
| catid | quote_literal |
+-------+---------------+
|     1 | 'MLB'         |
|     2 | 'NHL'         |
|     3 | 'NFL'         |
|     4 | 'NBA'         |
|     5 | 'MLS'         |
|     6 | 'Musicals'    |
|     7 | 'Plays'       |
|     8 | 'Opera'       |
|     9 | 'Pop'         |
|    10 | 'Jazz'        |
|    11 | 'Classical'   |
+-------+---------------+
```

CATID 列を一重引用符で囲んで返すには、次の例を使用します。

```
SELECT QUOTE_LITERAL(catid), catname
FROM category
ORDER BY 1,2;

+---------------+-----------+
| quote_literal |  catname  |
+---------------+-----------+
| '1'           | MLB       |
| '10'          | Jazz      |
| '11'          | Classical |
| '2'           | NHL       |
| '3'           | NFL       |
| '4'           | NBA       |
| '5'           | MLS       |
| '6'           | Musicals  |
| '7'           | Plays     |
| '8'           | Opera     |
| '9'           | Pop       |
+---------------+-----------+
```

# REGEXP\$1COUNT 関数
<a name="REGEXP_COUNT"></a>

文字列で正規表現パターンを検索し、この指定されたパターンが文字列内に出現する回数を示す整数を返します。一致がない場合、この関数は `0` を返します。正規表現の詳細については、Wikipedia の「[POSIX 演算子](pattern-matching-conditions-posix.md)」と「[正規表現](https://en.wikipedia.org/wiki/Regular_expression)」を参照してください。

## 構文
<a name="REGEXP_COUNT-synopsis"></a>

```
REGEXP_COUNT( source_string, pattern [, position [, parameters ] ] )
```

## 引数
<a name="REGEXP_COUNT-arguments"></a>

 *source\$1string*   
`CHAR` または `VARCHAR` 文字列。

 * パターン*   
正規表現パターンを表す UTF-8 文字列リテラル。詳細については、「[POSIX 演算子](pattern-matching-conditions-posix.md)」を参照してください。

 *position*   
(オプション) 検索を開始する *source\$1string* 内の位置を示す正の `INTEGER`。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルトは `1` です。*position* が `1` より小さい場合、*source\$1string* の最初の文字から検索が開始されます。*position* が *source\$1string* の文字数より大きい場合、結果は `0` になります。

 *parameters*   
(オプション) 関数がパターンとどのように一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。  
+ c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。
+ i – 大文字と小文字を区別しない一致を実行します。
+ p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。PCRE の詳細については、Wikipedia の「[Perl 互換の正規表現](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions)」を参照してください。

## 戻り型
<a name="REGEXP_COUNT-return-type"></a>

INTEGER

## 例
<a name="REGEXP_COUNT-examples"></a>

3 文字のシーケンスが出現する回数をカウントするには、次の例を使用します。

```
SELECT REGEXP_COUNT('abcdefghijklmnopqrstuvwxyz', '[a-z]{3}');

+--------------+
| regexp_count |
+--------------+
|            8 |
+--------------+
```

大文字と小文字を区別しない一致を使用して、文字列 `FOX` の出現をカウントするには、次の例を使用します。

```
SELECT REGEXP_COUNT('the fox', 'FOX', 1, 'i');

+--------------+
| regexp_count |
+--------------+
|            1 |
+--------------+
```

PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。この例では、PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。この例では、大文字と小文字を区別して、このような単語の出現回数をカウントします。

```
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'p');

+--------------+
| regexp_count |
+--------------+
|            2 |
+--------------+
```

PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。これは、PCRE で特定の意味を持つ `?=` 演算子を使用します。この例では、このような単語の出現回数をカウントしますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。

```
SELECT REGEXP_COUNT('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 'ip');

+--------------+
| regexp_count |
+--------------+
|            3 |
+--------------+
```

次の例では、TICKIT サンプルデータベースの USERS テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

最上位ドメイン名が `org` または `edu` である回数をカウントするには、次の例を使用します。

```
SELECT email, REGEXP_COUNT(email,'@[^.]*\.(org|edu)') FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------+
|                     email                     | regexp_count |
+-----------------------------------------------+--------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu |            1 |
| Suspendisse.tristique@nonnisiAenean.edu       |            1 |
| amet.faucibus.ut@condimentumegetvolutpat.ca   |            0 |
| sed@lacusUtnec.ca                             |            0 |
+-----------------------------------------------+--------------+
```

# REGEXP\$1INSTR 関数
<a name="REGEXP_INSTR"></a>

文字列で正規表現パターンを検索し、一致するサブ文字列の開始位置を示す整数を返します。一致がない場合、この関数は `0` を返します。REGEXP\$1INSTR は [ 関数に似ていますが、文字列で正規表現パターンを検索することができます。](r_POSITION.md)正規表現の詳細については、Wikipedia の「[POSIX 演算子](pattern-matching-conditions-posix.md)」と「[正規表現](https://en.wikipedia.org/wiki/Regular_expression)」を参照してください。

## 構文
<a name="REGEXP_INSTR-synopsis"></a>

```
REGEXP_INSTR( source_string, pattern [, position [, occurrence] [, option [, parameters ] ] ] ] )
```

## 引数
<a name="REGEXP_INSTR-arguments"></a>

 *source\$1string*   
検索する文字列式 (列名など)。

 * パターン*   
正規表現パターンを表す UTF-8 文字列リテラル。詳細については、「[POSIX 演算子](pattern-matching-conditions-posix.md)」を参照してください。

 *position*   
(オプション) 検索を開始する *source\$1string* 内の位置を示す正の `INTEGER`。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルトは `1` です。*position* が `1` より小さい場合、*source\$1string* の最初の文字から検索が開始されます。*position* が *source\$1string* の文字数より大きい場合、結果は `0` になります。

 *occurrence*   
(オプション) このパターンのどの出現を使用するかを示す正の `INTEGER`。REGEXP\$1INSTR は、最初の `occurrence-1` の一致をスキップします。デフォルトは `1` です。*occurrence* が `1` 未満、または *source\$1string* の文字数を超える場合、検索は無視され、結果は `0` となります。

 *option*( )   
(オプション) 一致の先頭文字の戻り位置 (`0`)、または続く一致の末尾の最初の文字位置 (`1`) のどちらかを示す値。ゼロ以外の値は `1` と同じです。デフォルト値は `0` です。

 *parameters*   
(オプション) 関数がパターンとどのように一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。  
+ c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。
+ i – 大文字と小文字を区別しない一致を実行します。
+ e – 部分式を使用して部分文字列を抽出します。

  *パターン*に部分式が含まれる場合、REGEXP\$1INSTR は最初の部分式を*パターン*で使用して部分文字列を一致させます。REGEXP\$1INSTR は最初の部分式のみを考慮します。追加の部分式は無視されます。パターンに部分式がない場合、REGEXP\$1INSTR は「e」パラメータを無視します。
+ p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。PCRE の詳細については、Wikipedia の「[Perl 互換の正規表現](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions)」を参照してください。

## 戻り型
<a name="REGEXP_INSTR-return-type"></a>

整数

## 例
<a name="REGEXP_INSTR-examples"></a>

次の例では、TICKIT サンプルデータベースの USERS テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

ドメイン名を開始する `@` 文字を検索し、最初の一致の開始位置を返すには、次の例を使用します。

```
SELECT email, REGEXP_INSTR(email, '@[^.]*')
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------+
|                     email                     | regexp_instr |
+-----------------------------------------------+--------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu |           21 |
| Suspendisse.tristique@nonnisiAenean.edu       |           22 |
| amet.faucibus.ut@condimentumegetvolutpat.ca   |           17 |
| sed@lacusUtnec.ca                             |            4 |
+-----------------------------------------------+--------------+
```

`Center` という単語のバリエーションを検索し、最初の一致の開始位置を返すには、次の例を使用します。

```
SELECT venuename, REGEXP_INSTR(venuename,'[cC]ent(er|re)$')
FROM venue
WHERE REGEXP_INSTR(venuename,'[cC]ent(er|re)$') > 0
ORDER BY venueid LIMIT 4;

+-----------------------+--------------+
|       venuename       | regexp_instr |
+-----------------------+--------------+
| The Home Depot Center |           16 |
| Izod Center           |            6 |
| Wachovia Center       |           10 |
| Air Canada Centre     |           12 |
+-----------------------+--------------+
```

大文字と小文字を区別しない一致ロジックを使用して、文字列 `FOX` が最初に出現する開始位置を検索するには、次の例を使用します。

```
SELECT REGEXP_INSTR('the fox', 'FOX', 1, 1, 0, 'i');

+--------------+
| regexp_instr |
+--------------+
|            5 |
+--------------+
```

PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。この例では、2 番目の単語の開始位置を見つけます。

```
SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'p');

+--------------+
| regexp_instr |
+--------------+
|           21 |
+--------------+
```

PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索するには、次の例を使用します。PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。この例では、2 番目の単語の開始位置を検索しますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。

```
SELECT REGEXP_INSTR('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 0, 'ip');

+--------------+
| regexp_instr |
+--------------+
|           15 |
+--------------+
```

# REGEXP\$1REPLACE 関数
<a name="REGEXP_REPLACE"></a>

文字列で正規表現パターンを検索し、このパターンのすべての出現を特定の文字列に置き換えます。REGEXP\$1REPLACE は [REPLACE 関数](r_REPLACE.md) 関数に似ていますが、文字列で正規表現パターンを検索することができます。正規表現の詳細については、Wikipedia の「[POSIX 演算子](pattern-matching-conditions-posix.md)」と「[正規表現](https://en.wikipedia.org/wiki/Regular_expression)」を参照してください。

REGEXP\$1REPLACE は、[TRANSLATE 関数](r_TRANSLATE.md)や [REPLACE 関数](r_REPLACE.md) と似ています。ただし、TRANSLATE は複数の単一文字置換を行い、REPLACE は 1 つの文字列全体を別の文字列に置換しますが、REGEXP\$1REPLACE を使用すると正規表現パターンの文字列を検索できます。

## 構文
<a name="REGEXP_REPLACE-synopsis"></a>

```
REGEXP_REPLACE( source_string, pattern [, replace_string [ , position [, parameters ] ] ] )
```

## 引数
<a name="REGEXP_REPLACE-arguments"></a>

 *source\$1string*   
検索する `CHAR` または `VARCHAR` 文字列式 (列名など)。

 * パターン*   
正規表現パターンを表す UTF-8 文字列リテラル。詳細については、「[POSIX 演算子](pattern-matching-conditions-posix.md)」を参照してください。

*replace\$1string*  
(オプション) パターンのすべての出現に置き換わる列名などの `CHAR` または `VARCHAR` 文字列式。デフォルトは空の文字列 ("") です。

 *position*   
(オプション) 検索を開始する *source\$1string* 内の位置を示す正の整数。position はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルトは `1` です。*position* が `1` より小さい場合、*source\$1string* の最初の文字から検索が開始されます。*position* が *source\$1string* の文字数より大きい場合、結果は *source\$1string* になります。

 *parameters*   
(オプション) 関数がパターンとどのように一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。  
+ c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。
+ i – 大文字と小文字を区別しない一致を実行します。
+ p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。PCRE の詳細については、Wikipedia の「[Perl 互換の正規表現](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions)」を参照してください。

## 戻り型
<a name="REGEXP_REPLACE-return-type"></a>

VARCHAR

*pattern* または *replace\$1string* のいずれかが `NULL` の場合、戻り値は `NULL` を返します。

## 例
<a name="REGEXP_REPLACE-examples"></a>

大文字と小文字を区別しない一致を使用して、値 `quick brown fox` 内の文字列 `FOX` のすべての出現を置き換えるには、次の例を使用します。

```
SELECT REGEXP_REPLACE('the fox', 'FOX', 'quick brown fox', 1, 'i');

+---------------------+
|   regexp_replace    |
+---------------------+
| the quick brown fox |
+---------------------+
```

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。そのような単語が出現するたびに値 `[hidden]` に置き換えるには、次の例を使用します。

```
SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'p');

+-------------------------------+
|        regexp_replace         |
+-------------------------------+
| [hidden] plain A1234 [hidden] |
+-------------------------------+
```

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。そのような単語が出現するたびに値 `[hidden]` に置き換えるが、大文字と小文字を区別しない一致を使用することが前の例とは異なる場合は、次の例を使用します。

```
SELECT REGEXP_REPLACE('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', '[hidden]', 1, 'ip');

+----------------------------------+
|          regexp_replace          |
+----------------------------------+
| [hidden] plain [hidden] [hidden] |
+----------------------------------+
```

次の例では、TICKIT サンプルデータベースの USERS テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

E メールアドレスから `@` とドメイン名を削除するには、次の例を使用します。

```
SELECT email, REGEXP_REPLACE(email, '@.*\\.(org|gov|com|edu|ca)$')
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+-----------------------+
|                     email                     |    regexp_replace     |
+-----------------------------------------------+-----------------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero  |
| Suspendisse.tristique@nonnisiAenean.edu       | Suspendisse.tristique |
| amet.faucibus.ut@condimentumegetvolutpat.ca   | amet.faucibus.ut      |
| sed@lacusUtnec.ca                             | sed                   |
+-----------------------------------------------+-----------------------+
```

E メールアドレスのドメイン名を `internal.company.com` に置き換えるには、次の例を使用します。

```
SELECT email, REGEXP_REPLACE(email, '@.*\\.[[:alpha:]]{2,3}','@internal.company.com') 
FROM users
ORDER BY userid LIMIT 4;

+-----------------------------------------------+--------------------------------------------+
|                     email                     |               regexp_replace               |
+-----------------------------------------------+--------------------------------------------+
| Etiam.laoreet.libero@sodalesMaurisblandit.edu | Etiam.laoreet.libero@internal.company.com  |
| Suspendisse.tristique@nonnisiAenean.edu       | Suspendisse.tristique@internal.company.com |
| amet.faucibus.ut@condimentumegetvolutpat.ca   | amet.faucibus.ut@internal.company.com      |
| sed@lacusUtnec.ca                             | sed@internal.company.com                   |
+-----------------------------------------------+--------------------------------------------+
```

# REGEXP\$1SUBSTR 関数
<a name="REGEXP_SUBSTR"></a>

正規表現パターンで検索して、文字列から文字を返します。REGEXP\$1SUBSTR は [SUBSTRING 関数](r_SUBSTRING.md) 関数に似ていますが、文字列で正規表現パターンを検索することができます。この関数が正規表現を文字列内のどの文字とも一致させることができない場合、空の文字列を返します。正規表現の詳細については、Wikipedia の「[POSIX 演算子](pattern-matching-conditions-posix.md)」と「[正規表現](https://en.wikipedia.org/wiki/Regular_expression)」を参照してください。

## 構文
<a name="REGEXP_SUBSTR-synopsis"></a>

```
REGEXP_SUBSTR( source_string, pattern [, position [, occurrence [, parameters ] ] ] )
```

## 引数
<a name="REGEXP_SUBSTR-arguments"></a>

 *source\$1string*   
検索する文字列式。

 * パターン*   
正規表現パターンを表す UTF-8 文字列リテラル。詳細については、「[POSIX 演算子](pattern-matching-conditions-posix.md)」を参照してください。

 *position*   
検索を開始する *source\$1string* 内の位置を示す正の整数。位置はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。デフォルトは 1 です。*position* が 1 より小さい場合、*source\$1string* の最初の文字から検索が開始されます。*position* が *source\$1string* の文字数より大きい場合、結果は空の文字列 ("") になります。

 *実行*   
このパターンのどの出現を使用するかを示す正の整数。REGEXP\$1SUBSTR は、最初の*出現* - 1 一致をスキップします。デフォルトは 1 です。*出現*が 1 未満、または*ソース文字列*の文字数以上の場合、検索は無視され、結果は空となります。

 *パラメータ*   
関数がパターンと一致するかを示す 1 つ以上のリテラル文字列。取り得る値には以下のものがあります。  
+ c – 大文字と小文字を区別する一致を実行します。デフォルトでは大文字と小文字を区別するマッチングを使用します。
+ i – 大文字と小文字を区別しない一致を実行します。
+ e – 部分式を使用して部分文字列を抽出します。

   *パターン*に部分式が含まれる場合、REGEXP\$1SUBSTR は最初の部分式を*パターン*で使用して部分文字列を一致させます。部分式は、かっこで囲まれたパターン内の式です。例えば、`'This is a (\\w+)'` というパターンでは、最初の式と `'This is a '` という文字列とそれに続く単語が一致します。`e` パラメータを指定した REGEXP\$1SUBSTR は、*パターン*を返す代わりに、部分式の中の文字列だけを返します。

  REGEXP\$1SUBSTR は最初の部分式のみを考慮します。追加の部分式は無視されます。パターンに部分式がない場合、REGEXP\$1SUBSTR は「e」パラメータを無視します。
+ p – Perl 互換正規表現 (PCRE) 言語でパターンを解釈します。PCRE の詳細については、Wikipedia の「[Perl 互換の正規表現](https://en.wikipedia.org/wiki/Perl_Compatible_Regular_Expressions)」を参照してください。

## 戻り型
<a name="REGEXP_SUBSTR-return-type"></a>

VARCHAR

## 例
<a name="REGEXP_SUBSTR-examples"></a>

次の例では、メールアドレスの @ 文字とドメイン拡張の間の分が返されます。クエリされる `users` データは Amazon Redshift のサンプルデータからのものです。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
SELECT email, regexp_substr(email,'@[^.]*')
FROM users
ORDER BY userid LIMIT 4;

                     email                     |      regexp_substr
-----------------------------------------------+--------------------------
 Suspendisse.tristique@nonnisiAenean.edu       | @nonnisiAenean
 amet.faucibus.ut@condimentumegetvolutpat.ca   | @condimentumegetvolutpat
 sed@lacusUtnec.ca                             | @lacusUtnec
 Cum@accumsan.com                              | @accumsan
```

次の例では、大文字と小文字を区別しない一致を使用して、文字列 `FOX` の最初の出現に対応する入力の部分を返します。

```
SELECT regexp_substr('the fox', 'FOX', 1, 1, 'i');

 regexp_substr
---------------
 fox
```

次の例では、大文字と小文字を区別しない一致を使用して、文字列 `FOX` の 2 回目の出現に対応する入力部分を返します。2 回目の出現がないため、結果は空 (非 null、長さ 0) になります。

```
SELECT regexp_substr('the fox', 'FOX', 1, 2, 'i');

 regexp_substr
---------------
```

次の例では、小文字で始まる入力の最初の部分を返します。これは、同じ SELECT ステートメントで `c` パラメータを指定しない場合と機能的には同じです。

```
SELECT regexp_substr('THE SECRET CODE IS THE LOWERCASE PART OF 1931abc0EZ.', '[a-z]+', 1, 1, 'c');

 regexp_substr
---------------
 abc
```

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。この例では、2 番目の単語に対応する入力部分を返します。

```
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'p');

 regexp_substr
---------------
 a1234
```

次の例では、PCRE 言語で記述されたパターンを使用して、少なくとも 1 つの数字と 1 つの小文字を含む単語を検索します。PCRE で特定の先読みの意味を持つ `?=` 演算子を使用します。この例では、2 番目の単語に対応する入力部分を返しますが、大文字と小文字を区別しない一致結果を使用する点で前の例とは異なります。

```
SELECT regexp_substr('passwd7 plain A1234 a1234', '(?=[^ ]*[a-z])(?=[^ ]*[0-9])[^ ]+', 1, 2, 'ip');

 regexp_substr
---------------
 A1234
```

次の例では、部分式を使用して、大文字と小文字を区別しないマッチングにより、パターン `'this is a (\\w+)'` と一致する 2 番目の文字列を見つけます。かっこ内の部分式を返します。

```
SELECT regexp_substr(
               'This is a cat, this is a dog. This is a mouse.',
               'this is a (\\w+)', 1, 2, 'ie');
           
 regexp_substr
---------------
 dog
```

# REPEAT 関数
<a name="r_REPEAT"></a>

指定された回数だけ文字列を繰り返します。入力パラメータが数値である場合、REPEAT はそれを文字列として扱います。

[REPLICATE 関数](r_REPLICATE.md) のシノニム。

## 構文
<a name="r_REPEAT-synopsis"></a>

```
REPEAT(string, integer)
```

## 引数
<a name="r_REPEAT-arguments"></a>

 *string*   
最初の入力パラメータは、繰り返す文字列です。

 * (整数*)   
2 番目のパラメータは、文字列を繰り返す回数を示す `INTEGER` です。

## 戻り型
<a name="r_REPEAT-return-type"></a>

VARCHAR

## 例
<a name="r_REPEAT-examples"></a>

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATEGORY テーブル内の CATID 列の値を 3 回繰り返すには、次の例を使用します。

```
SELECT catid, REPEAT(catid,3)
FROM category
ORDER BY 1,2;

+-------+--------+
| catid | repeat |
+-------+--------+
|     1 |    111 |
|     2 |    222 |
|     3 |    333 |
|     4 |    444 |
|     5 |    555 |
|     6 |    666 |
|     7 |    777 |
|     8 |    888 |
|     9 |    999 |
|    10 | 101010 |
|    11 | 111111 |
+-------+--------+
```

次の例は、最大 16,000,000 バイトの文字列の生成を示しています。

```
SELECT 
    LEN(REPEAT('X', 5000000)) AS five_million_bytes,
    LEN(REPEAT('Y', 16000000)) AS sixteen_million_bytes;

 five_million_bytes  | sixteen_million_bytes
----------+-----------
 5000000  | 16000000
```

# REPLACE 関数
<a name="r_REPLACE"></a>

既存の文字列内の一連の文字をすべて、指定された他の文字に置き換えます。

REPLACE は、[TRANSLATE 関数](r_TRANSLATE.md)や [REGEXP\$1REPLACE 関数](REGEXP_REPLACE.md) と似ています。ただし、TRANSLATE は複数の単一文字置換を行い、REGEXP\$1REPLACE を使用すると正規表現パターンの文字列を検索できますが、REPLACE は 1 つの文字列全体を別の文字列に置換します。

## 構文
<a name="r_REPLACE-synopsis"></a>

```
REPLACE(string, old_chars, new_chars)
```

## 引数
<a name="r_REPLACE-arguments"></a>

 *string*   
検索する `CHAR` 型または `VARCHAR` 型の文字列 

 *old\$1chars*   
置き換える `CHAR` または `VARCHAR` 型の文字列。

 *new\$1chars*   
*old\$1string* を置き換える新しい `CHAR` 型または `VARCHAR` 型の文字列。

## 戻り型
<a name="r_REPLACE-return-type"></a>

VARCHAR  
*old\$1chars* または *new\$1chars* のいずれかが `NULL` の場合、戻り値は `NULL` です。

## 例
<a name="r_REPLACE-examples"></a>

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATGROUP フィールド内の文字列 `Shows` を `Theatre` に変換するには、次の例を使用します。

```
SELECT catid, catgroup, REPLACE(catgroup, 'Shows', 'Theatre')
FROM category
ORDER BY 1,2,3;

+-------+----------+----------+
| catid | catgroup | replace  |
+-------+----------+----------+
|     1 | Sports   | Sports   |
|     2 | Sports   | Sports   |
|     3 | Sports   | Sports   |
|     4 | Sports   | Sports   |
|     5 | Sports   | Sports   |
|     6 | Shows    | Theatre  |
|     7 | Shows    | Theatre  |
|     8 | Shows    | Theatre  |
|     9 | Concerts | Concerts |
|    10 | Concerts | Concerts |
|    11 | Concerts | Concerts |
+-------+----------+----------+
```

# REPLICATE 関数
<a name="r_REPLICATE"></a>

REPEAT 関数のシノニム。

「[REPEAT 関数](r_REPEAT.md)」を参照してください。

# REVERSE 関数
<a name="r_REVERSE"></a>

REVERSE 関数は、文字列に対して機能し、文字を逆順に返します。たとえば、`reverse('abcde')`は `edcba` を返します。この関数は、数値データ型と日付データ型に加え、文字データ型に対しても機能します。ただしほとんどの場合、文字列に対して実用的な値が生成されます。

## 構文
<a name="r_REVERSE-synopsis"></a>

```
REVERSE( expression )
```

## 引数
<a name="r_REVERSE-argument"></a>

 *expression*   
文字反転のターゲットを表す文字、日付、タイムスタンプ、または数値のデータ型を使用した式。すべての式は、暗黙的に `VARCHAR` 文字列に変換されます。`CHAR` 文字列内の末尾の空白は無視されます。

## 戻り型
<a name="r_REVERSE-return-type"></a>

VARCHAR

## 例
<a name="r_REVERSE-examples"></a>

次の例では、TICKIT サンプルデータベースの USERS テーブルと SALES テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

USERS テーブルから、5 つの異なる都市名およびそれらに対応する反転した名前を選択するには、次の例を使用します。

```
SELECT DISTINCT city AS cityname, REVERSE(cityname)
FROM users 
ORDER BY city LIMIT 5;

+----------+----------+
| cityname | reverse  |
+----------+----------+
| Aberdeen | needrebA |
| Abilene  | enelibA  |
| Ada      | adA      |
| Agat     | tagA     |
| Agawam   | mawagA   |
+----------+----------+
```

文字列として変換された 5 つの販売 ID およびそれらに対応する反転した ID を選択するには、次の例を使用します。

```
SELECT salesid, REVERSE(salesid)
FROM sales 
ORDER BY salesid DESC LIMIT 5;

+---------+---------+
| salesid | reverse |
+---------+---------+
|  172456 |  654271 |
|  172455 |  554271 |
|  172454 |  454271 |
|  172453 |  354271 |
|  172452 |  254271 |
+---------+---------+
```

# RTRIM 関数
<a name="r_RTRIM"></a>

RTRIM 関数は、指定された一連の文字を文字列の末尾から切り捨てます。トリム文字リスト内の文字のみを含む最長の文字列を削除します。入力文字列にトリム文字がないときには、トリミングは完了です。

## 構文
<a name="r_RTRIM-synopsis"></a>

```
RTRIM( string, trim_chars )
```

## 引数
<a name="r_RTRIM-arguments"></a>

 *string*   
トリミングする文字列列、式、または文字列リテラル。

 *trim\$1chars*   
*文字列*の末尾から切り捨てる文字を表す、文字列の列、式、または文字列リテラル。指定しなかった場合、スペースがトリム文字として使用されます。

## 戻り型
<a name="r_RTRIM-return-type"></a>

*string* 引数と同じデータ型の文字列。

## 例
<a name="r_RTRIM-example"></a>

次の例では、文字列 `' abc '` の先頭および末尾の空白を切り捨てます。

```
select '     abc    ' as untrim, rtrim('     abc    ') as trim;

untrim    | trim
----------+------
   abc    |    abc
```

次の例では、文字列 `'xyzaxyzbxyzcxyz'` から末尾の文字列 `'xyz'` を削除します。末尾にある `'xyz'` は削除されましたが、文字列内部にあるその文字列は削除されません。

```
select 'xyzaxyzbxyzcxyz' as untrim,
rtrim('xyzaxyzbxyzcxyz', 'xyz') as trim;

     untrim      |   trim
-----------------+-----------
 xyzaxyzbxyzcxyz | xyzaxyzbxyzc
```

次の例では、*trim\$1chars* リスト `'tes'` のいずれかの文字と一致する文字列 `'setuphistorycassettes'` の末尾の部分を削除します。入力文字列の末尾にある *trim\$1chars* リストに含まれていない別の文字の前に出現する `t`、`e` または `s` が削除されます。

```
SELECT rtrim('setuphistorycassettes', 'tes');

     rtrim      
-----------------
 setuphistoryca
```

次の例は、文字 'Park' が存在する VENUENAME の末尾から、これらの文字を切り捨てます。

```
select venueid, venuename, rtrim(venuename, 'Park')
from venue
order by 1, 2, 3
limit 10;

venueid |         venuename          |          rtrim
--------+----------------------------+-------------------------
      1 | Toyota Park                | Toyota
      2 | Columbus Crew Stadium      | Columbus Crew Stadium
      3 | RFK Stadium                | RFK Stadium
      4 | CommunityAmerica Ballpark  | CommunityAmerica Ballp
      5 | Gillette Stadium           | Gillette Stadium
      6 | New York Giants Stadium    | New York Giants Stadium
      7 | BMO Field                  | BMO Field
      8 | The Home Depot Center      | The Home Depot Cente
      9 | Dick's Sporting Goods Park | Dick's Sporting Goods
     10 | Pizza Hut Park             | Pizza Hut
```

RTRIM は、文字 `P`、`a`、`r`、または `k` が VENUENAME の末尾にあるとき、それらをすべて削除することに注意してください。

# SOUNDEX 関数
<a name="SOUNDEX"></a>

SOUNDEX 関数は、入力文字列の最初の文字と、指定した文字列の英語の発音を表す音の 3 桁のエンコードで構成される American Soundex 値を返します。例えば、`Smith` と `Smyth` は同じ Soundex 値を持ちます。

## 構文
<a name="SOUNDEX-synopsis"></a>

```
SOUNDEX(string)
```

## 引数
<a name="SOUNDEX-arguments"></a>

 *string*   
American Soundex コード値に変換する `CHAR` または `VARCHAR` 文字列を指定します。

## 戻り型
<a name="SOUNDEX-return-type"></a>

VARCHAR(4)

## 使用に関する注意事項
<a name="r_SOUNDEX_usage_notes"></a>

SOUNDEX 関数は、a～z および A～Z を含む、英字のアルファベットで小文字と大文字の ASCII 文字のみを変換します。SOUNDEX 関数は、他の文字を無視します。SOUNDEX は、スペースで区切られた複数の単語の文字列に対して、単一の Soundex 値を返します。

```
SELECT SOUNDEX('AWS Amazon');
            
+---------+
| soundex |
+---------+
| A252    |
+---------+
```

SOUNDEX は、入力文字列に英語の文字が含まれていない場合、空の文字列を返します。

```
SELECT SOUNDEX('+-*/%');

+---------+
| soundex |
+---------+
|         |
+---------+
```

## 例
<a name="SOUNDEX-examples"></a>

`Amazon` の Soundex 値を返すには、次の例を使用します。

```
SELECT SOUNDEX('Amazon');

+---------+
| soundex |
+---------+
| A525    |
+---------+
```

`smith` および `smyth` の Soundex 値を返すには、次の例を使用します。Soundex の値は同じであることに注意してください。

```
SELECT SOUNDEX('smith'), SOUNDEX('smyth');

+-------+-------+
| smith | smyth |
+-------+-------+
| S530  | S530  |
+-------+-------+
```

# SPLIT\$1PART 関数
<a name="SPLIT_PART"></a>

指定された区切り記号で文字列を分割し、指定された位置にあるパートを返します。

## 構文
<a name="SPLIT_PART-synopsis"></a>

```
SPLIT_PART(string, delimiter, position)
```

## 引数
<a name="SPLIT_PART-arguments"></a>

 *string*   
分割する文字列の列、式、または文字列リテラル。文字列には CHAR 型または VARCHAR 型を指定できます。

 *区切り記号*   
入力*文字列*のセクションを示す区切り文字列。  
*delimiter* がリテラルである場合は、それを一重引用符で囲みます。

 *position*   
返す*文字列*の部分の位置 (1 からカウント)。1 以上の整数である必要があります。*位置*が文字列の部分の数より大きい場合、SPLIT\$1PART は空の文字列を返します。*文字列*で*区切り文字*が見つからない場合、戻り値には指定された部分の内容が含まれます。これは、*文字列*全体または空の値である可能性があります。

## 戻り型
<a name="SPLIT_PART-return-type"></a>

CHAR 文字列または VARCHAR 文字列 (*文字列*パラメータと同じ型)。

## 例
<a name="SPLIT_PART-examples"></a>

次の例では、`$` 区切り文字を使用して文字列リテラルを複数の部分に分割し、2 番目の部分を返します。

```
select split_part('abc$def$ghi','$',2)

split_part
----------
def
```

次の例では、`$` 区切り文字を使用して文字列リテラルを複数の部分に分割します。`4` の部分が見つからないため、空の文字列が返されます。

```
select split_part('abc$def$ghi','$',4)

split_part
----------
```

次の例では、`#` 区切り文字を使用して文字列リテラルを複数の部分に分割します。区切り文字が見つからないため、最初の部分である文字列全体が返されます。

```
select split_part('abc$def$ghi','#',1)

split_part
------------
abc$def$ghi
```

次の例は、タイムスタンプフィールド LISTTIME を年コンポーネント、月コンポーネント、および日コンポーネントに分割します。

```
select listtime, split_part(listtime,'-',1) as year,
split_part(listtime,'-',2) as month, 
split_part(split_part(listtime,'-',3),' ',1) as day 
from listing limit 5;

      listtime       | year | month | day
---------------------+------+-------+------
 2008-03-05 12:25:29 | 2008 | 03    | 05
 2008-09-09 08:03:36 | 2008 | 09    | 09
 2008-09-26 05:43:12 | 2008 | 09    | 26
 2008-10-04 02:00:30 | 2008 | 10    | 04
 2008-01-06 08:33:11 | 2008 | 01    | 06
```

次の例は、LISTTIME タイムスタンプフィールドを選択し、それを `'-'` 文字で分割して月 (LISTTIME 文字列の 2 番目の部分) を取得してから、各月のエントリ数をカウントします。

```
select split_part(listtime,'-',2) as month, count(*)
from listing
group by split_part(listtime,'-',2)
order by 1, 2;

 month | count
-------+-------
    01 | 18543
    02 | 16620
    03 | 17594
    04 | 16822
    05 | 17618
    06 | 17158
    07 | 17626
    08 | 17881
    09 | 17378
    10 | 17756
    11 | 12912
    12 | 4589
```

# STRPOS 関数
<a name="r_STRPOS"></a>

指定された文字列内のサブ文字列の位置を返します。

同様の関数については、「[CHARINDEX 関数](r_CHARINDEX.md)」および「[POSITION 関数](r_POSITION.md)」を参照してください。

## 構文
<a name="r_STRPOS-synopsis"></a>

```
STRPOS(string, substring )
```

## 引数
<a name="r_STRPOS-arguments"></a>

 *string*   
最初の入力パラメータは、検索する `CHAR` または `VARCHAR` 文字列です。

 *substring*   
2 番目のパラメータは、*string* 内で検索するサブ文字列です。

## 戻り型
<a name="r_STRPOS-return-type"></a>

INTEGER  
STRPOS 関数は、*substring* の位置に対応する `INTEGER` (0 ではなく 1 から始まる) を返します。位置はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。

## 使用に関する注意事項
<a name="r_STRPOS_usage_notes"></a>

*string* 内で *substring* が見つからない場合、STRPOS は `0` を返します。

```
SELECT STRPOS('dogfish', 'fist');

+--------+
| strpos |
+--------+
|      0 |
+--------+
```

## 例
<a name="r_STRPOS-examples"></a>

`dogfish` 内の `fish` の位置を示すには、次の例を使用します。

```
SELECT STRPOS('dogfish', 'fish');

+--------+
| strpos |
+--------+
|      4 |
+--------+
```

次の例では、TICKIT サンプルデータベースの SALES テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

SALES テーブル内で COMMISSION が 999.00 を上回る販売取引の数を返すには、次の例を使用します。

```
SELECT DISTINCT STRPOS(commission, '.'),
COUNT (STRPOS(commission, '.'))
FROM sales
WHERE STRPOS(commission, '.') > 4
GROUP BY STRPOS(commission, '.')
ORDER BY 1, 2;

+--------+-------+
| strpos | count |
+--------+-------+
|      5 |   629 |
+--------+-------+
```

# STRTOL 関数
<a name="r_STRTOL"></a>

基数が指定された数の文字列式を、相当する整数値に変換します。変換後の値は、符号付き 64 ビットの範囲内である必要があります。

## 構文
<a name="r_STRTOL-syntax"></a>

```
STRTOL(num_string, base)
```

## 引数
<a name="r_STRTOL-arguments"></a>

 *num\$1string*   
変換する数値の文字列式。*num\$1string* が空 (`''`) であるか、null 文字 (`'\0'`) で始まる場合、変換後の値は `0` になります。*num\$1string* が NULL 値を含む列である場合、STRTOL は `NULL` を返します。文字列の冒頭は任意の数の空白があっても構わず、オプションで正符号 '`+`' または負符号 '`-`' 1 個を後ろに付加して正または負を示すことができます。デフォルトは '`+`' です。*base* が `16` の場合、オプションで文字列の冒頭に '`0x`' を使用できます。

*base*  
2～36 の `INTEGER`。

## 戻り型
<a name="r_STRTOL-return-type"></a>

BIGINT  
*num\$1string* が null の場合、この関数は `NULL` を返します。

## 例
<a name="r_STRTOL-examples"></a>

文字列と基数のペアを整数に変換するには、次の例を使用します。

```
SELECT STRTOL('0xf',16);

+--------+
| strtol |
+--------+
|     15 |
+--------+

SELECT STRTOL('abcd1234',16);

+------------+
|   strtol   |
+------------+
| 2882343476 |
+------------+

SELECT STRTOL('1234567', 10);

+---------+
| strtol  |
+---------+
| 1234567 |
+---------+

SELECT STRTOL('1234567', 8);

+--------+
| strtol |
+--------+
| 342391 |
+--------+

SELECT STRTOL('110101', 2);

+--------+
| strtol |
+--------+
|     53 |
+--------+

SELECT STRTOL('\0', 2);

+--------+
| strtol |
+--------+
|      0 |
+--------+
```

# SUBSTRING 関数
<a name="r_SUBSTRING"></a>

文字列内で、指定された開始位置からの文字列のサブセットを返します。

入力が文字列の場合、抽出される文字の開始位置および文字数はバイト数ではなく文字数に基づきます。つまり、マルチバイト文字は 1 文字としてカウントされます。入力がバイナリ式の場合、開始位置と抽出される部分文字列はバイト数に基づきます。負の長さを指定することはできませんが、開始位置を負に指定することは可能です。

## 構文
<a name="r_SUBSTRING-synopsis"></a>

```
SUBSTRING(character_string FROM start_position [ FOR number_characters ] )
```

```
SUBSTRING(character_string, start_position, number_characters )
```

```
SUBSTRING(binary_expression, start_byte, number_bytes )
```

```
SUBSTRING(binary_expression, start_byte )
```

## 引数
<a name="r_SUBSTRING-arguments"></a>

 *character\$1string*   
検索する文字列。文字データ型以外のデータ型は、文字列のように扱われます。

 *start\$1position*   
文字列内で抽出を開始する位置 (1 から始まる)。*start\$1position* はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。負の数を指定することもできます。

 *number\$1characters*   
抽出する文字の数 (サブ文字列の長さ)。*number\$1characters* はバイト数ではなく文字数に基づくため、マルチバイト文字は 1 文字としてカウントされます。負の数を指定することはできません。

 *binary\$1expression*   
検索する VARBYTE データ型の binary\$1expression。

 *start\$1byte*   
バイナリ表現内の抽出を開始する (先頭を 1 とする) 位置。負の数を指定することもできます。

 *number\$1bytes*   
抽出するバイト数 (サブ文字列の長さ)。負の数を指定することはできません。

## 戻り型
<a name="r_SUBSTRING-return-type"></a>

入力に応じて、VARCHAR 型または VARBYTE 型を取ります。

## 使用に関する注意事項
<a name="r_SUBSTRING_usage_notes"></a>

以下は、*start\$1position* と *number\$1characters* を使用して文字列のさまざまな位置から部分文字列を抽出する方法の例です。

次の例では、6 番目の文字で始まる 4 文字の文字列を返します。

```
select substring('caterpillar',6,4);
substring
-----------
pill
(1 row)
```

*start\$1position* ＋ *number\$1characters* が *string* の長さを超える場合、SUBSTRING は、*start\$1position* から文字列末尾までのサブ文字列を返します。次に例を示します。

```
select substring('caterpillar',6,8);
substring
-----------
pillar
(1 row)
```

`start_position` が負の数または 0 である場合、SUBSTRING 関数は、文字列の先頭文字から `start_position` \$1 `number_characters` -1 文字までをサブ文字列として返します。次に例を示します。

```
select substring('caterpillar',-2,6);
substring
-----------
cat
(1 row)
```

`start_position` \$1 `number_characters` -1 が 0 以下である場合、SUBSTRING は空の文字列を返します。次に例を示します。

```
select substring('caterpillar',-5,4);
substring
-----------

(1 row)
```

## 例
<a name="r_SUBSTRING-examples"></a>

次の例は、LISTING テーブル内の LISTTIME 文字列から月を返します。

```
select listid, listtime,
substring(listtime, 6, 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

次の例は上記と同じですが、FROM...FOR オプションを使用します。

```
select listid, listtime,
substring(listtime from 6 for 2) as month
from listing
order by 1, 2, 3
limit 10;

 listid |      listtime       | month
--------+---------------------+-------
      1 | 2008-01-24 06:43:29 | 01
      2 | 2008-03-05 12:25:29 | 03
      3 | 2008-11-01 07:35:33 | 11
      4 | 2008-05-24 01:18:37 | 05
      5 | 2008-05-17 02:29:11 | 05
      6 | 2008-08-15 02:08:13 | 08
      7 | 2008-11-15 09:38:15 | 11
      8 | 2008-11-09 05:07:30 | 11
      9 | 2008-09-09 08:03:36 | 09
     10 | 2008-06-17 09:44:54 | 06
(10 rows)
```

文字列にマルチバイト文字が含まれる可能性がある場合、SUBSTRING を使用して文字列の先頭部分を期待どおりに抽出することはできません。これは、マルチバイト文字列の長さを、文字数ではなくバイト数に基づいて指定する必要があるためです。バイト数での長さに基づいて文字列の最初のセグメントを取得するためには、文字列を VARCHAR(*byte\$1length*) として CAST することで文字列を切り捨てます。このとき、*byte\$1length* は必要な長さとなります。次の例では、文字列 `'Fourscore and seven'` から最初の 5 バイトを抽出します。

```
select cast('Fourscore and seven' as varchar(5));

varchar
-------
Fours
```

次に、バイナリ値 `abc` の開始位置が負の場合の例を示します。開始位置が -3 であるため、サブ文字列はバイナリ値の先頭から抽出されます。結果は、バイナリ部分文字列の 16 進数表現として自動的に表示されます。

```
select substring('abc'::varbyte, -3);

 substring
-----------
 616263
```

次に、バイナリ値 `abc` の開始位置が 1 の場合の例を示します。長さが指定されていないため、文字列の抽出は文字列の開始位置から末尾までを対象に行われます。結果は、バイナリ部分文字列の 16 進数表現として自動的に表示されます。

```
select substring('abc'::varbyte, 1);

 substring
-----------
 616263
```

次に、バイナリ値 `abc` の開始位置が 3 の場合の例を示します。長さが指定されていないため、文字列の抽出は文字列の開始位置から末尾までを対象に行われます。結果は、バイナリ部分文字列の 16 進数表現として自動的に表示されます。

```
select substring('abc'::varbyte, 3);

 substring
-----------
 63
```

次に、バイナリ値 `abc` に対して開始位置が 2 の場合の例を示します。文字列は開始位置から位置 10 まで抽出されますが、文字列の末尾は位置 3 になります。結果は、バイナリ部分文字列の 16 進数表現として自動的に表示されます。

```
select substring('abc'::varbyte, 2, 10);

 substring
-----------
 6263
```

次に、バイナリ値 `abc` に対して開始位置が 2 の場合の例を示します。文字列は開始位置から 1 バイト分抽出されます。結果は、バイナリ部分文字列の 16 進数表現として自動的に表示されます。

```
select substring('abc'::varbyte, 2, 1);

 substring
-----------
 62
```

次の例では、入力文字列 `Ana` の最後のスペースの後に表示される最初の名前 `Silva, Ana` を返します。

```
select reverse(substring(reverse('Silva, Ana'), 1, position(' ' IN reverse('Silva, Ana'))))

 reverse
-----------
 Ana
```

# TEXTLEN 関数
<a name="r_TEXTLEN"></a>

LEN 関数のシノニム。

「[LEN 関数](r_LEN.md)」を参照してください。

# TRANSLATE 関数
<a name="r_TRANSLATE"></a>

任意の式において、指定された文字をすべて、指定された別の文字に置き換えます。既存の文字は、*characters\$1to\$1replace* 引数および *characters\$1to\$1substitute* 引数内の位置により置換文字にマッピングされます。*characters\$1to\$1replace* 引数で *characters\$1to\$1substitute* 引数よりも多くの文字が指定されている場合、*characters\$1to\$1replace* 引数からの余分な文字は戻り値で省略されます。

TRANSLATE は、[REPLACE 関数](r_REPLACE.md)や [REGEXP\$1REPLACE 関数](REGEXP_REPLACE.md) と似ています。ただし、REPLACE は 1 つの文字列全体を別の文字列に置換し、REGEXP\$1REPLACE を使用すると正規表現パターンの文字列を検索できますが、TRANSLATE は複数の単一文字置換を行います。

いずれかの引数が null である場合、戻り値は `NULL` になります。

## 構文
<a name="r_TRANSLATE-synopsis"></a>

```
TRANSLATE( expression, characters_to_replace, characters_to_substitute )
```

## 引数
<a name="r_TRANSLATE-arguments"></a>

 *expression*   
変換する式。

 *characters\$1to\$1replace*   
置換する文字を含む文字列。

 *characters\$1to\$1substitute*   
代入する文字を含む文字列。

## 戻り型
<a name="r_TRANSLATE-return-type"></a>

VARCHAR

## 例
<a name="r_TRANSLATE-examples"></a>

文字列内の複数の文字を置き換えるには、次の例を使用します。

```
SELECT TRANSLATE('mint tea', 'inea', 'osin');

+-----------+
| translate |
+-----------+
| most tin  |
+-----------+
```

次の例では、TICKIT サンプルデータベースの USERS テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

列内のすべての値のアットマーク (@) をピリオドに置き換えるには、次の例を使用します。

```
SELECT email, TRANSLATE(email, '@', '.') as obfuscated_email
FROM users LIMIT 10;

+---------------------------------------+---------------------------------------+
|                 email                 |           obfuscated_email            |
+---------------------------------------+---------------------------------------+
| Cum@accumsan.com                      | Cum.accumsan.com                      |
| lorem.ipsum@Vestibulumante.com        | lorem.ipsum.Vestibulumante.com        |
| non.justo.Proin@ametconsectetuer.edu  | non.justo.Proin.ametconsectetuer.edu  |
| non.ante.bibendum@porttitortellus.org | non.ante.bibendum.porttitortellus.org |
| eros@blanditatnisi.org                | eros.blanditatnisi.org                |
| augue@Donec.ca                        | augue.Donec.ca                        |
| cursus@pedeacurna.edu                 | cursus.pedeacurna.edu                 |
| at@Duis.com                           | at.Duis.com                           |
| quam@facilisisvitaeorci.ca            | quam.facilisisvitaeorci.ca            |
| mi.lorem@nunc.edu                     | mi.lorem.nunc.edu                     |
+---------------------------------------+---------------------------------------+
```

 列内のすべての値のスペースをアンダースコアに置き換え、ピリオドを削除するには、次の例を使用します。

```
SELECT city, TRANSLATE(city, ' .', '_') 
FROM users
WHERE city LIKE 'Sain%' OR city LIKE 'St%'
GROUP BY city
ORDER BY city;

+----------------+---------------+
|      city      |   translate   |
+----------------+---------------+
| Saint Albans   | Saint_Albans  |
| Saint Cloud    | Saint_Cloud   |
| Saint Joseph   | Saint_Joseph  |
| Saint Louis    | Saint_Louis   |
| Saint Paul     | Saint_Paul    |
| St. George     | St_George     |
| St. Marys      | St_Marys      |
| St. Petersburg | St_Petersburg |
| Stafford       | Stafford      |
| Stamford       | Stamford      |
| Stanton        | Stanton       |
| Starkville     | Starkville    |
| Statesboro     | Statesboro    |
| Staunton       | Staunton      |
| Steubenville   | Steubenville  |
| Stevens Point  | Stevens_Point |
| Stillwater     | Stillwater    |
| Stockton       | Stockton      |
| Sturgis        | Sturgis       |
+----------------+---------------+
```

# TRIM 関数
<a name="r_TRIM"></a>

空白または指定した文字で文字列を切り捨てます。

## 構文
<a name="r_TRIM-synopsis"></a>

```
TRIM( [ BOTH | LEADING | TRAILING ] [trim_chars FROM ] string )
```

## 引数
<a name="r_TRIM-arguments"></a>

 BOTH \$1 LEADING \$1 TRAILING   
(オプション) 文字をどこから切り捨てるかを指定します。先頭と末尾の文字を削除するには BOTH を、先頭の文字のみを削除するには LEADING を、末尾の文字のみを削除するには TRAILING を使用します。このパラメータを省略すると、先頭と末尾の両方の文字が削除されます。

 *trim\$1chars*   
(オプション) 文字列から切り捨てられる文字。このパラメータを省略すると、空白が切り捨てられます。

 *string*   
切り捨てる文字列。

## 戻り型
<a name="r_TRIM-return-type"></a>

TRIM 関数は、`VARCHAR` 型または `CHAR` 型の文字列を返します。TRIM 関数を SQL コマンドで使用すると、Amazon Redshift が結果を暗黙的に `VARCHAR` に変換します。SQL 関数の SELECT リストで TRIM 関数を使用した場合は、Amazon Redshift が結果を暗黙的に変換しないため、データ型の不一致によるエラーを回避するために、変換の明示的な実行が必要になることがあります。明示的な変換については、[CAST 関数](r_CAST_function.md)および [CONVERT 関数](r_CONVERT_function.md) 関数を参照してください。

## 例
<a name="r_TRIM-example"></a>

文字列 ` dog ` の先頭および末尾の空白を切り捨てるには、次の例を使用します。

```
SELECT TRIM('    dog    ');

+-------+
| btrim |
+-------+
| dog   |
+-------+
```

文字列 ` dog ` の先頭および末尾の空白を切り捨てるには、次の例を使用します。

```
SELECT TRIM(BOTH FROM '    dog    ');

+-------+
| btrim |
+-------+
| dog   |
+-------+
```

文字列 `"dog"` から先頭の二重引用符を削除するには、次の例を使用します。

```
SELECT TRIM(LEADING '"' FROM'"dog"');

+-------+
| ltrim |
+-------+
| dog"  |
+-------+
```

文字列 `"dog"` から末尾の二重引用符を削除するには、次の例を使用します。

```
SELECT TRIM(TRAILING '"' FROM'"dog"');

+-------+
| rtrim |
+-------+
| "dog  |
+-------+
```

TRIM は、*trim\$1chars* のいずれかの文字が *string* の先頭または末尾にある場合、これらの文字をすべて削除します。次の例では、文字 'C'、'D'、および 'G' が VENUENAME の先頭または末尾にある場合 (`VARCHAR` 列)、これらの文字を切り捨てます。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
SELECT venueid, venuename, TRIM('CDG' FROM venuename)
FROM venue
WHERE venuename LIKE '%Park'
ORDER BY 2
LIMIT 7;

+---------+----------------------------+---------------------------+
| venueid |         venuename          |           btrim           |
+---------+----------------------------+---------------------------+
|     121 | AT&T Park                  | AT&T Park                 |
|     109 | Citizens Bank Park         | itizens Bank Park         |
|     102 | Comerica Park              | omerica Park              |
|       9 | Dick's Sporting Goods Park | ick's Sporting Goods Park |
|      97 | Fenway Park                | Fenway Park               |
|     112 | Great American Ball Park   | reat American Ball Park   |
|     114 | Miller Park                | Miller Park               |
+---------+----------------------------+---------------------------+
```

# UPPER 関数
<a name="r_UPPER"></a>

文字列を大文字に変換します。UPPER は、UTF-8 マルチバイト文字に対応しています (1 文字につき最大で 4 バイトまで)。

## 構文
<a name="r_UPPER-synopsis"></a>

```
UPPER(string)
```

## 引数
<a name="r_UPPER-arguments"></a>

 *string*   
入力パラメータは `VARCHAR` 文字列 (または `CHAR` など、暗黙的に `VARCHAR` に変換できるその他のデータ型) です。

## 戻り型
<a name="r_UPPER-return-type"></a>

UPPER 関数は、入力文字列のデータ型と同じデータ型の文字列を返します。例えば、入力が `VARCHAR` 文字列の場合、この関数は `VARCHAR` 文字列を返します。

## 例
<a name="r_UPPER-examples"></a>

次の例では、TICKIT サンプルデータベースの CATEGORY テーブルからのデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

CATNAME フィールドを大文字に変換するには、次の例を使用します。

```
SELECT catname, UPPER(catname) 
FROM category 
ORDER BY 1,2;

+-----------+-----------+
|  catname  |   upper   |
+-----------+-----------+
| Classical | CLASSICAL |
| Jazz      | JAZZ      |
| MLB       | MLB       |
| MLS       | MLS       |
| Musicals  | MUSICALS  |
| NBA       | NBA       |
| NFL       | NFL       |
| NHL       | NHL       |
| Opera     | OPERA     |
| Plays     | PLAYS     |
| Pop       | POP       |
+-----------+-----------+
```

# SUPER 型の情報関数
<a name="c_Type_Info_Functions"></a>

以下では、`SUPER` データ型の入力から動的情報を取得するために Amazon Redshift でサポートされる、SQL の型情報関数について説明しています。

**Topics**
+ [DECIMAL\$1PRECISION 関数](r_decimal_precision.md)
+ [DECIMAL\$1SCALE 関数](r_decimal_scale.md)
+ [IS\$1ARRAY 関数](r_is_array.md)
+ [IS\$1BIGINT 関数](r_is_bigint.md)
+ [IS\$1BOOLEAN 関数](r_is_boolean.md)
+ [IS\$1CHAR 関数](r_is_char.md)
+ [IS\$1DECIMAL 関数](r_is_decimal.md)
+ [IS\$1FLOAT 関数](r_is_float.md)
+ [IS\$1INTEGER 関数](r_is_integer.md)
+ [IS\$1OBJECT 関数](r_is_object.md)
+ [IS\$1SCALAR 関数](r_is_scalar.md)
+ [IS\$1SMALLINT 関数](r_is_smallint.md)
+ [IS\$1VARCHAR 関数](r_is_varchar.md)
+ [JSON\$1SIZE 関数](r_json_size.md)
+ [JSON\$1TYPEOF 関数](r_json_typeof.md)
+ [SIZE](r_SIZE.md)

# DECIMAL\$1PRECISION 関数
<a name="r_decimal_precision"></a>

保存される小数点以下の最大合計桁数の精度をチェックします。この数値には、小数点の左桁と右桁の両方が含まれます。精度の範囲は 1～38 で、デフォルトは 38 です。

## 構文
<a name="r_decimal_precision-synopsis"></a>

```
DECIMAL_PRECISION(super_expression)
```

## 引数
<a name="r_decimal_precision-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_decimal_precision-returns"></a>

`INTEGER`

## 例
<a name="r_decimal_precision_example"></a>

テーブル t に DECIMAL\$1PRECISION 関数を適用するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (3.14159);

SELECT DECIMAL_PRECISION(s) FROM t;

+-------------------+
| decimal_precision |
+-------------------+
|                 6 |
+-------------------+
```

# DECIMAL\$1SCALE 関数
<a name="r_decimal_scale"></a>

小数点の右側に保存される小数点以下の桁数を確認します。スケールの範囲は 0 から精度ポイントまでで、デフォルトは 0 です。

## 構文
<a name="r_decimal_scale-synopsis"></a>

```
DECIMAL_SCALE(super_expression)
```

## 引数
<a name="r_decimal_scale-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_decimal_scale-returns"></a>

`INTEGER`

## 例
<a name="r_decimal_scale_example"></a>

テーブル t に DECIMAL\$1SCALE 関数を適用するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (3.14159);

SELECT DECIMAL_SCALE(s) FROM t;

+---------------+
| decimal_scale |
+---------------+
|             5 |
+---------------+
```

# IS\$1ARRAY 関数
<a name="r_is_array"></a>

変数が配列であるかどうかをチェックします。変数が配列の場合、この関数は `true` を返します。この関数には、空の配列も含まれています。それ以外の場合は、この関数は null を含む他のすべての値に対して `false` を返します。

## 構文
<a name="r_is_array-synopsis"></a>

```
IS_ARRAY(super_expression)
```

## 引数
<a name="r_is_array-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_array-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_array_example"></a>

`[1,2]` が IS\$1ARRAY 関数を使用する配列であるかどうか確認するには、次の例を使用します。

```
SELECT IS_ARRAY(JSON_PARSE('[1,2]'));

+----------+
| is_array |
+----------+
| true     |
+----------+
```

# IS\$1BIGINT 関数
<a name="r_is_bigint"></a>

値が `BIGINT` であるかどうか確認します。IS\$1BIGINT 関数は、64 ビット範囲のスケール 0 の数値に対して `true` を返します。それ以外の場合、この関数は、null および浮動小数点数を含む他のすべての値に対して `false` を返します。

IS\$1BIGINT 関数は、IS\$1INTEGER のスーパーセットです。

## 構文
<a name="r_is_bigint-synopsis"></a>

```
IS_BIGINT(super_expression)
```

## 引数
<a name="r_is_bigint-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_bigint-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_bigint_example"></a>

`5` が IS\$1ARRAY 関数を使用する `BIGINT` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_BIGINT(s) FROM t;

+---+-----------+
| s | is_bigint |
+---+-----------+
| 5 | true      |
+---+-----------+
```

# IS\$1BOOLEAN 関数
<a name="r_is_boolean"></a>

値が `BOOLEAN` であるかどうか確認します。IS\$1BOOLEAN 関数は、定数 JSON ブール値に対して `true` を返します。この関数は、null を含むその他の値に対して `false` を返します。

## 構文
<a name="r_is_boolean-synopsis"></a>

```
IS_BOOLEAN(super_expression)
```

## 引数
<a name="r_is_boolean-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_boolean-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_boolean_example"></a>

`TRUE` が IS\$1BOOLEAN 関数を使用する `BOOLEAN` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (TRUE);

SELECT s, IS_BOOLEAN(s) FROM t;

+------+------------+
|  s   | is_boolean |
+------+------------+
| true | true       |
+------+------------+
```

# IS\$1CHAR 関数
<a name="r_is_char"></a>

値が `CHAR` であるかどうか確認します。IS\$1CHAR 関数は、ASCII 文字のみを含む文字列に対して `true` を返します。これは、CHAR 型は ASCII 形式の文字のみを保存できるためです。この関数は、他の値に対して `false` を返します。

## 構文
<a name="r_is_char-synopsis"></a>

```
IS_CHAR(super_expression)
```

## 引数
<a name="r_is_char-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_char-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_char_example"></a>

`t` が IS\$1CHAR 関数を使用する `CHAR` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES ('t');

SELECT s, IS_CHAR(s) FROM t;

+-----+---------+
|  s  | is_char |
+-----+---------+
| "t" | true    |
+-----+---------+
```

# IS\$1DECIMAL 関数
<a name="r_is_decimal"></a>

値が `DECIMAL` であるかどうか確認します。IS\$1DECIMAL 関数は、浮動小数点ではない数値に対して `true` を返します。この関数は、null を含むその他の値に対して `false` を返します。

IS\$1DECIMAL 関数は、IS\$1BIGINT のスーパーセットです。

## 構文
<a name="r_is_decimal-synopsis"></a>

```
IS_DECIMAL(super_expression)
```

## 引数
<a name="r_is_decimal-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_decimal-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_decimal_example"></a>

`1.22` が IS\$1DECIMAL 関数を使用する `DECIMAL` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (1.22);

SELECT s, IS_DECIMAL(s) FROM t;

+------+------------+
|  s   | is_decimal |
+------+------------+
| 1.22 | true       |
+------+------------+
```

# IS\$1FLOAT 関数
<a name="r_is_float"></a>

値が浮動小数点数であるかどうかをチェックします。IS\$1FLOAT 関数は、浮動小数点数 (`FLOAT4` および `FLOAT8`) に対して `true` を返します。この関数は、他の値に対して `false` を返します。

IS\$1DECIMAL セットと IS\$1FLOAT セットは互いに素です。

## 構文
<a name="r_is_float-synopsis"></a>

```
IS_FLOAT(super_expression)
```

## 引数
<a name="r_is_float-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_float-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_float_example"></a>

`2.22::FLOAT` が IS\$1FLOAT 関数を使用する `FLOAT` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES(2.22::FLOAT);

SELECT s, IS_FLOAT(s) FROM t;

+---------+----------+
|    s    | is_float |
+---------+----------+
| 2.22e+0 | true     |
+---------+----------+
```

# IS\$1INTEGER 関数
<a name="r_is_integer"></a>

32 ビット範囲のスケール 0 の数値については `true` を返し、それ以外の値 (null と浮動小数点数を含む) については `false` を返します。

IS\$1INTEGER 関数は、IS\$1SMALLINT 関数のスーパーセットです。

## 構文
<a name="r_is_integer-synopsis"></a>

```
IS_INTEGER(super_expression)
```

## 引数
<a name="r_is_integer-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_integer-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_integer_example"></a>

`5` が IS\$1INTEGER 関数を使用する `INTEGER` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_INTEGER(s) FROM t;

+---+------------+
| s | is_integer |
+---+------------+
| 5 | true       |
+---+------------+
```

# IS\$1OBJECT 関数
<a name="r_is_object"></a>

変数がオブジェクトであるかどうかをチェックします。IS\$1OBJECT 関数は、空のオブジェクトを含むオブジェクトに対して `true` を返します。この関数は、null を含むその他の値に対して `false` を返します。

## 構文
<a name="r_is_object-synopsis"></a>

```
IS_OBJECT(super_expression)
```

## 引数
<a name="r_is_object-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_object-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_object_example"></a>

`{"name": "Joe"}` が IS\$1OBJECT 関数を使用するオブジェクトであるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s super);

INSERT INTO t VALUES (JSON_PARSE('{"name": "Joe"}'));

SELECT s, IS_OBJECT(s) FROM t;

+----------------+-----------+
|       s        | is_object |
+----------------+-----------+
| {"name":"Joe"} | true      |
+----------------+-----------+
```

# IS\$1SCALAR 関数
<a name="r_is_scalar"></a>

変数がスカラーであるかどうかをチェックします。IS\$1SCALAR 関数は、配列またはオブジェクトではない任意の値に対して `true` を返します。この関数は、null を含むその他の値に対して `false` を返します。

IS\$1ARRAY、IS\$1OBJECT、および IS\$1SCALAR のセットは、null 以外のすべての値をカバーします。

## 構文
<a name="r_is_scalar-synopsis"></a>

```
IS_SCALAR(super_expression)
```

## 引数
<a name="r_is_scalar-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_scalar-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_scalar_example"></a>

`{"name": "Joe"}` が IS\$1SCALAR 関数を使用するスカラーであるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (JSON_PARSE('{"name": "Joe"}'));

SELECT s, IS_SCALAR(s.name) FROM t;

+----------------+-----------+
|       s        | is_scalar |
+----------------+-----------+
| {"name":"Joe"} | true      |
+----------------+-----------+
```

# IS\$1SMALLINT 関数
<a name="r_is_smallint"></a>

変数が `SMALLINT` であるかどうか確認します。IS\$1SMALLINT 関数は、16 ビット範囲のスケール 0 の数値に対して `true` を返します。この関数は、null および浮動小数点数を含む他のすべての値に対して `false` を返します。

## 構文
<a name="r_is_smallint-synopsis"></a>

```
IS_SMALLINT(super_expression)
```

## 引数
<a name="r_is_smallint-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻る
<a name="r_is_smallint-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_smallint_example"></a>

`5` が IS\$1SMALLINT 関数を使用する `SMALLINT` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES (5);

SELECT s, IS_SMALLINT(s) FROM t;

+---+-------------+
| s | is_smallint |
+---+-------------+
| 5 | true        |
+---+-------------+
```

# IS\$1VARCHAR 関数
<a name="r_is_varchar"></a>

変数が `VARCHAR` であるかどうか確認します。IS\$1VARCHAR 関数は、すべての文字列に対して `true` を返します。この関数は、他の値に対して `false` を返します。

IS\$1VARCHAR 関数は、IS\$1CHAR 関数のスーパーセットです。

## 構文
<a name="r_is_varchar-synopsis"></a>

```
IS_VARCHAR(super_expression)
```

## 引数
<a name="r_is_varchar-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_is_varchar-returns"></a>

`BOOLEAN`

## 例
<a name="r_is_varchar_example"></a>

`abc` が IS\$1VARCHAR 関数を使用する `VARCHAR` であるかどうか確認するには、次の例を使用します。

```
CREATE TABLE t(s SUPER);

INSERT INTO t VALUES ('abc');

SELECT s, IS_VARCHAR(s) FROM t;

+-------+------------+
|   s   | is_varchar |
+-------+------------+
| "abc" | true       |
+-------+------------+
```

# JSON\$1SIZE 関数
<a name="r_json_size"></a>

JSON\$1SIZE 関数は、文字列にシリアル化されたときに、指定した `SUPER` 式のバイト数を返します。

## 構文
<a name="r_json_size-synopsis"></a>

```
JSON_SIZE(super_expression)
```

## 引数
<a name="r_json_size-arguments"></a>

*super\$1expression*  
`SUPER` 定数または式。

## 戻り型
<a name="r_json_size-returns"></a>

`INTEGER`  
JSON\$1SIZE 関数は、入力文字列のバイト数を示す `INTEGER` を返します。この値は文字数とは異なります。例えば、UTF-8 文字「⬤」(黒いドット) のサイズは、1 文字ですが 3 バイトです。

## 使用に関する注意事項
<a name="r_json_size-usage_notes"></a>

JSON\$1SIZE (x) は、機能的には OCTET\$1LENGTH (JSON\$1SERIALIZE) と同じです。ただし、指定された `SUPER` 式がシリアル化時にシステムの `VARCHAR` 制限を超える場合、JSON\$1SERIALIZE はエラーを返すことに注意してください。JSON\$1SIZE にはこの制限はありません。

## 例
<a name="r_json_size_example"></a>

文字列にシリアル化された `SUPER` 値の長さを返すには、次の例を使用します。

```
SELECT JSON_SIZE(JSON_PARSE('[10001,10002,"⬤"]'));

+-----------+
| json_size |
+-----------+
|        19 |
+-----------+
```

指定された `SUPER` 式の長さは 17 文字ですが、「⬤」は 3 バイトの文字なので、JSON\$1SIZE は `19` を返すことに注意してください。

# JSON\$1TYPEOF 関数
<a name="r_json_typeof"></a>

JSON\$1TYPEOF スカラー関数は、`SUPER` 値の動的型に応じて、ブール値、数値、文字列、オブジェクト、配列、または null の値を持つ `VARCHAR` を返します。

## 構文
<a name="r_json_typeof-synopsis"></a>

```
JSON_TYPEOF(super_expression)
```

## 引数
<a name="r_json_typeof-arguments"></a>

*super\$1expression*  
`SUPER` 式または列。

## 戻り型
<a name="r_json_typeof-returns"></a>

`VARCHAR`

## 例
<a name="r_json_typeof_example"></a>

JSON\$1TYPEOF 関数を使用して、配列 `[1,2]` の JSON の型を確認するには、次の例を使用します。

```
SELECT JSON_TYPEOF(ARRAY(1,2));

+-------------+
| json_typeof |
+-------------+
| array       |
+-------------+
```

JSON\$1TYPEOF 関数を使用して、オブジェクト `{"name":"Joe"}` の JSON 型を確認するには、次の例を使用します。

```
SELECT JSON_TYPEOF(JSON_PARSE('{"name":"Joe"}'));

+-------------+
| json_typeof |
+-------------+
| object      |
+-------------+
```

# SIZE
<a name="r_SIZE"></a>

 `SUPER` 型の定数または式のバイナリのメモリ内サイズを `INTEGER` で返します。

## 構文
<a name="r_SIZE-synopsis"></a>

```
SIZE(super_expression)
```

## 引数
<a name="r_SIZE-parameters"></a>

*super\$1expression*  
 `SUPER` 型の定数または式。

## 戻り型
<a name="r_SIZE-returns"></a>

`INTEGER`

## 例
<a name="r_SIZE-examples"></a>

 SIZE を使用して複数の `SUPER` 型式のメモリ内サイズを取得するには、次の例を使用します。

```
CREATE TABLE test_super_size(a SUPER);
            
INSERT INTO test_super_size 
VALUES
  (null),
  (TRUE),
  (JSON_PARSE('[0,1,2,3]')),
  (JSON_PARSE('{"a":0,"b":1,"c":2,"d":3}'))
;

SELECT a, SIZE(a) 
FROM test_super_size 
ORDER BY 2, 1;

+---------------------------+------+
|             a             | size |
+---------------------------+------+
| true                      |    4 |
| NULL                      |    4 |
| [0,1,2,3]                 |   23 |
| {"a":0,"b":1,"c":2,"d":3} |   52 |
+---------------------------+------+
```

# VARBYTE 関数と演算子
<a name="varbyte-functions"></a>

Amazon Redshift で VARBYTE データ型をサポートする関数と演算子は以下のとおりです。
+ [VARBYTE 演算子](r_VARBYTE_OPERATORS.md)
+ [FROM\$1HEX](r_FROM_HEX.md)
+ [FROM\$1VARBYTE](r_FROM_VARBYTE.md)
+ [GETBIT](r_GETBIT.md)
+ [TO\$1HEX](r_TO_HEX.md)
+ [TO\$1VARBYTE](r_TO_VARBYTE.md)
+ [CONCAT](r_CONCAT.md)
+ [LEN](r_LEN.md)
+ [LENGTH 関数](r_LENGTH.md)
+ [OCTET\$1LENGTH](r_OCTET_LENGTH.md)
+ [SUBSTRING 関数](r_SUBSTRING.md)

# VARBYTE 演算子
<a name="r_VARBYTE_OPERATORS"></a>

 以下は VARBYTE 演算子の一覧です。この演算子は、VARBYTE データ型のバイナリ値に対し機能します。2 つの入力の内いずれかが null であると、結果は null になります。

## サポートされている演算子
<a name="r_VARBYTE_OPERATORS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_VARBYTE_OPERATORS.html)

## 例
<a name="r_VARBYTE_OPERATORS-examples"></a>

次の例では、`'a'::VARBYTE` の値は `61` であり `'b'::VARBYTE` の値は `62` です。`::` は、文字列を `VARBYTE` データ型にキャストします。キャストデータ型の詳細については、「[CAST](r_CAST_function.md)」を参照してください。

`<` 演算子を使用して、`'a'` が `'b'` より小さいかどうかを比較するには、次の例を使用します。

```
SELECT 'a'::VARBYTE < 'b'::VARBYTE AS less_than;
               
+-----------+
| less_than |
+-----------+
| true      |
+-----------+
```

`=` 演算子を使用して、`'a'` が `'b'` と等しいかどうかを比較するには、次の例を使用します。

```
SELECT 'a'::VARBYTE = 'b'::VARBYTE AS equal;
               
+-------+
| equal |
+-------+
| false |
+-------+
```

`||` 演算子を使用して 2 つのバイナリ値を連結するには、次の例を使用します。

```
SELECT 'a'::VARBYTE || 'b'::VARBYTE AS concat;
               
+--------+
| concat |
+--------+
|   6162 |
+--------+
```

`+` 演算子を使用して 2 つのバイナリ値を連結するには、次の例を使用します。

```
SELECT 'a'::VARBYTE + 'b'::VARBYTE AS concat;
               
+--------+
| concat |
+--------+
|   6162 |
+--------+
```

FROM\$1VARBYTE 関数を使用して入力バイナリ値の各ビットを否定するには、次の例を使用します。文字列 `'a'` は `01100001` と評価されます。詳細については、「[FROM\$1VARBYTE](r_FROM_VARBYTE.md)」を参照してください。

```
SELECT FROM_VARBYTE(~'a'::VARBYTE, 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     10011110 |
+--------------+
```

2 つの入力バイナリ値に対して `&` 演算子を適用するには、次の例を使用します。文字列 `'a'` は `01100001` と評価され、`'b'` は `01100010` と評価されます。

```
SELECT FROM_VARBYTE('a'::VARBYTE & 'b'::VARBYTE, 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     01100000 |
+--------------+
```

# FROM\$1HEX 関数
<a name="r_FROM_HEX"></a>

FROM\$1HEX は 16 進数をバイナリ数に変換します。

## 構文
<a name="r_FROM_HEX-synopsis"></a>

```
FROM_HEX(hex_string)
```

## 引数
<a name="r_FROM_HEX-arguments"></a>

 *hex\$1string*   
変換する 16 進数文字列 (`VARCHAR` または `TEXT`) です。形式はリテラル値である必要があります。

## 戻り型
<a name="r_FROM_HEX-return-type"></a>

`VARBYTE`

## 例
<a name="r_FROM_HEX-examples"></a>

`'6162'` の 16 進数表現をバイナリ値に変換するには、次の例を使用します。結果は、バイナリ値の 16 進数表現として自動的に出力されます。

```
SELECT FROM_HEX('6162');
               
+----------+
| from_hex |
+----------+
|     6162 |
+----------+
```

# FROM\$1VARBYTE 関数
<a name="r_FROM_VARBYTE"></a>

FROM\$1VARBYTE は、バイナリ値を指定した形式の文字列に変換します。

## 構文
<a name="r_FROM_VARBYTE-synopsis"></a>

```
FROM_VARBYTE(binary_value, format)
```

## 引数
<a name="r_FROM_VARBYTE-arguments"></a>

 *binary\$1value*   
`VARBYTE` データ型のバイナリ値です。

 *format*   
返される文字列のフォーマット。大文字と小文字を区別しない有効な値は `hex`、`binary`、`utf8` (`utf-8` と `utf_8` も) および `base64` です。

## 戻り型
<a name="r_FROM_VARBYTE-return-type"></a>

`VARCHAR`

## 例
<a name="r_FROM_VARBYTE-examples"></a>

バイナリ値 `'ab'` を 16 進数値に変換するには、次の例を使用します。

```
SELECT FROM_VARBYTE('ab', 'hex');
               
+--------------+
| from_varbyte |
+--------------+
|         6162 |
+--------------+
```

`'4d'` のバイナリ表現を返すには、次の例を使用します。`'4d'` のバイナリ表現は文字列 `01001101` です。

```
SELECT FROM_VARBYTE(FROM_HEX('4d'), 'binary');
               
+--------------+
| from_varbyte |
+--------------+
|     01001101 |
+--------------+
```

# GETBIT 関数
<a name="r_GETBIT"></a>

GETBIT は、指定されたインデックスのバイナリ値のビット値を返します。

## 構文
<a name="r_GETBIT-synopsis"></a>

```
GETBIT(binary_value, index)
```

## 引数
<a name="r_GETBIT-arguments"></a>

 *binary\$1value*   
`VARBYTE` データ型のバイナリ値です。

 *index*   
ビット値として返されるバイナリ値を指定するインデックスの番号です。バイナリ値はビットの配列であり、右端のビット (最下位ビット) から左端のビット (最上位ビット) に向かい、0 から始まるインデックス番号が付けられています。

## 戻り型
<a name="r_GETBIT-return-type"></a>

`INTEGER`

## 例
<a name="r_GETBIT-examples"></a>

バイナリ値 `from_hex('4d')` のインデックス `2` にあるビットを返すには、次の例を使用します。`'4d'` のバイナリ表現は `01001101` です。

```
SELECT GETBIT(FROM_HEX('4d'), 2);
               
+--------+
| getbit |
+--------+
|      1 |
+--------+
```

`from_hex('4d')` が返すバイナリ値で 8 つのインデックス位置にあるビットを返すには、次の例を使用します。`'4d'` のバイナリ表現は `01001101` です。

```
SELECT GETBIT(FROM_HEX('4d'), 7), GETBIT(FROM_HEX('4d'), 6),
  GETBIT(FROM_HEX('4d'), 5), GETBIT(FROM_HEX('4d'), 4),
  GETBIT(FROM_HEX('4d'), 3), GETBIT(FROM_HEX('4d'), 2),
  GETBIT(FROM_HEX('4d'), 1), GETBIT(FROM_HEX('4d'), 0);
               
+--------+--------+--------+--------+--------+--------+--------+--------+
| getbit | getbit | getbit | getbit | getbit | getbit | getbit | getbit |
+--------+--------+--------+--------+--------+--------+--------+--------+
|      0 |      1 |      0 |      0 |      1 |      1 |      0 |      1 |
+--------+--------+--------+--------+--------+--------+--------+--------+
```

# TO\$1HEX 関数
<a name="r_TO_HEX"></a>

TO\$1HEX は、数値またはバイナリ値を 16 進数表現に変換します。

## 構文
<a name="r_TO_HEX-synopsis"></a>

```
TO_HEX(value)
```

## 引数
<a name="r_TO_HEX-arguments"></a>

 *value*   
変換する数値またはバイナリ値 (`VARBYTE`) のいずれかです。

## 戻り型
<a name="r_TO_HEX-return-type"></a>

`VARCHAR`

## 例
<a name="r_TO_HEX-examples"></a>

数値を 16 進数表現に変換するには、次の例を使用します。

```
SELECT TO_HEX(2147676847);
               
+----------+
|  to_hex  |
+----------+
| 8002f2af |
+----------+
```

`'abc'` の `VARBYTE` 表現を 16 進数値に変換するには、次の例を使用します。

```
SELECT TO_HEX('abc'::VARBYTE);
               
+--------+
| to_hex |
+--------+
| 616263 |
+--------+
```

テーブルを作成し、`'abc'` の `VARBYTE` 表現を 16 進数として挿入して、その値を保持している列を選択するには、次の例を使用します。

```
CREATE TABLE t (vc VARCHAR);
INSERT INTO t SELECT TO_HEX('abc'::VARBYTE);
SELECT vc FROM t;
 
+--------+
|   vc   |
+--------+
| 616263 |
+--------+
```

`VARBYTE` 値を `VARCHAR` 値にキャストする際の形式が UTF-8 であることを示すには、次の例を使用します。

```
CREATE TABLE t (vc VARCHAR);
INSERT INTO t SELECT 'abc'::VARBYTE::VARCHAR;

SELECT vc FROM t;

+-----+
| vc  |
+-----+
| abc |
+-----+
```

# TO\$1VARBYTE 関数
<a name="r_TO_VARBYTE"></a>

TO\$1VARBYTE は、文字列の形式を指定して、その文字列をバイナリ値に変換します。

## 構文
<a name="r_TO_VARBYTE-synopsis"></a>

```
TO_VARBYTE(string, format)
```

## 引数
<a name="r_TO_VARBYTE-arguments"></a>

 *string*   
`CHAR` または `VARCHAR` 文字列。

 *format*   
入力文字列の形式。大文字と小文字を区別しない有効な値は `hex`、`binary`、`utf8` (`utf-8` と `utf_8` も) および `base64` です。

## 戻り型
<a name="r_TO_VARBYTE-return-type"></a>

`VARBYTE`

## 例
<a name="r_TO_VARBYTE-examples"></a>

16 進数 `6162` をバイナリ値に変換するには、次の例を使用します。結果は、バイナリ値の 16 進数表現として自動的に出力されます。

```
SELECT TO_VARBYTE('6162', 'hex');
               
+------------+
| to_varbyte |
+------------+
|       6162 |
+------------+
```

`4d` のバイナリ表現を返すには、次の例を使用します。'4d'のバイナリ表現は `01001101` です。

```
SELECT TO_VARBYTE('01001101', 'binary');
               
+------------+
| to_varbyte |
+------------+
|         4d |
+------------+
```

UTF-8 の文字列 `'a'` をバイナリ値に変換するには、次の例を使用します。結果は、バイナリ値の 16 進数表現として自動的に出力されます。

```
SELECT TO_VARBYTE('a', 'utf8');
               
+------------+
| to_varbyte |
+------------+
|         61 |
+------------+
```

16 進数値の文字列 `'4'` をバイナリ値に変換するには、次の例を使用します。16 進数の文字列の長さが奇数の場合、`0` が先頭に追加され有効な 16 進数が形成されます。

```
SELECT TO_VARBYTE('4', 'hex');
               
+------------+
| to_varbyte |
+------------+
|         04 |
+------------+
```

# ウィンドウ関数
<a name="c_Window_functions"></a>

ウィンドウ関数を使用すると、分析的なビジネスクエリをより効率的に作成できます。ウィンドウ関数はパーティションまたは結果セットの「ウィンドウ」で演算し、ウィンドウのすべての行に値を返します。それに対して、ウィンドウ以外の関数は、結果セットの行ごとに計算を実行します。結果の行を集計するグループ関数とは異なり、ウィンドウ関数はテーブル式のすべての行を保持します。

 戻り値はこのウィンドウの行セットの値を使用して計算されます。ウィンドウはテーブルの各行に、追加の属性を計算するために使用する行のセットを定義します。ウィンドウはウィンドウ仕様 (OVER 句) を使用して定義され、次の 3 つの主要な概念に基づいています。
+  *ウィンドウのパーティション*、列のグループを形成 (PARTITION 句) 
+  *ウィンドウの並び順*、各パーティション内の行の順序またはシーケンスの定義 (ORDER BY 句) 
+  *ウィンドウのフレーム*、各行に関連して定義され、行のセットをさらに制限 (ROWS 仕様) 

ウィンドウ関数は、最後の ORDER BY 句を除いて、クエリで実行される最後の演算のセットです。すべての結合およびすべての WHERE、GROUP BY、および HAVING 句は、ウィンドウ関数が処理される前に完了されます。そのため、ウィンドウ関数は選択リストまたは ORDER BY 句のみに表示できます。複数のウィンドウ関数は、別のフレーム句を持つ 1 つのクエリ内で使用できます。ウィンドウ関数は、CASE などの他のスカラー式でも使用できます。

ウィンドウ関数はネストできません。例えば、集計関数 [SUM](r_SUM.md) はウィンドウ関数 [SUM](r_WF_SUM.md) 内に表示される可能性がありますが、ウィンドウ関数 SUM は別のウィンドウ関数 SUM 内に表示できません。ウィンドウ関数が別のウィンドウ関数にネストされているため、以下はサポートされません。

```
SELECT SUM(SUM(selectcol) OVER (PARTITION BY ordercol)) OVER (Partition by ordercol) FROM t;
```

## ウィンドウ関数の構文の概要
<a name="r_Window_function_synopsis"></a>

ウィンドウ関数は、次のような標準構文に従います。

```
function (expression) OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list [ frame_clause ] ] )
```

 ここで、*function* は、このセクションで説明している関数の 1 つです。

*expr\$1list* は次のとおりです。

```
expression | column_name [, expr_list ]
```

 *order\$1list* は次のとおりです。

```
expression | column_name [ ASC | DESC ] 
[ NULLS FIRST | NULLS LAST ]
[, order_list ]
```

 *frame\$1clause* は次のとおりです。

```
ROWS
{ UNBOUNDED PRECEDING | unsigned_value PRECEDING | CURRENT ROW } |

{ BETWEEN
{ UNBOUNDED PRECEDING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW}
AND
{ UNBOUNDED FOLLOWING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW }}
```

### 引数
<a name="r_Window_function_synopsis-arguments"></a>

 * 関数*   
ウィンドウ関数。詳細については、個々の関数の説明を参照してください。

OVER   
ウィンドウの仕様を定義する句。OVER 句はウィンドウ関数に必須であり、ウィンドウ関数を他の SQL 関数と区別します。

PARTITION BY *expr\$1list*   
(オプション) PARTITION BY 句は結果セットをパーティションに再分割します。これは GROUP BY 句と似ています。パーティション句が存在する場合、関数は各パーティションの行に対して計算されます。パーティション句が指定されていない場合、1 つのパーティションにテーブル全体が含まれ、関数は完全なテーブルに対して計算されます。  
ランク付け関数 DENSE\$1RANK、NTILE、RANK、および ROW\$1NUMBER では、結果セットのすべての行でグローバルな比較が必要です。PARTITION BY clauseを使用すると、クエリオプティマイザーは、パーティションに応じて複数のスライスにワークロードを分散させることにより、個々の集計を並列で実行できます。PARTITION BY 句がない場合、集計ステップを 1 つのスライスで順次実行する必要があり、特に大規模なクラスターではパフォーマンスに大きな悪影響を与えることがあります。  
Amazon Redshift は、PARTITION BY 句で文字列リテラルをサポートしていません。

ORDER BY *order\$1list*   
(オプション) ウィンドウ関数は、ORDER BY で順序仕様に従ってソートされた各パーティション内の行に適用されます。この ORDER BY 句は、*frame\$1clause* の ORDER BY 句とは異なり、両者はまったく無関係です。ORDER BY 句は、PARTITION BY 句なしで使用できます。  
ランク付け関数の場合、ORDER BY 句はランク付けの値に使用する基準を特定します。集計関数の場合、パーティションで分割された行は、集計関数がフレームごとに計算される前に順序付けされる必要があります。ウィンドウ関数の種類の詳細については、「[ウィンドウ関数](#c_Window_functions)」を参照してください。  
列識別子または列識別を検証する式は、順序リストで必要とされます。定数も定数式も、列名の代用として使用することはできません。  
NULL 値は独自のグループとして扱われ、NULLS FIRST または NULLS LAST オプションに従ってソートおよびランク付けされます。デフォルトでは、NULL 値は昇順ではソートされて最後にランク付けされ、降順ではソートされて最初にランク付けされます。  
Amazon Redshift は、ORDER BY 句で文字列リテラルをサポートしていません。  
 ORDER BY 句を省略した場合、行の順序は不確定になります。  
Amazon Redshift などの並列システムでは、ORDER BY 句がデータの一意および全体の並び順を生成しない場合、行の順序は不確定になります。つまり、ORDER BY 式が重複した値を生成する場合 (部分的ソート)、これらの行の戻り値の順序は Amazon Redshift の実行によって異なることがあります。そのため、ウィンドウ関数は予期しない結果または矛盾した結果を返す場合があります。詳細については、「[ウィンドウ関数用データの一意の並び順](#r_Examples_order_by_WF)」を参照してください。

 *column\$1name*   
パーティション化または順序付けされる列の名前。

ASC \$1 DESC   
次のように、式のソート順を定義するオプション:   
+ ASC: 昇順 (数値の場合は低から高、文字列の場合は「A」から「Z」など) オプションを指定しない場合、データはデフォルトでは昇順にソートされます。
+ DESC: 降順 (数値の場合は高から低、文字列の場合は「Z」から「A」)。

NULLS FIRST \$1 NULLS LAST  
NULL を NULL 以外の値より先に順序付けするか、NULL 以外の値の後に順序付けするかを指定するオプション。デフォルトでは、NULL は昇順ではソートされて最後にランク付けされ、降順ではソートされて最初にランク付けされます。

 *frame\$1clause*   
集計関数では、ORDER BY を使用する場合、フレーム句は関数のウィンドウで行のセットをさらに絞り込みます。これは、順序付けされた結果内の行のセットを含めるか、または除外できるようにします。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。  
frame 句は、ランク付け関数には適用されません。また、集計関数の OVER 句の中に ORDER BY 句がない場合は、フレーム句は必要ありません。ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。  
ORDER BY 句が指定されていない場合、暗黙的なフレームはバインドされません (ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING と同じ)。

ROWS  
この句は、現在の行からの物理オフセットを指定してウィンドウフレームを定義します。  
この句は、現在のウィンドウの行、または現在の行の値を組み合わせるパーティションを指定します。また、現在の行の前後に配置される行の位置を指定する引数を使用します。すべてのウィンドウフレームの参照点は現在の行です。ウィンドウフレームがパーティションで次にスライドすると、各行は順に現在の行になります。  
フレームは、次のように現在の行までと現在の行を含む行の簡易セットである場合があります。  

```
{UNBOUNDED PRECEDING | offset PRECEDING | CURRENT ROW}
```
また、次の 2 つの境界の間の行のセットである場合があります。  

```
BETWEEN
{ UNBOUNDED PRECEDING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
AND
{ UNBOUNDED FOLLOWING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
```
UNBOUNDED PRECEDING はウィンドウがパーティションの最初の行で開始することを示し、*offset* PRECEDING はウィンドウが現在の行の前のオフセット値と等しい行数で開始することを示します。デフォルトは UNBOUNDED PRECEDING です。  
CURRENT ROW は、ウィンドウが現在の行で開始または終了することを示します。  
UNBOUNDED FOLLOWING はウィンドウがパーティションの最後の行で終了することを示し、*offset* FOLLOWING はウィンドウが現在の行の後のオフセット値と等しい行数で終了することを示します。  
*offset* は、現在の行の前後にある物理的な行数を識別します。この場合、*offset* は、正の数値に評価される定数である必要があります。例えば、5 FOLLOWING は現在の行より 5 行後のフレームを終了します。  
BETWEEN が指定されていない場合、フレームは現在の行により暗黙的に区切られます。例えば、`ROWS 5 PRECEDING` は `ROWS BETWEEN 5 PRECEDING AND CURRENT ROW` と同じです。また、`ROWS UNBOUNDED FOLLOWING`は `ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING` と同じです。  
開始境界が終了境界よりも大きいフレームを指定することはできません。例えば、以下のフレームはいずれも指定することができません。  

```
between 5 following and 5 preceding
between current row and 2 preceding
between 3 following and current row
```

## ウィンドウ関数用データの一意の並び順
<a name="r_Examples_order_by_WF"></a>

ウィンドウ関数の ORDER BY 句がデータの一意および全体の並び順を生成しない場合、行の順序は不確定になります。ORDER BY 式が重複した値 (部分的な順序付け) を生成する場合、これらの行の戻り値の順序は実行時によって異なる可能性があります。この場合、ウィンドウ関数は予期しない結果または矛盾した結果を返す場合があります。

例えば、次のクエリは、複数の実行にわたって異なる結果を返します。これらの異なる結果は、`order by dateid` が SUM Window 関数でデータの一意の順序を生成しないために発生します。

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |   1730.00 |     1730.00
1827 |    708.00 |     2438.00
1827 |    234.00 |     2672.00
...

select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |    234.00 |      234.00
1827 |    472.00 |      706.00
1827 |    347.00 |     1053.00
...
```

 この場合、2 番目の ORDER BY 列をウィンドウ関数に追加すると問題を解決できます。

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid, pricepaid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid | sumpaid
--------+-----------+---------
1827 |    234.00 |  234.00
1827 |    337.00 |  571.00
1827 |    347.00 |  918.00
...
```

## サポートされている関数
<a name="r_Window_function_supported"></a>

Amazon Redshift は、集計とランク付けという 2 つのタイプのウィンドウ関数をサポートします。

サポートされる集約関数は次のとおりです。
+ [AVG ウィンドウ関数](r_WF_AVG.md)
+ [COUNT ウィンドウ関数](r_WF_COUNT.md)
+ [CUME\$1DIST ウィンドウ関数](r_WF_CUME_DIST.md)
+ [DENSE\$1RANK ウィンドウ関数](r_WF_DENSE_RANK.md)
+ [FIRST\$1VALUE ウィンドウ関数](r_WF_first_value.md)
+ [LAG ウィンドウ関数](r_WF_LAG.md) 
+ [LAST\$1VALUE ウィンドウ関数](r_WF_last_value.md)
+ [LEAD ウィンドウ関数](r_WF_LEAD.md) 
+ [LISTAGG ウィンドウ関数](r_WF_LISTAGG.md) 
+ [MAX ウィンドウ関数](r_WF_MAX.md) 
+ [MEDIAN ウィンドウ関数](r_WF_MEDIAN.md) 
+ [MIN ウィンドウ関数](r_WF_MIN.md) 
+ [NTH\$1VALUE ウィンドウ関数](r_WF_NTH.md) 
+ [PERCENTILE\$1CONT ウィンドウ関数](r_WF_PERCENTILE_CONT.md)
+ [PERCENTILE\$1DISC ウィンドウ関数](r_WF_PERCENTILE_DISC.md)
+ [RATIO\$1TO\$1REPORT ウィンドウ関数](r_WF_RATIO_TO_REPORT.md)
+ [STDDEV\$1SAMP および STDDEV\$1POP ウィンドウ関数](r_WF_STDDEV.md) (STDDEV\$1SAMP と STDDEV はシノニムです) 
+ [SUM ウィンドウ関数](r_WF_SUM.md) 
+ [VAR\$1SAMP および VAR\$1POP ウィンドウ関数](r_WF_VARIANCE.md) (VAR\$1SAMP と VARIANCE はシノニムです)

サポートされる集計関数は次のとおりです。
+ [DENSE\$1RANK ウィンドウ関数](r_WF_DENSE_RANK.md) 
+ [NTILE ウィンドウ関数](r_WF_NTILE.md) 
+ [PERCENT\$1RANK ウィンドウ関数](r_WF_PERCENT_RANK.md)
+ [RANK ウィンドウ関数](r_WF_RANK.md) 
+ [ROW\$1NUMBER ウィンドウ関数](r_WF_ROW_NUMBER.md)

## ウィンドウ関数例のサンプルテーブル
<a name="r_Window_function_example"></a>

ウィンドウ関数別の例をそれぞれの説明と共に参照できます。一部の例で使用している WINSALES という名前のテーブルには、以下の 11 行が含まれています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/c_Window_functions.html)

次のスクリプトは、WINSALES テーブルの例を作成し、値を入力します。

```
CREATE TABLE winsales(
  salesid int,
  dateid date,
  sellerid int,
  buyerid char(10),
  qty int,
  qty_shipped int);

INSERT INTO winsales VALUES
  (30001, '8/2/2003', 3, 'b', 10, 10),
  (10001, '12/24/2003', 1, 'c', 10, 10),
  (10005, '12/24/2003', 1, 'a', 30, null),	
  (40001, '1/9/2004', 4, 'a', 40, null),	
  (10006, '1/18/2004', 1, 'c', 10, null),	
  (20001, '2/12/2004', 2, 'b', 20, 20),
  (40005, '2/12/2004', 4, 'a', 10, 10),
  (20002, '2/16/2004', 2, 'c', 20, 20),
  (30003, '4/18/2004', 3, 'b', 15, null),
  (30004, '4/18/2004', 3, 'b', 20, null),	
  (30007, '9/7/2004', 3, 'c', 30, null);
```

# AVG ウィンドウ関数
<a name="r_WF_AVG"></a>

 AVG ウィンドウ関数は入力式の値の平均 (算術平均) を返します。AVG 関数は数値に対してはたらき、NULL 値は無視します。

## 構文
<a name="r_WF_AVG-synopsis"></a>

```
AVG ( [ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## 引数
<a name="r_WF_AVG-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数はカウントに使用する式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で AVG 関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="c_Supported_data_types_wf_avg"></a>

AVG 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、および DOUBLE PRECISION です。

AVG 関数でサポートされる戻り値の型は次のとおりです。
+ SMALLINT または INTEGER 引数の場合は BIGINT
+ BIGINT 引数の場合は NUMERIC
+ 浮動小数点の引数の場合は DOUBLE PRECISION

## 例
<a name="r_WF_AVG-examples"></a>

次の例では、日付で販売数のローリング平均を計算します。日付 ID および販売 ID によって結果は順序付けられます。

```
select salesid, dateid, sellerid, qty,
avg(qty) over
(order by dateid, salesid rows unbounded preceding) as avg
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | avg
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  10
10005 | 2003-12-24 |        1 |  30 |  16
40001 | 2004-01-09 |        4 |  40 |  22
10006 | 2004-01-18 |        1 |  10 |  20
20001 | 2004-02-12 |        2 |  20 |  20
40005 | 2004-02-12 |        4 |  10 |  18
20002 | 2004-02-16 |        2 |  20 |  18
30003 | 2004-04-18 |        3 |  15 |  18
30004 | 2004-04-18 |        3 |  20 |  18
30007 | 2004-09-07 |        3 |  30 |  19
(11 rows)
```

 WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

# COUNT ウィンドウ関数
<a name="r_WF_COUNT"></a>

 COUNT ウィンドウ関数は式で定義された行をカウントします。

COUNT 関数には 2 つのバリエーションがあります。COUNT(\$1) は null を含むかどうかにかかわらず、ターゲットテーブルのすべての行をカウントします。COUNT(expression) は、特定の列または式にある NULL 以外の値を持つ行数を計算します。

## 構文
<a name="r_WF_COUNT-synopsis"></a>

```
COUNT ( * | [ ALL ] expression) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## 引数
<a name="r_WF_COUNT-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数はカウントに使用する式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で COUNT 関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="c_Supported_data_types_wf_count"></a>

COUNT 関数は引数のデータ型をすべてサポートします。

COUNT 関数でサポートされる戻り値の型は BIGINT です。

## 例
<a name="r_WF_COUNT-examples"></a>

 次の例では、データウィンドウの先頭から販売 ID、数量、すべての行のカウントを示します。

```
select salesid, qty,
count(*) over (order by salesid rows unbounded preceding) as count
from winsales
order by salesid;

salesid | qty | count
---------+-----+-----
10001 |  10 |   1
10005 |  30 |   2
10006 |  10 |   3
20001 |  20 |   4
20002 |  20 |   5
30001 |  10 |   6
30003 |  15 |   7
30004 |  20 |   8
30007 |  30 |   9
40001 |  40 |   10
40005 |  10 |   11
(11 rows)
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、データウィンドウの先頭から販売 ID、数量、非 Null 行をカウントする方法を示します。(WINSALES テーブルの QTY\$1SHIPPED 列には NULL が含まれます) 

```
select salesid, qty, qty_shipped,
count(qty_shipped)
over (order by salesid rows unbounded preceding) as count
from winsales
order by salesid;

salesid | qty | qty_shipped | count
---------+-----+-------------+-------
10001 |  10 |          10 |   1
10005 |  30 |             |   1
10006 |  10 |             |   1
20001 |  20 |          20 |   2
20002 |  20 |          20 |   3
30001 |  10 |          10 |   4
30003 |  15 |             |   4
30004 |  20 |             |   4
30007 |  30 |             |   4
40001 |  40 |             |   4
40005 |  10 |          10 |   5
(11 rows)
```

# CUME\$1DIST ウィンドウ関数
<a name="r_WF_CUME_DIST"></a>

ウィンドウまたはパーティション内の値の累積分布を計算します。昇順の場合、累積分布は以下の式を使用して特定されます。

`count of rows with values <= x / count of rows in the window or partition`

ここで、*x* は ORDER BY 句で指定された列の現在の行の値と等しくなります。以下のデータセットは、この式の使用方法を示しています。

```
Row#	Value	  Calculation    CUME_DIST
1        2500	   (1)/(5)	   0.2
2        2600	   (2)/(5)	   0.4
3        2800	   (3)/(5)	   0.6
4        2900	   (4)/(5)	   0.8
5        3100	   (5)/(5)	   1.0
```

戻り値の範囲は、0～1 (0 は含みませんが 1 は含みます) です。

## 構文
<a name="r_WF_CUME_DIST-synopsis"></a>

```
CUME_DIST ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## 引数
<a name="r_WF_CUME_DIST-arguments"></a>

OVER  
ウィンドウのパーティションを指定する句。OVER 句にウィンドウフレーム仕様を含めることはできません。

PARTITION BY *partition\$1expression*   
省略可能。OVER 句の各グループのレコードの範囲を設定する式。

ORDER BY *order\$1list*   
累積分布を計算する式。式は、数値データ型を含んでいるか、そのデータ型に暗黙的に変換できる必要があります。ORDER BY を省略した場合、すべての行について戻り値は 1 です。  
ORDER BY で一意の並べ替えが行われない場合、行の順序は不確定になります。詳細については、「[ウィンドウ関数用データの一意の並び順](c_Window_functions.md#r_Examples_order_by_WF)」を参照してください。

## 戻り型
<a name="r_WF_CUME_DIST-returns"></a>

FLOAT8

## 例
<a name="r_WF_CUME_DIST-examples"></a>

次の例は、各販売者の数量の累積配布を計算します。

```
select sellerid, qty, cume_dist() 
over (partition by sellerid order by qty) 
from winsales;

sellerid   qty	   cume_dist
--------------------------------------------------
1         10.00	   0.33
1         10.64	   0.67
1         30.37	   1
3         10.04	   0.25
3         15.15	   0.5
3         20.75	   0.75
3         30.55	   1
2         20.09	   0.5
2         20.12	   1
4         10.12	   0.5
4         40.23	   1
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

# DENSE\$1RANK ウィンドウ関数
<a name="r_WF_DENSE_RANK"></a>

DENSE\$1RANK ウィンドウ関数は、OVER 句の ORDER BY 式に基づいて、値のグループの値のランクを特定します。オプションの PARTITION BY 句がある場合、ランク付けは行のグループごとにリセットされます。ランク付け条件が同じ値の行は、同じランクを受け取ります。DENSE\$1RANK 関数は、2 行以上で同点となった場合、ランク付けされた値の順位に差はないことが、RANK とは異なります。例えば、2 行が `1` 位にランク付けされると、次のランクは `2` 位になります。

同じクエリに PARTITION BY および ORDER BY 句のあるランク付け関数を使用することができます。

## 構文
<a name="r_WF_DENSE_RANK-synopsis"></a>

```
DENSE_RANK() OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## 引数
<a name="r_WF_DENSE_RANK-arguments"></a>

( )   
この関数は引数を受け取りませんが、空のかっこは必要です。

OVER   
DENSE\$1RANK 関数のウィンドウ句。

PARTITION BY *expr\$1list*   
(オプション) ウィンドウを定義する 1 つ以上の式。

ORDER BY *order\$1list*   
(オプション) ランク付けの値が基とする式。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。ORDER BY を省略した場合、すべての行について戻り値は `1` です。  
ORDER BY で一意の並べ替えが行われない場合、行の順序は不確定になります。詳細については、「[ウィンドウ関数用データの一意の並び順](c_Window_functions.md#r_Examples_order_by_WF)」を参照してください。

## 戻り型
<a name="c_Supported_data_types_wf_dense_rank"></a>

`BIGINT`

## 例
<a name="r_WF_DENSE_RANK-examples"></a>

次の例では、ウィンドウ関数のサンプルテーブルを使用しています。詳細については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、販売数量によってテーブルを順序付けして、各行にデンス値のランクと標準のランクの両方を割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

```
SELECT salesid, qty,
DENSE_RANK() OVER(ORDER BY qty DESC) AS d_rnk,
RANK() OVER(ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY 2,1;

+---------+-----+-------+-----+
| salesid | qty | d_rnk | rnk |
+---------+-----+-------+-----+
|   10001 |  10 |     5 |   8 |
|   10006 |  10 |     5 |   8 |
|   30001 |  10 |     5 |   8 |
|   40005 |  10 |     5 |   8 |
|   30003 |  15 |     4 |   7 |
|   20001 |  20 |     3 |   4 |
|   20002 |  20 |     3 |   4 |
|   30004 |  20 |     3 |   4 |
|   10005 |  30 |     2 |   2 |
|   30007 |  30 |     2 |   2 |
|   40001 |  40 |     1 |   1 |
+---------+-----+-------+-----+
```

DENSE\$1RANK および RANK 関数が同じクエリで並べて使用される場合、同じ行のセットに割り当てるランク付けの違いに注意してください。

sellerid によってテーブルをパーティション分割し、数量によって各パーティションを順序付けして、行ごとにデンス値のランクを割り当てるには、次の例を使用します。結果はウィンドウ関数の結果が提供された後にソートされます。

```
SELECT salesid, sellerid, qty,
DENSE_RANK() OVER(PARTITION BY sellerid ORDER BY qty DESC) AS d_rnk
FROM winsales
ORDER BY 2,3,1;

+---------+----------+-----+-------+
| salesid | sellerid | qty | d_rnk |
+---------+----------+-----+-------+
|   10001 |        1 |  10 |     2 |
|   10006 |        1 |  10 |     2 |
|   10005 |        1 |  30 |     1 |
|   20001 |        2 |  20 |     1 |
|   20002 |        2 |  20 |     1 |
|   30001 |        3 |  10 |     4 |
|   30003 |        3 |  15 |     3 |
|   30004 |        3 |  20 |     2 |
|   30007 |        3 |  30 |     1 |
|   40005 |        4 |  10 |     2 |
|   40001 |        4 |  40 |     1 |
+---------+----------+-----+-------+
```

最後の例を正しく使用するには、次のコマンドを使用して WINSALES テーブルに行を挿入します。この行には、別の行と同じ buyerid、sellerid、および qtysold があります。これにより、前の例では 2 つの行が同数になり、DENSE\$1RANK 関数と RANK 関数の違いが示されます。

```
INSERT INTO winsales VALUES(30009, '2/2/2003', 3, 'b', 20, NULL);
```

buyerid と sellerid によってテーブルをパーティション分割し、数量によって各パーティションを順序付けして、行ごとにデンス値のランクと標準のランクの両方を割り当てるには、次の例を使用します。結果はウィンドウ関数が適用された後にソートされます。

```
SELECT salesid, sellerid, qty, buyerid,
DENSE_RANK() OVER(PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS d_rnk,
RANK() OVER (PARTITION BY buyerid, sellerid ORDER BY qty DESC) AS rnk
FROM winsales
ORDER BY rnk;

+---------+----------+-----+---------+-------+-----+
| salesid | sellerid | qty | buyerid | d_rnk | rnk |
+---------+----------+-----+---------+-------+-----+
|   20001 |        2 |  20 | b       |     1 |   1 |
|   30007 |        3 |  30 | c       |     1 |   1 |
|   10006 |        1 |  10 | c       |     1 |   1 |
|   10005 |        1 |  30 | a       |     1 |   1 |
|   20002 |        2 |  20 | c       |     1 |   1 |
|   30009 |        3 |  20 | b       |     1 |   1 |
|   40001 |        4 |  40 | a       |     1 |   1 |
|   30004 |        3 |  20 | b       |     1 |   1 |
|   10001 |        1 |  10 | c       |     1 |   1 |
|   40005 |        4 |  10 | a       |     2 |   2 |
|   30003 |        3 |  15 | b       |     2 |   3 |
|   30001 |        3 |  10 | b       |     3 |   4 |
+---------+----------+-----+---------+-------+-----+
```

# FIRST\$1VALUE ウィンドウ関数
<a name="r_WF_first_value"></a>

 順序付けられた行のセットとすると、FIRST\$1VALUE はウィンドウフレームの最初の行に関して指定された式の値を返します。

フレームの最後の行を選択する方法については、「[LAST\$1VALUE ウィンドウ関数](r_WF_last_value.md)」を参照してください。

## 構文
<a name="r_WF_first_value-synopsis"></a>

```
FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 引数
<a name="r_WF_first_value-arguments"></a>

 *expression*   
 関数の対象となる列または式。

IGNORE NULLS   
このオプションが FIRST\$1VALUE で使用される場合、関数は NULL ではないフレームの最初の値 (値がすべて NULL の場合は NULL) を返します。

RESPECT NULLS   
 Amazon Redshift は使用される行を決定するために null 値を含める必要があることを示します。IGNORE NULLS を指定しない場合、RESPECT NULLS はデフォルトでサポートされます。

OVER   
関数にウィンドウ句を導入します。

PARTITION BY *expr\$1list*   
1 つ以上の式で関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY 句が指定されていない場合、ORDER BY はテーブル全体をソートします。ORDER BY 句を指定する場合、*frame\$1clause* も指定する必要があります。  
FIRST\$1VALUE 関数の結果は、データの並び順によって異なります。以下の場合、結果は不確定になります。  
+ ORDER BY 句が指定されておらず、パーティションに式に使用する 2 つの異なる値が含まれる場合 
+ 式が ORDER BY リストの同じ値に対応する異なる値を検証する場合。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## 戻り型
<a name="c_Supported_data_types_wf_first_value"></a>

これらの関数は、Amazon Redshift のプリミティブデータ型を使用する式をサポートします。戻り値の型は*式*のデータ型と同じです。

## 例
<a name="r_WF_first_value-examples"></a>

次の例では、サンプル TICKIT データの VENUE テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

次の例は、収容能力によって順序付けられた結果 (高から低) で、VENUE テーブルの各会場の座席数を返します。FIRST\$1VALUE 関数は、フレームの最初の行 (この場合、最高座席数の行) に対応する会場名を選択するために使用されます。結果は州によってパーティションで分割されるため、VENUESTATE 値が変更されると、新しい最初の値が選択されます。ウィンドウフレームはバインドされていないため、同じ最初の値が各パーティションの行ごとに選択されます。

カリフォルニアでは、`Qualcomm Stadium`が最高座席数 (`70561`) であるため、この名前は `CA` パーティションのすべての行に対する最初の値です。

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |         first_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Qualcomm Stadium
CA         |      69843 | Monster Park                   | Qualcomm Stadium
CA         |      63026 | McAfee Coliseum                | Qualcomm Stadium
CA         |      56000 | Dodger Stadium                 | Qualcomm Stadium
CA         |      45050 | Angel Stadium of Anaheim       | Qualcomm Stadium
CA         |      42445 | PETCO Park                     | Qualcomm Stadium
CA         |      41503 | AT&T Park                      | Qualcomm Stadium
CA         |      22000 | Shoreline Amphitheatre         | Qualcomm Stadium
CO         |      76125 | INVESCO Field                  | INVESCO Field
CO         |      50445 | Coors Field                    | INVESCO Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Dolphin Stadium
FL         |      73800 | Jacksonville Municipal Stadium | Dolphin Stadium
FL         |      65647 | Raymond James Stadium          | Dolphin Stadium
FL         |      36048 | Tropicana Field                | Dolphin Stadium
...
```

次の例は、IGNORE NULLS オプションの使用方法と VENUE テーブルへの新しい行の追加への見込みを示します。

```
insert into venue values(2000,null,'Stanford','CA',90000);
```

この新しい行には、VENUENAME 行の NULL 値が含まれます。次に、以前にこのセクションで示した FIRST\$1VALUE クエリを繰り返します。

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |         venuename          | first_value
-----------+------------+----------------------------+-------------
CA         |      90000 | NULL                       | NULL
CA         |      70561 | Qualcomm Stadium           | NULL
CA         |      69843 | Monster Park               | NULL
...
```

新しい行には最高値の VENUESEATS 値 (`90000`) が含まれ、その VENUENAME は NULL となるため、FIRST\$1VALUE 関数は `CA` パーティションに NULL を返します。関数式のこのような行を無視するには、IGNORE NULLS オプションを関数の引数に追加します。

```
select venuestate, venueseats, venuename,
first_value(venuename) ignore nulls
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venuestate='CA')
order by venuestate;

venuestate | venueseats |         venuename          |   first_value
------------+------------+----------------------------+------------------
CA         |      90000 | NULL                       | Qualcomm Stadium
CA         |      70561 | Qualcomm Stadium           | Qualcomm Stadium
CA         |      69843 | Monster Park               | Qualcomm Stadium
...
```

# LAG ウィンドウ関数
<a name="r_WF_LAG"></a>

 LAG ウィンドウ関数は、パーティションの現在の行より上 (前) の指定されたオフセットの行の値を返します。

## 構文
<a name="r_WF_LAG-synopsis"></a>

```
LAG (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## 引数
<a name="r_WF_LAG-arguments"></a>

 *value\$1expr*   
 関数の対象となる列または式。

 *offset*   
 値を返す現在の行より前の行数を指定するオプションのパラメータ。オフセットは整数の定数、または整数を検証する式にすることができます。オフセットを指定していない場合、Amazon Redshift はデフォルト値として `1` を使用します。`0` のオフセットは現在の行を示します。

IGNORE NULLS   
Amazon Redshift が使用する行を決定するときに null 値をスキップすることを指定するオプションの仕様。IGNORE NULLS がリストされていない場合、Null 値が含まれます。  
NVL または COALESCE 式を使用し、Null 値を別の値で置換できます。詳細については、「[NVL および COALESCE 関数](r_NVL_function.md)」を参照してください。

RESPECT NULLS   
 Amazon Redshift は使用される行を決定するために null 値を含める必要があることを示します。IGNORE NULLS を指定しない場合、RESPECT NULLS はデフォルトでサポートされます。

OVER   
ウィンドウのパーティションおよび並び順を指定します。OVER 句にウィンドウフレーム仕様を含めることはできません。

PARTITION BY *window\$1partition*   
OVER 句の各グループのレコードの範囲を設定するオプションの引数。

ORDER BY *window\$1ordering*   
各パーティション内の行をソートします。

LAG ウィンドウ関数は、Amazon Redshift のデータ型を使用する式をサポートします。戻り値の型は *value\$1expr* の型と同じです。

## 例
<a name="r_WF_LAG-examples"></a>

 次の例は、購入者 ID 3 の購入者に販売されたチケット数と購入者 3 がチケットを購入した時刻を示します。購入者 3 の以前の販売と各販売を比較するには、クエリは販売ごとに以前の販売数を返します。2008 年 1 月 16 日より前に購入されていないため、最初の以前の販売数は Null です。

```
select buyerid, saletime, qtysold,
lag(qtysold,1) over (order by buyerid, saletime) as prev_qtysold
from sales where buyerid = 3 order by buyerid, saletime;

buyerid |      saletime       | qtysold | prev_qtysold
---------+---------------------+---------+--------------
3 | 2008-01-16 01:06:09 |       1 |
3 | 2008-01-28 02:10:01 |       1 |            1
3 | 2008-03-12 10:39:53 |       1 |            1
3 | 2008-03-13 02:56:07 |       1 |            1
3 | 2008-03-29 08:21:39 |       2 |            1
3 | 2008-04-27 02:39:01 |       1 |            2
3 | 2008-08-16 07:04:37 |       2 |            1
3 | 2008-08-22 11:45:26 |       2 |            2
3 | 2008-09-12 09:11:25 |       1 |            2
3 | 2008-10-01 06:22:37 |       1 |            1
3 | 2008-10-20 01:55:51 |       2 |            1
3 | 2008-10-28 01:30:40 |       1 |            2
(12 rows)
```

# LAST\$1VALUE ウィンドウ関数
<a name="r_WF_last_value"></a>

 順序付けられた行のセットを考慮し、LAST\$1VALUE 関数は、フレームの最後の行に関する式の値を返します。

フレームの最初の行を選択する方法については、「[FIRST\$1VALUE ウィンドウ関数](r_WF_first_value.md)」を参照してください。

## 構文
<a name="r_WF_last_value-synopsis"></a>

```
LAST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 引数
<a name="r_WF_last_value-arguments"></a>

 *expression*   
 関数の対象となる列または式。

IGNORE NULLS   
この関数は NULL ではないフレームの最後の値 (値がすべて NULL の場合は NULL) を返します。

RESPECT NULLS   
Amazon Redshift は使用される行を決定するために null 値を含める必要があることを示します。IGNORE NULLS を指定しない場合、RESPECT NULLS はデフォルトでサポートされます。

OVER   
関数にウィンドウ句を導入します。

PARTITION BY *expr\$1list*   
1 つ以上の式で関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY 句が指定されていない場合、ORDER BY はテーブル全体をソートします。ORDER BY 句を指定する場合、*frame\$1clause* も指定する必要があります。  
結果は、データの並び順によって異なります。以下の場合、結果は不確定になります。  
+ ORDER BY 句が指定されておらず、パーティションに式に使用する 2 つの異なる値が含まれる場合 
+ 式が ORDER BY リストの同じ値に対応する異なる値を検証する場合。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## 戻り型
<a name="c_Supported_data_types_wf_last_value"></a>

これらの関数は、Amazon Redshift のプリミティブデータ型を使用する式をサポートします。戻り値の型は*式*のデータ型と同じです。

## 例
<a name="r_WF_last_value-examples"></a>

次の例では、サンプル TICKIT データの VENUE テーブルを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

次の例は、収容能力によって順序付けられた結果 (高から低) で、VENUE テーブルの各会場の座席数を返します。LAST\$1VALUE 関数は、フレームの最後の行 (この場合、最小座席数の行) に対応する会場名を選択するために使用されます。結果は州によってパーティションで分割されるため、VENUESTATE 値が変更されると、新しい最後の値が選択されます。ウィンドウフレームはバインドされていないため、同じ最後の値が各パーティションの行ごとに選択されます。

カリフォルニアでは、`Shoreline Amphitheatre`の座席数が一番低い (`22000`) ため、この値がパーティションのすべての行に返されます。

```
select venuestate, venueseats, venuename,
last_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |          last_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Shoreline Amphitheatre
CA         |      69843 | Monster Park                   | Shoreline Amphitheatre
CA         |      63026 | McAfee Coliseum                | Shoreline Amphitheatre
CA         |      56000 | Dodger Stadium                 | Shoreline Amphitheatre
CA         |      45050 | Angel Stadium of Anaheim       | Shoreline Amphitheatre
CA         |      42445 | PETCO Park                     | Shoreline Amphitheatre
CA         |      41503 | AT&T Park                      | Shoreline Amphitheatre
CA         |      22000 | Shoreline Amphitheatre         | Shoreline Amphitheatre
CO         |      76125 | INVESCO Field                  | Coors Field
CO         |      50445 | Coors Field                    | Coors Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Tropicana Field
FL         |      73800 | Jacksonville Municipal Stadium | Tropicana Field
FL         |      65647 | Raymond James Stadium          | Tropicana Field
FL         |      36048 | Tropicana Field                | Tropicana Field
...
```

# LEAD ウィンドウ関数
<a name="r_WF_LEAD"></a>

 LEAD ウィンドウ関数は、パーティションの現在の行より下 (後) の指定されたオフセットの行の値を返します。

## 構文
<a name="r_WF_LEAD-synopsis"></a>

```
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## 引数
<a name="r_WF_LEAD-arguments"></a>

 *value\$1expr*   
関数の対象となる列または式。

 *offset*   
 値を返す現在の行より下の行数を指定するオプションのパラメータ。オフセットは整数の定数、または整数を検証する式にすることができます。オフセットを指定していない場合、Amazon Redshift はデフォルト値として `1` を使用します。`0` のオフセットは現在の行を示します。

IGNORE NULLS   
Amazon Redshift が使用する行を決定するときに null 値をスキップすることを指定するオプションの仕様。IGNORE NULLS がリストされていない場合、Null 値が含まれます。  
NVL または COALESCE 式を使用し、Null 値を別の値で置換できます。詳細については、「[NVL および COALESCE 関数](r_NVL_function.md)」を参照してください。

RESPECT NULLS   
 Amazon Redshift は使用される行を決定するために null 値を含める必要があることを示します。IGNORE NULLS を指定しない場合、RESPECT NULLS はデフォルトでサポートされます。

OVER   
ウィンドウのパーティションおよび並び順を指定します。OVER 句にウィンドウフレーム仕様を含めることはできません。

PARTITION BY *window\$1partition*   
OVER 句の各グループのレコードの範囲を設定するオプションの引数。

ORDER BY *window\$1ordering*   
各パーティション内の行をソートします。

LEAD ウィンドウ関数は、Amazon Redshift のデータ型を使用する式をサポートします。戻り値の型は *value\$1expr* の型と同じです。

## 例
<a name="r_WF_LEAD-examples"></a>

 次の例は、チケットが 2008 年 1 月 1 日および 2008 年 1 月 2 日に販売された SALES テーブルのイベントの手数料、および次の販売のチケット販売に支払った手数料を示します。次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
SELECT eventid, commission, saletime, LEAD(commission, 1) over ( ORDER BY saletime ) AS next_comm
FROM sales
WHERE saletime BETWEEN '2008-01-09 00:00:00' AND '2008-01-10 12:59:59'
LIMIT 10;

+---------+------------+---------------------+-----------+
| eventid | commission |      saletime       | next_comm |
+---------+------------+---------------------+-----------+
|    1664 |       13.2 | 2008-01-09 01:00:21 |      69.6 |
|     184 |       69.6 | 2008-01-09 01:00:36 |     116.1 |
|    6870 |      116.1 | 2008-01-09 01:02:37 |      11.1 |
|    3718 |       11.1 | 2008-01-09 01:05:19 |     205.5 |
|    6772 |      205.5 | 2008-01-09 01:14:04 |      38.4 |
|    3074 |       38.4 | 2008-01-09 01:26:50 |     209.4 |
|    5254 |      209.4 | 2008-01-09 01:29:16 |      26.4 |
|    3724 |       26.4 | 2008-01-09 01:40:09 |      57.6 |
|    5303 |       57.6 | 2008-01-09 01:40:21 |      51.6 |
|    3678 |       51.6 | 2008-01-09 01:42:54 |      43.8 |
+---------+------------+---------------------+-----------+
```

 次の例では、SALES テーブルのイベントの手数料と、同じイベントの次の販売においてチケット販売に支払った手数料との最大差額を示します。この例は、GROUP BY 句で LEAD を使用する方法を示しています。ウィンドウ関数は集計句では許可されないため、この例ではサブクエリを使用しています。次の例では、TICKIT サンプルデータを使用します。詳細については、「[サンプルデータベース](c_sampledb.md)」を参照してください。

```
SELECT eventid, eventname, max(next_comm_diff) as max_commission_difference
FROM
(
    SELECT sales.eventid, eventname, commission - LEAD(commission, 1) over (ORDER BY sales.eventid, saletime) AS next_comm_diff
    FROM sales JOIN event ON sales.eventid = event.eventid
)
GROUP BY eventid, eventname
ORDER BY eventid

LIMIT 10

| eventid | eventname                   | max_commission_difference |
+---------+-----------------------------+---------------------------+
| 1       | Gotterdammerung             | 7.95                      |
| 2       | Boris Godunov               | 227.85                    |
| 3       | Salome                      | 1350.9                    |
| 4       | La Cenerentola (Cinderella) | 790.05                    |
| 5       | Il Trovatore                | 214.05                    |
| 6       | L Elisir d Amore            | 510.9                     |
| 7       | Doctor Atomic               | 180.6                     |
| 9       | The Fly                     | 147                       |
| 10      | Rigoletto                   | 186.6                     |
+---------+-----------------------------+---------------------------+
```

# LISTAGG ウィンドウ関数
<a name="r_WF_LISTAGG"></a>

クエリの各グループについて、LISTAGG ウィンドウ関数は、ORDER BY 式に従ってそのグループの行をソートしてから、それらの値を 1 つの文字列に連結します。

## 構文
<a name="r_WF_LISTAGG-synopsis"></a>

```
LISTAGG( [DISTINCT] expression [, 'delimiter' ] ) 
[ WITHIN GROUP (ORDER BY order_list) ] 
OVER ( [PARTITION BY partition_expression] )
```

## 引数
<a name="r_WF_LISTAGG-arguments"></a>

DISTINCT  
(オプション) 連結する前に、指定された式から重複した値を削除する句。末尾のスペースは無視されるので、`'a'`と `'a '` という文字列は重複として扱われます。LISTAGG は、発生した最初の値を使用します。詳細については、「[末尾の空白の重要性](r_Character_types.md#r_Character_types-significance-of-trailing-blanks)」を参照してください。

  


*aggregate\$1expression*   
 集計する値を返す任意の有効な式 (列名など)。NULL 値および空の文字列は無視されます。

 *delimiter*   
(オプション) 連結された値を区切る文字列定数。デフォルトは NULL です。

 WITHIN GROUP (ORDER BY *order\$1list*)   
(オプション) 集計値のソート順を指定する句。ORDER BY により一意の順序になる場合にのみ確定的です。デフォルトでは、すべての行を集計し、1 つの値を返します。

 OVER   
 ウィンドウのパーティションを指定する句。OVER 句にウィンドウの並び順またはウィンドウフレーム仕様を含めることはできません。

 PARTITION BY *partition\$1expression*   
(オプション) OVER 句のグループごとにレコードの範囲を設定します。

## 戻り値
<a name="r_WF_LISTAGG-data-types"></a>

結果セットが 16,000,000 バイトより大きい場合、LISTAGG は次のエラーを返します。

```
Invalid operation: Result size exceeds LISTAGG limit
```

## 例
<a name="r_WF_LISTAGG-examples"></a>

次の例は、WINSALES テーブルを使用します。WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

以下の例は、販売者 ID のリストを販売者 ID 順で返します。

```
select listagg(sellerid) 
within group (order by sellerid)
over() from winsales;

  listagg
------------
 11122333344
...
...
 11122333344
 11122333344
   (11 rows)
```

以下の例は、購入者 B の販売者 ID のリストを日付順で返します。

```
select listagg(sellerid) 
within group (order by dateid)
over () as seller
from winsales
where buyerid = 'b' ;

  seller
---------
    3233
    3233
    3233
    3233
```

以下の例は、購入者 B について販売日付のカンマ区切りリストを返します。

```
select listagg(dateid,',') 
within group (order by sellerid desc,salesid asc)
over () as dates
from winsales
where buyerid  = 'b';

             dates                                      
-------------------------------------------
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-04-18,2004-02-12
```

次の例は、DISTINCT を使用して、購入者 B の一意の販売日のリストを返します。

```
select listagg(distinct dateid,',') 
within group (order by sellerid desc,salesid asc)
over () as dates
from winsales
where buyerid  = 'b';

           dates
--------------------------------
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
2003-08-02,2004-04-18,2004-02-12
```

以下の例は、各購入者 ID について販売 ID のカンマ区切りリストを返します。

```
select buyerid, 
listagg(salesid,',')
within group (order by salesid)
over (partition by buyerid) as sales_id
from winsales
order by buyerid;

+---------+-------------------------+
| buyerid |        sales_id         |
+---------+-------------------------+
| a       | 10005,40001,40005       |
| a       | 10005,40001,40005       |
| a       | 10005,40001,40005       |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| b       | 20001,30001,30003,30004 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
| c       | 10001,10006,20002,30007 |
+---------+-------------------------+
```

次の例は、最大 16,000,000 バイトの連結結果での LISTAGG サポートを示しています。

```
CREATE TABLE large_data (
    id INT,
    content VARCHAR(65535)
);

INSERT INTO large_data VALUES 
    (1, REPEAT('A', 65535)),
    (2, REPEAT('B', 65535)),
    (3, REPEAT('C', 65535));

SELECT LEN(LISTAGG(content, ',') WITHIN GROUP (ORDER BY id)) AS total_length
FROM large_data;

 total_length
--------------
       196607
```

# MAX ウィンドウ関数
<a name="r_WF_MAX"></a>

 MAX ウィンドウ関数は入力式の最大値を返します。MAX 関数は数値に対してはたらき、NULL 値は無視します。

## 構文
<a name="r_WF_MAX-synopsis"></a>

```
MAX ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 引数
<a name="r_WF_MAX-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数は式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
 集計関数のウィンドウ句を指定する句。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で MAX 関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="r_WF_MAX-data-types"></a>

データ型を入力として受け入れます。同じデータ型を *expression* として返します。

## 例
<a name="r_WF_MAX-examples"></a>

次の例では、データウィンドウの先頭から販売 ID、数量、最大数を示します。

```
select salesid, qty,
max(qty) over (order by salesid rows unbounded preceding) as max
from winsales
order by salesid;

salesid | qty | max
---------+-----+-----
10001 |  10 |  10
10005 |  30 |  30
10006 |  10 |  30
20001 |  20 |  30
20002 |  20 |  30
30001 |  10 |  30
30003 |  15 |  30
30004 |  20 |  30
30007 |  30 |  30
40001 |  40 |  40
40005 |  10 |  40
(11 rows)
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、制限されたフレームで販売 ID、数量、および最大数を示します。

```
select salesid, qty,
max(qty) over (order by salesid rows between 2 preceding and 1 preceding) as max
from winsales
order by salesid;

salesid | qty | max
---------+-----+-----
10001 |  10 |
10005 |  30 |  10
10006 |  10 |  30
20001 |  20 |  30
20002 |  20 |  20
30001 |  10 |  20
30003 |  15 |  20
30004 |  20 |  15
30007 |  30 |  20
40001 |  40 |  30
40005 |  10 |  40
(11 rows)
```

# MEDIAN ウィンドウ関数
<a name="r_WF_MEDIAN"></a>

ウィンドウまたはパーティションの値の範囲について、その中央値を計算します。範囲の Null 値は無視されます。

MEDIAN は、連続型分散モデルを前提とする逆分散関数です。

## 構文
<a name="r_WF_MEDIAN-synopsis"></a>

```
MEDIAN ( median_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## 引数
<a name="r_WF_MEDIAN-arguments"></a>

 *median\$1expression*   
中央値を特定する値を提供する式 (列名など)。式は、数値または日時データ型を含んでいるか、それらのデータ型に暗黙的に変換できる必要があります。

OVER   
ウィンドウのパーティションを指定する句。OVER 句にウィンドウの並び順またはウィンドウフレーム仕様を含めることはできません。

PARTITION BY *partition\$1expression*   
省略可能。OVER 句の各グループのレコードの範囲を設定する式。

## データ型
<a name="r_WF_MEDIAN-data-types"></a>

戻り値の型は、データ型 *median\$1expression* によって決まります。次の表は、各 *median\$1expression* 式のデータ型に対応する戻り型を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_WF_MEDIAN.html)

## 使用に関する注意事項
<a name="r_WF_MEDIAN-data-usage-notes"></a>

*median\$1expression* 引数が DECIMAL データ型であり、その最大精度が 38 桁である場合、MEDIAN が不正確な結果またはエラーを返す可能性があります。MEDIAN 関数の戻り値が 38 桁を超える場合、結果は 38 桁までとなり、39 桁以降は切り捨てられるため、精度が失われます。補間中に中間結果が最大精度を超えた場合には、数値オーバーフローが発生し、この関数はエラーを返します。このような状態を回避するため、精度が低いデータ型を使用するか、*median\$1expression* 引数を低い精度にキャストすることをお勧めします。

例えば、DECIMAL 引数の SUM 関数のデフォルトの 38 桁の精度を返します。結果のスケールは、引数のスケールと同じです。したがって、例えば、DECIMAL(5,2) 列の SUM は DECIMAL(38,2) データ型を返します。

次の例では、MEDIAN 関数の *median\$1expression* 引数で SUM 関数を使用します。PRICEPAID 列のデータ型は DECIMAL(8,2) であるため、SUM 関数は DECIMAL(38,2) を返します。

```
select salesid, sum(pricepaid), median(sum(pricepaid)) 
over() from sales where salesid < 10 group by salesid;
```

精度の損失またはオーバーフローエラーを回避するには、次の例が示すように、精度が低い DECIMAL データ型に結果をキャストします。

```
select salesid, sum(pricepaid), median(sum(pricepaid)::decimal(30,2)) 
over() from sales where salesid < 10 group by salesid;
```

## 例
<a name="r_WF_MEDIAN-examples"></a>

 以下の例では、各販売者の平均販売数量を計算します。

```
select sellerid, qty, median(qty) 
over (partition by sellerid) 
from winsales
order by sellerid;


sellerid	qty	median
---------------------------
1		10	10.0
1		10	10.0
1		30	10.0
2		20	20.0
2		20	20.0
3		10	17.5
3		15	17.5
3		20	17.5
3		30	17.5
4		10	25.0
4		40	25.0
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

# MIN ウィンドウ関数
<a name="r_WF_MIN"></a>

 MIN ウィンドウ関数は入力式の最小値を返します。MIN 関数は数値に対してはたらき、NULL 値は無視します。

## 構文
<a name="r_WF_MIN-synopsis"></a>

```
MIN ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 引数
<a name="r_WF_MIN-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数は式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で MIN 関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="r_WF_MIN-data-types"></a>

データ型を入力として受け入れます。同じデータ型を *expression* として返します。

## 例
<a name="r_WF_MIN-examples"></a>

次の例では、データウィンドウの先頭から販売 ID、数量、最小数を示します。

```
select salesid, qty,
min(qty) over
(order by salesid rows unbounded preceding)
from winsales
order by salesid;

salesid | qty | min
---------+-----+-----
10001 |  10 |  10
10005 |  30 |  10
10006 |  10 |  10
20001 |  20 |  10
20002 |  20 |  10
30001 |  10 |  10
30003 |  15 |  10
30004 |  20 |  10
30007 |  30 |  10
40001 |  40 |  10
40005 |  10 |  10
(11 rows)
```

 WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、制限されたフレームで販売 ID、数量、および最小数を示します。

```
select salesid, qty,
min(qty) over
(order by salesid rows between 2 preceding and 1 preceding) as min
from winsales
order by salesid;

salesid | qty | min
---------+-----+-----
10001 |  10 |
10005 |  30 |  10
10006 |  10 |  10
20001 |  20 |  10
20002 |  20 |  10
30001 |  10 |  20
30003 |  15 |  10
30004 |  20 |  10
30007 |  30 |  15
40001 |  40 |  20
40005 |  10 |  30
(11 rows)
```

# NTH\$1VALUE ウィンドウ関数
<a name="r_WF_NTH"></a>

 NTH\$1VALUE ウィンドウ関数は、ウィンドウの最初の行に関連するウィンドウフレームの指定された行の式の値を返します。

## 構文
<a name="r_WF_NTH-synopsis"></a>

```
NTH_VALUE (expr, offset)
[ IGNORE NULLS | RESPECT NULLS ]
OVER
( [ PARTITION BY window_partition ]
[ ORDER BY window_ordering 
                        frame_clause ] )
```

## 引数
<a name="r_WF_NTH-arguments"></a>

 *expr*   
 関数の対象となる列または式。

 *offset*   
 式を返すウィンドウの最初の行に関連する行数を決定します。*offset* は定数または式にすることができ、0 より大きい正の整数である必要があります。

IGNORE NULLS   
Amazon Redshift が使用する行を決定するときに null 値をスキップすることを指定するオプションの仕様。IGNORE NULLS がリストされていない場合、Null 値が含まれます。

RESPECT NULLS   
 Amazon Redshift は使用される行を決定するために null 値を含める必要があることを示します。IGNORE NULLS を指定しない場合、RESPECT NULLS はデフォルトでサポートされます。

OVER   
ウィンドウのパーティション、並び順、およびウィンドウフレームを指定します。

PARTITION BY *window\$1partition*   
OVER 句のグループごとにレコードの範囲を設定します。

ORDER BY *window\$1ordering*   
各パーティション内の行をソートします。ORDER BY が省略される場合、デフォルトのフレームはパーティションのすべての行から構成されます。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

NTH\$1VALUE ウィンドウ関数は、Amazon Redshift のデータ型を使用する式をサポートします。戻り値の型は *expr* の型と同じです。

## 例
<a name="r_WF_NTH-examples"></a>

次の例は、州のその他の会場の座席数を比較して、カリフォルニア、フロリダ、およびニューヨークで 3 番目に大きい会場の座席数を示しています。

```
select venuestate, venuename, venueseats,
nth_value(venueseats, 3)
ignore nulls
over(partition by venuestate order by venueseats desc
rows between unbounded preceding and unbounded following)
as third_most_seats
from (select * from venue where venueseats > 0 and
venuestate in('CA', 'FL', 'NY'))
order by venuestate;

venuestate |           venuename            | venueseats | third_most_seats
------------+--------------------------------+------------+------------------
CA         | Qualcomm Stadium               |      70561 |            63026
CA         | Monster Park                   |      69843 |            63026
CA         | McAfee Coliseum                |      63026 |            63026
CA         | Dodger Stadium                 |      56000 |            63026
CA         | Angel Stadium of Anaheim       |      45050 |            63026
CA         | PETCO Park                     |      42445 |            63026
CA         | AT&T Park                      |      41503 |            63026
CA         | Shoreline Amphitheatre         |      22000 |            63026
FL         | Dolphin Stadium                |      74916 |            65647
FL         | Jacksonville Municipal Stadium |      73800 |            65647
FL         | Raymond James Stadium          |      65647 |            65647
FL         | Tropicana Field                |      36048 |            65647
NY         | Ralph Wilson Stadium           |      73967 |            20000
NY         | Yankee Stadium                 |      52325 |            20000
NY         | Madison Square Garden          |      20000 |            20000
(15 rows)
```

# NTILE ウィンドウ関数
<a name="r_WF_NTILE"></a>

 NTILE ウィンドウ関数は、パーティションの順序付けされた行を可能な限り同じサイズの指定されたランク付けグループの数に分割し、任意の行を分類するグループを返します。

## 構文
<a name="r_WF_NTILE-synopsis"></a>

```
NTILE (expr)
OVER ( 
[ PARTITION BY expression_list ] 
[ ORDER BY order_list ]
)
```

## 引数
<a name="r_WF_NTILE-arguments"></a>

 *expr*   
ランク付けグループの数。パーティションごとに正の整数値 (0 より大きい) になる必要があります。*expr* 引数は Null を使用することはできません。

OVER   
 ウィンドウのパーティションと順序を指定する句。OVER 句にウィンドウフレーム仕様を含めることはできません。

PARTITION BY *window\$1partition*   
省略可能。OVER 句のグループごとのレコードの範囲。

ORDER BY *window\$1ordering*   
省略可能。各パーティション内の行をソートする式。ORDER BY 句を省略した場合、ランク付けの動作は同じです。  
ORDER BY で一意のソートが行われない場合、行の順序は不確定になります。詳細については、「[ウィンドウ関数用データの一意の並び順](c_Window_functions.md#r_Examples_order_by_WF)」を参照してください。

## 戻り型
<a name="r_WF_NTILE-return-type"></a>

BIGINT

## 例
<a name="r_WF_NTILE-examples"></a>

 次の例は、2008 年 8 月 26 日に Hamlet のチケットに支払った価格を 4 つのランクグループにランク付けします。結果セットは 17 行であり、1 位から 4 位のランク付けにほぼ均等に分割されます。

```
select eventname, caldate, pricepaid, ntile(4)
over(order by pricepaid desc) from sales, event, date
where sales.eventid=event.eventid and event.dateid=date.dateid and eventname='Hamlet'
and caldate='2008-08-26'
order by 4;

eventname |  caldate   | pricepaid | ntile
-----------+------------+-----------+-------
Hamlet    | 2008-08-26 |   1883.00 |     1
Hamlet    | 2008-08-26 |   1065.00 |     1
Hamlet    | 2008-08-26 |    589.00 |     1
Hamlet    | 2008-08-26 |    530.00 |     1
Hamlet    | 2008-08-26 |    472.00 |     1
Hamlet    | 2008-08-26 |    460.00 |     2
Hamlet    | 2008-08-26 |    355.00 |     2
Hamlet    | 2008-08-26 |    334.00 |     2
Hamlet    | 2008-08-26 |    296.00 |     2
Hamlet    | 2008-08-26 |    230.00 |     3
Hamlet    | 2008-08-26 |    216.00 |     3
Hamlet    | 2008-08-26 |    212.00 |     3
Hamlet    | 2008-08-26 |    106.00 |     3
Hamlet    | 2008-08-26 |    100.00 |     4
Hamlet    | 2008-08-26 |     94.00 |     4
Hamlet    | 2008-08-26 |     53.00 |     4
Hamlet    | 2008-08-26 |     25.00 |     4
(17 rows)
```

# PERCENT\$1RANK ウィンドウ関数
<a name="r_WF_PERCENT_RANK"></a>

指定の行のパーセントランクを計算します。パーセントランクは、以下の式を使用して特定されます。

`(x - 1) / (the number of rows in the window or partition - 1)`

ここで、*x* は現在の行のランクです。以下のデータセットは、この式の使用方法を示しています。

```
Row#	Value	Rank	Calculation	PERCENT_RANK
1	15	1	(1-1)/(7-1)	0.0000
2	20	2	(2-1)/(7-1)	0.1666
3	20	2	(2-1)/(7-1)	0.1666
4	20	2	(2-1)/(7-1)	0.1666
5	30	5	(5-1)/(7-1)	0.6666
6	30	5	(5-1)/(7-1)	0.6666
7	40	7	(7-1)/(7-1)	1.0000
```

戻り値の範囲は、0～1 (0 と 1 を含みます) です。どのセットも、最初の行の PERCENT\$1RANK は 0 になります。

## 構文
<a name="r_WF_PERCENT_RANK-synopsis"></a>

```
PERCENT_RANK ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## 引数
<a name="r_WF_PERCENT_RANK-arguments"></a>

( )   
この関数は引数を受け取りませんが、空のかっこは必要です。

OVER  
ウィンドウのパーティションを指定する句。OVER 句にウィンドウフレーム仕様を含めることはできません。

PARTITION BY *partition\$1expression*   
省略可能。OVER 句の各グループのレコードの範囲を設定する式。

ORDER BY *order\$1list*   
省略可能。パーセントランクを計算する式。式は、数値データ型を含んでいるか、そのデータ型に暗黙的に変換できる必要があります。ORDER BY を省略した場合、すべての行について戻り値は 0 です。  
ORDER BY で一意のソートが行われない場合、行の順序は不確定になります。詳細については、「[ウィンドウ関数用データの一意の並び順](c_Window_functions.md#r_Examples_order_by_WF)」を参照してください。

## 戻り型
<a name="r_WF_PERCENT_RANK-return-type"></a>

FLOAT8

## 例
<a name="r_WF_PERCENT_RANK-examples"></a>

以下の例では、各販売者の販売数量のパーセントランクを計算します。

```
select sellerid, qty, percent_rank() 
over (partition by sellerid order by qty) 
from winsales;

sellerid	qty		percent_rank
----------------------------------------
1		10.00		0.0
1		10.64		0.5
1		30.37		1.0
3		10.04		0.0
3		15.15		0.33
3		20.75		0.67
3		30.55		1.0
2		20.09		0.0
2		20.12		1.0
4		10.12		0.0
4		40.23		1.0
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

# PERCENTILE\$1CONT ウィンドウ関数
<a name="r_WF_PERCENTILE_CONT"></a>

PERCENTILE\$1CONT は、連続型分散モデルを前提とする逆分散関数です。これは、パーセンタイル値とソート仕様を取得し、ソート仕様を基準として、そのパーセンタイル値に該当する補間値を返します。

PERCENTILE\$1CONT は、値の順序付けを行った後に値の間の線形補間を計算します。この関数は、パーセンタイル値 `(P)` と集計グループの Null ではない行の数 `(N)` を使用して、ソート使用に従って行の順序付けを行った後に行番号を計算します。この行番号 `(RN)` は、計算式 `RN = (1+ (P*(N-1))` に従って計算されます。集計関数の最終結果は、行番号 `CRN = CEILING(RN)` および `FRN = FLOOR(RN)` にある行の値の間の線形補間に基づいて計算されます。

最終結果は次のとおりです。

`(CRN = FRN = RN)` である場合、結果は `(value of expression from row at RN)` 

そうでない場合、結果は

`(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)`.

OVER 句では PARTITION 句のみを指定できます。各行に対して PARTITION を指定すると、PERCENTILE\$1CONT は、特定のパーティション内にある一連の値から、指定したパーセンタイルに該当する値を返します。

## 構文
<a name="r_WF_PERCENTILE_CONT-synopsis"></a>

```
PERCENTILE_CONT ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## 引数
<a name="r_WF_PERCENTILE_CONT-arguments"></a>

 *パーセンタイル*   
0 と 1 の間の数値定数。Null は計算では無視されます。

WITHIN GROUP ( ORDER BY *expr*)   
パーセンタイルをソートして計算するための数値または日付/時間値を指定します。

OVER   
ウィンドウのパーティションを指定します。OVER 句にウィンドウの並び順またはウィンドウフレーム仕様を含めることはできません。

PARTITION BY *expr*   
OVER 句の各グループのレコードの範囲を設定するオプションの引数。

## 戻り値
<a name="r_WF_PERCENTILE_CONT-returns"></a>

戻り型は、WITHIN GROUP 句の ORDER BY 式のデータ型に基づいて決定されます。次の表は、各 ORDER BY 式のデータ型に対応する戻り型を示しています。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/redshift/latest/dg/r_WF_PERCENTILE_CONT.html)

## 使用に関する注意事項
<a name="r_WF_PERCENTILE_CONT-usage-notes"></a>

ORDER BY 式が DECIMAL データ型であり、その最大精度が 38 桁である場合、PERCENTILE\$1CONT が不正確な結果またはエラーを返す可能性があります。PERCENTILE\$1CONT 関数の戻り値が 38 桁を超える場合、結果は 38 桁までとなり、39 桁以降は切り捨てられるため、精度が失われます。補間中に中間結果が最大精度を超えた場合には、数値オーバーフローが発生し、この関数はエラーを返します。このような状態を回避するため、精度が低いデータ型を使用するか、ORDER BY 式を低い精度にキャストすることをお勧めします。

例えば、DECIMAL 引数の SUM 関数のデフォルトの 38 桁の精度を返します。結果のスケールは、引数のスケールと同じです。したがって、例えば、DECIMAL(5,2) 列の SUM は DECIMAL(38,2) データ型を返します。

次の例は、PERCENTILE\$1CONT 関数の ORDER BY 句で SUM 関数を使用します。PRICEPAID 列のデータ型は DECIMAL(8,2) であるため、SUM 関数は DECIMAL(38,2) を返します。

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid) desc) over()
from sales where salesid < 10 group by salesid;
```

精度の損失またはオーバーフローエラーを回避するには、次の例が示すように、精度が低い DECIMAL データ型に結果をキャストします。

```
select salesid, sum(pricepaid), percentile_cont(0.6) 
within group (order by sum(pricepaid)::decimal(30,2) desc) over()
from sales where salesid < 10 group by salesid;
```

## 例
<a name="r_WF_PERCENTILE_CONT-examples"></a>

次の例は、WINSALES テーブルを使用します。WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over() as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        1 |  10 |   20.0
        1 |  10 |   20.0
        3 |  10 |   20.0
        4 |  10 |   20.0
        3 |  15 |   20.0
        2 |  20 |   20.0
        3 |  20 |   20.0
        2 |  20 |   20.0
        3 |  30 |   20.0
        1 |  30 |   20.0
        4 |  40 |   20.0
(11 rows)
```

```
select sellerid, qty, percentile_cont(0.5) 
within group (order by qty) 
over(partition by sellerid) as median from winsales;

 sellerid | qty | median 
----------+-----+--------
        2 |  20 |   20.0
        2 |  20 |   20.0
        4 |  10 |   25.0
        4 |  40 |   25.0
        1 |  10 |   10.0
        1 |  10 |   10.0
        1 |  30 |   10.0
        3 |  10 |   17.5
        3 |  15 |   17.5
        3 |  20 |   17.5
        3 |  30 |   17.5
(11 rows)
```

次の例は、ワシントン州の販売者のチケット販売の PERCENTILE\$1CONT と PERCENTILE\$1DISC を計算します。

```
SELECT sellerid, state, sum(qtysold*pricepaid) sales, 
percentile_cont(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over(),
percentile_disc(0.6) within group (order by sum(qtysold*pricepaid::decimal(14,2) ) desc) over()
from sales s, users u 
where s.sellerid = u.userid and state = 'WA' and sellerid < 1000
group by sellerid, state;

 sellerid | state |  sales  | percentile_cont | percentile_disc
----------+-------+---------+-----------------+-----------------
      127 | WA    | 6076.00 |         2044.20 |         1531.00
      787 | WA    | 6035.00 |         2044.20 |         1531.00
      381 | WA    | 5881.00 |         2044.20 |         1531.00
      777 | WA    | 2814.00 |         2044.20 |         1531.00
       33 | WA    | 1531.00 |         2044.20 |         1531.00
      800 | WA    | 1476.00 |         2044.20 |         1531.00
        1 | WA    | 1177.00 |         2044.20 |         1531.00
(7 rows)
```

# PERCENTILE\$1DISC ウィンドウ関数
<a name="r_WF_PERCENTILE_DISC"></a>

PERCENTILE\$1DISC は、離散型分散モデルを前提とする逆分散関数です。これは、パーセンタイル値とソート仕様を取得し、特定のセットからエレメントを返します。

特定のパーセンタイル値が P である場合、PERCENTILE\$1DISC は ORDER BY 句の式の値をソートし、P と同じであるか P より大きい最少累積分散値 (同じソート仕様を基準とする) を持つ値を返します。

OVER 句では PARTITION 句のみを指定できます。

## 構文
<a name="r_WF_PERCENTILE_DISC-synopsis"></a>

```
PERCENTILE_DISC ( percentile )
WITHIN GROUP (ORDER BY expr)
OVER (  [ PARTITION BY expr_list ]  )
```

## 引数
<a name="r_WF_PERCENTILE_DISC-arguments"></a>

 *パーセンタイル*   
0 と 1 の間の数値定数。Null は計算では無視されます。

WITHIN GROUP ( ORDER BY *expr*)   
パーセンタイルをソートして計算するための数値または日付/時間値を指定します。

OVER   
ウィンドウのパーティションを指定します。OVER 句にウィンドウの並び順またはウィンドウフレーム仕様を含めることはできません。

PARTITION BY *expr*   
OVER 句の各グループのレコードの範囲を設定するオプションの引数。

## 戻り値
<a name="r_WF_PERCENTILE_DISC-returns"></a>

WITHIN GROUP 句の ORDER BY 式と同じデータ型。

## 例
<a name="r_WF_PERCENTILE_DISC-examples"></a>

次の例は、WINSALES テーブルを使用しています。WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

```
SELECT sellerid, qty, PERCENTILE_DISC(0.5) 
WITHIN GROUP (ORDER BY qty) 
OVER() AS MEDIAN FROM winsales;

+----------+-----+--------+
| sellerid | qty | median |
+----------+-----+--------+
| 3        | 10  | 20     |
| 1        | 10  | 20     |
| 1        | 10  | 20     |
| 4        | 10  | 20     |
| 3        | 15  | 20     |
| 2        | 20  | 20     |
| 2        | 20  | 20     |
| 3        | 20  | 20     |
| 1        | 30  | 20     |
| 3        | 30  | 20     |
| 4        | 40  | 20     |
+----------+-----+--------+

SELECT sellerid, qty, PERCENTILE_DISC(0.5) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS MEDIAN FROM winsales;

+----------+-----+--------+
| sellerid | qty | median |
+----------+-----+--------+
| 4        | 10  | 10     |
| 4        | 40  | 10     |
| 3        | 10  | 15     |
| 3        | 15  | 15     |
| 3        | 20  | 15     |
| 3        | 30  | 15     |
| 2        | 20  | 20     |
| 2        | 20  | 20     |
| 1        | 10  | 10     |
| 1        | 10  | 10     |
| 1        | 30  | 10     |
+----------+-----+--------+
```

販売者 ID ごとの数量の PERCENTILE\$1DISC (0.25) と PERCENTILE\$1DISC (0.75) を求めるには、以下の例を使用します。

```
SELECT sellerid, qty, PERCENTILE_DISC(0.25) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS quartile1 FROM winsales;

+----------+-----+-----------+
| sellerid | qty | quartile1 |
+----------+-----+-----------+
| 4        | 10  | 10        |
| 4        | 40  | 10        |
| 2        | 20  | 20        |
| 2        | 20  | 20        |
| 3        | 10  | 10        |
| 3        | 15  | 10        |
| 3        | 20  | 10        |
| 3        | 30  | 10        |
| 1        | 10  | 10        |
| 1        | 10  | 10        |
| 1        | 30  | 10        |
+----------+-----+-----------+

SELECT sellerid, qty, PERCENTILE_DISC(0.75) 
WITHIN GROUP (ORDER BY qty) 
OVER(PARTITION BY sellerid) AS quartile3 FROM winsales;

+----------+-----+-----------+
| sellerid | qty | quartile3 |
+----------+-----+-----------+
| 3        | 10  | 20        |
| 3        | 15  | 20        |
| 3        | 20  | 20        |
| 3        | 30  | 20        |
| 4        | 10  | 40        |
| 4        | 40  | 40        |
| 2        | 20  | 20        |
| 2        | 20  | 20        |
| 1        | 10  | 30        |
| 1        | 10  | 30        |
| 1        | 30  | 30        |
+----------+-----+-----------+
```

# RANK ウィンドウ関数
<a name="r_WF_RANK"></a>

 RANK ウィンドウ関数は、OVER 句の ORDER BY 式に基づいて、値のグループの値のランクを決定します。オプションの PARTITION BY 句がある場合、ランク付けは行のグループごとにリセットされます。ランク付け条件が同じ値の行は、同じランクを受け取ります。Amazon Redshift は、同順位である行の数を同ランクに追加して次のランクを計算するため、ランクが連続した数にならない場合があります。例えば、2 行が 1 位にランク付けされると、次のランクは 3 位になります。

 RANK と [DENSE\$1RANK ウィンドウ関数](r_WF_DENSE_RANK.md) では異なる点があり、DENSE\$1RANK では、2 行以上で同点となった場合、ランク付けされた値の順位に差はありません。例えば、2 行が 1 位にランク付けされると、次のランクは 2 位になります。

同じクエリに PARTITION BY および ORDER BY 句のあるランク付け関数を使用することができます。

## 構文
<a name="r_WF_RANK-synopsis"></a>

```
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## 引数
<a name="r_WF_RANK-arguments"></a>

( )   
この関数は引数を受け取りませんが、空のかっこは必要です。

OVER   
RANK 関数のウィンドウ句。

PARTITION BY *expr\$1list*   
省略可能。ウィンドウを定義する 1 つ以上の式。

ORDER BY *order\$1list*   
省略可能。ランク付けの値が基とする列を定義します。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。ORDER BY を省略した場合、すべての行について戻り値は 1 です。  
ORDER BY で一意のソートが行われない場合、行の順序は不確定になります。詳細については、「[ウィンドウ関数用データの一意の並び順](c_Window_functions.md#r_Examples_order_by_WF)」を参照してください。

## 戻り型
<a name="c_Supported_data_types_wf_rank"></a>

INTEGER

## 例
<a name="r_WF_RANK-examples"></a>

次の例では、販売数量でテーブルで順序付けして (デフォルトは昇順)、行ごとにランクを割り当てます。1 のランク値は、もっとも高いランクの値です。結果はウィンドウ関数の結果が提供された後にソートされます。

```
select salesid, qty,
rank() over (order by qty) as rnk
from winsales
order by 2,1;

salesid | qty | rnk
--------+-----+-----
10001 |  10 |  1
10006 |  10 |  1
30001 |  10 |  1
40005 |  10 |  1
30003 |  15 |  5
20001 |  20 |  6
20002 |  20 |  6
30004 |  20 |  6
10005 |  30 |  9
30007 |  30 |  9
40001 |  40 |  11
(11 rows)
```

この例の ORDER BY 句の外側には、Amazon Redshift がこのクエリが実行されるごとにソートされた結果を一貫して返すように、列 2 および 1 が含まれることに注意してください。例えば、販売 ID 10001 および 10006 の行は、QTY と RNK の値が同じです。列 1 によって最終的な結果セットを順序付けると、行 10001 は常に 10006 の前になります。WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、ウィンドウ関数 (`order by qty desc`) の順序付けは逆順になります。これで、最高ランク値が最大の QTY 値に適用されます。

```
select salesid, qty,
rank() over (order by qty desc) as rank
from winsales
order by 2,1;

 salesid | qty | rank
---------+-----+-----
   10001 |  10 |   8
   10006 |  10 |   8
   30001 |  10 |   8
   40005 |  10 |   8
   30003 |  15 |   7
   20001 |  20 |   4
   20002 |  20 |   4
   30004 |  20 |   4
   10005 |  30 |   2
   30007 |  30 |   2
   40001 |  40 |   1
(11 rows)
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、SELLERID によってテーブルをパーティション分割し、数量で各パーティションを順序付けして (降順)、行ごとにランクを割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

```
select salesid, sellerid, qty, rank() over
(partition by sellerid
order by qty desc) as rank
from winsales
order by 2,3,1;

salesid | sellerid | qty | rank
--------+----------+-----+-----
  10001 |        1 |  10 |  2
  10006 |        1 |  10 |  2
  10005 |        1 |  30 |  1
  20001 |        2 |  20 |  1
  20002 |        2 |  20 |  1
  30001 |        3 |  10 |  4
  30003 |        3 |  15 |  3
  30004 |        3 |  20 |  2
  30007 |        3 |  30 |  1
  40005 |        4 |  10 |  2
  40001 |        4 |  40 |  1
(11 rows)
```

# RATIO\$1TO\$1REPORT ウィンドウ関数
<a name="r_WF_RATIO_TO_REPORT"></a>

ウィンドウまたはパーティションの値の合計に対する、ある値の比率を計算します。値を報告する比率は、次の式を使用して特定されます。

`value of `*ratio\$1expression* `argument for the current row / sum of` *ratio\$1expression* `argument for the window or partition`

以下のデータセットは、この式の使用方法を示しています。

```
Row#	Value	Calculation	RATIO_TO_REPORT
1	2500	(2500)/(13900)	0.1798
2	2600	(2600)/(13900)	0.1870
3	2800	(2800)/(13900)	0.2014
4	2900	(2900)/(13900)	0.2086
5	3100	(3100)/(13900)	0.2230
```

戻り値の範囲は、0～1 (0 と 1 を含みます) です。*ratio\$1expression* が NULL である場合、戻り値は `NULL` です。*partition\$1expression* 内の値が一意である場合、関数はその値として `1` を返します。

## 構文
<a name="r_WF_RATIO_TO_REPORT-synopsis"></a>

```
RATIO_TO_REPORT ( ratio_expression )
OVER ( [ PARTITION BY partition_expression ] )
```

## 引数
<a name="r_WF_RATIO_TO_REPORT-arguments"></a>

*ratio\$1expression*   
比率を特定する値を提供する式 (列名など)。式は、数値データ型を含んでいるか、そのデータ型に暗黙的に変換できる必要があります。  
*ratio\$1expression* で他の分析関数を使用することはできません。

OVER  
ウィンドウのパーティションを指定する句。OVER 句にウィンドウの並び順またはウィンドウフレーム仕様を含めることはできません。

PARTITION BY *partition\$1expression*   
省略可能。OVER 句の各グループのレコードの範囲を設定する式。

## 戻り型
<a name="r_WF_RATIO_TO_REPORT-return-type"></a>

FLOAT8

## 例
<a name="r_WF_RATIO_TO_REPORT-examples"></a>

次の例は、WINSALES テーブルを使用しています。WINSALES テーブルを作成する方法については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、すべての販売者の数量の合計に対する、各行の販売者の数量の、対レポート比率を計算します。

```
select sellerid, qty, ratio_to_report(qty) 
over()
from winsales
order by sellerid;

sellerid  qty    ratio_to_report
--------------------------------------
1         30     0.13953488372093023	
1         10     0.046511627906976744	
1         10     0.046511627906976744	
2         20     0.09302325581395349	
2         20     0.09302325581395349	
3         30     0.13953488372093023	
3         20     0.09302325581395349	
3         15     0.06976744186046512	
3         10     0.046511627906976744	
4         10     0.046511627906976744	
4         40     0.18604651162790697
```

以下の例では、各販売者の販売数量の比率をパーティションごとに計算します。

```
select sellerid, qty, ratio_to_report(qty) 
over(partition by sellerid) 
from winsales;

sellerid   qty    ratio_to_report
-------------------------------------------
2          20     0.5	
2          20     0.5	
4          40     0.8	
4          10     0.2	
1          10     0.2	
1          30     0.6	
1          10     0.2	
3          10     0.13333333333333333	
3          15     0.2	
3          20     0.26666666666666666	
3          30     0.4
```

# ROW\$1NUMBER ウィンドウ関数
<a name="r_WF_ROW_NUMBER"></a>

OVER 句の ORDER BY 式に基づいて、行グループ内の現在の行の (1 からカウントした) 序数を割り当てます。オプションの PARTITION BY 句がある場合、序数は行グループごとにリセットされます。ORDER BY 式で同じ値を持つ行には、確定的でない方法で異なる行番号が割り当てられます。

## 構文
<a name="r_WF_ROW_NUMBER-synopsis"></a>

```
ROW_NUMBER() OVER(
  [ PARTITION BY expr_list ]
  [ ORDER BY order_list ]
)
```

## 引数
<a name="r_WF_ROW_NUMBER-arguments"></a>

( )   
この関数は引数を受け取りませんが、空のかっこは必要です。

OVER   
ROW\$1NUMBER 関数のウィンドウ関数句。

PARTITION BY *expr\$1list*   
オプション。結果を行のセットに分割する 1 つ以上の列式。

ORDER BY *order\$1list*   
オプション。セット内の行の順序を定義する 1 つ以上の列式。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。  
ORDER BY で一意の順序付けが行われない、または省略した場合、行の順序は不確定になります。詳細については、「[ウィンドウ関数用データの一意の並び順](c_Window_functions.md#r_Examples_order_by_WF)」を参照してください。

## 戻り型
<a name="c_Supported_data_types_r_WF_ROW_NUMBER"></a>

BIGINT

## 例
<a name="r_WF_ROW_NUMBER-examples"></a>

以下の例では `WINSALES` テーブルを使用します。`WINSALES` テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、QTY によってテーブルを (昇順で) 順序付け、各行に行番号を割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
   ORDER BY qty ASC) AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10006 |        1 |  10 |   3
   40005 |        4 |  10 |   4
   30003 |        3 |  15 |   5
   20001 |        2 |  20 |   6
   20002 |        2 |  20 |   7
   30004 |        3 |  20 |   8
   10005 |        1 |  30 |   9
   30007 |        3 |  30 |  10
   40001 |        4 |  40 |  11
```

次の例では、SELLERID によってテーブルをパーティション化し、QTY によって各パーティションを (昇順で) 順序付けし、各行に行番号を割り当てます。結果はウィンドウ関数の結果が提供された後にソートされます。

```
SELECT salesid, sellerid, qty, 
ROW_NUMBER() OVER(
  PARTITION BY sellerid
  ORDER BY qty ASC) AS row_by_seller
FROM winsales
ORDER BY 2,4;

 salesid | sellerid | qty | row_by_seller
---------+----------+-----+-----
   10001 |        1 |  10 |   1
   10006 |        1 |  10 |   2
   10005 |        1 |  30 |   3
   20001 |        2 |  20 |   1
   20002 |        2 |  20 |   2
   30001 |        3 |  10 |   1
   30003 |        3 |  15 |   2
   30004 |        3 |  20 |   3
   30007 |        3 |  30 |   4
   40005 |        4 |  10 |   1
   40001 |        4 |  40 |   2
```

次の例は、オプション句を使用しない場合の結果を示しています。

```
SELECT salesid, sellerid, qty, ROW_NUMBER() OVER() AS row
FROM winsales
ORDER BY 4,1;

salesid   sellerid   qty   row
---------+----------+-----+-----
   30001 |        3 |  10 |   1	
   10001 |        1 |  10 |   2	
   10005 |        1 |  30 |   3
   40001 |        4 |  40 |   4
   10006 |        1 |  10 |   5
   20001 |        2 |  20 |   6
   40005 |        4 |  10 |   7
   20002 |        2 |  20 |   8
   30003 |        3 |  15 |   9
   30004 |        3 |  20 |  10
   30007 |        3 |  30 |  11
```

# STDDEV\$1SAMP および STDDEV\$1POP ウィンドウ関数
<a name="r_WF_STDDEV"></a>

STDDEV\$1SAMP および STDDEV\$1POP ウィンドウ関数は、数値のセットの標本標準偏差および母集団標準偏差を返します (整数、10 進数、または浮動小数点)。「[STDDEV\$1SAMP および STDDEV\$1POP 関数](r_STDDEV_functions.md)」も参照してください。

STDDEV\$1SAMP および STDDEV は、同じ関数のシノニムです。

## 構文
<a name="r_WF_STDDEV-synopsis"></a>

```
STDDEV_SAMP | STDDEV | STDDEV_POP
( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## 引数
<a name="r_WF_STDDEV-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数は式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="c_Supported_data_types_wf_stddev"></a>

STDDEV 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、および DOUBLE PRECISION です。

式のデータ型にかかわらず、STDDEV 関数の戻り値の型は倍精度浮動小数点数です。

## 例
<a name="r_wf_stddev-examples"></a>

次の例は、ウィンドウ関数として STDDEV\$1POP および VAR\$1POP 関数を使用する方法を示します。このクエリは SALES テーブルの PRICEPAID の値の母集団分散と母集団標準偏差を計算します。

```
select salesid, dateid, pricepaid,
round(stddev_pop(pricepaid) over
(order by dateid, salesid rows unbounded preceding)) as stddevpop,
round(var_pop(pricepaid) over
(order by dateid, salesid rows unbounded preceding)) as varpop
from sales
order by 2,1;

salesid | dateid | pricepaid | stddevpop | varpop
--------+--------+-----------+-----------+---------
  33095 |   1827 |    234.00 |         0 |       0
  65082 |   1827 |    472.00 |       119 |   14161
  88268 |   1827 |    836.00 |       248 |   61283
  97197 |   1827 |    708.00 |       230 |   53019
 110328 |   1827 |    347.00 |       223 |   49845
 110917 |   1827 |    337.00 |       215 |   46159
 150314 |   1827 |    688.00 |       211 |   44414
 157751 |   1827 |   1730.00 |       447 |  199679
 165890 |   1827 |   4192.00 |      1185 | 1403323
...
```

例の標本標準偏差および標本分散の関数も同様に使用することができます。

# SUM ウィンドウ関数
<a name="r_WF_SUM"></a>

 SUM ウィンドウ関数は入力列または式の値の合計を返します。SUM 関数は数値に対してはたらき、NULL 値を無視します。

## 構文
<a name="r_WF_SUM-synopsis"></a>

```
SUM ( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## 引数
<a name="r_WF_SUM-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数は式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で SUM 関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="c_Supported_data_types_wf_sum"></a>

SUM 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、および DOUBLE PRECISION です。

SUM 関数でサポートされる戻り値の型は次のとおりです。
+ SMALLINT または INTEGER 引数の場合は BIGINT
+ BIGINT 引数の場合は NUMERIC
+ 浮動小数点の引数の場合は DOUBLE PRECISION

## 例
<a name="r_WF_SUM-examples"></a>

次の例では、日付および販売 ID によって順序付けされた販売数量の累積 (中間) 合計を作成します。

```
select salesid, dateid, sellerid, qty,
sum(qty) over (order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  20
10005 | 2003-12-24 |        1 |  30 |  50
40001 | 2004-01-09 |        4 |  40 |  90
10006 | 2004-01-18 |        1 |  10 | 100
20001 | 2004-02-12 |        2 |  20 | 120
40005 | 2004-02-12 |        4 |  10 | 130
20002 | 2004-02-16 |        2 |  20 | 150
30003 | 2004-04-18 |        3 |  15 | 165
30004 | 2004-04-18 |        3 |  20 | 185
30007 | 2004-09-07 |        3 |  30 | 215
(11 rows)
```

 WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、日付による販売数量の累積 (中間) 合計を作成し、結果を販売者 ID でパーティション分割して、パーティション内の日付と販売 ID によって結果を順序付けします。

```
select salesid, dateid, sellerid, qty,
sum(qty) over (partition by sellerid
order by dateid, salesid rows unbounded preceding) as sum
from winsales
order by 2,1;

salesid |   dateid   | sellerid | qty | sum
---------+------------+----------+-----+-----
30001 | 2003-08-02 |        3 |  10 |  10
10001 | 2003-12-24 |        1 |  10 |  10
10005 | 2003-12-24 |        1 |  30 |  40
40001 | 2004-01-09 |        4 |  40 |  40
10006 | 2004-01-18 |        1 |  10 |  50
20001 | 2004-02-12 |        2 |  20 |  20
40005 | 2004-02-12 |        4 |  10 |  50
20002 | 2004-02-16 |        2 |  20 |  40
30003 | 2004-04-18 |        3 |  15 |  25
30004 | 2004-04-18 |        3 |  20 |  45
30007 | 2004-09-07 |        3 |  30 |  75
(11 rows)
```

次の例では、SELLERID および SALESID 列によって順序付けられた結果セットのすべての行に番号をつけます。

```
select salesid, sellerid, qty,
sum(1) over (order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;

salesid | sellerid |  qty | rownum
--------+----------+------+--------
10001 |        1 |   10 |     1
10005 |        1 |   30 |     2
10006 |        1 |   10 |     3
20001 |        2 |   20 |     4
20002 |        2 |   20 |     5
30001 |        3 |   10 |     6
30003 |        3 |   15 |     7
30004 |        3 |   20 |     8
30007 |        3 |   30 |     9
40001 |        4 |   40 |    10
40005 |        4 |   10 |    11
(11 rows)
```

WINSALES テーブルの説明については、「[ウィンドウ関数例のサンプルテーブル](c_Window_functions.md#r_Window_function_example)」を参照してください。

次の例では、結果セットの行すべてに番号をつけ、SELLERID ごとに結果をパーティション化し、パーティション内の SELLERID および SALESID 列によって結果を順序付けます。

```
select salesid, sellerid, qty,
sum(1) over (partition by sellerid
order by sellerid, salesid rows unbounded preceding) as rownum
from winsales
order by 2,1;

salesid | sellerid | qty | rownum
---------+----------+-----+--------
10001 |        1 |  10 |      1
10005 |        1 |  30 |      2
10006 |        1 |  10 |      3
20001 |        2 |  20 |      1
20002 |        2 |  20 |      2
30001 |        3 |  10 |      1
30003 |        3 |  15 |      2
30004 |        3 |  20 |      3
30007 |        3 |  30 |      4
40001 |        4 |  40 |      1
40005 |        4 |  10 |      2
(11 rows)
```

# VAR\$1SAMP および VAR\$1POP ウィンドウ関数
<a name="r_WF_VARIANCE"></a>

 VAR\$1SAMP および VAR\$1POP ウィンドウ関数は、数値のセットの標本分散および母集団分散を返します (整数、10 進数、または浮動小数点)。「[VAR\$1SAMP および VAR\$1POP 関数](r_VARIANCE_functions.md)」も参照してください。

VAR\$1SAMP および VARIANCE は同じ関数のシノニムです。

## 構文
<a name="r_WF_VARIANCE-synopsis"></a>

```
VAR_SAMP | VARIANCE | VAR_POP
( [ ALL ] expression ) OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list 
                        frame_clause ]
)
```

## 引数
<a name="r_WF_VARIANCE-arguments"></a>

 * 式*   
関数の対象となる列または式。

ALL   
引数 ALL を指定すると、この関数は式から重複する値をすべて保持します。ALL がデフォルトです。DISTINCT はサポートされません。

OVER   
集計関数に使用するウィンドウ句を指定します。OVER 句は、ウィンドウ集計関数を標準セット集計関数と区別します。

PARTITION BY *expr\$1list*   
1 つ以上の式で関数のウィンドウを定義します。

ORDER BY *order\$1list*   
各パーティション内の行をソートします。PARTITION BY が指定されていない場合、ORDER BY はテーブル全体を使用します。

 *frame\$1clause*   
ORDER BY 句が集計関数に使用される場合、明示的なフレーム句が必要です。フレーム句は順序付けた結果内の行のセットを含めるか除外して、関数のウィンドウの行のセットを絞り込みます。フレーム句は ROWS キーワードおよび関連する指定子で構成されます。「[ウィンドウ関数の構文の概要](c_Window_functions.md#r_Window_function_synopsis)」を参照してください。

## データ型
<a name="c_Supported_data_types_wf_variance"></a>

VARIANCE 関数でサポートされる引数の型は、SMALLINT、INTEGER、BIGINT、NUMERIC、DECIMAL、REAL、および DOUBLE PRECISION です。

式のデータ型にかかわらず、VARIANCE 関数の戻り値の型は倍精度浮動小数点数です。

# システム管理関数
<a name="r_System_administration_functions"></a>

**Topics**
+ [CHANGE\$1QUERY\$1PRIORITY](r_CHANGE_QUERY_PRIORITY.md)
+ [CHANGE\$1SESSION\$1PRIORITY](r_CHANGE_SESSION_PRIORITY.md)
+ [CHANGE\$1USER\$1PRIORITY](r_CHANGE_USER_PRIORITY.md)
+ [CURRENT\$1SETTING](r_CURRENT_SETTING.md)
+ [PG\$1CANCEL\$1BACKEND](PG_CANCEL_BACKEND.md)
+ [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md)
+ [REBOOT\$1CLUSTER](r_REBOOT_CLUSTER.md)
+ [SET\$1CONFIG](r_SET_CONFIG.md)

Amazon Redshift は、いくつかのシステム管理関数をサポートします。

# CHANGE\$1QUERY\$1PRIORITY
<a name="r_CHANGE_QUERY_PRIORITY"></a>

CHANGE\$1QUERY\$1PRIORITY を使用すると、スーパーユーザーは、ワークロード管理 (WLM) で実行中または待機中のクエリの優先度を変更できます。

この機能により、スーパーユーザーはシステム内のクエリの優先度をすぐに変更することができます。優先度 `CRITICAL` で実行できるクエリ、ユーザー、またはセッションは 1 つのみです。

## 構文
<a name="r_CHANGE_QUERY_PRIORITY-synopsis"></a>

```
CHANGE_QUERY_PRIORITY(query_id, priority)
```

## 引数
<a name="r_CHANGE_QUERY_PRIORITY-argument"></a>

 *query\$1id*   
優先度が変更されたクエリのクエリ識別子。`INTEGER` 値は必須です。

 *優先度*   
クエリに割り当てる新しい優先度。引数は、値 `CRITICAL`、`HIGHEST`、`HIGH`、`NORMAL`、`LOW`、または `LOWEST` を含む文字列である必要があります。

## 戻り型
<a name="r_CHANGE_QUERY_PRIORITY-return-type"></a>

なし

## 例
<a name="r_CHANGE_QUERY_PRIORITY-example"></a>

STV\$1WLM\$1QUERY\$1STATE システムテーブルの `query_priority` 列を示すには、次の例を使用します。

```
SELECT query, service_class, query_priority, state 
FROM stv_wlm_query_state WHERE service_class = 101;

+-------+---------------+----------------+---------+
| query | service_class | query_priority |  state  |
+-------+---------------+----------------+---------+
|  1076 |           101 | Lowest         | Running |
|  1075 |           101 | Lowest         | Running |
+-------+---------------+----------------+---------+
```

スーパーユーザーが `change_query_priority` 関数を実行して優先度を `CRITICAL` に変更した結果を示すには、次の例を使用します。

```
SELECT CHANGE_QUERY_PRIORITY(1076, 'Critical');
            
+-------------------------------------------------------------------------------+
|                             change_query_priority                             |
+-------------------------------------------------------------------------------+
| Succeeded to change query priority. Priority changed from Lowest to Critical. |
+-------------------------------------------------------------------------------+
```

# CHANGE\$1SESSION\$1PRIORITY
<a name="r_CHANGE_SESSION_PRIORITY"></a>

CHANGE\$1SESSION\$1PRIORITY を使用すると、スーパーユーザーはシステム内のセッションの優先度をすぐに変更することができます。優先度 `CRITICAL` で実行できるセッション、ユーザー、またはクエリは 1 つのみです。

## 構文
<a name="r_CHANGE_SESSION_PRIORITY-synopsis"></a>

```
CHANGE_SESSION_PRIORITY(pid, priority)
```

## 引数
<a name="r_CHANGE_SESSION_PRIORITY-argument"></a>

 *pid*   
優先度が変更されたセッションのプロセス識別子。値 `-1` は、現在のセッションを表します。`INTEGER` 値は必須です。

 *priority*   
セッションに割り当てる新しい優先度。引数は、値 `CRITICAL`、`HIGHEST`、`HIGH`、`NORMAL`、`LOW`、または `LOWEST` を含む文字列である必要があります。

## 戻り型
<a name="r_CHANGE_SESSION_PRIORITY-return-type"></a>

なし

## 例
<a name="r_CHANGE_SESSION_PRIORITY-example"></a>

現在のセッションを処理しているサーバープロセスのプロセス ID を返すには、次の例を使用します。

```
SELECT pg_backend_pid();
               
+----------------+
| pg_backend_pid |
+----------------+
|          30311 |
+----------------+
```

この例では、現在のセッションの優先度が `LOWEST` に変更されます。

```
SELECT CHANGE_SESSION_PRIORITY(30311, 'Lowest');
               
+---------------------------------------------------------------------------------------+
|                                change_session_priority                                |
+---------------------------------------------------------------------------------------+
| Succeeded to change session priority. Changed session (pid:30311) priority to lowest. |
+---------------------------------------------------------------------------------------+
```

この例では、現在のセッションの優先度が `HIGH` に変更されます。

```
SELECT CHANGE_SESSION_PRIORITY(-1, 'High');

+-------------------------------------------------------------------------------------------------+
|                                     change_session_priority                                     |
+-------------------------------------------------------------------------------------------------+
| Succeeded to change session priority. Changed session (pid:30311) priority from lowest to high. |
+-------------------------------------------------------------------------------------------------+
```

セッションの優先度を変更するストアドプロシージャを作成するには、次の例を使用します。このストアドプロシージャを実行するアクセス許可は、データベースユーザー `test_user` に付与されます。

```
CREATE OR REPLACE PROCEDURE sp_priority_low(pid IN int, result OUT varchar)
AS $$
BEGIN
  SELECT CHANGE_SESSION_PRIORITY(pid, 'low') into result;
END;
$$ LANGUAGE plpgsql
SECURITY DEFINER;
GRANT EXECUTE ON PROCEDURE sp_priority_low(int) TO test_user;
```

次に、`test_user`という名前のデータベースユーザーがプロシージャを呼び出します。

```
CALL sp_priority_low(pg_backend_pid()); 

+------------------------------------------------------+
|                        result                        |
+------------------------------------------------------+
| Success. Change session (pid:13155) priority to low. |
+------------------------------------------------------+
```

# CHANGE\$1USER\$1PRIORITY
<a name="r_CHANGE_USER_PRIORITY"></a>

CHANGE\$1USER\$1PRIORITY を使用すると、スーパーユーザーは、ワークロード管理 (WLM) で実行中または待機中のユーザーが発行したすべてのクエリの優先度を変更できます。優先度 `CRITICAL` で実行できるユーザー、セッション、またはクエリは 1 つのみです。

## 構文
<a name="r_CHANGE_USER_PRIORITY-synopsis"></a>

```
CHANGE_USER_PRIORITY(user_name, priority)
```

## 引数
<a name="r_CHANGE_USER_PRIORITY-argument"></a>

 *user\$1name*   
クエリの優先度が変更されるデータベースユーザー名。

 *priority*   
`user_name` によって発行されたすべてのクエリに割り当てられる新しい優先度。引数は、値 `CRITICAL`、`HIGHEST`、`HIGH`、`NORMAL`、`LOW`、`LOWEST`、または `RESET` を含む文字列である必要があります。優先順位を `CRITICAL` に変更できるのはスーパーユーザーのみです。優先度を `RESET` に変更すると、`user_name`の優先度設定が削除されます。

## 戻り型
<a name="r_CHANGE_USER_PRIORITY-return-type"></a>

なし

## 例
<a name="r_CHANGE_USER_PRIORITY-example"></a>

ユーザー `analysis_user` の優先度を `LOWEST` に変更するには、次の例を使用します。

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'lowest');

+-------------------------------------------------------------------------------------+
|                                change_user_priority                                 |
+-------------------------------------------------------------------------------------+
| Succeeded to change user priority. Changed user (analysis_user) priority to lowest. |
+-------------------------------------------------------------------------------------+
```

優先度を `LOW` に変更するには、次の例を使用します。

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'low');

+----------------------------------------------------------------------------------------------+
|                                     change_user_priority                                     |
+----------------------------------------------------------------------------------------------+
| Succeeded to change user priority. Changed user (analysis_user) priority from Lowest to low. |
+----------------------------------------------------------------------------------------------+
```

優先度をリセットするには、次の例を使用します。

```
SELECT CHANGE_USER_PRIORITY('analysis_user', 'reset');

+-------------------------------------------------------+
|                 change_user_priority                  |
+-------------------------------------------------------+
| Succeeded to reset priority for user (analysis_user). |
+-------------------------------------------------------+
```

# CURRENT\$1SETTING
<a name="r_CURRENT_SETTING"></a>

 CURRENT\$1SETTING は、指定された構成パラメータの現在の値を返します。

この関数は、[SHOW](r_SHOW.md)コマンドに相当します。

## 構文
<a name="r_CURRENT_SETTING-synopsis"></a>

```
current_setting('parameter')
```

次のステートメントは、指定されたセッションコンテキスト変数の現在の値を返します。

```
current_setting('variable_name')
current_setting('variable_name'[, error_if_undefined])
```

## 引数
<a name="r_CURRENT_SETTING-argument"></a>

 *parameter*   
表示するパラメータ値。設定パラメータの一覧については、「[設定リファレンス](cm_chap_ConfigurationRef.md)」を参照してください。

 *variable\$1name *   
設定する変数の名前。これは、セッションコンテキスト変数の文字列定数でなければなりません。

 *error\$1if\$1undefined*   
(オプション) 変数名が存在しない場合の動作を指定するブール値。error\$1if\$1undefined がデフォルト値の `TRUE` に設定されている場合、Amazon Redshift はエラーをスローします。error\$1if\$1undefined が `FALSE` に設定されている場合、Amazon Redshift は `NULL` を返します。Amazon Redshift は、セッションコンテキスト変数に対してのみ *error\$1if\$1undefined* パラメータをサポートします。これは、入力が設定パラメータの場合には使用できません。

## 戻り型
<a name="r_CURRENT_SETTING-return-type"></a>

文字列 `CHAR` または `VARCHAR` を返します。

## 例
<a name="r_CURRENT_SETTING-example"></a>

`query_group` パラメータの現在の設定を返すには、次の例を使用します。

```
SELECT CURRENT_SETTING('query_group');

+-----------------+
| current_setting |
+-----------------+
| unset           |
+-----------------+
```

変数 `app_context.user_id` の現在の設定を返すには、次の例を使用します。

```
SELECT CURRENT_SETTING('app_context.user_id', FALSE);
```

# PG\$1CANCEL\$1BACKEND
<a name="PG_CANCEL_BACKEND"></a>

クエリをキャンセルします。PG\$1CANCEL\$1BACKEND は、[CANCEL](r_CANCEL.md)コマンドと機能的に同じものです。ユーザー自身が現在実行しているクエリをキャンセルできます。スーパーユーザーはどのクエリでもキャンセルできます。

## 構文
<a name="PG_CANCEL_BACKEND-synopsis"></a>

```
pg_cancel_backend( pid )
```

## 引数
<a name="PG_CANCEL_BACKEND-arguments"></a>

 *pid*   
キャンセルするクエリのプロセス ID (PID)。クエリ ID を指定してクエリをキャンセルすることはできません。クエリのプロセス ID を指定する必要があります。`INTEGER` 値は必須です。

## 戻り型
<a name="PG_CANCEL_BACKEND-return-type"></a>

なし

## 使用に関する注意事項
<a name="PG_CANCEL_BACKEND-usage-notes"></a>

複数のセッションのクエリが同じテーブルのロックを保持している場合、[PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md)関数を使用してセッションの 1 つを終了することができます。これにより、終了したセッションで現在実行中のトランザクションがあれば、そのすべてのロックが強制的に解放され、トランザクションがロールバックされます。PG\$1\$1LOCKS カタログテーブルに対してクエリを実行し、現在保持しているロックを表示します。トランザクションブロック (BEGIN … END) 内にあるためクエリをキャンセルできない場合、PG\$1TERMINATE\$1BACKEND 関数を使用して、クエリを実行中のセッションを終了できます。

## 例
<a name="PG_CANCEL_BACKEND-example"></a>

現在実行されているクエリをキャンセルするには、キャンセルするクエリのプロセス ID を最初に取得します。現在実行されているすべてのクエリのプロセス ID を確認するには、次のコマンドを実行します。

```
SELECT pid, TRIM(starttime) AS start, 
duration, TRIM(user_name) AS user,
SUBSTRING(query,1,40) AS querytxt
FROM stv_recents
WHERE status = 'Running';

+-----+------------------------+----------+--------+-----------------------------+
| pid |       starttime        | duration |  user  |          querytxt           |
+-----+------------------------+----------+--------+-----------------------------+
| 802 | 2013-10-14 09:19:03.55 |      132 | dwuser | select venuename from venue |
| 834 | 2013-10-14 08:33:49.47 |  1250414 | dwuser | select * from listing;      |
| 964 | 2013-10-14 08:30:43.29 |   326179 | dwuser | select sellerid from sales  |
+-----+------------------------+----------+--------+-----------------------------+
```

プロセス ID 802 のクエリをキャンセルするには、次の例を使用します。

```
SELECT PG_CANCEL_BACKEND(802);
```

# PG\$1TERMINATE\$1BACKEND
<a name="PG_TERMINATE_BACKEND"></a>

セッションを終了します。ユーザー自身が所有するセッションを終了できます。スーパーユーザーはどのセッションでも終了できます。

## 構文
<a name="PG_TERMINATE_BACKEND-synopsis"></a>

```
pg_terminate_backend( pid )
```

## 引数
<a name="PG_TERMINATE_BACKEND-arguments"></a>

*pid*  
終了するセッションのプロセス ID。`INTEGER` 値は必須です。

## 戻り型
<a name="PG_TERMINATE_BACKEND-return-type"></a>

なし

## 使用に関する注意事項
<a name="PG_TERMINATE_BACKEND-usage-notes"></a>

 同時接続の制限に近づいている場合、PG\$1TERMINATE\$1BACKEND を使用してアイドル状態のセッションを終了し、接続を解放することができます。詳細については、[Amazon Redshift における制限](https://docs.aws.amazon.com/redshift/latest/mgmt/amazon-redshift-limits.html)を参照してください。

複数のセッションのクエリが同じテーブルのロックを保持している場合、PG\$1TERMINATE\$1BACKEND を使用してセッションの 1 つを終了することができます。これにより、終了したセッションで現在実行中のトランザクションがあれば、そのすべてのロックが強制的に解放され、トランザクションがロールバックされます。PG\$1LOCKS カタログテーブルに対してクエリを実行し、現在保持しているロックを表示します。

クエリがトランザクションブロック (BEGIN… END) 内にない場合、[CANCEL](r_CANCEL.md)コマンドまたは [PG\$1CANCEL\$1BACKEND](PG_CANCEL_BACKEND.md) 関数を使用してクエリをキャンセルできます。

## 例
<a name="PG_TERMINATE_BACKEND-example"></a>

SVV\$1TRANSACTIONS テーブルをクエリし、現在のトランザクションで有効なすべてのロックを表示するには、次の例を使用します。

```
SELECT * FROM svv_transactions;

+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
| txn_owner | txn_db |  xid  | pid  |      txn_start      |    lock_mode    | lockable_object_type | relation | granted |
+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |    51940 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |    52000 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | AccessShareLock | relation             |   108623 | true    |
| rsuser    | dev    | 96178 | 8585 | 2017-04-12 20:13:07 | ExclusiveLock   | transactionid        |          | true    |
+-----------+--------+-------+------+---------------------+-----------------+----------------------+----------+---------+
```

ロックを保持しているセッションを終了するには、次の例を使用します。

```
SELECT PG_TERMINATE_BACKEND(8585); 
```

# REBOOT\$1CLUSTER
<a name="r_REBOOT_CLUSTER"></a>

クラスターへの接続を閉じずに Amazon Redshift クラスターを再起動します。このコマンドを実行するには、データベースのスーパーユーザー権限を持つ必要があります。

この軽めの再起動が完了すると、Amazon Redshift クラスターはユーザーアプリケーションにエラーを返し、軽めの再起動によって中断されたトランザクションまたはクエリをユーザーアプリケーションに再送信するようにリクエストします。

## 構文
<a name="r_REBOOT_CLUSTER-synopsis"></a>

```
SELECT REBOOT_CLUSTER();
```

# SET\$1CONFIG
<a name="r_SET_CONFIG"></a>

構成パラメータを新しい値に設定します。

 この関数は、SQL の SET コマンドに相当します。

## 構文
<a name="r_SET_CONFIG-synopsis"></a>

```
SET_CONFIG('parameter', 'new_value' , is_local)
```

次のステートメントは、セッションコンテキスト変数を新しい設定に設定します。

```
set_config('variable_name', 'new_value' , is_local)
```

## 引数
<a name="r_SET_CONFIG-parameters"></a>

 * パラメータ*   
設定するパラメータ。

 *variable\$1name*   
設定する変数の名前。

 *new\$1value*   
パラメータの新しい値。

 *is\$1local*   
true の場合、パラメータ値は現在の取引にのみ適用されます。有効な値は `true` または `1`、および `false` または `0` です。

## 戻り型
<a name="r_SET_CONFIG-return-type"></a>

文字列 `CHAR` または `VARCHAR` を返します。

## 例
<a name="r_SET_CONFIG-examples"></a>

現在の取引のみの `query_group` パラメータの値を `test` に設定するには、次の例を使用します。

```
SELECT SET_CONFIG('query_group', 'test', true);

+------------+
| set_config |
+------------+
| test       |
+------------+
```

セッションコンテキスト変数を設定するには、次の例を使用します。

```
SELECT SET_CONFIG(‘app.username’, ‘cuddy’, FALSE);
```

# システム情報関数
<a name="r_System_information_functions"></a>

Amazon Redshift は、多数のシステム情報関数をサポートします。

**Topics**
+ [CURRENT\$1AWS\$1ACCOUNT](r_CURRENT_AWS_ACCOUNT.md)
+ [CURRENT\$1DATABASE](r_CURRENT_DATABASE.md)
+ [CURRENT\$1NAMESPACE](r_CURRENT_NAMESPACE.md)
+ [CURRENT\$1SCHEMA](r_CURRENT_SCHEMA.md)
+ [CURRENT\$1SCHEMAS](r_CURRENT_SCHEMAS.md)
+ [CURRENT\$1SESSION\$1ARN](r_CURRENT_SESSION_ARN.md)
+ [CURRENT\$1USER](r_CURRENT_USER.md)
+ [CURRENT\$1USER\$1ID](r_CURRENT_USER_ID.md)
+ [DEFAULT\$1IAM\$1ROLE](r_DEFAULT_IAM_ROLE.md)
+ [GET\$1MOUNTED\$1ROLE](GET_MOUNTED_ROLE.md)
+ [HAS\$1ASSUMEROLE\$1PRIVILEGE](r_HAS_ASSUMEROLE_PRIVILEGE.md)
+ [HAS\$1DATABASE\$1PRIVILEGE](r_HAS_DATABASE_PRIVILEGE.md)
+ [HAS\$1SCHEMA\$1PRIVILEGE](r_HAS_SCHEMA_PRIVILEGE.md)
+ [HAS\$1TABLE\$1PRIVILEGE](r_HAS_TABLE_PRIVILEGE.md)
+ [LAST\$1USER\$1QUERY\$1ID](LAST_USER_QUERY_ID.md)
+ [PG\$1BACKEND\$1PID](PG_BACKEND_PID.md)
+ [PG\$1GET\$1COLS](PG_GET_COLS.md)
+ [PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE](PG_GET_GRANTEE_BY_IAMROLE.md)
+ [PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER](PG_GET_IAM_ROLE_BY_USER.md)
+ [PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS](PG_GET_LATE_BINDING_VIEW_COLS.md)
+ [PG\$1GET\$1SESSION\$1ROLES](PG_GET_SESSION_ROLES.md)
+ [PG\$1LAST\$1COPY\$1COUNT](PG_LAST_COPY_COUNT.md)
+ [PG\$1LAST\$1COPY\$1ID](PG_LAST_COPY_ID.md)
+ [PG\$1LAST\$1UNLOAD\$1ID](PG_LAST_UNLOAD_ID.md)
+ [PG\$1LAST\$1QUERY\$1ID](PG_LAST_QUERY_ID.md)
+ [PG\$1LAST\$1UNLOAD\$1COUNT](PG_LAST_UNLOAD_COUNT.md)
+ [SLICE\$1NUM 関数](r_SLICE_NUM.md)
+ [USER](r_USER.md)
+ [ROLE\$1IS\$1MEMBER\$1OF](r_ROLE_IS_MEMBER_OF.md)
+ [USER\$1IS\$1MEMBER\$1OF](r_USER_IS_MEMBER_OF.md)
+ [VERSION](r_VERSION.md)

# CURRENT\$1AWS\$1ACCOUNT
<a name="r_CURRENT_AWS_ACCOUNT"></a>

クエリを送信した Amazon Redshift クラスターが関連付けられた AWS アカウントを返します。

## 構文
<a name="r_CURRENT_AWS_ACCOUNT-synopsis"></a>

```
current_aws_account
```

## 戻り型
<a name="r_CURRENT_AWS_ACCOUNT-return-type"></a>

整数を返します。

## 例
<a name="r_CURRENT_AWS_ACCOUNT-example"></a>

次のクエリは、現在のデータベースの名前を返します。

```
select user, current_aws_account; 
current_user | current_account
-------------+--------------- 
dwuser       | 987654321

(1 row)
```

# CURRENT\$1DATABASE
<a name="r_CURRENT_DATABASE"></a>

現在接続されているデータベースの名前を返します。

## 構文
<a name="r_CURRENT_DATABASE-synopsis"></a>

```
current_database()
```

## 戻り型
<a name="r_CURRENT_DATABASE-return-type"></a>

CHAR 型または VARCHAR 型の文字列を返します。

## 例
<a name="r_CURRENT_DATABASE-example"></a>

次のクエリは、現在のデータベースの名前を返します。

```
select current_database();

current_database
------------------
tickit
(1 row)
```

# CURRENT\$1NAMESPACE
<a name="r_CURRENT_NAMESPACE"></a>

現在の Amazon Redshift クラスターでは、クラスターの名前空間が返されます。Amazon Redshift クラスター名前空間は、Amazon Redshift クラスターの一意の ID です。

## 構文
<a name="r_CURRENT_NAMESPACE-synopsis"></a>

```
current_namespace
```

## 戻り型
<a name="r_CURRENT_NAMESPACE-return-type"></a>

CHAR 型または VARCHAR 型の文字列を返します。

## 例
<a name="r_CURRENT_NAMESPACE-example"></a>

次のクエリは、現在の名前空間の名前を返します。

```
select user, current_namespace; 
current_user | current_namespace
-------------+-------------------------------------
dwuser       | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8

(1 row)
```

# CURRENT\$1SCHEMA
<a name="r_CURRENT_SCHEMA"></a>

検索パスの先頭にあるスキーマ名を返します。このスキーマは、ターゲットスキーマが指定されずに作成されたテーブルまたはその他の名前付きオブジェクトに使用されます。

## 構文
<a name="r_CURRENT_SCHEMA-synopsis"></a>

**注記**  
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。

```
current_schema()
```

## 戻り型
<a name="r_CURRENT_SCHEMA-return-type"></a>

CURRENT\$1SCHEMA returns a CHAR or VARCHAR string。

## 例
<a name="r_CURRENT_SCHEMA-examples"></a>

次のクエリは、現在のスキーマを返します。

```
select current_schema();

current_schema
----------------
public
(1 row)
```

# CURRENT\$1SCHEMAS
<a name="r_CURRENT_SCHEMAS"></a>

現在の検索パスに含まれるスキーマの名前の配列を返します。現在の検索パスは、search\$1path パラメータに定義されます。

## 構文
<a name="r_CURRENT_SCHEMAS-synopsis"></a>

**注記**  
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。

```
current_schemas(include_implicit)
```

## 引数
<a name="r_CURRENT_SCHEMAS-argument"></a>

 *include\$1implicit*   
true の場合、暗黙的に組み込まれているシステムスキーマを検索パスに含めるように指定します。有効な値は、`true`および `false` です。一般的にこのパラメータは、`true`の場合、現在のスキーマに加えて、`pg_catalog`スキーマを返します。

## 戻り型
<a name="r_CURRENT_SCHEMAS-return-type"></a>

CHAR 型または VARCHAR 型の文字列を返します。

## 例
<a name="r_CURRENT_SCHEMAS-examples"></a>

次の例は、現在の検索パスに含まれるスキーマの名前を返しますが、暗黙的に組み込まれているシステムスキーマは含まれません。

```
select current_schemas(false);

current_schemas
-----------------
{public}
(1 row)
```

次の例は、現在の検索パスに含まれるスキーマの名前を、暗黙的に組み込まれているシステムスキーマを含めて返します。

```
select current_schemas(true);

current_schemas
---------------------
{pg_catalog,public}
(1 row)
```

# CURRENT\$1SESSION\$1ARN
<a name="r_CURRENT_SESSION_ARN"></a>

現在承認されているグローバルユーザーの ARN を返します。グローバルユーザーは、Redshift アカウント、クラスター、および Serverless ワークグループ間で同じ ID を提示します。グローバルユーザーは、IAM アイデンティティセンターまたは IAM ベースのセッション認証を使用してログインします。データレイクユーザーはグローバル AWS ユーザーです。

この関数は通常、マルチダイアレクト AWS Glue ビューを使用するコンテキストで使用されます。IAM アイデンティティセンターと Redshift での ID 管理の詳細については、「[Redshift を IAM アイデンティティセンターに接続してユーザーにシングルサインオンエクスペリエンスを提供する](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-idp-connect.html)」を参照してください。マルチダイアレクト Glue ビューの詳細については、「[AWS Glue データカタログでのビューの作成](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)」を参照してください。

## 構文
<a name="r_CURRENT_SESSION_ARN-synopsis"></a>

```
current_session_arn()
```

## 戻り型
<a name="r_CURRENT_SESSION_ARN-return-type"></a>

グローバルに認証されたユーザーの VARCHAR 文字列または null 値を返します。

## 使用に関する注意事項
<a name="r_CURRENT_SESSION_ARN-usage"></a>

ローカルユーザーはサポートされていないため、null レスポンスになります。

## 例
<a name="r_CURRENT_SESSION_ARN-example"></a>

次のクエリは、現在のセッション ARN の名前を返します。

```
SELECT current_session_arn();

current_session_arn
--------------
arn:aws:iam::123456789012:user/user
(1 row)
```

# CURRENT\$1USER
<a name="r_CURRENT_USER"></a>

許可の確認に適用可能な場合、データベースの現在の「有効」なユーザーのユーザー名を返します。このユーザー名は通常、セッションユーザーと同じ名前になりますが、スーパーユーザーが変更する可能性があります。

**注記**  
CURRENT\$1USER を呼び出すときには、末尾の括弧を使用しないでください。

## 構文
<a name="r_CURRENT_USER-synopsis"></a>

```
current_user
```

## 戻り型
<a name="r_CURRENT_USER-return-type"></a>

CURRENT\$1USER は NAME データ型を返し、CHAR または VARCHAR 文字列としてキャストできます。

## 使用に関する注意事項
<a name="r_CURRENT_USER-usage"></a>

CREATE\$1PROCEDURE コマンドの SECURITY DEFINER オプションを使用してストアドプロシージャが作成された場合、そのストアドプロシージャ内から CURRENT\$1USER 関数を呼び出すと、Amazon Redshift はストアドプロシージャの所有者のユーザー名を返します。

## 例
<a name="r_CURRENT_USER-example"></a>

次のクエリは、現在のデータベースユーザーの名前を返します。

```
select current_user;

current_user
--------------
dwuser
(1 row)
```

# CURRENT\$1USER\$1ID
<a name="r_CURRENT_USER_ID"></a>

現在のセッションにログインした Amazon Redshift ユーザーの固有の ID を返します。

## 構文
<a name="r_CURRENT_USER_ID-synopsis"></a>

```
CURRENT_USER_ID
```

## 戻り型
<a name="r_CURRENT_USER_ID-return-type"></a>

CURRENT\$1USER\$1ID 関数は整数を返します。

## 例
<a name="r_CURRENT_USER_ID-examples"></a>

次の例は、このセッションのユーザー名および現在のユーザー ID を返します。

```
select user, current_user_id;

 current_user | current_user_id
--------------+-----------------
   dwuser     |               1
(1 row)
```

# DEFAULT\$1IAM\$1ROLE
<a name="r_DEFAULT_IAM_ROLE"></a>

Amazon Redshift クラスターに現在関連付けられている、デフォルトの IAM ロールを返します。関連付けられたデフォルトの IAM ロールがない場合、この関数は none を返します。

## 構文
<a name="r_DEFAULT_IAM_ROLE-synopsis"></a>

```
select default_iam_role();
```

## 戻り型
<a name="r_DEFAULT_IAM_ROLE-return-type"></a>

VARCHAR 型の文字列を返します。

## 例
<a name="r_DEFAULT_IAM_ROLE-example"></a>

次の例では、指定された Amazon Redshift クラスターに現在関連付けられている、デフォルトの IAM ロールを返します。

```
select default_iam_role();
              default_iam_role
-----------------------------------------------
 arn:aws:iam::123456789012:role/myRedshiftRole
(1 row)
```

# GET\$1MOUNTED\$1ROLE
<a name="GET_MOUNTED_ROLE"></a>

 マルチダイアレクト AWS Glue ビューの一部として呼び出されると、Lake Formation スキーマまたはデータベースのマウントに使用される IAM ロールを返すことができます。マルチダイアレクトとは、SQL が Amazon EMR や Redshift などの複数のクエリエンジンでサポートされていることを意味します。マルチダイアレクト Glue ビューの詳細については、「[AWS Glue データカタログでのビューの作成](https://docs.aws.amazon.com/redshift/latest/dg/data-catalog-views-overview.html)」を参照してください。



## 構文
<a name="GET_MOUNTED_ROLE-synopsis"></a>

```
get_mounted_role()
```

## 戻り型
<a name="GET_MOUNTED_ROLE-return-type"></a>

VARCHAR 文字列または null 値を返します。

## 使用に関する注意事項
<a name="GET_MOUNTED_ROLE-usage"></a>

この関数は、外部の Lake Formation ビュー以外のユースケースに対して null を返します。

## 例
<a name="GET_MOUNTED_ROLE-example"></a>

次のクエリは、Lake Formation リソースをマウントするための ID を返します。

```
CREATE EXTERNAL PROTECTED VIEW external_schema.remote_view AS 
SELECT mycol, get_mounted_role() FROM external_schema.remote_table;

mycol | get_mounted_role
----------------------------
1       arn:aws:iam::123456789012:role/salesrole
(1 row)
```

# HAS\$1ASSUMEROLE\$1PRIVILEGE
<a name="r_HAS_ASSUMEROLE_PRIVILEGE"></a>

指定されたユーザーが、指定されたコマンドの実行権限がある特定の IAM ロールを持っている場合、Boolean 型の `true` (`t`) を返します。指定されたコマンドを実行する権限が付与された、特定の IAM ロールがユーザーにない場合、この関数では `false` (`f`) が返されます。権限の詳細については、「[GRANT](r_GRANT.md)」を参照してください。

## 構文
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-synopsis"></a>

```
has_assumerole_privilege( [ user, ] iam_role_arn, cmd_type)
```

## 引数
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-arguments"></a>

 *ユーザー*   
IAM ロールに対する権限をチェックするユーザーの名前。デフォルトでは、現在のユーザーが検査されます。スーパーユーザーとユーザーはこの機能を使用できます。ただし、ユーザーは自分の権限しか表示できません。

 *iam\$1role\$1arn*   
コマンド権限が付与されている IAM ロール。

 *cmd\$1type*   
アクセスが許可されているコマンド。有効な値は以下のとおりです。  
+ COPY
+ UNLOAD
+ EXTERNAL FUNCTION
+ モデルを作成する

## 戻り型
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-return-type"></a>

BOOLEAN

## 例
<a name="r_HAS_ASSUMEROLE_PRIVILEGE-example"></a>

次のクエリは、ユーザー `reg_user1` が COPY コマンドを実行するための `Redshift-S3-Read` ロールの権限を持っていることを確認します。

```
select has_assumerole_privilege('reg_user1', 'arn:aws:iam::123456789012:role/Redshift-S3-Read', 'copy');
```

```
has_assumerole_privilege
------------------------
true
(1 row)
```

# HAS\$1DATABASE\$1PRIVILEGE
<a name="r_HAS_DATABASE_PRIVILEGE"></a>

ユーザーが、指定されたデータベースに対して指定された権限を持っている場合は、`true`を返します。権限の詳細については、「[GRANT](r_GRANT.md)」を参照してください。

## 構文
<a name="r_HAS_DATABASE_PRIVILEGE-synopsis"></a>

**注記**  
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。

```
has_database_privilege( [ user, ] database, privilege)
```

## 引数
<a name="r_HAS_DATABASE_PRIVILEGE-arguments"></a>

 *ユーザー*   
データベースに対する権限を検査するユーザーの名前。デフォルトでは、現在のユーザーが検査されます。

 *データベース*\$1   
権限に関連付けられているデータベース。

 *privilege*   
検査する権限。有効な値は以下のとおりです。  
+ CREATE
+ TEMPORARY
+ TEMP

## 戻り型
<a name="r_HAS_DATABASE_PRIVILEGE-return-type"></a>

CHAR 型または VARCHAR 型の文字列を返します。

## 例
<a name="r_HAS_DATABASE_PRIVILEGE-example"></a>

次のクエリでは、GUEST ユーザーが TICKIT データベースに対して TEMP 権限を持っていることを確認します。

```
select has_database_privilege('guest', 'tickit', 'temp');

has_database_privilege
------------------------
true
(1 row)
```

# HAS\$1SCHEMA\$1PRIVILEGE
<a name="r_HAS_SCHEMA_PRIVILEGE"></a>

ユーザーが、指定されたスキーマに対して指定された権限を持っている場合は、`true`を返します。権限の詳細については、「[GRANT](r_GRANT.md)」を参照してください。

## 構文
<a name="r_HAS_SCHEMA_PRIVILEGE-synopsis"></a>

**注記**  
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。

```
has_schema_privilege( [ user, ] schema, privilege)
```

## 引数
<a name="r_HAS_SCHEMA_PRIVILEGE-arguments"></a>

 *ユーザー*   
スキーマに対する権限を検査するユーザーの名前。デフォルトでは、現在のユーザーが検査されます。

 *スキーマ*   
権限に関連付けられているスキーマ。

 *privilege*   
検査する権限。有効な値は以下のとおりです。  
+ CREATE
+ USAGE
+ ALTER
+ DROP

## 戻り型
<a name="r_HAS_SCHEMA_PRIVILEGE-return-type"></a>

CHAR 型または VARCHAR 型の文字列を返します。

## 例
<a name="r_HAS_SCHEMA_PRIVILEGE-example"></a>

次のクエリでは、GUEST ユーザーが PUBLIC スキーマに対して CREATE 権限を持っていることを確認します。

```
select has_schema_privilege('guest', 'public', 'create');

has_schema_privilege
----------------------
true
(1 row)
```

# HAS\$1TABLE\$1PRIVILEGE
<a name="r_HAS_TABLE_PRIVILEGE"></a>

ユーザーが、指定されたテーブルに対して指定された権限を持っている場合、`true` を返し、それ以外の場合は `false` を返します。

## 構文
<a name="r_HAS_TABLE_PRIVILEGE-synopsis"></a>

**注記**  
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。権限の詳細については、「[GRANT](r_GRANT.md)」を参照してください。

```
has_table_privilege( [ user, ] table, privilege)
```

## 引数
<a name="r_HAS_TABLE_PRIVILEGE-arguments"></a>

 *ユーザー*   
テーブルに対する権限を検査するユーザーの名前。デフォルトでは、現在のユーザーが検査されます。

 *table*   
権限に関連付けられているテーブル。

 *privilege*   
検査する権限。有効な値は以下のとおりです。  
+ SELECT
+ INSERT
+ UPDATE
+ DELETE
+ DROP
+ REFERENCES

## 戻り型
<a name="r_HAS_TABLE_PRIVILEGE-return-type"></a>

BOOLEAN

## 例
<a name="r_HAS_TABLE_PRIVILEGE-examples"></a>

次のクエリでは、GUEST ユーザーが LISTING テーブルに対して SELECT 権限を持っていないことを検出します。

```
select has_table_privilege('guest', 'listing', 'select');

has_table_privilege
---------------------
false
```

次のクエリは、pg\$1tables と pg\$1user カタログテーブルからの出力を使用して、選択、挿入、更新、削除などのテーブル権限を一覧表示します。これはサンプルのみです。データベースからスキーマ名とテーブル名を指定する必要がある場合があります。詳細については、「[カタログテーブルへのクエリの実行](c_join_PG.md)」を参照してください。

```
SELECT 
     tablename
     ,usename
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd
     ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del
FROM
(SELECT * from pg_tables
WHERE schemaname = 'public' and tablename in ('event','listing')) as tables
,(SELECT * FROM pg_user) AS users;

tablename | usename   |  sel   |  ins  |  upd  | del
----------+-----------+--------+-------+-------+-------
event     |  john     |  true  | true  | true  | true	
event     |  sally    |  false | false | false | false	
event     |  elsa     |  false | false | false | false	
listing   |  john     |  true  | true  | true  | true	
listing   |  sally    |  false | false | false | false	
listing   |  elsa     |  false | false | false | false
```

前のクエリにはクロス結合も含まれています。詳細については、「[JOIN 句の例](r_Join_examples.md)」を参照してください。`public` スキーマにないテーブルをクエリするには、WHERE 句から `schemaname` 条件を削除し、クエリの前に次の例を使用します。

```
SET SEARCH_PATH to 'schema_name';
```

# LAST\$1USER\$1QUERY\$1ID
<a name="LAST_USER_QUERY_ID"></a>

現在のセッションで最近完了した、ユーザークエリのクエリ ID を返します。現在のセッションで実行されたクエリが存在しない場合、last\$1user\$1query\$1id は -1 を返します。この関数は、リーダーノードでのみ実行されるクエリについては、クエリ ID を返しません。詳細については、「[リーダーノード専用関数](c_SQL_functions_leader_node_only.md)」を参照してください。

## 構文
<a name="LAST_USER_QUERY_ID-synopsis"></a>

```
last_user_query_id()
```

## 戻り型
<a name="LAST_USER_QUERY_ID-return-type"></a>

整数を返します。

## 例
<a name="LAST_USER_QUERY_ID-example"></a>

次のクエリは、現在のセッションで完了されたユーザーが実行した最新クエリの ID を返します。

```
select last_user_query_id();
```

結果は、以下のとおりです。

```
last_user_query_id
-----------------------
    5437
(1 row)
```

次のクエリは、現在のセッションでユーザーが実行して最近完了されたクエリの ID とテキストを返します。

```
select query_id, query_text from sys_query_history where query_id = last_user_query_id();
```

結果は、以下のとおりです。

```
 query_id, query_text
---------+-------------------------------------------------------------------------------------------------------------
 5556975 | select last_user_query_id() limit 100 --RequestID=<unique request ID>; TraceID=<unique trace ID>
```

# PG\$1BACKEND\$1PID
<a name="PG_BACKEND_PID"></a>

現在のセッションを処理しているサーバープロセスのプロセス ID (PID) を返します。

**注記**  
PID はグローバルで一意ではありません。時間が経つと再利用できます。

## 構文
<a name="PG_BACKEND_PID-synopsis"></a>

```
pg_backend_pid()
```

## 戻り型
<a name="PG_BACKEND_PID-return-type"></a>

整数を返します。

## 例
<a name="PG_BACKEND_PID-example"></a>

ログテーブルに PG\$1BACKEND\$1PID を関連付けることで、現在のセッションの情報を取得できます。例えば、以下のクエリは、現在のセッションで完了されたクエリのクエリ ID とクエリテキストの一部を返します。

```
select query, substring(text,1,40)
from stl_querytext
where pid =  PG_BACKEND_PID()
order by query desc;

 query |                substring
-------+------------------------------------------
 14831 | select query, substring(text,1,40) from
 14827 | select query, substring(path,0,80) as pa
 14826 | copy category from 's3://dw-tickit/manif
 14825 | Count rows in target table
 14824 | unload ('select * from category') to 's3
(5 rows)
```

次のログテーブルの pid 列に PG\$1BACKEND\$1PID を関連付けることができます (例外についてはかっこで注記を付けています)。
+ [STL\$1CONNECTION\$1LOG](r_STL_CONNECTION_LOG.md)
+ [STL\$1DDLTEXT](r_STL_DDLTEXT.md)
+ [STL\$1ERROR](r_STL_ERROR.md)
+ [STL\$1QUERY](r_STL_QUERY.md)
+ [STL\$1QUERYTEXT](r_STL_QUERYTEXT.md)
+ [STL\$1SESSIONS](r_STL_SESSIONS.md) (process)
+ [STL\$1TR\$1CONFLICT](r_STL_TR_CONFLICT.md)
+ [STL\$1UTILITYTEXT](r_STL_UTILITYTEXT.md)
+ [STV\$1ACTIVE\$1CURSORS](r_STV_ACTIVE_CURSORS.md)
+ [STV\$1INFLIGHT](r_STV_INFLIGHT.md)
+ [STV\$1LOCKS](r_STV_LOCKS.md) (lock\$1owner\$1pid)
+ [STV\$1RECENTS](r_STV_RECENTS.md) (process\$1id)

# PG\$1GET\$1COLS
<a name="PG_GET_COLS"></a>

テーブルまたはビュー定義の列メタデータを返します。

## 構文
<a name="PG_GET_COLS-synopsis"></a>

```
pg_get_cols('name')
```

## 引数
<a name="PG_GET_COLS-arguments"></a>

 *.name*   
Amazon Redshift テーブルまたはビューの名前。詳細については、「[名前と識別子](r_names.md)」を参照してください。

## 戻り型
<a name="PG_GET_COLS-return-type"></a>

VARCHAR 

## 使用に関する注意事項
<a name="PG_GET_COLS-usage-notes"></a>

PG\$1GET\$1COLS 関数は、テーブルまたはビュー定義の列ごとに、行を 1 つ返します。行には、スキーマ名、関係名、列名、データ型、行番号のカンマ区切りリストが含まれています。SQL の結果の書式設定は、使用する SQL クライアントによって異なります。

## 例
<a name="PG_GET_COLS-example"></a>

次の例は、接続されたデータベース `dev` のユーザーによって作成されたスキーマ `public` の `SALES_VW` という名前のビューとスキーマ `mytickit1` の `sales` という名前のテーブルの結果を返します。

次の例は、`SALES_VW` というビューの列メタデータを返します。

```
select pg_get_cols('sales_vw');

pg_get_cols                                                
-----------------------------------------------------------
(public,sales_vw,salesid,integer,1)                        
(public,sales_vw,listid,integer,2)                         
(public,sales_vw,sellerid,integer,3)                       
(public,sales_vw,buyerid,integer,4)                        
(public,sales_vw,eventid,integer,5)                        
(public,sales_vw,dateid,smallint,6)                        
(public,sales_vw,qtysold,smallint,7)                       
(public,sales_vw,pricepaid,"numeric(8,2)",8)               
(public,sales_vw,commission,"numeric(8,2)",9)              
(public,sales_vw,saletime,"timestamp without time zone",10)
```

次の例は、`SALES_VW` というビューの列メタデータをテーブル形式で返します。

```
select * from pg_get_cols('sales_vw') 
cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);

view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
public      | sales_vw  | salesid    | integer                     |       1
public      | sales_vw  | listid     | integer                     |       2
public      | sales_vw  | sellerid   | integer                     |       3
public      | sales_vw  | buyerid    | integer                     |       4
public      | sales_vw  | eventid    | integer                     |       5
public      | sales_vw  | dateid     | smallint                    |       6
public      | sales_vw  | qtysold    | smallint                    |       7
public      | sales_vw  | pricepaid  | numeric(8,2)                |       8
public      | sales_vw  | commission | numeric(8,2)                |       9
public      | sales_vw  | saletime   | timestamp without time zone |      10
```

次の例は、スキーマ `mytickit1` の `SALES` というテーブルの列メタデータをテーブル形式で返します。

```
select * from pg_get_cols('"mytickit1"."sales"') 
cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);

view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
mytickit1   | sales     | salesid    | integer                     |       1
mytickit1   | sales     | listid     | integer                     |       2
mytickit1   | sales     | sellerid   | integer                     |       3
mytickit1   | sales     | buyerid    | integer                     |       4
mytickit1   | sales     | eventid    | integer                     |       5
mytickit1   | sales     | dateid     | smallint                    |       6
mytickit1   | sales     | qtysold    | smallint                    |       7
mytickit1   | sales     | pricepaid  | numeric(8,2)                |       8
mytickit1   | sales     | commission | numeric(8,2)                |       9
mytickit1   | sales     | saletime   | timestamp without time zone |      10
```

# PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE
<a name="PG_GET_GRANTEE_BY_IAMROLE"></a>

指定された IAM ロールを付与されたすべてのユーザーとグループを返します。

## 構文
<a name="PG_GET_GRANTEE_BY_IAMROLE-synopsis"></a>

```
pg_get_grantee_by_iam_role('iam_role_arn')
```

## 引数
<a name="PG_GET_GRANTEE_BY_IAMROLE-arguments"></a>

 *iam\$1role\$1arn*   
このロールを付与されたユーザーとグループを返す IAM ロール。

## 戻り型
<a name="PG_GET_GRANTEE_BY_IAMROLE-return-type"></a>

VARCHAR 

## 使用に関する注意事項
<a name="PG_GET_GRANTEE_BY_IAMROLE-usage-notes"></a>

PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE 関数は、ユーザーまたはグループごとに、行を 1 つ返します。各行には、被付与者名、被付与者のタイプ、および付与された権限が含まれます。被付与者タイプに指定できる値は、パブリックの場合は `p`、ユーザーの場合は `u`、グループの場合は `g` です。

この機能を使用するには、スーパーユーザーである必要があります。

## 例
<a name="PG_GET_GRANTEE_BY_IAMROLE-example"></a>

次の例は、IAM ロール `Redshift-S3-Write` が `group1` と `reg_user1` に付与されていることを示しています。`group_1` のユーザーは COPY オペレーションに対してのみロールを指定でき、ユーザー `reg_user1` は UNLOAD オペレーションを実行するためにのみロールを指定できます。

```
select pg_get_grantee_by_iam_role('arn:aws:iam::123456789012:role/Redshift-S3-Write');
```

```
  pg_get_grantee_by_iam_role
-----------------------------
 (group_1,g,COPY)
 (reg_user1,u,UNLOAD)
```

次の PG\$1GET\$1GRANTEE\$1BY\$1IAM\$1ROLE 関数の例では、結果をテーブルとしてフォーマットします。

```
select grantee, grantee_type, cmd_type FROM pg_get_grantee_by_iam_role('arn:aws:iam::123456789012:role/Redshift-S3-Write') res_grantee(grantee text, grantee_type text, cmd_type text) ORDER BY 1,2,3;
```

```
  grantee  | grantee_type | cmd_type
-----------+--------------+----------
 group_1   | g            | COPY
 reg_user1 | u            | UNLOAD
```

# PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER
<a name="PG_GET_IAM_ROLE_BY_USER"></a>

ユーザーに付与されたすべての IAM ロールとコマンド権限を返します。

## 構文
<a name="PG_GET_IAM_ROLE_BY_USER-synopsis"></a>

```
pg_get_iam_role_by_user('name')
```

## 引数
<a name="PG_GET_IAM_ROLE_BY_USER-arguments"></a>

 *.name*   
IAM ロールを返すユーザーの名前。

## 戻り型
<a name="PG_GET_IAM_ROLE_BY_USER-return-type"></a>

VARCHAR 

## 使用に関する注意事項
<a name="PG_GET_IAM_ROLE_BY_USER-usage-notes"></a>

PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER 関数は、ロールとコマンド権限のセットごとに、行を 1 つ返します。行には、ユーザー名、IAM ロール、コマンドを含むコンマ区切りのリストが含まれています。

結果の値 `default` は、表示されたコマンドを実行するためにユーザーが使用できる任意のロールを指定できることを示します。

この機能を使用するには、スーパーユーザーである必要があります。

## 例
<a name="PG_GET_IAM_ROLE_BY_USER-example"></a>

次の例では、ユーザー `reg_user1` が COPY オペレーションを実行するために使用できる IAM ロールを指定できます。ユーザーは、UNLOAD オペレーションの `Redshift-S3-Write` ロールを指定することもできます。

```
select pg_get_iam_role_by_user('reg_user1');
```

```
                             pg_get_iam_role_by_user
---------------------------------------------------------------------------------
 (reg_user1,default,COPY)
 (reg_user1,arn:aws:iam::123456789012:role/Redshift-S3-Write,COPY|UNLOAD)
```

次の PG\$1GET\$1IAM\$1ROLE\$1BY\$1USER 関数の例では、結果をテーブルとしてフォーマットします。

```
select username, iam_role, cmd FROM pg_get_iam_role_by_user('reg_user1') res_iam_role(username text, iam_role text, cmd text);
```

```
 username  |                    iam_role                     | cmd
-----------+-------------------------------------------------+------
 reg_user1 | default                                         | None
 reg_user1 | arn:aws:iam::123456789012:role/Redshift-S3-Read | COPY
```

# PG\$1GET\$1LATE\$1BINDING\$1VIEW\$1COLS
<a name="PG_GET_LATE_BINDING_VIEW_COLS"></a>

データベースにあるすべての遅延バインドビューの列メタデータを返します。詳細については、「[遅延バインドビュー](r_CREATE_VIEW.md#r_CREATE_VIEW_late-binding-views)」を参照してください。

## 構文
<a name="PG_GET_LATE_BINDING_VIEW_COLS-synopsis"></a>

```
pg_get_late_binding_view_cols()
```

## 戻り型
<a name="PG_GET_LATE_BINDING_VIEW_COLS-return-type"></a>

VARCHAR 

## 使用に関する注意事項
<a name="PG_GET_LATE_BINDING_VIEW_COLS-usage-notes"></a>

`PG_GET_LATE_BINDING_VIEW_COLS` 関数は、遅延バインドビューの列ごとに、行を 1 つ返します。行には、スキーマ名、関係名、列名、データ型、行番号のカンマ区切りリストが含まれています。

## 例
<a name="PG_GET_LATE_BINDING_VIEW_COLS-example"></a>

以下の例は、すべての遅延バインドビューの列メタデータを返します。

```
select pg_get_late_binding_view_cols();

pg_get_late_binding_view_cols                               
------------------------------------------------------------
(public,myevent,eventname,"character varying(200)",1)       
(public,sales_lbv,salesid,integer,1)                        
(public,sales_lbv,listid,integer,2)                         
(public,sales_lbv,sellerid,integer,3)                       
(public,sales_lbv,buyerid,integer,4)                        
(public,sales_lbv,eventid,integer,5)                        
(public,sales_lbv,dateid,smallint,6)                        
(public,sales_lbv,qtysold,smallint,7)                       
(public,sales_lbv,pricepaid,"numeric(8,2)",8)               
(public,sales_lbv,commission,"numeric(8,2)",9)              
(public,sales_lbv,saletime,"timestamp without time zone",10)
(public,event_lbv,eventid,integer,1)                        
(public,event_lbv,venueid,smallint,2)                       
(public,event_lbv,catid,smallint,3)                         
(public,event_lbv,dateid,smallint,4)                        
(public,event_lbv,eventname,"character varying(200)",5)     
(public,event_lbv,starttime,"timestamp without time zone",6)
```

以下の例は、すべての遅延バインドビューの列メタデータをテーブル形式で返します。

```
select * from pg_get_late_binding_view_cols() cols(view_schema name, view_name name, col_name name, col_type varchar, col_num int);
view_schema | view_name | col_name   | col_type                    | col_num
------------+-----------+------------+-----------------------------+--------
public      | sales_lbv | salesid    | integer                     |       1
public      | sales_lbv | listid     | integer                     |       2
public      | sales_lbv | sellerid   | integer                     |       3
public      | sales_lbv | buyerid    | integer                     |       4
public      | sales_lbv | eventid    | integer                     |       5
public      | sales_lbv | dateid     | smallint                    |       6
public      | sales_lbv | qtysold    | smallint                    |       7
public      | sales_lbv | pricepaid  | numeric(8,2)                |       8
public      | sales_lbv | commission | numeric(8,2)                |       9
public      | sales_lbv | saletime   | timestamp without time zone |      10
public      | event_lbv | eventid    | integer                     |       1
public      | event_lbv | venueid    | smallint                    |       2
public      | event_lbv | catid      | smallint                    |       3
public      | event_lbv | dateid     | smallint                    |       4
public      | event_lbv | eventname  | character varying(200)      |       5
public      | event_lbv | starttime  | timestamp without time zone |       6
```

# PG\$1GET\$1SESSION\$1ROLES
<a name="PG_GET_SESSION_ROLES"></a>

現在ログインしているユーザーのセッションロールを返します。ユーザーのセッションロールは、ログインしたユーザーの ID プロバイダー (IdP) によって定義されるグループです。例えば、[Microsoft Azure Active Directory (Azure AD)](https://azure.microsoft.com/en-us/services/active-directory/) のような ID プロバイダー (IdP) は、ユーザーの ID を検証し、そのユーザーが所属する外部グループをユーザーログインプロセス中に提供します。これらの外部グループは Amazon Redshift ロールに変換され、現在のセッション中に使用できます。これらのロールはセッションロールと呼ばれます。管理者は、他の Amazon Redshift ロールと同様の権限をセッションロールに付与できます。ロールの使用の詳細については、「[ロールベースのアクセスコントロール (RBAC)](t_Roles.md)」を参照してください。ID プロバイダー (IdP) による ID 管理の詳細については、「*Amazon Redshift 管理ガイド*」の「[Amazon Redshift 用のネイティブ ID プロバイダー (IdP) フェデレーション](https://docs.aws.amazon.com/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)」を参照してください。

Amazon Redshift カタログで定義されているロールを表示するには、システムビュー [SVV\$1ROLES](r_SVV_ROLES.md) をクエリします。

## 構文
<a name="PG_GET_LATE_BINDING_VIEW_COLS-synopsis"></a>

```
pg_get_session_roles()
```

## 戻り型
<a name="PG_GET_SESSION_ROLES-return-type"></a>

2 つの値で構成される行のセット。最初の値は 2 つの部分からなり、`idp-namespace:role-name` を含むコロン (:) で区切られます。`idp-namespace` は、ID プロバイダー (IdP) の名前空間です。`role-name` は、ID プロバイダー (IdP) の外部グループの名前です。2 番目の値には、ロール識別子である `role-id` が含まれます。

## 使用に関する注意事項
<a name="PG_GET_SESSION_ROLES-usage-notes"></a>

`PG_GET_SESSION_ROLES` 関数は、返されたセッションロールごとに 1 行を返します。

## 例
<a name="PG_GET_SESSION_ROLES-example"></a>

次の例では、Azure Active Directory IdP からロールごとに 1 つの行が返されます。返された列は、列 `name` および `roleid` と共に `sess_roles` にキャストされます。各 `name` は、Azure Active Directory 名前空間と Azure Active Directory 内のグループ名で構成されます。

```
SELECT * FROM pg_get_session_roles() AS sess_roles(name name, roleid integer);

name                  roleid
--------------------------------
my_aad:test_group_1   106204
my_aad:test_group_2   106205
my_aad:test_group_3   106206
my_aad:test_group_4   106207
my_aad:test_group_5   106208
```

次の例では、現在ログインしている IAM ユーザーがメンバーになっている IAM グループごとに 1 つの行が返されます。返された列は、列 `name` および `roleid` と共に `sess_roles` にキャストされます。各 `name` は、IAM 名前空間と IAM グループ名で構成されます。

```
SELECT * FROM pg_get_session_roles() AS sess_roles(name name, roleid integer);

name                  roleid
--------------------------------
IAM:myGroup           110332
```

# PG\$1LAST\$1COPY\$1COUNT
<a name="PG_LAST_COPY_COUNT"></a>

現在のセッションで最後に実行された COPY コマンドでロードされた行数を返します。PG\$1LAST\$1COPY\$1COUNT は、ロードが失敗した場合でも、ロードプロセスを開始した最後の COPY 操作のクエリ ID である最後の COPY ID で更新されます。COPY コマンドがロードプロセスを開始すると、クエリ ID と COPY ID が更新されます。

構文エラーまたは不十分な権限のために COPY が失敗した場合、COPY ID は更新されず、PG\$1LAST\$1COPY\$1COUNT は前の COPY のカウントを返します。現在のセッションで COPY コマンドが実行されなかった場合、または最後の COPY がロード中に失敗した場合、PG\$1LAST\$1COPY\$1COUNT は 0 を返します。詳細については、「[PG\$1LAST\$1COPY\$1ID](PG_LAST_COPY_ID.md)」を参照してください。

## 構文
<a name="PG_LAST_COPY_COUNT-synopsis"></a>

```
pg_last_copy_count()
```

## 戻り型
<a name="PG_LAST_COPY_COUNT-return-type"></a>

BIGINT を返します。

## 例
<a name="PG_LAST_COPY_COUNT-example"></a>

次のクエリは、現在のセッションで最後に実行された COPY コマンドによってロードされた行数を返します。

```
select pg_last_copy_count();

pg_last_copy_count
--------------------
             192497
(1 row)
```

# PG\$1LAST\$1COPY\$1ID
<a name="PG_LAST_COPY_ID"></a>

現在のセッションで最近完了した、COPY コマンドのクエリ ID を返します。現在のセッションで実行された COPY コマンドが存在しない場合、PG\$1LAST\$1COPY\$1ID は -1 を返します。

 PG\$1LAST\$1COPY\$1ID の値は、COPY コマンドがロードプロセスを開始するときに更新されます。ロードデータが無効なために COPY 操作が失敗した場合、COPY ID は更新されます。このため、STL\$1LOAD\$1ERRORS テーブルに対するクエリを実行する時に、PG\$1LAST\$1COPY\$1ID を使用できます。COPY トランザクションがロールバックされる場合、COPY ID は更新されません。

構文エラー、アクセスエラー、無効な認証情報、または不十分な権限など、ロードプロセスが開始する前に発生するエラーにより COPY コマンドが失敗すると、COPY ID は更新されません。接続が成功した後、データをロードする前に始まる圧縮を分析するステップの間に、COPY が失敗すると、COPY ID は更新されません。

## 構文
<a name="PG_LAST_COPY_ID-synopsis"></a>

```
pg_last_copy_id()
```

## 戻り型
<a name="PG_LAST_COPY_ID-return-type"></a>

整数を返します。

## 例
<a name="PG_LAST_COPY_ID-example"></a>

次のクエリは、現在のセッションで最後に実行された COPY コマンドのクエリ ID を返します。

```
select pg_last_copy_id();

pg_last_copy_id
---------------
          5437
(1 row)
```

次のクエリは、STL\$1LOAD\$1ERRORS を STL\$1LOADERROR\$1DETAIL に結合して、現在のセッションで最後に実行されたロード中に発生したエラーの詳細を表示します。

```
select d.query, substring(d.filename,14,20), 
d.line_number as line, 
substring(d.value,1,16) as value,
substring(le.err_reason,1,48) as err_reason
from stl_loaderror_detail d, stl_load_errors le
where d.query = le.query
and d.query = pg_last_copy_id(); 

 query |    substring      | line |  value   |                    err_reason
-------+-------------------+------+----------+-------------------------------------------------
    558| allusers_pipe.txt |  251 | 251      | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | ZRU29FGR | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | Kaitlin  | String contains invalid or unsupported UTF8 code
    558| allusers_pipe.txt |  251 | Walter   | String contains invalid or unsupported UTF8 code
```

# PG\$1LAST\$1UNLOAD\$1ID
<a name="PG_LAST_UNLOAD_ID"></a>

現在のセッションで直近に完了された UNLOAD コマンドのクエリ ID を返します。現在のセッションで実行された UNLOAD コマンドが存在しない場合、PG\$1LAST\$1UNLOAD\$1ID は -1 を返します。

 PG\$1LAST\$1UNLOAD\$1ID の値は、UNLOAD コマンドがロードプロセスを開始するときに更新されます。ロードデータが無効であるために UNLOAD が失敗した場合は、UNLOAD ID が更新されるため、更新された UNLOAD ID を以後の調査に使用できます。UNLOAD トランザクションがロールバックされた場合、UNLOAD ID は更新されません。

ロードプロセスの開始前に発生した構文エラー、アクセスエラー、無効な認証情報、不十分な権限などのエラーにより UNLOAD コマンドが失敗した場合、UNLOAD ID は更新されません。

## 構文
<a name="PG_LAST_UNLOAD_ID-synopsis"></a>

```
PG_LAST_UNLOAD_ID()
```

## 戻り型
<a name="PG_LAST_UNLOAD_ID-return-type"></a>

整数を返します。

## 例
<a name="PG_LAST_UNLOAD_ID-example"></a>

次のクエリは、現在のセッションで直近に実行された UNLOAD コマンドのクエリ ID を返します。

```
select PG_LAST_UNLOAD_ID();

PG_LAST_UNLOAD_ID
---------------
          5437
(1 row)
```

# PG\$1LAST\$1QUERY\$1ID
<a name="PG_LAST_QUERY_ID"></a>

現在のセッションで最近完了した、クエリのクエリ ID を返します。現在のセッションで実行されたクエリが存在しない場合、PG\$1LAST\$1QUERY\$1ID は -1 を返します。PG\$1LAST\$1QUERY\$1ID は、リーダーノードでのみ実行されるクエリについては、クエリ ID を返しません。詳細については、「[リーダーノード専用関数](c_SQL_functions_leader_node_only.md)」を参照してください。

## 構文
<a name="PG_LAST_QUERY_ID-synopsis"></a>

```
pg_last_query_id()
```

## 戻り型
<a name="PG_LAST_QUERY_ID-return-type"></a>

整数を返します。

## 例
<a name="PG_LAST_QUERY_ID-example"></a>

次のクエリは、現在のセッションで最後に完了されたクエリの ID を返します。

```
select pg_last_query_id();
```

結果は、以下の通りです。

```
pg_last_query_id
----------------
           5437
(1 row)
```

次のクエリは、現在のセッションで最後に完了されたクエリの ID とテキストを返します。

```
select query, trim(querytxt) as sqlquery
from stl_query
where query = pg_last_query_id();
```

結果は、以下のとおりです。

```
query | sqlquery
------+--------------------------------------------------
 5437 | select name, loadtime from stl_file_scan where loadtime > 1000000;
(1 rows)
```

# PG\$1LAST\$1UNLOAD\$1COUNT
<a name="PG_LAST_UNLOAD_COUNT"></a>

現在のセッションで最後に完了された UNLOAD コマンドによりアンロードされた行数を返します。PG\$1LAST\$1UNLOAD\$1COUNT は、操作に失敗した場合でも、最後の UNLOAD のクエリ ID で更新されます。UNLOAD が完了するとクエリ ID が更新されます。構文エラーまたは不十分な権限のために UNLOAD が失敗した場合、PG\$1LAST\$1UNLOAD\$1COUNT は前の UNLOAD のカウントを返します。現在のセッションで UNLOAD コマンドが実行されなかった場合や、最後のアンロードのオペレーション中に UNLOAD が失敗した場合、PG\$1LAST\$1UNLOAD\$1COUNT は 0 を返します。

## 構文
<a name="PG_LAST_UNLOAD_COUNT-synopsis"></a>

```
pg_last_unload_count()
```

## 戻り型
<a name="PG_LAST_UNLOAD_COUNT-return-type"></a>

BIGINT を返します。

## 例
<a name="PG_LAST_UNLOAD_COUNT-example"></a>

次のクエリは、現在のセッションで最後に実行された UNLOAD コマンドによってアンロードされた行数を返します。

```
select pg_last_unload_count();

pg_last_unload_count
--------------------
             192497
(1 row)
```

# SLICE\$1NUM 関数
<a name="r_SLICE_NUM"></a>

行のデータが存在するクラスター内のスライス番号に対応する整数を返します。SLICE\$1NUM にはパラメータはありません。

## 構文
<a name="r_SLICE_NUM-syntax"></a>

```
SLICE_NUM()
```

## 戻り型
<a name="r_SLICE_NUM-return-type"></a>

SLICE\$1NUM 関数は整数を返します。

## 例
<a name="r_SLICE_NUM-examples"></a>

次の例では、EVENTS テーブル内の最初の 10 個の EVENT 行のデータを含むスライスを示します。

```
select distinct eventid, slice_num() from event order by eventid limit 10;

 eventid | slice_num
---------+-----------
       1 |         1
       2 |         2
       3 |         3
       4 |         0
       5 |         1
       6 |         2
       7 |         3
       8 |         0
       9 |         1
      10 |         2
(10 rows)
```

次の例では、コード (10000) を返すことで、FROM ステートメントを含まないクエリがリーダーノードで実行されていることを示しています。

```
select slice_num();
slice_num
-----------
10000
(1 row)
```

# USER
<a name="r_USER"></a>

CURRENT\$1USER のシノニム。「[CURRENT\$1USER](r_CURRENT_USER.md)」を参照してください。

# ROLE\$1IS\$1MEMBER\$1OF
<a name="r_ROLE_IS_MEMBER_OF"></a>

ロールが別のロールのメンバーである場合は true を返します。スーパーユーザーは、すべてのロールのメンバーシップを確認できます。ACCESS SYSTEM TABLE のアクセス許可を持つ通常のユーザーは、すべてのユーザーのメンバーシップを確認できます。そうでない場合、通常のユーザーが確認できるのはアクセス権のあるロールのみです。提供されたロールが存在しない場合、または現在のユーザーがロールへのアクセス権を持っていない場合、Amazon Redshift はエラーになります。

**データ共有に関する考慮事項**

コンシューマークラスターがビュー、RLS ポリシー、DDM ポリシーなど、この関数を参照する共有オブジェクトをクエリすると、関数はコンシューマークラスターのセキュリティコンテキストを使用して評価を行います。結果は、コンシューマーのローカルユーザー、ロール、グループメンバーシップによって (プロデューサークラスターで定義されたものによってではなく) 決まります。プロデューサーに実装されているのと同じアクセス許可コンテキストを適用する場合は、対応するロール名、グループ名、およびユーザーメンバーシップがコンシューマークラスターに存在し、プロデューサーのものと一致することを確認してください。

## 構文
<a name="r_ROLE_IS_MEMBER_OF-synopsis"></a>

```
role_is_member_of( role_name,  granted_role_name)
```

## 引数
<a name="r_ROLE_IS_MEMBER_OF-arguments"></a>

 *role\$1name*   
ロールの名前。

 *granted\$1role\$1name*   
付与されたロールの名前。

## 戻り型
<a name="r_ROLE_IS_MEMBER_OF-return-type"></a>

BOOLEAN を返します。

## 例
<a name="r_ROLE_IS_MEMBER_OF-example"></a>

次のクエリでは、ロールが role1 または role2 のメンバーではないことを確認します。

```
SELECT role_is_member_of('role1', 'role2');

 role_is_member_of
-------------------
             False
```

# USER\$1IS\$1MEMBER\$1OF
<a name="r_USER_IS_MEMBER_OF"></a>

**重要**  
2026 年 2 月 16 日以降、Amazon Redshift は、データ共有を通じてコンシューマーユーザー、ロール、またはグループ情報にアクセスする `user_is_member_of` および関連関数の使用をサポートしなくなります。

ユーザーがロールまたはグループのメンバーである場合は true を返します。スーパーユーザーは、すべてのユーザーのメンバーシップを確認できます。sys:secadmin または sys:superuser ロールのメンバーである通常のユーザーは、すべてのユーザーのメンバーシップを確認できます。そうでない場合、通常のユーザーが確認できるのは自分自身のメンバーシップのみです。提供されたアイデンティティが存在しない場合、または現在のユーザーがロールへのアクセス権を持っていない場合、Amazon Redshift はエラーを送信します。

**データ共有に関する考慮事項**

コンシューマークラスターがビュー、RLS ポリシー、DDM ポリシーなど、この関数を参照する共有オブジェクトをクエリすると、関数はコンシューマークラスターのセキュリティコンテキストを使用して評価を行います。結果は、コンシューマーのローカルユーザー、ロール、グループメンバーシップによって (プロデューサークラスターで定義されたものによってではなく) 決まります。プロデューサーに実装されているのと同じアクセス許可コンテキストを適用する場合は、対応するロール名、グループ名、およびユーザーメンバーシップがコンシューマークラスターに存在し、プロデューサーのものと一致することを確認してください。

## 構文
<a name="r_USER_IS_MEMBER_OF-synopsis"></a>

```
user_is_member_of( user_name,  role_name | group_name)
```

## 引数
<a name="r_USER_IS_MEMBER_OF-arguments"></a>

 *user\$1name*   
ユーザーの名前。

 *role\$1name*   
ロールの名前。

 *group\$1name*   
グループの名前。

## 戻り型
<a name="r_USER_IS_MEMBER_OF-return-type"></a>

BOOLEAN を返します。

## 例
<a name="r_USER_IS_MEMBER_OF-example"></a>

次のクエリでは、ユーザーが role1 のメンバーでないことを確認します。

```
SELECT user_is_member_of('reguser', 'role1');

 user_is_member_of
-------------------
           False
```

# VERSION
<a name="r_VERSION"></a>

 VERSION 関数は、現在インストールされているリリースに関する詳細を返し、Amazon Redshift の特定のバージョンに関する情報が最後に付加されます。

**注記**  
これはリーダーノード関数です。この関数は、ユーザー作成テーブル、STL または STV システムテーブル、SVV または SVL システムビューを参照する場合、エラーを返します。

## 構文
<a name="r_VERSION-synopsis"></a>

```
VERSION()
```

## 戻り型
<a name="r_VERSION-return-type"></a>

CHAR 型または VARCHAR 型の文字列を返します。

## 例
<a name="r_VERSION-examples"></a>

次の例は、現在のクラスターのクラスターバージョン情報を示しています。

```
select version();
```

```
 version
 ------------------------------------------------------------------------------------------------------------------------               
 PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.12103
```

ここで `1.0.12103` はクラスターのバージョン番号です。

**注記**  
クラスターを最新のクラスターバージョンに強制的に更新するには、[メンテナンスウィンドウ](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-maintenance-windows)を調整します。

# 予約語
<a name="r_pg_keywords"></a>

以下は、Amazon Redshift の予約語の一覧です。予約語は、区切られた識別子 (二重引用符) とともに使用できます。

**注記**  
START と CONNECT は予約語ではありませんが、ランタイムに失敗しないように、クエリのテーブルエイリアスとして START と CONNECT を使用する場合は、区切られた識別子または AS を使用してください。

詳細については、「[名前と識別子](r_names.md)」を参照してください。

```
AES128
AES256
ALL
ALLOWOVERWRITE
ANALYSE
ANALYZE
AND
ANY
ARRAY
AS
ASC
AUTHORIZATION
AZ64
BACKUP
BETWEEN
BINARY
BLANKSASNULL
BOTH
BYTEDICT
BZIP2
CASE
CAST
CHECK
COLLATE
COLUMN
CONSTRAINT
CREATE
CREDENTIALS
CROSS
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
CURRENT_USER_ID
DEFAULT
DEFERRABLE
DEFLATE
DEFRAG
DELTA
DELTA32K
DESC
DISABLE
DISTINCT
DO
ELSE
EMPTYASNULL
ENABLE
ENCODE
ENCRYPT     
ENCRYPTION
END
EXCEPT
EXPLICIT
FALSE
FOR
FOREIGN
FREEZE
FROM
FULL
GLOBALDICT256
GLOBALDICT64K
GRANT
GROUP
GZIP
HAVING
IDENTITY
IGNORE
ILIKE
IN
INITIALLY
INNER
INTERSECT
INTERVAL
INTO
IS
ISNULL
JOIN
LEADING
LEFT
LIKE
LIMIT
LOCALTIME
LOCALTIMESTAMP
LUN
LUNS
LZO
LZOP
MINUS
MOSTLY16
MOSTLY32
MOSTLY8
NATURAL
NEW
NOT
NOTNULL
NULL
NULLS
OFF
OFFLINE
OFFSET
OID
OLD
ON
ONLY
OPEN
OR
ORDER
OUTER
OVERLAPS
PARALLEL
PARTITION
PERCENT
PERMISSIONS
PIVOT
PLACING
PRIMARY
RAW
READRATIO
RECOVER
REFERENCES
REJECTLOG
RESORT
RESPECT
RESTORE
RIGHT
SELECT
SESSION_USER
SIMILAR
SNAPSHOT 
SOME
SYSDATE
SYSTEM
TABLE
TAG
TDES
TEXT255
TEXT32K
THEN
TIMESTAMP
TO
TOP
TRAILING
TRUE
TRUNCATECOLUMNS
UNION
UNIQUE
UNNEST
UNPIVOT
USER
USING
VERBOSE
WALLET
WHEN
WHERE
WITH
WITHOUT
```