@SmartSi 2023-02-28 00:03 采纳率: 0%
浏览 21

Hive Range Between 结果错误问题

Hive 版本:2.3.4


WITH behavior AS (
  SELECT 'a' AS uid, '20230211' AS dt, 1 AS score
  UNION ALL
  SELECT 'a' AS uid, '20230212' AS dt, 2 AS score
  UNION ALL
  SELECT 'a' AS uid, '20230213' AS dt, 3 AS score
  UNION ALL
  SELECT 'a' AS uid, '20230214' AS dt, 4 AS score
  UNION ALL
  SELECT 'a' AS uid, '20230215' AS dt, 5 AS score
  UNION ALL
  SELECT 'a' AS uid, '20230216' AS dt, 6 AS score
)
SELECT
  uid, dt, score,
  COLLECT_SET(score) OVER (ORDER BY score RANGE BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS s1,
  COLLECT_SET(score) OVER (ORDER BY score RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING) AS s2,
  COLLECT_SET(score) OVER (ORDER BY score RANGE BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS s3,
  COLLECT_SET(score) OVER (ORDER BY score RANGE BETWEEN 1 FOLLOWING AND UNBOUNDED FOLLOWING) AS s4
FROM behavior;

如上代码输出结果如下所示:

img

但是个人理解如下:

我们以 dt = '20230214' 这一行数据为例,ORDER BY 指定值比较字段为 score,即当前值为 4:

  • UNBOUNDED PRECEDING AND 1 PRECEDING 表示的范围为 (-∞, 3] s1 结果应该为 [1, 2, 3],但结果为 [1,2] 不符合预期
  • 3 PRECEDING AND 1 PRECEDING 表示的范围为 [1, 3],s2 结果应该为 [1, 2, 3],但结果为 [1,2] 不符合预期
  • 1 FOLLOWING AND 2 FOLLOWING 表示的范围为 [5, 6],s3 结果应该为 [5 ,6],但结果为 [6] 不符合预期
  • 1 FOLLOWING AND UNBOUNDED FOLLOWING 表示的范围为 [5, +∞),s4 结果应该为 [5 ,6],但结果为 [6] 不符合预期

帮忙解释一下那个地方理解错了?

  • 写回答

1条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      问题事件

      • 创建了问题 2月28日

      悬赏问题

      • ¥15 如何修改损失函数以及代码讲解
      • ¥15 有偿咨询!!程序的小数点怎么取到后四位啊!
      • ¥15 IRS智能反射面相关文章代码
      • ¥15 landsat5的两幅影像镶嵌前波段是123457,为什么镶嵌后波段变成了123456?
      • ¥15 关于#matlab#中fmincon函数如何处理约束问题?
      • ¥60 Java程序,控制台输出
      • ¥40 cad 平面线段偏移计算方法
      • ¥20 深度学习可视化工具的使用
      • ¥15 本地的远程软件连接不上华为云服务器
      • ¥15 关于#android#的问题:清华源下载的AOSP在repo sync的时候报错