3
event1  id1 foo_id1
event1  id1 foo_id2
event1  id1 foo_id3
event1  id1 foo_id4
event1  id1 foo_id1
event1  id2 foo_id1
event1  id2 foo_id2
event1  id3 foo_id1
event1  id1 foo_id1
event1  id3 foo_id3
event1  id4 foo_id1
event1  id4 foo_id2
event1  id1 foo_id1
event1  id4 foo_id3
event1  id4 foo_id4
event2      foo_id1
event2      foo_id2
event2      foo_id3
event2      foo_id3

所有事件(即event1,event2)都有foo_ids。对于“event1”中的所有事件,我想知道这些 foo_id(s) 在 event2 中出现了多少次。

我想要这样的o/p:

id1    foo_id1  1
id1    foo_id2  1
id1    foo_id3  1
id2    foo_id1  1
id2    foo_id2  1

如何编写配置单元脚本以预期格式返回数据

INSERT OVERWRITE TABLE table1
SELECT  e1.id, e1.foo_id, count(e2.foo_id)
FROM events e1
LEFT OUTER JOIN events e2
ON e1.foo_id = e2.foo_id 
WHERE e2.event = 'event2' 
AND e1.event = 'event1' 
GROUP BY e1.id, e1.foo_id;

我尝试了上面的配置单元脚本。但是,o/p 显示如下:

    id1 foo_id1 4
    id1 foo_id2 1
    id1 foo_id3 2
    id2 foo_id1 1
    id2 foo_id2 1

如何编写配置单元脚本以预期格式返回数据?

4

1 回答 1

1

如果只是格式化并将第三列设置为count=x的问题,那么您可以concat在 Hive 中使用 UDF:


INSERT OVERWRITE TABLE table1
SELECT  e1.id, e1.foo_id, concat('count=', count(e2.foo_id))
FROM events e1
LEFT OUTER JOIN events e2
ON e1.foo_id = e2.foo_id 
WHERE e2.event = 'event2' 
AND e1.event = 'event1' 
GROUP BY e1.id, e1.foo_id;
于 2013-06-03T15:53:55.543 回答