すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for ClickHouse:INSERT INTO

最終更新日:Oct 17, 2024

このトピックでは、ApsaraDB for ClickHouseのテーブルにデータを挿入するために使用されるINSERT INTOステートメントの構文について説明します。

構文

次のコードは、INSERT INTOステートメントの構文を示しています。

INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...

テーブルスキーマで定義されているが、INSERT INTOステートメントで指定されていないフィールドの場合、システムは次の規則に基づいてフィールドに入力します。

  • フィールドのデフォルト値に対して式が定義されている場合、システムはこの式を使用してデフォルト値を計算し、そのデフォルト値をフィールドに挿入します。

  • フィールドのデフォルト値に式が定義されていない場合、0または空の文字列がフィールドに挿入されます。

INSERT INTOステートメントでSELECT句を使用する

次のコードは、構文を示しています。

INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...

SELECT句で照会されるフィールドのデータは、INSERT intoステートメントで指定されたフィールドに厳密な順序で挿入されます。 2つのフィールドセットの名前は同じである必要はありません。 システムは必要に応じてフィールドのデータ型を変換します。

VALUES型を除いて、他のすべてのデータ型はnow() や1 + 2などの式をサポートしていません。 VALUES型では、このような式を使用できます。 ただし、これらの式の実行は非効率的であるため、これらの式を使用しないことをお勧めします。

INSERT INTOステートメントの高性能を確保するための提案

システムがINSERT INTO文を実行すると、挿入するデータが処理されます。 例えば、システムは、一次キーによってデータをソートしたり、月ごとにデータを分割したりする。 挿入されるデータが複数か月に及ぶ場合、INSERT INTOステートメントのパフォーマンスが大幅に低下します。 この問題を防ぐために、次の対策を講じることができます。

  • 常に大量のデータを一度に書き込む。 たとえば、毎回100,000行のデータを書き込むことができます。

  • ApsaraDB for ClickHouseクラスターにデータを書き込む前に、データをグループ化します。

次のシナリオでは、INSERT INTOステートメントのパフォーマンスは影響を受けません。

  • データは常にリアルタイムで書き込まれます。

  • 書き込まれるデータは、既に時間によってソートされている。