意外行为之前的配置单元行
hive rows preceding unexpected behavior
给定这个极其简单的数据集:
+--------+-----+
| Bucket | Foo |
+--------+-----+
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
+--------+-----+
我想查看上一行中 Foo 的值:
select
foo,
max(foo) over (partition by bucket order by foo rows between 1 preceding and 1 preceding) as prev_foo
from
...
这给了我:
+--------+-----+----------+
| Bucket | Foo | Prev_Foo |
+--------+-----+----------+
| 1 | A | A |
| 1 | B | A |
| 1 | C | B |
| 1 | D | C |
+--------+-----+----------+
为什么我得到 'A' 第一行?我希望它为空。它在我寻找空值的地方抛出了计算。我可以通过在其中添加 row_number()
来解决它,但我更愿意用更少的计算来处理它。
使用 LAG 函数获取上一行:
LAG(foo) OVER(partition by bucket order by foo) as Prev_Foo
给定这个极其简单的数据集:
+--------+-----+
| Bucket | Foo |
+--------+-----+
| 1 | A |
| 1 | B |
| 1 | C |
| 1 | D |
+--------+-----+
我想查看上一行中 Foo 的值:
select
foo,
max(foo) over (partition by bucket order by foo rows between 1 preceding and 1 preceding) as prev_foo
from
...
这给了我:
+--------+-----+----------+
| Bucket | Foo | Prev_Foo |
+--------+-----+----------+
| 1 | A | A |
| 1 | B | A |
| 1 | C | B |
| 1 | D | C |
+--------+-----+----------+
为什么我得到 'A' 第一行?我希望它为空。它在我寻找空值的地方抛出了计算。我可以通过在其中添加 row_number()
来解决它,但我更愿意用更少的计算来处理它。
使用 LAG 函数获取上一行:
LAG(foo) OVER(partition by bucket order by foo) as Prev_Foo