我认为我的总部是正确的,为什么我不能运行它?

问题描述

insert into table dws_new_mid_day select ud.mid_id,ud.user_id,ud.version_code,ud.version_name,ud.lang,ud.source,ud.os,ud.area,ud.model,ud.brand,ud.sdk_version,ud.gmail,ud.height_width,ud.app_time,ud.network,ud.lng,ud.lat,'2020-09-24' from dws_uv_detail_day ud left join dws_new_mid_day nm on ud.mid_id=nm.mid_id where ud.dt='2020-09-24' and nm.mid_id is null;

错误是这样的:

Failed: SemanticException 1:18 Need to specify partition columns because the destination table is partitioned. Error encountered near token 'dws_new_mid_day'

解决方法

在插入分区表(在您的情况下为dws_new_mid_day时)时必须指定分区列。尝试这样的事情:

静态分区:

INSERT INTO TABLE dws_new_mid_day PARTITION (dt = '2020-09-24')
SELECT ud.mid_id,ud.user_id,ud.version_code,ud.version_name,ud.lang,ud.source,ud.os,ud.area,ud.model,ud.brand,ud.sdk_version,ud.gmail,ud.height_width,ud.app_time,ud.network,ud.lng,ud.lat
FROM dws_uv_detail_day ud
LEFT JOIN dws_new_mid_day nm ON ud.mid_id=nm.mid_id
WHERE ud.dt='2020-09-24'
  AND nm.mid_id IS NULL;

动态分区:

set hive.exec.dynamic.partition=true;  
set hive.exec.dynamic.partition.mode=nonstrict;

INSERT INTO TABLE dws_new_mid_day PARTITION (dt)
SELECT ud.mid_id,ud.lat,ud.dt as dt
FROM dws_uv_detail_day ud
LEFT JOIN dws_new_mid_day nm ON ud.mid_id=nm.mid_id
WHERE ud.dt='2020-09-24'
  AND nm.mid_id IS NULL;

请记住,您必须更改分区列的名称。我只是将其保留为“ dt”进行演示。