The goal of this project is to build a ClickHouse SQL parser in Go with the following key features:
- Parse ClickHouse SQL into AST
- Beautify ClickHouse SQL format
This project is inspired by memefish which is a SQL parser for Spanner in Go.
You can use it as your Go library or CLI tool, see the following examples:
- Use clickhouse-sql-parser as a Go library
package main
import (
clickhouse "github.com/AfterShip/clickhouse-sql-parser/parser"
)
query := "SELECT * FROM clickhouse"
parser := clickhouse.NewParser(query)
// Parse query into AST
statements, err := parser.ParseStmts()
if err != nil {
return nil, err
}
- Install clickhouse-sql-parser as a CLI tool
On Linux:
$ go install github.com/AfterShip/clickhouse-sql-parser@latest
On macOS:
$ brew install clickhouse-sql-parser
Parse ClickHouse SQL into AST or beautify ClickHouse SQL format:
## Parse query into AST
$ clickhouse-sql-parser "SELECT * FROM clickhouse WHERE a=100"
## Beautify query
$ clickhouse-sql-parser -format "SELECT * FROM clickhouse WHERE a=100"
## Parse query from file
$ clickhouse-sql-parser -file ./test.sql
- Parsed tree(AST) back into a SQL statement
parser := clickhouse.NewParser("SELECT * FROM clickhouse")
// Parse query into AST
statements, err := parser.ParseStmts()
if err != nil {
return nil, err
}
// Call the String method to unparsed AST into a SQL string
for _, stmt := range statements {
fmt.Println(stmt.String())
}
For the files inside output
and format
dir are generated by the test cases,
if you want to update them, you can run the following command:
$ make update_test
Feel free to open an issue or discussion if you have any issues or questions.