Last active
March 31, 2026 13:30
-
-
Save amotl/2516b0b68bd341a87a3e0c29d070271f to your computer and use it in GitHub Desktop.
Recipe to reproduce `UnsupportedFunctionException[Invalid arguments in: percentile(doc.t03.timestamp_ms, $1) with (bigint, undefined)`
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import sqlalchemy as sa | |
| def workload(): | |
| """ | |
| Install | |
| uv pip install sqlalchemy-cratedb psycopg2-binary | |
| Invoke | |
| python cratedb_percentile_with_args.py | |
| Problem | |
| sqlalchemy.exc.ProgrammingError: (crate.client.exceptions.ProgrammingError) UnsupportedFunctionException[Invalid arguments in: percentile(doc.t03.timestamp_ms, $1) with (bigint, undefined). Valid types: (double precision, double precision), (double precision, array(double precision)), (double precision, double precision, double precision), (double precision, array(double precision), double precision), (real, double precision), (real, array(double precision)), (real, double precision, double precision), (real, array(double precision), double precision), (byte, double precision), (byte, array(double precision)), (byte, double precision, double precision), (byte, array(double precision), double precision), (smallint, double precision), (smallint, array(double precision)), (smallint, double precision, double precision), (smallint, array(double precision), double precision), (integer, double precision), (integer, array(double precision)), (integer, double precision, double precision), (integer, array(double precision), double precision), (bigint, double precision), (bigint, array(double precision)), (bigint, double precision, double precision), (bigint, array(double precision), double precision), (interval, double precision), (interval, array(double precision)), (interval, double precision, double precision), (interval, array(double precision), double precision)] | |
| [SQL: | |
| SELECT percentile(timestamp_ms, ?) AS "P50.0" FROM t03; | |
| ] | |
| [parameters: (0.5,)] | |
| """ | |
| # docker run --rm --publish=4200:4200 --publish=5432:5432 crate/crate:nightly -Cdiscovery.type=single-node | |
| engine = sa.create_engine("crate://") | |
| with engine.connect() as conn: | |
| conn.execute( | |
| sa.text(""" | |
| CREATE TABLE IF NOT EXISTS "t03" ( | |
| timestamp_ms BIGINT NOT NULL | |
| ); | |
| """) | |
| ) | |
| # Works with CrateDB. | |
| conn.execute( | |
| sa.text(""" | |
| SELECT percentile(timestamp_ms, 0.50) AS "P50.0" | |
| FROM t03; | |
| """), | |
| ) | |
| # Fails with CrateDB. | |
| conn.execute( | |
| sa.text(""" | |
| SELECT percentile(timestamp_ms, :value) AS "P50.0" FROM t03; | |
| """), | |
| {"value": 0.50}, | |
| ) | |
| if __name__ == "__main__": | |
| workload() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment