Skip to main content

paas后管对接starrocks指南

1. 架构

数据中心对接starrocks架构图.jpg 所有后管切换starrocks后端开发不需要改任何代码,通过透传到paas-micro-datacenter-admin直接查询数据。后端开发人员只需要编写对应的数据查询sql,配置到数据中心数据库中。

2. 功能介绍

2.1 配置表介绍

  1. data_search_interface 数据查询接口表(主表) data_search_interface
  2. data_search_item 数据查询明细子表(明细查询中存在子查询时需要) 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

sql配置说明 说明:

  1. 多表查询直接使用join,要非常清楚使用inner join还是 left join。inner join 是两边数据都存在才会有记录,left join只要左表存在就会有记录。
  2. 所有编写的sql中表名都需要加上库名,例如:paas_micro_ecoupon.ebuy_ecoupon_code。
  3. sql编写语法与nutz语法一致,唯独就是如果希望条件里面的参数需要必填 需要使用@*。
  4. 所有sql中where后面的条件参数值获取流程为:首先判断请求参数content中是否有searchConditions,如果有这个对象,所有参数从这个对象中获取,如果searchConditions这个对象不存在,直接从content中获取。注意:只要请求参数中有searchConditions,所有参数都会从searchConditions中获取,所以参数不能一部分放到searchConditions,一部分直接放到content中。未找到视为参数未传输,如果是必填参数将会报错。
  5. 如果条件参数是数组,sql中使用”@参数名_数组索引”,参见上面截图说明。
  6. 数据配置中的intf_action为sql查询的唯一标识,建议与原来es查询时的action值保持一致,唯一索引不能重复。
  7. 当sql中条件没有传参数值,系统会自动将整个条件替换为true。
  8. appId参数,如果sql中有app_id = @appId,appId参数不用显示传值,系统会自动从RpcRequest中获取appId
  9. 主表可以用来配置列表查询sql,也可以配置明细查询sql,区别在于后续调用的查询接口不同,同时明细sql会自动加上“limit 1”。
  10. sql条件不支持between and,支持in,in的书写格式为 "brandId in (@brandId)"。
  11. 配置的sql会自动刷新,测试环境为1分钟。
  12. 所有配置的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截图 子表配置说明: 子表是用来配置明细查询时还有子查询的情况,例如券明细查询,除了显示券明细以外还需要显示券的生命周期列表,这时候就可以将券生命周期列表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"
}

配置jsonkey截图

2.3 接口说明

  1. 数据查询分页接口 https://apimock.e-buychina.com/project/663/interface/api/35867
  2. 数据查询明细接口 https://apimock.e-buychina.com/project/663/interface/api/35896
  3. 数据查询列表接口 https://apimock.e-buychina.com/project/663/interface/api/35909
  4. 前端使用透传地址查询:例如:
  • 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编写规范

  1. 无论是列表查询还是明细查询,所有sql select 字段中不允许出现 *, 请大家将具体需要显示的字段列出来。
  2. 翻页查询:
    • 翻页查询所有的查询条件只能使用主表中的字段作为条件筛选;
    • 翻页查询select语句中前两列,第一列为主表主键;第二列为主表order by的排序列;
    • 除主表以外其他关系表统一使用left join关联;
    • 查询语句中不允许使用 group by。
    • 自动sql优化功能需要在data_search_interface表中optimize_enable字段设置为Y 翻页查询规范图列 自动优化后的sql 自动优化的结果