我试图将增量数据从一个配置单元外部表加载到另一配置单元表。我在源表上有一个date timestamp字段,用于每天标识新添加的行。我的任务是提取新添加到源中的行,并将其插入到目标表中。

我正在使用Hive 0.14。

我尝试了以下查询,但无法正常工作。

INSERT INTO TABLE TARGET PARTITION (FIELD_DATE)
SELECT A.FIELD1, A.FIELD2, A.FIELD3,
CASE WHEN LENGTH(A.FIELD4)=0 THEN 0 ELSE 1 END,
CASE WHEN LENGTH(A.FIELD5)=0 THEN 0 ELSE 1 END,
FROM SOURCE A, (Select max(FIELD_TIMESTAMP) from TARGET) T
where A.FIELD_TIMESTAMP > T.FIELD_TIMESTAMP;

上面的代码花了几个小时,没有给出任何结果。

我也尝试执行以下查询,后来发现HIVE不支持WHERE子句中的子查询。 (获得ParseException)
INSERT INTO TABLE TARGET PARTITION (FIELD_DATE)
SELECT A.FIELD1, A.FIELD2, A.FIELD3,
CASE WHEN LENGTH(A.FIELD4)=0 THEN 0 ELSE 1 END,
CASE WHEN LENGTH(A.FIELD5)=0 THEN 0 ELSE 1 END,
FROM SOURCE A, TARGET T
where A.FIELD_TIMESTAMP > (Select max(FIELD_TIMESTAMP) from TARGET);

请帮助我选择仅在初始加载后添加的行。

谢谢。

最佳答案

试试这个

INSERT INTO TABLE TARGET PARTITION (FIELD_DATE)
SELECT A.FIELD1, A.FIELD2, A.FIELD3,
CASE WHEN LENGTH(A.FIELD4)=0 THEN 0 ELSE 1 END,
CASE WHEN LENGTH(A.FIELD5)=0 THEN 0 ELSE 1 END,
FROM SOURCE A JOIN
(Select max(FIELD_TIMESTAMP) as FIELD_TIMESTAMP from TARGET) T
on 1=1
where A.FIELD_TIMESTAMP > T.FIELD_TIMESTAMP;

这是经过测试的查询,供您引用:
insert into orders_target
select o.* from orders_source o join
(select max(o1.order_date) order_date from orders_target o1) o2
on 1=1
where o.order_date > o2.order_date;

关于hadoop - 递增数据加载到配置单元表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34394686/

10-11 22:22
查看更多