servlet-util 包中的 ControllerUtil 用于处理常见请求问题.
<dependency>
<groupId>cn.linpengfei.sybnutil</groupId>
<artifactId>servlet-util</artifactId>
<version>0.3.30-SNAPSHOT</version>
</dependency>
// cn.sybn.util.servlet.http.ControllerUtil
response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS");
response.setHeader("Access-Control-Allow-Origin", ConverUtil.toString(request.getHeader("Origin")));
response.setHeader("Access-Control-Allow-Headers", ControllerUtil.getAccessRequertHeaders(request));
response.setHeader("Access-Control-Allow-Credentials", "true");
本工具包兼容 hive jdbc 和 presto jdbc. 对于同一张 hive 表, 使用 hive jdbc 和 presto jdbc 的差异如下:
<dependency>
<groupId>cn.linpengfei.sybnutil</groupId>
<artifactId>dbutil-dao</artifactId>
<version>0.3.27-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.facebook.presto</groupId>
<artifactId>presto-jdbc</artifactId>
<version>0.229</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>3.1.1</version>
</dependency>
以下信息对所有数据源都有效, 包括但不限于 jdbc, solr, es, mongo, hive, clickhouse, excel, csv, json 等
select * from db1.table limit 1
union all
select * from db2.table limit 1
union all
select * from db3.table limit 1
在不同类型的数据库之间同步数据时, 因为数据库方言的不同, 建表语句经常会有差异, 比如:
CREATE TABLE `user_info` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`NAME` varchar(128) DEFAULT NOT NULL COMMENT '姓名',
`MOBILE_NUM` varchar(20) DEFAULT NOT NULL COMMENT '手机号',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='会员表';
CREATE TABLE `user_info` (
`ID` Int64,
`NAME` Nullable(String) COMMENT '姓名',
`MOBILE_NUM` Nullable(String) COMMENT '手机号'
) ENGINE=ReplacingMergeTree() ORDER BY (id) SAMPLE BY id
在 mybatis 中直接使用 jdbc driver : cn.sybn.util.io.driver.SybnDaoDriver
即可使用本工具包访问: redis, mongo, es, solr, xls, csv, json 等 no-sql 数据.
默认单个 driver 只支持查询一个数据源, 当前版本 driver (0.3.16)暂不支持使用专有语法做跨数据源联合查询. 后续范本会增加此能力.
sql server 的 PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。
通俗简单的说:PIVOT就是行转列
本工具包中的 DatasPivotUtil 已经实现了此能力. 并已经接入到 SqlDdlDaoMultipleImpl 中, 从而可以用于处理任意数据源的数据.
PIVOT(<聚合函数>(<要聚合的列>) ... FOR [<包含要成为列标题的值的列>] in( [第一个透视的列], [第二个透视的列], ... [最后一个透视的列]))包含要成为列标题的值的列>要聚合的列>聚合函数>
注:
聚合函数可以不唯一, 不唯一时透视列的列名将由”_“作为分隔符拼接而成
透视列可以不填