Skip to content

Commit 801da07

Browse files
committed
support rank
1 parent 371f0b5 commit 801da07

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

bigframes/core/compile/sqlglot/aggregations/unary_compiler.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,15 @@ def _(
115115
return apply_window_if_present(sge.func("COUNT", sge.convert(1)), window)
116116

117117

118+
@UNARY_OP_REGISTRATION.register(agg_ops.RankOp)
119+
def _(
120+
op: agg_ops.RankOp,
121+
column: typed_expr.TypedExpr,
122+
window: typing.Optional[window_spec.WindowSpec] = None,
123+
) -> sge.Expression:
124+
return apply_window_if_present(sge.func("RANK"), window)
125+
126+
118127
@UNARY_OP_REGISTRATION.register(agg_ops.SumOp)
119128
def _(
120129
op: agg_ops.SumOp,
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
WITH `bfcte_0` AS (
2+
SELECT
3+
`int64_col` AS `bfcol_0`,
4+
`rowindex` AS `bfcol_1`
5+
FROM `bigframes-dev`.`sqlglot_test`.`scalar_types`
6+
), `bfcte_1` AS (
7+
SELECT
8+
*,
9+
RANK() OVER (ORDER BY `bfcol_0` IS NULL ASC NULLS LAST, `bfcol_0` ASC NULLS LAST) AS `bfcol_4`
10+
FROM `bfcte_0`
11+
)
12+
SELECT
13+
`bfcol_1` AS `bfuid_col_1`,
14+
`bfcol_0` AS `int64_col`,
15+
`bfcol_4` AS `agg_int64`
16+
FROM `bfcte_1`

tests/unit/core/compile/sqlglot/aggregations/test_unary_compiler.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def test_dense_rank(scalar_types_df: bpd.DataFrame, snapshot):
7676
col_name = "int64_col"
7777
bf_df = scalar_types_df[[col_name]]
7878
agg_expr = agg_exprs.UnaryAggregation(
79-
agg_ops.DenseRankOp(), expression.deref("int64_col")
79+
agg_ops.DenseRankOp(), expression.deref(col_name)
8080
)
8181
window = window_spec.WindowSpec(ordering=(ordering.ascending_over(col_name),))
8282
sql = _apply_unary_window_op(bf_df, agg_expr, window, "agg_int64")
@@ -141,6 +141,17 @@ def test_min(scalar_types_df: bpd.DataFrame, snapshot):
141141
snapshot.assert_match(sql, "out.sql")
142142

143143

144+
def test_rank(scalar_types_df: bpd.DataFrame, snapshot):
145+
col_name = "int64_col"
146+
bf_df = scalar_types_df[[col_name]]
147+
agg_expr = agg_exprs.UnaryAggregation(agg_ops.RankOp(), expression.deref(col_name))
148+
149+
window = window_spec.WindowSpec(ordering=(ordering.ascending_over(col_name),))
150+
sql = _apply_unary_window_op(bf_df, agg_expr, window, "agg_int64")
151+
152+
snapshot.assert_match(sql, "out.sql")
153+
154+
144155
def test_sum(scalar_types_df: bpd.DataFrame, snapshot):
145156
bf_df = scalar_types_df[["int64_col", "bool_col"]]
146157
agg_ops_map = {

0 commit comments

Comments
 (0)