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ノードで実行されます。したがって、INSERT OVERWRITEコマンドを実行中にFE Leaderノードがクラッシュすると、ロードトランザクション全体が失敗し、一時パーティションは切り捨てられます。
準備
権限を確認する
StarRocks テーブルにデータを ロード するには、その StarRocks テーブルに対して INSERT 権限を持つユーザーである必要があります。INSERT 権限を持っていない場合は、 GRANT に記載されている手順に従って、StarRocks クラスターに接続するために使用するユーザーに INSERT 権限を付与してください。構文は GRANT INSERT ON TABLE <table_name> IN DATABASE <database_name> TO { ROLE <role_name> | USER <user_identity>}
です。