メインコンテンツまでスキップ

INSERT

INSERT

説明

特定のテーブルにデータを挿入するか、特定のテーブルをデータで上書きします。アプリケーションシナリオの詳細については、INSERTによるデータのロードを参照してください。

SUBMIT TASKを使用して非同期のINSERTタスクを送信することができます。

文法

INSERT { INTO | OVERWRITE } [db_name.]<table_name>
[ PARTITION (<partition_name> [, ...) ]
[ TEMPORARY PARTITION (<temporary_partition_name>[, ...) ]
[ WITH LABEL <label>]
[ (<column_name>[, ...]) ]
{ VALUES ( { <expression> | DEFAULT }[, ...] )
| <query> }

パラメータ

パラメータ

説明

INTO

テーブルにデータを追加します。

OVERWRITE

テーブルをデータで上書きします。

table_name

データをロードするテーブルの名前です。データベースとテーブルの名前は db_name.table_name として指定できます。

PARTITION

データをロードするパーティションです。複数のパーティションを指定できますが、コンマ (,) で区切る必要があります。指定するパーティションは、宛先テーブルに存在するものに設定する必要があります。このパラメータを指定すると、データは指定されたパーティションにのみ挿入されます。このパラメータを指定しない場合、データはすべてのパーティションに挿入されます。

TEMPORARY PARTITION

データをロードする 一時パーティション の名前です。複数の一時パーティションを指定できますが、コンマ (,) で区切る必要があります。

label

データのロードトランザクション内のユニークな識別ラベルです。指定されていない場合、システムはトランザクションのために自動的に1つ生成します。トランザクションのステータスを確認するには、SHOW LOAD WHERE label="label" ステートメントでトランザクションのステータスを確認できます。ラベルの命名の制限については、 システム制限 を参照してください。

column_name

データをロードする宛先の列の名前です。宛先テーブル内に存在する列として設定する必要があります。指定した宛先列は、宛先テーブルの列とソーステーブルの列とが順番にマッピングされます。指定された宛先列がソーステーブルの列と一致しない場合、デフォルト値がこの列に書き込まれ、指定された列にデフォルト値がない場合はトランザクションが失敗します。ソーステーブルの列の型が宛先テーブルの列の型と一致しない場合、システムは不一致の列に対して暗黙の型変換を行います。変換に失敗すると、構文解析エラーが返されます。

expression

列に値を割り当てる式です。

DEFAULT

列にデフォルト値を割り当てます。

query

宛先テーブルにロードされるクエリ文です。StarRocksでサポートされる任意のSQLステートメントを使用できます。

戻り値

Query OK, 5 rows affected, 2 warnings (0.05 sec)
{'label':'insert_load_test', 'status':'VISIBLE', 'txnId':'1008'}

戻り値

説明

rows affected

ロードされた行数を示します。warnings はフィルタリングされた行数を示します。

label

データのロードトランザクション内のユニークな識別ラベルです。ユーザーによって割り当てられるか、システムが自動的に割り当てることができます。

status

ロードされたデータが表示可能かどうかを示します。 VISIBLE: データが正常にロードされて表示可能です。 COMMITTED: データが正常にロードされているが、現在は表示されていません。

txnId

各INSERTトランザクションに対応するID番号です。

使用上の注意

  • 現在のバージョンでは、StarRocksがINSERT INTOステートメントを実行する際に、宛先テーブルの形式と一致しないデータの行(たとえば、文字列が長すぎる場合など)がある場合、デフォルトではINSERTトランザクションが失敗します。セッション変数 enable_insert_strictfalse に設定することで、システムは宛先テーブルの形式と一致しないデータをフィルタリングしてトランザクションの処理を続行します。
  • INSERT OVERWRITEステートメントが実行された後、StarRocksは元のデータを保存しているパーティションのために一時的なパーティションを作成し、データを一時的なパーティションに挿入し、元のパーティションと一時的なパーティションを入れ替えます。これらの操作は、リーダーFEノードで実行されます。したがって、INSERT OVERWRITEステートメントの実行中にリーダーFEノードがクラッシュした場合、ロードトランザクション全体が失敗し、一時パーティションが削除されます。

以下の例は、2つの列 c1c2 を含む test テーブルを基にしています。c2 列にはデフォルト値 DEFAULT が設定されています。

  • test テーブルに1行のデータをインポートします。
INSERT INTO test VALUES (1, 2);
INSERT INTO test (c1, c2) VALUES (1, 2);
INSERT INTO test (c1, c2) VALUES (1, DEFAULT);
INSERT INTO test (c1) VALUES (1);

宛先列が指定されていない場合、デフォルトでは列は順番に宛先テーブルにロードされます。したがって、上記の例の最初と2番目のSQLステートメントの結果は同じです。

宛先列(データが挿入された場合でも挿入されていない場合でも)が値として DEFAULT を使用する場合、列はロードされたデータとしてデフォルト値を使用します。したがって、上記の例の3番目と4番目のステートメントの出力は同じです。

  • test テーブルに複数の行のデータを一度にロードします。
INSERT INTO test VALUES (1, 2), (3, 2 + 2);
INSERT INTO test (c1, c2) VALUES (1, 2), (3, 2 * 2);
INSERT INTO test (c1, c2) VALUES (1, DEFAULT), (3, DEFAULT);
INSERT INTO test (c1) VALUES (1), (3);

式の結果が同じであるため、最初と2番目のステートメントの結果は同じです。3番目と4番目のステートメントの結果も同じですが、いずれもデフォルト値を使用しています。

  • クエリステートメントの結果を test テーブルにインポートします。
INSERT INTO test SELECT * FROM test2;
INSERT INTO test (c1, c2) SELECT * from test2;
  • クエリの結果を test テーブルにインポートし、パーティションとラベルを指定します。
INSERT INTO test PARTITION(p1, p2) WITH LABEL `label1` SELECT * FROM test2;
INSERT INTO test WITH LABEL `label1` (c1, c2) SELECT * from test2;
  • クエリの結果で test テーブルを上書きし、パーティションとラベルを指定します。
INSERT OVERWRITE test PARTITION(p1, p2) WITH LABEL `label1` SELECT * FROM test3;
INSERT OVERWRITE test WITH LABEL `label1` (c1, c2) SELECT * from test3;

以下の例では、AWS S3バケット inserttest にあるParquetファイル parquet/insert_wiki_edit_append.parquet のデータ行をテーブル insert_wiki_edit に挿入します。

INSERT INTO insert_wiki_edit
SELECT * FROM FILES(
"path" = "s3://inserttest/parquet/insert_wiki_edit_append.parquet",
"format" = "parquet",
"aws.s3.access_key" = "XXXXXXXXXX",
"aws.s3.secret_key" = "YYYYYYYYYY",
"aws.s3.region" = "ap-southeast-1"
);