我使用非分区表创建了一个Hive表,并使用select query我将数据插入到分区 Hive表中。
这是我的Sample员工数据集:link1
我尝试了以下查询:link2
但在更新Hive表中的值后,
将员工ID为19的Steven更新为50000。
INSERT OVERWRITE TABLE Unm_Parti_Trail PARTITION(Department ='A') SELECT employeeid,名字,名称,CASE WHEN employeeid = 19那么 50000 ELSE薪水END作为工资来自Unm_Parti_Trail;
值正在重复。
7 Nirmal Tech 12000 A
7 Nirmal Tech 12000 B
Nirmal只被部署在 A 部门,但它被复制到部门 B 。
我做错了吗?
请建议。
答案 0 :(得分:2)
您似乎忘记了上一次INSERT OVERWRITE中的WHERE子句:
INSERT INTO TABLE Unm_Parti_Trail PARTITION (Department = 'A')
SELECT employeeid,firstname,designation, CASE WHEN employeeid=19
THEN 50000 ELSE salary END AS salary FROM Unm_Parti_Trail
WHERE department = 'A';
答案 1 :(得分:1)
一种可能的解决方案。
进行插入时,必须在查询中选择分区字段作为最后。例如:
INSERT INTO TABLE Unm_Parti_Trail PARTITION(department='A')
SELECT EmployeeID, FirstName,Designation,Salary, Department
FROM Unm_Dup_Parti_Trail
WHERE department='A';
有关详情,请参阅 link 。