Skip to content

Support row_number() on Snowflake #1332

Description

@fh-mthomson

Currently, simple row_number() queries (commonly used to filter/order by groups on remote tables) fail on Snowflake:

library(dplyr)
library(dbplyr)
mf <- lazy_frame(x = c(1:5), y = c(rep("A", 2), rep("A", 3)), con = simulate_snowflake())

mf %>% 
  mutate(rown = row_number())
#> <SQL>
#> SELECT `df`.*, ROW_NUMBER() OVER () AS `rown`
#> FROM `df`

mf %>% 
  filter(row_number() == 1)
#> <SQL>
#> SELECT `x`, `y`
#> FROM (
#>   SELECT `df`.*, ROW_NUMBER() OVER () AS `col01`
#>   FROM `df`
#> ) AS `q01`
#> WHERE (`col01` = 1.0)

Created on 2023-07-08 with reprex v2.0.2

On a live database:

> mf %>% 
+   filter(row_number() == 1)
Error in `collect()`:
! Failed to collect lazy table.
Caused by error:
! nanodbc/nanodbc.cpp:1526: 00000: SQL compilation error:
Window function type [ROW_NUMBER] requires ORDER BY in window specification. 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions