paas后管对接starrocks指南 1. 架构 所有后管切换starrocks后端开发不需要改任何代码,通过透传到paas-micro-datacenter-admin直接查询数据。后端开发人员只需要编写对应的数据查询sql,配置到数据中心数据库中。 2. 功能介绍 2.1 配置表介绍 data_search_interface 数据查询接口表(主表) data_search_item 数据查询明细子表(明细查询中存在子查询时需要) 2.2 配置说明 主表配置说明 select t.ticket_id, t.ticket_name, t.brand_id, t.brand_name from paas_micro_ecoupon.ecoupon_ticket t join paas_micro_ecoupon.ecoupon_sale_channel s on t.sale_channel_id = s.sale_channel_id where t.sale_channel_id > @*saleChannelId and ( t.brand_id = @brandIds_0 or t.brand_id = @brandIds_1 ) and t.ticket_name like @ticketName 说明: 多表查询直接使用join,要非常清楚使用inner join还是 left join。inner join 是两边数据都存在才会有记录,left join只要左表存在就会有记录。 所有编写的sql中表名都需要加上库名,例如:paas_micro_ecoupon.ebuy_ecoupon_code。 sql编写语法与nutz语法一致,唯独就是如果希望条件里面的参数需要必填 需要使用@*。 所有sql中where后面的条件参数值获取流程为:首先判断请求参数content中是否有searchConditions,如果有这个对象,所有参数从这个对象中获取,如果searchConditions这个对象不存在,直接从content中获取。 注意:只要请求参数中有searchConditions,所有参数都会从searchConditions中获取,所以参数不能一部分放到searchConditions,一部分直接放到content中 。未找到视为参数未传输,如果是必填参数将会报错。 如果条件参数是数组,sql中使用”@参数名_数组索引”,参见上面截图说明。 数据配置中的intf_action为sql查询的唯一标识,建议与原来es查询时的action值保持一致,唯一索引不能重复。 当sql中条件没有传参数值,系统会自动将整个条件替换为true。 appId参数,如果sql中有app_id = @appId,appId参数不用显示传值,系统会自动从RpcRequest中获取appId 主表可以用来配置列表查询sql,也可以配置明细查询sql,区别在于后续调用的查询接口不同,同时明细sql会自动加上“limit 1”。 sql条件不支持between and,支持in,in的书写格式为 "brandId in (@brandId)"。 配置的sql会自动刷新,测试环境为1分钟。 所有配置的sql请先将sql格式化后再压缩后再存入数据库, 格式化后@*中间会产生空格需要手动删除空格 ,附sql压缩及格式化工具地址: https://www.toolscat.com/format/sql 上面sql请求及返回事例: { "uuid": "20230516-nzumknyqpmirkvmjodmpgbkvlkhlwl53", "appId": "7458433922654696", "action": "_dataSearch", "timestamp": 1680142763, "signType": "sha256", "sign": "2234549905748620", "content": { "pageNumber": 1, "pageSize": 20, "intfAction": "queryEcouponTicket", "saleChannelId": 1, "brandIds": [1458,1148] }, "lang": "zh_CN" } 执行的sql 子表配置说明: 子表是用来配置明细查询时还有子查询的情况,例如券明细查询,除了显示券明细以外还需要显示券的生命周期列表,这时候就可以将券生命周期列表sql配置到子表中,查询的数据会会同主表查询数据一同返回。 事例: SELECT * FROM paas_micro_ecoupon.ebuy_ecoupon_code WHERE code_id = @codeId --主表 SELECT * FROM paas_micro_ecoupon.ebuy_ecoupon_code_update WHERE code_id = @codeId --子表 上面两条sql中,第一条为主表,@codeId参数会从请求上送的参数中获取值。而第二条sql的codeId参数会从主表查询结果的json中获取值。 子表配置是还需要配置一个json_key字段,json_key字段的值会作为key放入返回结果的json中去。 请求参数: { "uuid": "20230516-ojvfvgcweuelcohkhcfzmfydrytigoru", "appId": "2873492170393134", "action": "_dataDetail", "timestamp": 1684141840, "signType": "sha256", "sign": "2534751707490756", "content": { "codeId": "f729c9e95c654b2f87127e98236e28f0", "intfAction": "getEcouponCodeDetail" }, "lang": "zh_CN" } 返回结果 { "uuid": "20230516-ojvfvgcweuelcohkhcfzmfydrytigoru", "action": "_dataDetail", "content": { "userInfo": {}, "updateDate": "2023-05-14 08:00:07", "codeSecret": "10032806704005215057", "activateDate": "20230514", "orderId": "51b54e332fd64fc584008cec8d3144bb", "activateInfo": { "activateDate": "2023-05-14 08:00:06", "activateTime": "2023-05-14 08:00:06" }, "codeSearch": "10092305142760000026", "uuid": "20230514-58ae8755c139455892909e98e26278ba", "outerOrderId": "SI6QtqLT", "codeId": "f729c9e95c654b2f87127e98236e28f0", "operationList": [ { "codeId": "f729c9e95c654b2f87127e98236e28f0", "orderId": "51b54e332fd64fc584008cec8d3144bb", "outerOrderId": "SI6QtqLT", "outerOrderItemId": "tA7zoVzl", "ticketId": 10000300000053, "ticketName": "医疗补贴权益券", "brandId": 4049, "brandName": "乐乐茶", "codeMask": "100***5057", "codeSecret": "10032806704005215057", "codeSearch": "10092305142760000026", "useTimes": 1, "verifyTimes": 0, "validStart": "2023-05-14 00:00:00", "validEnd": "2023-06-18 23:59:59", "codeStatus": "00", "activateInfo": { "activateDate": "2023-05-14 08:00:06", "activateTime": "2023-05-14 08:00:06" }, "userInfo": {}, "tenancyId": 58, "tenancyName": "乐乐茶", "partnersAppId": "ebuywha102420109", "status": "0", "createBy": "paas-gateway", "createDate": "2023-05-14 08:00:07", "updateBy": "paas-gateway", "updateDate": "2023-05-14 08:00:07", "appId": "ebuye7eb3a0ac617", "uuid": "20230514-58ae8755c139455892909e98e26278ba", "productId": 3261, "activateDate": "20230514", "activateTime": "20230514080006" } ], "tenancyName": "乐乐茶", "updateBy": "paas-gateway", "outerOrderItemId": "tA7zoVzl", "appId": "ebuye7eb3a0ac617", "createDate": "2023-05-14 08:00:07", "brandName": "乐乐茶", "productId": 3261, "validStart": "2023-05-14 00:00:00", "activateTime": "20230514080006", "codeStatus": "00", "verifyTimes": 0, "tenancyId": 58, "createBy": "paas-gateway", "brandId": 4049, "validEnd": "2023-06-18 23:59:59", "codeMask": "100***5057", "partnersAppId": "ebuywha102420109", "ticketId": 10000300000053, "ticketName": "医疗补贴权益券", "useTimes": 1, "status": "0" }, "success": true, "errorCode": "", "errorMessage": "", "timestamp": 1684205810109, "signType": "sha256", "sign": "8efa67f2f6e466f27a94ee6759ee7e32a022d90d216825647ab58852a67d49ff" } 2.3 接口说明 数据查询分页接口 https://apimock.e-buychina.com/project/663/interface/api/35867 数据查询明细接口 https://apimock.e-buychina.com/project/663/interface/api/35896 数据查询列表接口 https://apimock.e-buychina.com/project/663/interface/api/35909 前端使用透传地址查询:例如: https://dev-paas-app-adminecoupon.e-buy.com/paas/app/adminecoupon/datacenter/dataSearch https://dev-paas-app-adminecoupon.e-buy.com/paas/app/adminecoupon/datacenter/dataItem 2.4 starrocks sql编写规范 无论是列表查询还是明细查询,所有sql select 字段中不允许出现 *, 请大家将具体需要显示的字段列出来。 翻页查询: 翻页查询所有的查询条件只能使用主表中的字段作为条件筛选; 翻页查询select语句中前两列,第一列为主表主键;第二列为主表order by的排序列; 除主表以外其他关系表统一使用left join关联; 查询语句中不允许使用 group by。 自动sql优化功能需要在data_search_interface表中optimize_enable字段设置为Y 自动优化后的sql