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