Hi Clinton,

I tested MERGE INTO with minimal reproduction. I saw the same error.

```
CREATE TABLE src (col1 INT, col2 INT);
CREATE TABLE dst (id BIGINT DEFAULT SURROGATE_KEY(), col1 INT, col2
INT, PRIMARY KEY (id) DISABLE NOVALIDATE) STORED BY ICEBERG;

MERGE INTO dst d USING src s ON s.col1 = d.col1
WHEN MATCHED THEN UPDATE SET col2 = s.col2
WHEN NOT MATCHED THEN INSERT (col1, col2) VALUES (s.col1, s.col2);
```

The following query, which explicitly inserts `id`, succeeded on my
machine. The default keyword is unlikely to work on INSERT on MERGE
INTO. I've yet to investigate whether ANSI allows us to omit it.

```
MERGE INTO dst d USING src s ON s.col1 = d.col1
WHEN MATCHED THEN UPDATE SET col2 = s.col2
WHEN NOT MATCHED THEN INSERT (id, col1, col2) VALUES (SURROGATE_KEY(),
s.col1, s.col2);
```

As another point, the SURROGATE_KEY might not work as you expected. It
doesn't generate globally unique ids on my attempts.

Regards,
Okumin

On Wed, Jul 31, 2024 at 4:54 PM clinton chikwata
<clintonfun...@gmail.com> wrote:
>
> Dear Team,
>
> Any help will be much appreciated.
>
> Error SQL Error [40000] [42000]: Error while compiling statement: FAILED: 
> SemanticException Schema of both sides of union should match.
>
> I have an ETL workload that stores data into temp_table with the schema as 
> shown below.
>
> CREATE EXTERNAL TABLE IF NOT EXISTS temp_table (
>     VC_ITEM_CODE STRING,
>     VC_SUB_GROUP STRING,
>     VC_PRODUCT_NAME STRING,
>     VC_PRODUCT_UNIT STRING,
>     VC_GROUP_CODE STRING,
>     DT_VAT_START TIMESTAMP,
>     VC_BAND_CODE STRING,
>     VC_SEMI_BAND_CODE STRING,
>     VC_DIVISIONS STRING,
>     NU_UNIT_FACTOR DECIMAL(30, 0),
>     VC_DIVISION_SEG_CODE STRING,
>     VC_COLOR_COMB STRING,
>     DT_MOD_DATE TIMESTAMP,
>     VC_INACTIVE_PRODUCT STRING,
>     RN DECIMAL(10, 0),
>     country STRING
>     )
> STORED AS PARQUET
> LOCATION 'S{path}'
>
> Then i want to load it to the final table
>
> CREATE TABLE product_dimension (
>    `ID` BIGINT DEFAULT SURROGATE_KEY(),
>     VC_ITEM_CODE STRING,
>     VC_SUB_GROUP STRING,
>     VC_PRODUCT_NAME STRING,
>     VC_PRODUCT_UNIT STRING,
>     VC_GROUP_CODE STRING,
>     DT_VAT_START TIMESTAMP,
>     VC_BAND_CODE STRING,
>     VC_SEMI_BAND_CODE STRING,
>     VC_DIVISIONS STRING,
>     NU_UNIT_FACTOR DECIMAL(30, 0),
>     VC_DIVISION_SEG_CODE STRING,
>     VC_COLOR_COMB STRING,
>     DT_MOD_DATE TIMESTAMP,
>     VC_INACTIVE_PRODUCT STRING,
>     RN DECIMAL(10, 0),
>     country STRING,
>     PRIMARY KEY (ID) DISABLE NOVALIDATE)
> STORED BY ICEBERG;
>
> When I attempt to perform a merge operation on column  vc_item_code i get the 
> error as shown above :
>
> MERGE
> INTO
>       product_dimension AS c
>             USING (
>       SELECT
>             *
>       FROM
>             temp_table) AS s ON  s.vc_item_code = c.vc_item_code
>             AND s.country = c.country
> WHEN MATCHED THEN
> UPDATE
> SET
>       vc_item_code = s.vc_item_code,
>       vc_sub_group = s.vc_sub_group,
>       vc_product_name = s.vc_product_name,
>       vc_product_unit = s.vc_product_unit,
>       vc_group_code = s.vc_group_code,
>       dt_vat_start = s.dt_vat_start,
>       vc_band_code = s.vc_band_code,
>       vc_semi_band_code = s.vc_semi_band_code,
>       vc_divisions = s.vc_divisions,
>       nu_unit_factor = s.nu_unit_factor,
>       vc_division_seg_code = s.vc_division_seg_code,
>       vc_color_comb = s.vc_color_comb,
>       dt_mod_date = s.dt_mod_date,
>       vc_inactive_product = s.vc_inactive_product,
>       rn = s.rn,
>       country = s.country
>       WHEN NOT MATCHED THEN
> INSERT
>       (
>     vc_item_code,
>       vc_sub_group,
>       vc_product_name,
>       vc_product_unit,
>       vc_group_code,
>       dt_vat_start,
>       vc_band_code,
>       vc_semi_band_code,
>       vc_divisions,
>       nu_unit_factor,
>       vc_division_seg_code,
>       vc_color_comb,
>       dt_mod_date,
>       vc_inactive_product,
>       rn,
>       country
>     )
> VALUES (
>       s.vc_item_code,
>       s.vc_sub_group,
>       s.vc_product_name,
>       s.vc_product_unit,
>       s.vc_group_code,
>       s.dt_vat_start,
>       s.vc_band_code,
>       s.vc_semi_band_code,
>       s.vc_divisions,
>       s.nu_unit_factor,
>       s.vc_division_seg_code,
>       s.vc_color_comb,
>       s.dt_mod_date,
>       s.vc_inactive_product,
>       s.rn,
>       s.country
> );
>
> Warm Regards

Reply via email to