Insert from subquery with VS and GROUP BY fails
Details
| Detail name | Value |
|---|---|
| Changelog Number | 17252 |
| Type | Bug |
| Status | Resolved |
| Affected Versions | Exasol 7.1.0, Exasol 8.0.0 |
| Fix Versions | Exasol 7.1.21, Exasol 8.21.0 |
| Resolution Date | 2023-06-16 |
Description
An INSERT statement does not insert data if the following conditions are met
- Inserting data from a subquery that contains a virtual schema.
- The subquery contains a GROUP BY.
- The database pushes the complete subquery down to the remote database.
Preparation
CREATE SCHEMA SCHEMA_NATIVE; CREATE OR REPLACE TABLE t(id INT); INSERT INTO t VALUES 1,2,3; CREATE OR REPLACE TABLE SCHEMA_NATIVE.ot(x CHAR(2), b CHAR(3)); --/ CREATE OR REPLACE JAVA ADAPTER SCRIPT JDBC_ADAPTER AS %scriptclass com.exasol.adapter.RequestDispatcher; %jvmoption -Xms64m -Xmx64m; %jar /buckets/testing/jdbc-adapter/virtualschema-jdbc-adapter.jar; / CREATE OR REPLACE CONNECTION C1 TO ...; CREATE VIRTUAL SCHEMA VS_SCHEMA USING SCHEMA_NATIVE.JDBC_ADAPTER WITH CONNECTION_NAME='C1' SCHEMA_NAME='SCHEMA_NATIVE';
Example
-- Does not insert data: INSERT INTO SCHEMA_NATIVE.ot(x) SELECT MAX(id) FROM VS_SCHEMA.t GROUP BY id; -- Does not insert data: INSERT INTO SCHEMA_NATIVE.ot(x) SELECT DISTINCT id FROM VS_SCHEMA.t; -- Does not insert data: INSERT INTO SCHEMA_NATIVE.ot(x) SELECT MAX(id) FROM VS_SCHEMA.t;
Workaround
Put the subquery with the GROUP BY into another subquery that does not contain a GROUP BY.
INSERT INTO SCHEMA_NATIVE.ot(x) SELECT * FROM (SELECT MAX(id) FROM VS_SCHEMA.t GROUP BY id); INSERT INTO SCHEMA_NATIVE.ot(x) SELECT * FROM (SELECT DISTINCT id FROM VS_SCHEMA.t); INSERT INTO SCHEMA_NATIVE.ot(x) SELECT * FROM (SELECT MAX(id) FROM VS_SCHEMA.t);
Fix
Those queries insert data as expected.