INSERT - Amazon Redshift

INSERT

新しい行をテーブルに挿入します。VALUES 構文を使用して 1 行、VALUES 構文を使用して複数行、クエリの結果で定義された 1 つまたは複数の行を挿入できます (INSERT INTO ... SELECT)。

注記

大量のデータをロードする場合は COPY コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを向上させるには、INSERT INTO SELECT または CREATE TABLE AS を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「データのロード」を参照してください。

注記

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

構文

INSERT INTO table_name [ ( column [, ...] ) ] {DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ( { expression | DEFAULT } [, ...] ) [, ...] ] | query }

パラメータ

table_name

一時テーブルまたは永続的テーブル テーブルの所有者またはテーブルに対して INSERT 権限を持つユーザーのみが行を挿入できます。query 句を使用して行を挿入する場合、クエリで指定したテーブルに対して SELECT 権限を持っている必要があります。

注記

INSERT (外部テーブル) を使用して、SELECT クエリの結果を外部カタログの既存のテーブルに挿入します。詳細については、「INSERT (外部テーブル)」を参照してください。

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.11 として INT に挿入されます。

  • 10 進値の 100.8976100.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 つまたは複数の行をテーブルに挿入します。クエリで生成されたすべての行がテーブルに挿入されます。クエリは、テーブルの列と互換性がある列リストを返す必要がありますが、列名が一致する必要はありません。

使用に関する注意事項

注記

大量のデータをロードする場合は COPY コマンドを使用することを強くお勧めします。個々に INSERT ステートメントを使ってテーブルにデータを入力すると著しく時間がかかる場合があります。または、他の Amazon Redshift データベーステーブルにデータが既に存在する場合、パフォーマンスを向上させるには、INSERT INTO SELECT または CREATE TABLE AS を使用します。COPY コマンドを使用してテーブルをロードする方法の詳細については、「データのロード」を参照してください。

挿入される値のデータ形式は、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」を参照してください。