By Speedy ·August 4, 2026 · updated August 4, 2026· 2 min read
New query_denodo utility!
Querying Denodo the right way
If you've ever pointed a script at Denodo's Data Catalog API expecting row data back, you've hit the same wall we did: it's a metadata catalog. It'll happily tell you what databases and views exist, but it has no endpoint that returns actual rows. The real data lives behind a completely different, easy-to-miss service — denodo-restfulws — and until you know that, "query my Denodo view over REST" is a surprisingly hard thing to Google your way into.
query_denodo is a small CLI that targets the correct endpoint from the start, so you don't have to rediscover that distinction yourself.
What it does
Point it at a published view and get rows back, streamed, in whatever shape your next step needs:
python qd.py \
--url https://denodo.example.com:9090/denodo-restfulws/mydb/views/customers \
--username vdp_user --password vdp_pass
{"customer_id": 1, "name": "Acme Corp", "region": "EMEA"}
{"customer_id": 2, "name": "Globex", "region": "AMER"}
It's also included in the query-bench container. Check it out here: https://ownjoo.org/docker/#query-bench
Why it's worth reaching for
- Targets the real data API.
denodo-restfulws, not the Data Catalog — confirmed against Denodo's own docs and a real deployment, not guessed. - Handles pagination for you. Denodo's
$start_index/$countpaging,$format=json, and theelementsresponse wrapper are all internal — you just get a stream of records. - Output that fits your pipeline.
jsonlfor piping tojq,csvfor spreadsheets, a formattedtablefor humans, or a proper JSON file — pick with--output. - Built on the same foundation as the rest of the ownjoo.org query_ family*:
httpxfor transport,oj-toolkitfor parsing/logging/output,retry-asyncfor backoff. If you've used one of these tools, you already know how this one works. - Self-signed / internal deployments covered —
--insecureskips TLS verification when you're pointed at a non-public Denodo instance. - Sample and go.
--limitcaps how many records you pull, so you can eyeball a view's shape before committing to a full export.
Try it
git clone https://github.com/ownjoo/query_denodo.git
cd query_denodo
pip install -r requirements.txt
python qd.py --url <your-view-url> --username <user> --password <pass> --output table
Full README, source, and CI status: ownjoo.org/projects/?repo=query_denodo