# SQL Code Intelligence
SQL Code Intelligence 是一个代码补全后端引擎。既可以作为MLSQL语法补全,
也可以为标准Spark SQL(Select语句)做补全。`
## 当前状态
【积极开发中,还未发布稳定版本】
## 发行方式
### maven 依赖
```xml
<dependency>
<groupId>tech.mlsql</groupId>
<artifactId>sql-code-intelligence</artifactId>
<version>0.1.0</version>
</dependency>
```
使用该依赖,用户可以很好的将功能嵌入到自己的web应用中,比如使用spring之类的web框架。
### 预编译包
下载地址:[sql-code-intelligence](http://download.mlsql.tech/sql-code-intelligence/).
下载后 `tar xvf sql-code-intelligence-0.1.0.tar` 解压,执行如下指令即可运行:
```
./start.sh
```
用户也可以直接使用Java命令启动:
```
java -cp .:sql-code-intelligence-0.1.0.jar tech.mlsql.autosuggest.app.Standalone -config ./config/application.yml
```
application.yml 可以参考mlsql-autosuggest/config的示例。默认端口是9004.
## 目标
【SQL Code Intelligence】目标分成两个,第一个是标准SQL补全:
1. SQL关键字补全
2. 表/字段属性/函数补全
3. 可二次开发自定义对接任何Schema Provider
第二个是MLSQL语法补全(依托于标准SQL的补全功能之上):
1. 支持各种数据源提示
2. 支持临时表提示(临时表字段补全等等)
3. 支持各种ET组件参数提示以及名称提示
对于表和字段补,函数补全,相比其他一些SQL代码提示工具,该插件可根据当前已有的信息精确推断。
## 效果展示
【点击下面动图可看到标准SQL补全视频】
[![](http://docs.mlsql.tech/upload_images/sql-code.gif)](https://www.bilibili.com/video/BV1xk4y1z7tV)
### 标准的SQL语法提示
```sql
select no_result_type, keywords, search_num, rank
from(
select [鼠标位置] row_number() over (PARTITION BY no_result_type order by search_num desc) as rank
from(
select jack1.*,no_result_type, keywords, sum(search_num) AS search_num
from jack.drugs_bad_case_di as jack1,jack.abc jack2
where hp_stat_date >= date_sub(current_date,30)
and action_dt >= date_sub(current_date,30)
and action_type = 'search'
and length(keywords) > 1
and (split(av, '\\.')[0] >= 11 OR (split(av, '\\.')[0] = 10 AND split(av, '\\.')[1] = 9))
--and no_result_type = 'indication'
group by no_result_type, keywords
)a
)b
where rank <=
```
鼠标在第三行第十列,此时系统会自动提示:
1. a [表名]
2. jack1展开的所有列
3. no_result_type
4. keywords
5. search_num
### 多行MLSQL的提示
```sql
load hive.`db.table1` as table2;
select * from table2 as table3;
select [鼠标位置] from table3
```
假设db.table1 表的字段为a,b,c,d
其中鼠标在低3行第七列,在此位置,会提示:
1. table3
2. a
3. b
4. c
5. d
可以看到,系统具有非常强的跨语句能力,会自动展开*,并且推测出每个表的schema信息从而进行补全。
## MLSQL 数据源/ET组件参数提示
```sql
select spl from jack.drugs_bad_case_di as a;
load csv.`/tmp.csv` where [鼠标位置]
```
通常加载csv我们需要设定下csv是不是包含header, 分割符是什么。不过一般我们需要去查文档才能知道这些参数。 现在,【SQL Code Intelligence】会给出提示:
```json
[
{"name":"codec","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"dateFormat","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"delimiter","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"emptyValue","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"escape","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"header","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"inferSchema","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}},
{"name":"quote","metaTable":{"key":{"table":"__OPTION__"},"columns":[]},"extra":{}}]
```
## 用户指南
### 部署
如果作为MLSQL插件运行, 请参考部署文档 [MLSQL部署](http://docs.mlsql.tech/zh/installation/)
该插件作为MLSQ默认插件,所以开箱即用
如果用户希望作为独立应用运行, 下载:[sql-code-intelligence](http://download.mlsql.tech/sql-code-intelligence/).
下载后 `tar xvf sql-code-intelligence-0.1.0.tar` 解压,执行如下指令即可运行:
```
java -cp .:sql-code-intelligence-0.1.0.jar tech.mlsql.autosuggest.app.Standalone -config ./config/application.yml
```
application.yml 可以参考mlsql-autosuggest/config的示例。默认端口是9004.
### 编辑器接入 (只要三分钟)
写一个http请求类:
![](http://docs.mlsql.tech/upload_images/WX20200508-115001.png)
在编辑器设置autocompleter回调:
![](http://docs.mlsql.tech/upload_images/WechatIMG1001.jpeg)
Done。 这里我使用的是reactjs, 编辑器是aceditor.
### Schema信息
【SQL Code Intelligence】 需要基础表的schema信息,目前用户有三种可选方式:
1. 主动注册schema信息 (适合体验和调试)
2. 提供符合规范的Rest接口,系统会自动调用该接口获取schema信息 (推荐,对本项目无需任何修改)
3. 扩展【SQL Code Intelligence】的 MetaProvider,使得系统可以获取shcema信息。 (启动本项目时需要注册该类)
最简单的是方式1. 通过http接口注册表信息,我下面是使用scala代码完成,用户也可以使用POSTMan之类的工具完成注册。
```scala
def registerTable(port: Int = 9003) = {
val time = System.currentTimeMillis()
val response = Request.Post(s"http://127.0.0.1:${port}/run/script").bodyForm(
Form.form().add("executeMode", "registerTable").add("schema",
"""
|CREATE TABLE emps(
| empid INT NOT NULL,
| deptno INT NOT NULL,
| locationid INT NOT NULL,
| empname VARCHAR(20) NOT NULL,
| salary DECIMAL (18, 2),
| PRIMARY KEY (empid),
| FOREIGN KEY (deptno) REFERENCES depts(deptno),
| FOREIGN KEY (locationid) REFERENCES locations(locationid)
|);
|""".stripMargin).add("db", "db1").add("table", "emps").
add("isDebug", "true").build()
).execute().returnContent().asString()
println(response)
}
```
创建表的语句类型支持三种:db,hive,json。 分别对应MySQL语法,Hive语法,Spark SQL schema json格式。默认是MySQL的语法。
接着就系统就能够提示了:
```scala
def testSuggest(port: Int = 9003) = {
val time = System.currentTimeMillis()
val response = Request.Post(s"http://127.0.0.1:${port}/run/script").bodyForm(
Form.form().add("executeMode", "autoSuggest").add("sql",
"""
|select emp from db1.emps as a;
|-- load csv.`/tmp.csv` where
|""".stripMargin).add("lineNum", "2").add("columnNum", "10").
add("isDebug", "true").build()
).execute().returnContent().asString()
println(response)
}
```
第二种在请求参数里传递searchUrl和listUrl,要求接口的输入输出需要符合`tech.mlsql.autosuggest.meta.RestMetaProvider`
中的定义。
第三种模式是用户实现一个自定义的MetaProvider,就可以充分利用自己的schema系统
```scala
trait MetaProvider {
def search(key: MetaTableKey): Option[MetaTable]
def list: List[MetaTable]
}
```
使用时,在AutoSuggestContext设置下使其生效:
```
context.setUserDefinedMetaProvider(有的实现类的实例)
```
MetaTableKey 的定义如下:
```scala
case class MetaTableKey(prefix: Option[String], db: Option[String], table: String)
```
prefix是方便定义数据源的。比如同样一个表,可能是hive表,也可能是mysql表。如果你只有一个数仓,不访问其他数据源,那么设置为None就好。对于下面的句子:
```sql
loa
没有合适的资源?快使用搜索试试~ 我知道了~
PHP实现的一个SQL语言解析和补全
共75个文件
scala:53个
java:12个
yml:3个
需积分: 1 1 下载量 50 浏览量
2024-02-21
09:38:46
上传
评论
收藏 96KB ZIP 举报
温馨提示
PHP(PHP: Hypertext Preprocessor)是一种广泛应用于Web开发的服务器端脚本语言。它具有简单易学、灵活性强、跨平台等特点,被广泛应用于构建动态网页和Web应用程序。 以下是一些关于PHP的重要特点和用途: 1. **语法简单:** PHP语法易于学习和使用,类似于C和其他常见的编程语言,使得初学者可以快速上手。 2. **服务器端脚本语言:** PHP是一种服务器端语言,用于处理网页上的动态内容。通过在服务器上解释和执行PHP代码,可以生成HTML输出,使网站实现与数据库交互、文件操作、表单处理等功能。 3. **跨平台兼容性:** PHP可以运行在多种操作系统(如Windows、Linux、Mac等)以及主流的Web服务器(如Apache、Nginx等)上,具有很高的兼容性。 4. **数据库集成支持:** PHP天然地与许多流行的
资源推荐
资源详情
资源评论
收起资源包目录
sql-code-intelligence-master.zip (75个子文件)
sql-code-intelligence-master
pom.xml 16KB
src
test
java
com
intigua
antlr4
autosuggest
BaseTest.scala 2KB
SelectSuggesterTest.scala 9KB
AutoSuggestContextTest.scala 6KB
MatchTokenTest.scala 3KB
LexerUtilsTest.scala 2KB
LoadSuggesterTest.scala 1KB
TableStructureTest.scala 4KB
TablePreprocessorTest.scala 3KB
BaseTestWithoutSparkSession.scala 776B
main
resources
log4j.properties 3KB
java
tech
mlsql
autosuggest
TokenPos.scala 1KB
preprocess
TablePreprocessor.scala 3KB
app
Constants.scala 192B
SchemaRegistry.scala 2KB
Standalone.scala 2KB
MysqlType.java 36KB
MLSQLAutoSuggestApp.scala 5KB
RawDBTypeToJavaType.scala 418B
RDSchema.scala 5KB
funcs
Count.scala 744B
Splitter.scala 868B
utils
SchemaUtils.scala 469B
AutoSuggestContext.scala 8KB
meta
MLSQLEngineMetaProvider.scala 2KB
RestMetaProvider.scala 1KB
meta_protocal.scala 298B
LayeredMetaProvider.scala 549B
MemoryMetaProvider.scala 783B
MetaProvider.scala 508B
StatementTempTableProvider.scala 553B
dsl
TokenMatcher.scala 9KB
AutoSuggester.scala 112B
ast
NoneToken.scala 829B
TableTree.scala 1KB
statement
LexerUtils.scala 7KB
SelectSuggester.scala 7KB
MLSQLStatementSplitter.scala 959B
StatementSplitter.scala 214B
single_statement.scala 6KB
SelectStatementUtils.scala 6KB
TableExtractor.scala 3KB
MatchAndExtractor.scala 328B
PreProcessStatement.scala 207B
TemplateSuggester.scala 1KB
StatementUtils.scala 819B
LoadSuggester.scala 5KB
SuggesterRegister.scala 197B
StatementSuggester.scala 743B
RegisterSuggester.scala 1KB
SpecialTableConst.scala 984B
AttributeExtractor.scala 5KB
FuncReg.scala 309B
POrCLiterals.scala 168B
FunctionUtils.scala 3KB
com
intigua
antlr4
autosuggest
AutoSuggester.java 11KB
ParserWrapper.java 2KB
TokenSuggester.java 6KB
ParserFactory.java 206B
LexerFactory.java 193B
DefaultToCharStream.scala 557B
ToCharStream.java 220B
CasePreference.java 423B
TransitionWrapper.java 1KB
LexerAndParserFactory.java 120B
ReflectionLexerAndParserFactory.java 2KB
LexerWrapper.java 2KB
LICENSE 11KB
.gitignore 107B
dev
start.sh 80B
build-package.sh 426B
README.md 17KB
config
logging.yml 386B
application.example.yml 3KB
application.yml 3KB
共 75 条
- 1
资源评论
专家-百锦再
- 粉丝: 7182
- 资源: 731
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功