Skip to content

Instantly share code, notes, and snippets.

@amotl
Last active March 31, 2026 13:30
Show Gist options
  • Select an option

  • Save amotl/2516b0b68bd341a87a3e0c29d070271f to your computer and use it in GitHub Desktop.

Select an option

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)`
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