insert into
Insert new records to a table.
Note: To insert values into DFS tables, please configure enableInsertStatementForDFSTable=true.
Syntax
insert into
table_name1
values (X, [Y, ...]) | select col_name(s) from table_name2
Here, colName specifies the column name in the target table, which can be in one of the following three forms:
-
Unquoted column name
colName -
Column name enclosed in double quotes
"colName" -
Double-quoted column name prefixed with an underscore
_"colName"
Examples
Insert using VALUE clause
t=table(`XOM`GS`FB as ticker, 100 80 120 as volume);
t;
| ticker | volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
insert into t values(`GOOG, 200);
t;
| ticker | volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
| GOOG | 200 |
insert into t values(`AMZN`NFLX, 300 250);
t;
| ticker | volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
| GOOG | 200 |
| AMZN | 300 |
| NFLX | 250 |
insert into t values(('AMD','NVDA'), (60 400));
t;
| ticker | volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
| GOOG | 200 |
| AMZN | 300 |
| NFLX | 250 |
| AMD | 60 |
| NVDA | 400 |
The above code example can also be written in a way that follows the ANSI SQL standard for inserting multiple rows into the table directly.
insert into t values
('AMD', 60),
('NVDA', 400);
t;
| ticker | volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
| GOOG | 200 |
| AMZN | 300 |
| NFLX | 250 |
| AMD | 60 |
| NVDA | 400 |
To only insert values for a subset of columns:
insert into t(ticker, volume) values(`UBER`LYFT, 0 0);
t;
| ticker | price | volume |
|---|---|---|
| XOM | 98.5 | 100 |
| GS | 12.3 | 80 |
| FB | 40.6 | 120 |
| GOOG | 100.6 | 200 |
| AMZN | 120 | 300 |
| NFLX | 56.6 | 250 |
| AMD | 78.6 | 60 |
| NVDA | 33.1 | 400 |
| UBER | 0 | |
| LYFT | 0 |
Starting from version 3.00.5, insert into supports using a SELECT clause to insert query results directly into the target table.
t1 = table(`XOM`GS`FB as ticker, 100 80 120 as volume)
t1
|
ticker |
volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
t2 = table(`GOOG`AMZN`NFLX as ticker, 100 80 120 as volume);
t2
|
ticker |
volume |
|---|---|
| GOOG | 110 |
| AMZN | 90 |
| NFLX | 150 |
insert into t1(ticker,volume) select ticker,volume from t2
|
ticker |
volume |
|---|---|
| XOM | 100 |
| GS | 80 |
| FB | 120 |
| GOOG | 110 |
| AMZN | 90 |
| NFLX | 150 |
Inserting all columns in the table is equivalent to the following two expressions
insert into t1 select * from t2
insert into t1 t2
Starting from version 3.00.5.1, the INSERT INTO statement supports the ON DUPLICATE KEY UPDATE clause for inserting data under the MySQL dialect. If the primary key already exists, the corresponding record will be updated; otherwise, a new record will be inserted.
enableInsertStatementForDFSTable=true before using
it.Create a PKEY engine dimension table and insert initial
data.t = keyedTable(`id, 1 2 3 as id, 10 20 30 as c, 100 200 300 as c2, 2024.01.01T09:30:00.000 2024.01.01T09:31:00.000 2024.01.01T09:32:00.000 as update_time)
dbName = "dfs://test_duplicate"
if (existsDatabase(dbName))
{
dropDatabase(dbName)
}
db = database(dbName, VALUE, [1], engine=`PKEY)
pt = db.createDimensionTable (t, `pt, primaryKey=`id).append!(t)| id | c | c2 | update_time |
|---|---|---|---|
| 1 | 10 | 100 | 2024.01.01 09:30:00.000 |
| 2 | 20 | 200 | 2024.01.01 09:31:00.000 |
| 3 | 30 | 300 | 2024.01.01 09:32:00.000 |
insert into pt (id, c) values (1 2 3 4 5, 0 0 0 40 50) on duplicate key update c = c + 1| id | c | c2 | update_time |
|---|---|---|---|
| 1 | 11 | 100 | 2024.01.01 09:30:00.000 |
| 2 | 21 | 200 | 2024.01.01 09:31:00.000 |
| 3 | 31 | 300 | 2024.01.01 09:32:00.000 |
| 4 | 40 | ||
| 5 | 50 |
c = c + 1. Records
with primary key id 4 and 5 do not exist, so they are inserted as new
records.Functions can be used in the ON DUPLICATE KEY UPDATE clause. For
example, use the now() function to refresh the update time to
the current
time:insert into pt (id, c, update_time) values (1 2 3, 0 0 0, 0 0 0) on duplicate key update c = c + 1, update_time = now()| id | c | c2 | update_time |
|---|---|---|---|
| 1 | 12 | 100 | 2026.07.31 16:17:20.683 |
| 2 | 22 | 200 | 2026.07.31 16:17:20.683 |
| 3 | 32 | 300 | 2026.07.31 16:17:20.683 |
| 4 | 40 | ||
| 5 | 50 |
VALUES(col) to reference the new value from
the current INSERT. Note that VALUES(col) can only be used as a
complete right-hand value; it cannot be part of an expression (e.g.,
VALUES(col) +
1).insert into pt (id, c, c2, update_time) values (1 2 3, 4 5 6, 0 0 0, 0 0 0) on duplicate key update c2 = values(c), update_time = now()| id | c | c2 | update_time |
|---|---|---|---|
| 1 | 12 | 4 | 2026.07.31 16:19:05.325 |
| 2 | 22 | 5 | 2026.07.31 16:19:05.325 |
| 3 | 32 | 6 | 2026.07.31 16:19:05.325 |
| 4 | 40 | ||
| 5 | 50 |
insert into pt (id, c, c2, update_time) values (1 2 3, 4 5 6, 0 0 0, 0 0 0) on duplicate key update c2 = NULL, update_time = now()| id | c | c2 | update_time |
|---|---|---|---|
| 1 | 12 | 2026.07.31 16:21:26.608 | |
| 2 | 22 | 2026.07.31 16:21:26.608 | |
| 3 | 32 | 2026.07.31 16:21:26.608 | |
| 4 | 40 | ||
| 5 | 50 |
