1.应用场景
涉及到数据指标复用场景,都可以使用指标系统,
目前整体采用数据仓库设计思路,通过SQL或脚本输入,输出API。
已经应用于大屏、简报、门户组件等开发。
2.技术架构
3.对接规范
3.1 ETL系统支持写入数据源
类型 | 数据源 | Reader(读) | Writer(写) |
---|---|---|---|
RDBMS 关系型数据库 | MySQL | √ | √ |
Oracle | √ | √ | |
OceanBase | √ | √ | |
SQLServer | √ | √ | |
PostgreSQL | √ | √ | |
DRDS | √ | √ | |
阿里云数仓数据存储 | ODPS | √ | √ |
ADS | √ | ||
OSS | √ | √ | |
OCS | √ | ||
NoSQL数据存储 | OTS | √ | √ |
Hbase0.94 | √ | √ | |
Hbase1.1 | √ | √ | |
Phoenix4.x | √ | √ | |
Phoenix5.x | √ | √ | |
MongoDB | √ | √ | |
Hive | √ | √ | |
Cassandra | √ | √ | |
无结构化数据存储 | TxtFile | √ | √ |
FTP | √ | √ | |
HDFS | √ | √ | |
Elasticsearch | √ | ||
时间序列数据库 | OpenTSDB | √ | |
TSDB | √ | √ |
3.2 指标系统支持存储数据库
存储类型 | 版本 | 说明 |
---|---|---|
mysql | 8.X | |
oracle | .X | |
postgres | .X | |
sqlserver | .X | |
db2 | .X | |
clickHouse | .X | |
mongodb | .X |
3.2 指标系统编写脚本规范
支持SQL和groovy语法
SQL基本语法:
//统计
return db.count("select count(1) from user");
//单条记录查询,返回对象
return db.findOne("select * from user where id = #{id}");
//多条记录查询,返回LIST
return db.find("select * from user");
//插入,返回自增ID
return db.insert("insert into user(name) values(#{name})");
//更新,返回更新数量
return db.update("update user set name=#{name} where id = #{id}");
//删除,返回移除数量
return db.remove("delete from user where id = #{id}");
//指定数据源
return db.findOne("select * from user where id = #{id}","mysql");
//自动分页
return db.pager("select * from user")
//手动分页
total = db.count("select count(1) from user");
list = db.find("select * from user limit #{index},#{pageSize}");
return Pager.build(total,list);
//缓存操作-1.默认使用linkhashmap lru实现,单位毫秒。2.如需自定义集成redis等分布式缓存参考实现类IDBCache。3.缓存只支持.find() 方法
db.cache("cache-key1",3000).find("select * from user limit 1");
db.cacheClear("cache-key1");
//数据库批量操作
def params = [
["name":"a","sex":1],
["name":"b","sex":2]
]
sql = '''sql
insert into user(name,sex) values(:name,:sex)
'''
db.batchUpdate(sql,params)
参数来源于HTTP入参,和执行脚本的上下文,当变量名重复时,优先上下文变量,就近获取
#{varName} :自动识别参数类型,int,string,list进行处理
${varName} :原始状态输出,会导致sql注入问题,用于入参为关键字
?{condition,express} :对condition条件进行判断,如果值为true,则将express部分保留,否则丢弃。condition值为, ‘ ‘ , NULL , [ ] 空时,将得到false。condition部份允许接收完整的groovy语法
3.3 指标系统接口输出规范
{
"code":"200",
"action":"/open/test/2022022502",
"msg":"succeed",
"data":[
]
}
例子:
{
"code":"200",
"action":"/open/test/2022022502",
"msg":"succeed",
"data":[
{
"name":"1",
"parkId":"1"
}
]
}
文档更新时间: 2022-05-19 17:20 作者:曾小虎