Skip to content

Commit

Permalink
feat(snowflake): Support for APPROX_PERCENTILE (#3426)
Browse files Browse the repository at this point in the history
* feat(snowflake): Support for APPROX_PERCENTILE

* PR Feedback 1
  • Loading branch information
VaggelisD committed May 8, 2024
1 parent e8014e2 commit 80670bb
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
9 changes: 9 additions & 0 deletions sqlglot/dialects/snowflake.py
Original file line number Diff line number Diff line change
Expand Up @@ -345,6 +345,7 @@ class Parser(parser.Parser):

FUNCTIONS = {
**parser.Parser.FUNCTIONS,
"APPROX_PERCENTILE": exp.ApproxQuantile.from_arg_list,
"ARRAYAGG": exp.ArrayAgg.from_arg_list,
"ARRAY_CONSTRUCT": exp.Array.from_arg_list,
"ARRAY_CONTAINS": lambda args: exp.ArrayContains(
Expand Down Expand Up @@ -1051,3 +1052,11 @@ def copyparameter_sql(self, expression: exp.CopyParameter) -> str:
return f"{option} = ({values})"

return super().copyparameter_sql(expression)

def approxquantile_sql(self, expression: exp.ApproxQuantile) -> str:
if expression.args.get("weight") or expression.args.get("accuracy"):
self.unsupported(
"APPROX_PERCENTILE with weight and/or accuracy arguments are not supported in Snowflake"
)

return self.func("APPROX_PERCENTILE", expression.this, expression.args.get("quantile"))
12 changes: 12 additions & 0 deletions tests/dialects/test_snowflake.py
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,18 @@ def test_snowflake(self):
"snowflake": "SELECT LISTAGG(col1, ', ') WITHIN GROUP (ORDER BY col2) FROM t",
},
)
self.validate_all(
"SELECT APPROX_PERCENTILE(a, 0.5) FROM t",
read={
"trino": "SELECT APPROX_PERCENTILE(a, 1, 0.5, 0.001) FROM t",
"presto": "SELECT APPROX_PERCENTILE(a, 1, 0.5, 0.001) FROM t",
},
write={
"trino": "SELECT APPROX_PERCENTILE(a, 0.5) FROM t",
"presto": "SELECT APPROX_PERCENTILE(a, 0.5) FROM t",
"snowflake": "SELECT APPROX_PERCENTILE(a, 0.5) FROM t",
},
)

def test_null_treatment(self):
self.validate_all(
Expand Down

0 comments on commit 80670bb

Please sign in to comment.