104 lines
2.7 KiB
Markdown
104 lines
2.7 KiB
Markdown
> 如果你只想单纯的解析(SQL/SparkSQL),请使用 [cuopyue](https://github.com/HSunboy/cuopyue)
|
||
|
||
# dt-sql-parser
|
||
|
||
本项目用于处理SQL,目前含有功能
|
||
|
||
1. 校验SQL,hive SQL,impala SQL,flinkSQL 等语法,并给予错误信息与建议提示
|
||
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` 语法。
|
||
|
||
>本项目文档不是很详细,也不准确(暂时没精力写),项目功能可以满足 hivesql,sql,impala,flinksql 的语法检查和提示功能。
|
||
具体使用方式可以参照代码中的 ts 类型。
|
||
----
|
||
|
||
hive,impala语法解析文件来自[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 拆分hive,impala,集成最新 `HUE` 方案
|