INSERT を使用したデータロード
このトピックでは、SQL ステートメント - INSERT を使用して StarRocks にデータをロードする方法について説明します。
MySQL や他の多くのデータベース管理システムと同様に、StarRocks は INSERT を使用して内部テーブルにデータをロードすることをサポートしています。VALUES 句を使用して 1 行または複数行を直接挿入し、関数やデモをテストすることができます。また、クエリの結果として定義されたデータを 外部テーブル から内部テーブルに挿入することもできます。StarRocks v3.1 以降では、INSERT コマンドとテーブル関数 FILES() を使用して、クラウドストレージ上のファイルから直接データをロードすることができます。
StarRocks v2.4 では、INSERT OVERWRITE を使用してテーブルにデータを上書きすることがさらにサポートされています。INSERT OVERWRITE ステートメントは、上書き機能を実現するために次の操作を統合します。
- 元のデータを格納するパーティションに従って一時パーティションを作成します。
- データを一時パーティションに挿入します。
- 元のパーティションを一時パーティションと入れ替えます。
注意
データを上書きする前に検証が必要な場合は、INSERT OVERWRITE を使用する代わりに、上記の手順に従ってデータを上書きし、パーティションを入れ替える前に検証することができます。
注意事項
- 同期 INSERT トランザクションをキャンセルするには、MySQL クライアントから Ctrl と C キーを押すだけです。
- 非同期 INSERT タスクを SUBMIT TASK を使用して送信できます。
- 現在の StarRocks のバージョンでは、テーブルのスキーマに準拠していない行のデータがある場合、INSERT トランザクションはデフォルトで失敗します。たとえば、テーブル内のマッピングフィールドの長さ制限を超えるフィールドが ある場合、INSERT トランザクションは失敗します。セッション変数
enable_insert_strictをfalseに設定することで、テーブルと一致しない行をフィルタリングしてトランザクションを続行することができます。 - StarRocks に小さなバッチのデータをロードするために INSERT ステートメントを頻繁に実行すると、過剰なデータバージョンが生成されます。これによりクエリパフォーマンスが大幅に低下します。本番環境では、INSERT コマンドを頻繁に使用したり、日常的なデータロードのルーチンとして使用したりしないことをお勧めします。アプリケーションや分析シナリオがストリーミングデータや小さなデータバッチのロードに対するソリューションを必要とする場合、Apache Kafka® をデータソースとして使用し、Routine Load を介してデータをロードすることをお勧めします。
- INSERT OVERWRITE ステートメントを実行すると、StarRocks は元のデータを格納するパーティションに対して一時パーティションを作成し、新しいデータを一時パーティションに挿入し、元のパーティションを一時パーティションと入れ替えます。これらの操作はすべて FE Leader ノードで実行されます。したがって、FE Leader ノードが INSERT OVERWRITE コマンドを実行中にクラッシュした場合、ロードトランザクション全体が失敗し、一時パーティションは切り捨てられます。