本文介紹如何用INSERT INTO 語句向ApsaraDB for ClickHouse資料表中插入資料。
基本文法
INSERT INTO 語句基本格式如下:
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...對於存在於表結構中但不存在於插入列表中的列,它們將會按照如下方式填充資料:
如果存在DEFAULT運算式,根據DEFAULT運算式計算被填充的值。
如果沒有定義DEFAULT運算式,則填充零或Null 字元串。
使用SELECT的結果寫入
文法結構如下:
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...寫入的列與SELECT的列的對應關係是使用位置來進行對應的,它們在SELECT運算式與INSERT中的名稱可以是不同的。需要對它們進行對應的類型轉換。
除了VALUES格式之外,其他格式中的資料都不允許出現諸如now(),1 + 2等運算式。VALUES格式允許您有限度的使用這些運算式,但是不建議您這麼做,因為執行這些運算式很低效。
影響效能的注意事項
在執行INSERT時將會對寫入的資料進行一些處理,比如按照主鍵排序、按照月份對資料進行分區等。如果在您的寫入資料中包含多個月份的混合資料時,將會顯著地降低INSERT的效能。為了避免這種情況,通常採用以下方式:
資料總是以盡量大的batch進行寫入,如每次寫入100,000行。
資料在寫入ClickHouse前預先對資料進行分組。
在以下的情況下,效能不會下降:
資料總是被即時地寫入。
寫入的資料已經按照時間排序。