gpt4 book ai didi

join - 在 hive 中模拟间隔连接

转载 作者:行者123 更新时间:2023-12-01 13:53:15 25 4
gpt4 key购买 nike

我正在使用 hive 0.13。

我有两个表:

  • 数据表。列:id,时间。 1E10 行。
  • 我的 map 表。列:id、name、start_time、end_time。 1E6 行。

  • 对于数据表中的每一行,我想从与 id 和时间间隔匹配的 mymap 表中获取名称。所以我想做一个像:
    select data.id, time, name from data left outer join mymap on data.id = mymap.id and time>=start_time and time<end_time

    众所周知,对于数据中的每一行,mymap 中都有 0 或 1 个匹配项。

    hive 不支持上述查询,因为它是非等联接。将不等式条件移动到 where 过滤器不起作用导致连接在应用过滤器之前爆炸:
    select data.id, time, name from data left outer join mymap on data.id = mymap.id where mymap.id is null or (time>=start_time and time<end_time)

    (我知道由于 id 匹配但没有匹配间隔的情况,查询并不完全等效。这可以按照我在此处描述的方式解决: Hive: work around for non equi left join )

    我该怎么办?

    最佳答案

    您可以执行连接,然后从该表中查询。我没有测试这段代码,但它会读像

    select id
    ,time
    ,name
    from (
    select d.id
    ,d.time
    ,m.name
    ,m.start_time
    ,m.end_time
    from data as d LEFT OUTER JOIN mymap as m
    ON d.id = m.id
    ) x
    where time>=start_time
    AND time<end_time

    关于join - 在 hive 中模拟间隔连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25401616/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com