sql - 如何在雪花上编写 row_number() javascript UDTF?
问题描述
我试图让这个用户定义的表函数工作,但我被卡住了。
我只是尝试制作简单的 UDTF,以测试我在 UDTF 中注意到的一些奇怪行为,我认为 row_number() 将是一个不错的选择。但它不起作用,我被卡住了。
这是UDTF:
CREATE OR REPLACE FUNCTION udtf_row_num()
RETURNS TABLE(rn DOUBLE)
LANGUAGE JAVASCRIPT
CALLED ON NULL INPUT
VOLATILE
AS '
{
initialize: function() {
this.rownum = 0;
this.inc = 1;
},
processRow: function (row, rowWriter, context) {
this.rownum += this.inc;
rowWriter.writeRow({RN: this.rownum});
},
finalize: function (rowWriter, context) {/*...*/},
}
';
问题是它永远不会增加!输出始终为 1。
这是您可以测试的查询:
SELECT
a.id,
a.customer_id,
rn,
row_number() OVER (PARTITION BY a.customer_id ORDER BY a.id) AS rn_correct
FROM (
SELECT
seq4() AS id,
seq4() % 3 AS customer_id
FROM table(generator(rowcount => 20)) v
) a
JOIN table(udtf_row_num() OVER ( PARTITION BY a.customer_id
ORDER BY a.id )) l
ORDER BY a.customer_id, a.id;
列rn
和rn_correct
应该具有相同的值。
相反,这就是我得到的:
ID CUSTOMER_ID RN RN_CORRECT
0 0 1 1
3 0 1 2
6 0 1 3
9 0 1 4
12 0 1 5
15 0 1 6
18 0 1 7
1 1 1 1
4 1 1 2
7 1 1 3
10 1 1 4
13 1 1 5
16 1 1 6
...
解决方案
推荐阅读
- java - 使用 mybatis 查询 db 的记录列表导致: An unexpected token "IN" was found following
- mysql - 将 LIMIT 设置为 INSERT 查询?
- sql - 以下哪个表达式是 SUM() 函数的更正确用法?
- python - RuntimeError: running_mean 应该包含 256 个元素而不是 128 个 pytorch
- hibernate - 带有子查询、联合、连接和案例语句的 Spring 规范
- python - 如何在数据框中应用上限以在达到上限时均匀分配百分比
- reactjs - 使用 useEffect 结合 Axios 获取 API 数据返回 null - 如何处理?
- r - 使用 R 对 RFC1738 进行 URL 解码(PHP 默认)
- python - Pyinstaller“无法执行脚本pyiboot01_bootstrap”
- android - 底部标签栏被推离屏幕底部,直到触摸事件