I have a requirement to insert and update records from one table to another. The source table structure with sample records looks like below:
CREATE TABLE BOOKMARK.TEMP_TABLE
(
systemuid varchar(50) NOT NULL,
filename varchar(250) NOT NULL,
mindatetime timestamp,
maxdatetime timestamp,
fileid varchar(50),
batchid varchar(50),
inserteddatetime timestamp DEFAULT now(),
updateddatetime timestamp DEFAULT now(),
file_uuid uuid
);
TEMP TABLE
systemuid filename mindatetime maxdatetime fileid batchid inserteddatetime updateddatetime file_uuid
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10006 monitor_3.dat 2019-05-08 08:29:50.0 2019-07-06 09:49:13.0 1d462091-a582-457b-ab8d-2df76df494b0 76887 2019-08-08 18:17:27.010075 2019-08-08 18:17:27.010075 null
10006 monitor_3.dat 2019-07-06 09:49:13.001 2019-07-08 16:58:06.0 78fd19c5-67a5-452d-abae-f63dd3237721 76889 2019-08-08 20:04:14.994077 2019-08-08 20:04:14.994077 null
10006 monitor_3.dat 2019-07-08 16:58:06.001 2019-07-09 17:22:11.0 02b3f634-7cdd-4c70-8503-6f57f4322ed2 76891 2019-08-08 21:40:08.362082 2019-08-08 21:40:08.362082 null
10006 monitor_3.dat 2019-07-09 17:22:11.001 2019-07-10 16:02:45.0 0c09ea61-1b59-430f-96cd-4c0ae6474c1f 76892 2019-08-08 23:03:04.270083 2019-08-08 23:03:04.270083 null
10006 monitor_3.dat 2019-07-10 16:02:45.001 2019-07-11 15:56:50.0 f384fb31-a506-4360-818f-b8ce2c612a89 76894 2019-08-09 00:31:20.487717 2019-08-09 00:31:20.487717 null
10006 monitor_3.dat 2019-05-08 08:29:50.0 2019-08-14 15:59:27.0 190f2a13-c6e2-4803-8b86-c2964d9a95f0 77721 2019-08-19 15:08:41.167284 2019-08-19 15:08:41.167284 e7f7be43-118a-487b-adfa-1d5471b32197
12345 monitor_7.dat 2019-02-10 16:02:45.001 2019-02-11 14:56:50.0 02b3f634-a506-4360-818f-b8ce2c612a89 76894 2019-08-09 00:31:20.487717 2019-08-09 00:31:20.487717 null
12345 monitor_7.dat 2019-03-08 08:29:50.0 2019-08-14 15:59:27.0 8bc2752a-f542-4803-8b86-c2964d9a95f0 77721 2019-08-19 15:08:41.167284 2019-08-19 15:08:41.167284 null
The output table should be like:
AUDIT TABLE
systemuid filename mindatetime maxdatetime fileid batchid inserteddatetime updateddatetime updated_fileid
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
10006 monitor_3.dat 2019-05-08 08:29:50.0 2019-07-06 09:49:13.0 1d462091-a582-457b-ab8d-2df76df494b0 76887 2019-08-08 18:17:27.010075 2019-08-08 18:17:27.010075 e7f7be43-118a-487b-adfa-1d5471b32197
10006 monitor_3.dat 2019-07-06 09:49:13.001 2019-07-08 16:58:06.0 78fd19c5-67a5-452d-abae-f63dd3237721 76889 2019-08-08 20:04:14.994077 2019-08-08 20:04:14.994077 e7f7be43-118a-487b-adfa-1d5471b32197
10006 monitor_3.dat 2019-07-08 16:58:06.001 2019-07-09 17:22:11.0 02b3f634-7cdd-4c70-8503-6f57f4322ed2 76891 2019-08-08 21:40:08.362082 2019-08-08 21:40:08.362082 e7f7be43-118a-487b-adfa-1d5471b32197
10006 monitor_3.dat 2019-07-09 17:22:11.001 2019-07-10 16:02:45.0 0c09ea61-1b59-430f-96cd-4c0ae6474c1f 76892 2019-08-08 23:03:04.270083 2019-08-08 23:03:04.270083 e7f7be43-118a-487b-adfa-1d5471b32197
10006 monitor_3.dat 2019-07-10 16:02:45.001 2019-07-11 15:56:50.0 f384fb31-a506-4360-818f-b8ce2c612a89 76894 2019-08-09 00:31:20.487717 2019-08-09 00:31:20.487717 e7f7be43-118a-487b-adfa-1d5471b32197
12345 monitor_7.dat 2019-02-10 16:02:45.001 2019-02-11 14:56:50.0 02b3f634-a506-4360-818f-b8ce2c612a89 76894 2019-08-09 00:31:20.487717 2019-08-09 00:31:20.487717 null
12345 monitor_7.dat 2019-03-08 08:29:50.0 2019-08-14 15:59:27.0 8bc2752a-f542-4803-8b86-c2964d9a95f0 77721 2019-08-19 15:08:41.167284 2019-08-19 15:08:41.167284 null
My insert query and update queries are:
INSERT INTO BOOKMARK_AUDIT.AUDIT_TABLE(systemuid, filename, mindatetime, maxdatetime, fileid, batchid, inserteddatetime, updateddatetime, updated_fileid) SELECT systemuid, filename, mindatetime, maxdatetime, fileid, batchid, inserteddatetime, updateddatetime, file_uuid FROM BOOKMARK.TEMP_TABLE WHERE file_uuid IS NULL;
UPDATE BOOKMARK_AUDIT.AUDIT_TABLE t1 SET updated_fileid = (SELECT DISTINCT(file_uuid) FROM BOOKMARK.TEMP_TABLE t2 WHERE t1.systemuid = t2.systemuid AND t1.filename = t2.filename ORDER BY t2.file_uuid LIMIT 1);
I have to first insert all the records which are having file_uuid as null from TEMP table to AUDIT table.
Then I am doing an update on those records with new file_uuid from TEMP table which is notnull. Currently, there are millions of records in the TEMP table. The insert query takes a few minutes to execute while the update statement takes hours to run. I wanted to know if there is an alternative to achieve this need without using the UPDATE query?