lava-oushudb-dt-sql-parser/README.md
2020-04-02 10:36:19 +08:00

104 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

> 如果你只想单纯的解析(SQL/SparkSQL),请使用 [cuopyue](https://github.com/HSunboy/cuopyue)
# dt-sql-parser
本项目用于处理SQL目前含有功能
1. 校验SQLhive SQLimpala SQLflinkSQL 等语法,并给予错误信息与建议提示
2. SQL分割,根据`;`将sql分割为数组
3. 去除SQL中的的注释(目前支持`--`,`/**/`类型注释)
## 用法
### 过滤注释 / SQL分割
``` javascript
const dtFilter=require("dt-sql-parser").filter;
const sql=`
/*sttttttttart*/create table /*hhhhhhhh
hhhhhh
aaaaaa*/ sql_task_comment_test(id int comment 'id') comment 'sql test';
--eeeeeeeend
`
console.log(dtFilter.filterComments(sql))//过滤注释
console.log(dtFilter.splitSql(sql));//分割sql
```
### 校验hive sql语法
``` javascript
const dtSqlParser=require("dt-sql-parser").parser;
console.log(dtSqlParser.parseSyntax("selet * form",'hive'));
/*
{
"text": "selet",//错误部分
"token": "REGULAR_IDENTIFIER",//类型
"line": 0,
"loc": {//错误位置信息
"first_line": 1,
"last_line": 1,
"first_column": 0,
"last_column": 5
},
"ruleId": "0",
"expected": [//建议输入内容
{
"text": "select",//建议内容
"distance": 1//建议优先级
},
{
"text": "delete",
"distance": 2
}
],
"recoverable": false,
"incompleteStatement": true
}
*/
```
## API
### filter
#### function filterComments(sql:string):string
过滤 `sql` 注释(支持`/*`和`--`)
#### function splitSql(sql:string):Array<string>
自动去除注释,并且提取出各个 `sql`
### parser
#### function parseSyntax(sql:string|Array<string>, type?:string):Object|boolean
校验 `sql` 语法,如果没错误,则返回 `false`,否则返回错误详细信息
可以提供一个含有两个字符串的数组,代表被光标分割的两个 `sql片段`
#### function parserSql(sql:string|Array<string>, type?:string):Object
解析 `sql` 语法,根据上下文提示补全字段与其它辅助信息
可以提供一个含有两个字符串的数组代表被光标分割的两个sql片段
### flinksqlParser
#### function flinksqlParser (sql: sql): SyntaxError
校验 `flinksql` 语法。
>本项目文档不是很详细,也不准确(暂时没精力写),项目功能可以满足 hivesqlsqlimpalaflinksql 的语法检查和提示功能。
具体使用方式可以参照代码中的 ts 类型。
----
hiveimpala语法解析文件来自[Hue](https://github.com/cloudera/hue)
----
### ChangeLog
- 1.1.8 添加转义字符支持
- 1.1.9 添加函数的中括号语法支持( split(nameList)[0] )
- 1.2.0 添加 ts添加测试
- 2.0.0 添加flinksql语法检查
- 3.0.0 拆分hiveimpala集成最新 `HUE` 方案