This Go library compiles a pipelined-based query language (inspired by the Kusto Query Language) into SQL. It has been specifically tested to work with the Clickhouse SQL dialect, but the generated SQL is intentionally database agnostic. This repository contains a Go library, and a CLI to invoke the library.
For example, the following expression:
StormEvents
| where DamageProperty > 5000 and EventType == "Thunderstorm Wind"
| top 3 by DamageProperty
will be compiled to SQL that is similar to:
SELECT *
FROM StormEvents
WHERE DamageProperty > 5000 AND EventType = 'Thunderstorm Wind'
ORDER BY DamageProperty DESC
LIMIT 3;
If you'd like to see a demo along with some examples, check out https://pql.dev.
To use pql in your go code, a minimal example might look like this
package main
import (
"github.com/runreveal/pql"
)
func main() {
sql, err := pql.Compile("users | project id, email | limit 5")
if err != nil {
panic(err)
}
println(sql)
}
Running this program should give you the following output
$ go run test.go
WITH "__subquery0" AS (SELECT "id" AS "id", "email" AS "email" FROM "users")
SELECT * FROM "__subquery0" LIMIT 5;
The following tabular operators are supported and the Microsoft KQL documentation is representative of the current pql api.
as
count
join
let
statements,
but only scalar expressions are supported.project
extend
sort
/order
summarize
take
/limit
top
where
The following scalar functions are implemented within pql. Functions not in this list will be passed through to the underlying SQL engine. This allows the usage of the full APIs implemented by the underlying engine.
Column names with special characters can be escaped with backticks.