大数据OLAP Kylin3.0RESTful API query查询接口改造

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 大数据OLAP Kylin3.0RESTful API query查询接口改造

kylin3.0提供了 restful api
query接口
Request Sample

{
"sql":"select * from TEST_KYLIN_FACT",
"offset":0,
"limit":50000,
"acceptPartial":false,
"project":"DEFAULT"
}
Curl Example

curl -X POST -H "Authorization: Basic XXXXXXXXX" -H "Content-Type: application/json" -d '{ "sql":"select count(*) from TEST_KYLIN_FACT", "project":"learn_kylin" }' http://localhost:7070/kylin/api/query
Response Body

columnMetas - Column metadata information of result set.
results - Data set of result.
cube - Cube used for this query.
affectedRowCount - Count of affected row by this sql statement.
isException - Whether this response is an exception.
ExceptionMessage - Message content of the exception.
Duration - Time cost of this query
Partial - Whether the response is a partial result or not. Decided by acceptPartial of request.
Response Sample

{
"columnMetas":[

  {  
     "isNullable":1,
     "displaySize":0,
     "label":"CAL_DT",
     "name":"CAL_DT",
     "schemaName":null,
     "catelogName":null,
     "tableName":null,
     "precision":0,
     "scale":0,
     "columnType":91,
     "columnTypeName":"DATE",
     "readOnly":true,
     "writable":false,
     "caseSensitive":true,
     "searchable":false,
     "currency":false,
     "signed":true,
     "autoIncrement":false,
     "definitelyWritable":false
  },
  {  
     "isNullable":1,
     "displaySize":10,
     "label":"LEAF_CATEG_ID",
     "name":"LEAF_CATEG_ID",
     "schemaName":null,
     "catelogName":null,
     "tableName":null,
     "precision":10,
     "scale":0,
     "columnType":4,
     "columnTypeName":"INTEGER",
     "readOnly":true,
     "writable":false,
     "caseSensitive":true,
     "searchable":false,
     "currency":false,
     "signed":true,
     "autoIncrement":false,
     "definitelyWritable":false
  }
AI 代码解读

],
"results":[

  [  
     "2013-08-07",
     "32996",
     "15",
     "15",
     "Auction",
     "10000000",
     "49.048952730908745",
     "49.048952730908745",
     "49.048952730908745",
     "1"
  ],
  [  
     "2013-08-07",
     "43398",
     "0",
     "14",
     "ABIN",
     "10000633",
     "85.78317064220418",
     "85.78317064220418",
     "85.78317064220418",
     "1"
  ]
AI 代码解读

],
"cube":"test_kylin_cube_with_slr_desc",
"affectedRowCount":0,
"isException":false,
"exceptionMessage":null,
"duration":3451,
"partial":false
}
众所周知,这个返回接口返回给开发是非常不友好的,基于业务需求改造成标准的返回接口

原来的
@RequestMapping(value = "/query", method = RequestMethod.POST, produces = {"application/json"})

@ResponseBody
public SQLResponse query(@RequestBody PrepareSqlRequest sqlRequest) {
    return queryService.doQueryWithCache(sqlRequest);
}
AI 代码解读

改造后:
public SQLResponse query2(@RequestBody PrepareSqlRequest sqlRequest) {

    return queryService2.doQueryWithCache(sqlRequest);
    List<Map> mapList = new ArrayList<Map>();

    SQLResponse response = queryService.doQueryWithCache(sqlRequest);
    List<List<String>> results = response.getResults();
    if (results != null && results.size() > 0) {
        List<SelectedColumnMeta> columnMetas = response.getColumnMetas();
        Map<String, Object> map;
        int size;
        for (List<String> result : results) {
            map = new HashMap<>();
            size = result.size();
            for (int i = 0; i < size; i++) {
                map.put(columnMetas.get(i).getLabel(), result.get(i));
            }
            mapList.add(map);
        }

    }

    return new SQLResponse(mapList, response.getCube(), response.getAffectedRowCount(), response.getIsException(),
            response.getExceptionMessage(), response.isPartial(), response.isPushDown(), response.getDuration(),
            response.getTotalScanCount(), response.getTotalScanBytes(), response.isStorageCacheUsed());
}
1650771882532.jpg![1650771882532.jpg](https://ucc.alicdn.com/pic/developer-ecology/42eec56238d94065a5f22f4dcfd3cbb7.jpg)


改造后返回参数
{
"results": [
    {
        "repay_date": "2021-11-12", 
        "repaid_amt": "61",
        "cert_code": null,
        "bill_no": "ZZD",
        "adv_repay_fee": "0",
        "fund_flag": "2",
        "repay_status": "0
    },
    {
        "repay_date": "2021-05-05", 
        "repaid_amt": "29.7",
        "cert_code": null,
        "bill_no": "xxxxxxx",
        "adv_repay_fee": "0",
        "fund_flag": "2",
        "repay_status": "0"
    }
],
"isException": false,
"exceptionMessage": null,
"duration": 244,
"total": 22
AI 代码解读

}

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
打赏
0
0
0
0
3
分享
相关文章
|
4月前
|
API
国外地区经纬度查询免费API接口教程
此接口用于查询国外地区的经纬度信息,支持POST和GET请求方式。需提供用户ID、用户KEY、省级名称及具体地点。返回数据包括地区名称(中英文)、国家代码及经纬度等详细信息。示例请求与响应数据详见文档。
154 29
|
4月前
|
API
天气预报15日-墨迹天气-地址查询版免费API接口教程
该接口提供15日天气预报服务,通过指定地址获取墨迹天气预报。支持POST或GET请求,需提供用户ID、KEY、省份名称及地点等参数。返回数据包括15天内每天的天气详情,如最高最低温度、天气变化及图标等。示例中使用的ID和KEY为公共测试账号,建议使用个人账号以获得更高调用频率。
速卖通商品列表接口(以 AliExpress Affiliate 商品查询 API 为例)
以下是使用 Python 调用速卖通商品列表接口(以 AliExpress Affiliate 商品查询 API 为例)的代码示例。该示例包含准备基础参数、生成签名、发送请求和处理响应等关键步骤,并附有详细注释说明。代码展示了如何通过公共参数和业务参数构建请求,使用 HMAC-SHA256 加密生成签名,确保请求的安全性。最后,解析 JSON 响应并输出商品信息。此接口适用于商品监控、数据采集与分析及商品推荐等场景。注意需通过 OAuth2.0 获取 `access_token`,并根据官方文档调整参数和频率限制。
|
4月前
|
API
全国行政区划查询免费API接口教程
该接口提供全国(不含港澳台)各级行政区划查询服务,适用于地址填写、资料登记等场景。支持5级划分:省、市、区县、乡镇、村。请求需提供用户ID、KEY及查询级别等参数,返回地名列表或错误信息。 示例中ID和KEY为公共测试用,建议使用个人ID和KEY以享受更高调用频率。
355 23
查询域名WHOIS信息免费API接口教程
该API用于查询顶级域名的WHOIS信息,不支持国别域名和中文域名。通过POST或GET请求,需提供用户ID、KEY及待查询域名。返回信息包括域名状态、注册商、时间等详细数据。示例与文档见官网。
|
3月前
|
API
icp备案查询免费API接口教程
该接口用于查询指定域名的ICP备案信息,支持POST或GET请求方式。请求时需提供用户ID、用户KEY及待查询的域名,可选参数为查询通道。响应中包含状态码、消息内容、备案号、备案主体、域名及审核时间等信息。示例中提供了GET和POST请求方式及返回数据样例。
|
4月前
|
API
天气预报1天-中国气象局-地址查询版免费API接口教程
此接口提供中国气象局官方的当日天气信息,支持POST和GET请求,需提供用户ID、KEY、省份及具体地点。返回数据包括状态码、消息、天气详情等。示例中使用的ID与KEY为公共测试用,建议使用个人ID与KEY以享受更高调用频次。
|
4月前
|
API
区号查询免费API接口教程
该接口用于查询指定城市的电话区号、邮编及区划代码等信息,支持通过区号反查城市详情。请求方式为POST或GET,需提供用户ID、KEY及城市/区号参数。返回信息包括状态码、省份、城市、区号、邮编和区划代码。示例请求和响应详见文档。
|
4月前
|
API
查询城市手机号段免费API接口教程
此API用于查询指定城市的手机号段、服务商、区号、邮编等信息。支持POST或GET请求,需提供用户ID、KEY及城市名称等参数。返回数据包括状态码、信息提示、查询数量、最大页码、当前页码、省份、城市、区号、邮编、区划代码及数据集等。示例中提供的ID和KEY为公共测试用,建议使用个人ID和KEY以获得更高的调用频率。
|
4月前
|
API
手机号段查询城市免费API接口教程
此接口用于根据手机号段查询相关信息,包括城市、运营商、区号等。支持POST和GET请求,需提供用户ID、KEY及手机号段前7位作为参数。返回数据包含状态码、信息提示及详细归属信息。示例请求地址:https://cn.apihz.cn/api/ip/haoduan.php?id=88888888&key=88888888&numbers=1321993。接口免费,建议使用个人ID与KEY以独享调用频次。