lava-oushudb-dt-sql-parser/README.md

114 lines
2.9 KiB
Markdown
Raw Normal View History

2020-04-02 10:36:19 +08:00
> 如果你只想单纯的解析(SQL/SparkSQL),请使用 [cuopyue](https://github.com/HSunboy/cuopyue)
2018-07-03 11:33:53 +08:00
# dt-sql-parser
2018-07-02 18:01:01 +08:00
2020-05-12 09:39:49 +08:00
[![NPM version][npm-image]][npm-url]
[npm-image]: https://img.shields.io/npm/v/dt-sql-parser.svg?style=flat-square
[npm-url]: https://www.npmjs.com/package/dt-sql-parser
2020-04-02 10:36:19 +08:00
本项目用于处理SQL目前含有功能
2018-07-02 18:01:01 +08:00
2020-04-02 10:36:19 +08:00
1. 校验SQLhive SQLimpala SQLflinkSQL 等语法,并给予错误信息与建议提示
2. SQL分割,根据`;`将sql分割为数组
3. 去除SQL中的的注释(目前支持`--`,`/**/`类型注释)
2018-07-02 18:01:01 +08:00
## 用法
2020-04-02 10:36:19 +08:00
### 过滤注释 / 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
```
2018-08-16 19:30:22 +08:00
### 校验hive sql语法
2020-08-28 13:29:47 +08:00
2018-08-16 19:30:22 +08:00
``` javascript
const dtSqlParser=require("dt-sql-parser").parser;
2018-08-16 19:49:21 +08:00
console.log(dtSqlParser.parseSyntax("selet * form",'hive'));
2018-08-16 19:30:22 +08:00
/*
{
"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
}
*/
```
2018-10-08 17:58:36 +08:00
## API
2018-09-03 17:56:34 +08:00
2018-10-08 17:58:36 +08:00
### filter
#### function filterComments(sql:string):string
2020-08-28 13:29:47 +08:00
2019-09-25 15:57:25 +08:00
过滤 `sql` 注释(支持`/*`和`--`)
2018-10-08 17:58:36 +08:00
#### function splitSql(sql:string):Array<string>
2020-08-28 13:29:47 +08:00
2019-09-25 15:57:25 +08:00
自动去除注释,并且提取出各个 `sql`
2018-10-08 17:58:36 +08:00
### parser
#### function parseSyntax(sql:string|Array<string>, type?:string):Object|boolean
2020-08-28 13:29:47 +08:00
2019-09-25 15:57:25 +08:00
校验 `sql` 语法,如果没错误,则返回 `false`,否则返回错误详细信息
2018-10-08 18:02:26 +08:00
2019-09-25 15:57:25 +08:00
可以提供一个含有两个字符串的数组,代表被光标分割的两个 `sql片段`
2018-10-08 17:58:36 +08:00
#### function parserSql(sql:string|Array<string>, type?:string):Object
2020-08-28 13:29:47 +08:00
2019-09-25 15:57:25 +08:00
解析 `sql` 语法,根据上下文提示补全字段与其它辅助信息
2018-10-08 18:02:26 +08:00
2018-10-08 17:58:36 +08:00
可以提供一个含有两个字符串的数组代表被光标分割的两个sql片段
2019-09-25 15:57:25 +08:00
### flinksqlParser
2018-10-08 17:58:36 +08:00
2019-09-25 15:57:25 +08:00
#### function flinksqlParser (sql: sql): SyntaxError
2020-08-28 13:29:47 +08:00
2019-09-25 15:57:25 +08:00
校验 `flinksql` 语法。
>本项目文档不是很详细,也不准确(暂时没精力写),项目功能可以满足 hivesqlsqlimpalaflinksql 的语法检查和提示功能。
具体使用方式可以参照代码中的 ts 类型。
----
2018-10-08 17:58:36 +08:00
2019-09-25 15:57:25 +08:00
hiveimpala语法解析文件来自[Hue](https://github.com/cloudera/hue)
2018-11-30 13:40:48 +08:00
----
### ChangeLog
- 1.1.8 添加转义字符支持
2020-08-28 13:29:47 +08:00
- 1.1.9 添加函数的中括号语法支持[ split(nameList](0) )
2019-09-25 15:57:25 +08:00
- 1.2.0 添加 ts添加测试
2019-12-31 18:34:31 +08:00
- 2.0.0 添加flinksql语法检查
2020-04-02 10:36:19 +08:00
- 3.0.0 拆分hiveimpala集成最新 `HUE` 方案