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

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*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
  }

],
"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"
  ]

],
"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);
}

改造后:
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

}

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
6天前
|
API
车牌号归属地查询免费API接口教程
本接口用于根据车牌号查询社会车辆的归属地,不支持军车、使馆等特殊车牌。请求地址为 `https://cn.apihz.cn/api/other/chepai.php`,支持 POST 和 GET 请求。请求参数包括 `id`、`key` 和 `words`,返回数据包含车牌归属地信息。示例请求:`https://cn.apihz.cn/api/other/chepai.php?id=88888888&key=88888888&words=川B1234`。
41 21
|
7天前
|
SQL 缓存 测试技术
构建高性能RESTful API:最佳实践与避坑指南###
—— 本文深入探讨了构建高性能RESTful API的关键技术要点,从设计原则、状态码使用、版本控制到安全性考虑,旨在为开发者提供一套全面的最佳实践框架。通过避免常见的设计陷阱,本文将指导你如何优化API性能,提升用户体验,确保系统的稳定性和可扩展性。 ###
39 12
|
3天前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
8天前
|
API
天气预报-腾讯天气-7天-地址查询版免费API接口
这是一个免费的腾讯天气API接口,用于查询指定地址的7天天气预报。支持POST和GET请求方式。请求参数包括id、key、province、city、county等。返回参数包含日期、天气状况、温度等信息。 示例请求地址:https://cn.apihz.cn/api/tianqi/tengxun.php?id=88888888&key=88888888&province=四川省&city=绵阳市&county=。
|
4天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
6天前
|
存储 API 开发者
深入理解RESTful API设计原则
本文探讨了RESTful API的设计原则,强调了其在现代Web服务中的重要性。通过分析状态表示转移(REST)的概念、核心约束以及最佳实践,本文旨在为开发者提供构建高效、可扩展和易于维护的API的指导。文章还讨论了常见的设计陷阱和如何避免它们,以确保API设计的健壮性和灵活性。
|
8天前
|
JSON 缓存 API
构建高效RESTful API的最佳实践
【10月更文挑战第34天】在数字时代的浪潮中,后端开发扮演着至关重要的角色。本文将带你深入探索如何构建高效的RESTful API,从设计原则到实际编码技巧,再到性能优化和错误处理,我们将一一解锁这些技能。你将学会如何打造一个既优雅又强大的后端服务,让你的应用程序在激烈的市场竞争中脱颖而出。那么,让我们一起踏上这段精彩的旅程吧!
24 2
|
9天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
随着互联网技术的发展,前后端分离成为Web开发的主流模式。本文介绍RESTful API的基本概念、设计原则及在PHP中的实现方法。RESTful API是一种轻量级、无状态的接口设计风格,通过HTTP方法(GET、POST、PUT、DELETE)操作资源,使用JSON或XML格式传输数据。在PHP中,通过定义路由、创建控制器、处理HTTP请求和响应等步骤实现RESTful API,并强调了安全性的重要性。
17 2
|
7天前
|
JSON API 数据安全/隐私保护
拍立淘按图搜索API接口返回数据的JSON格式示例
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解释
|
7天前
|
JavaScript 前端开发 NoSQL
深入浅出:使用Node.js构建RESTful API
【10月更文挑战第35天】在数字时代的浪潮中,后端技术如同海洋中稳固的灯塔,为前端应用提供数据和逻辑支撑。本文旨在通过浅显易懂的方式,带领读者了解如何利用Node.js这一强大的后端平台,搭建一个高效、可靠的RESTful API。我们将从基础概念入手,逐步深入到代码实践,最终实现一个简单的API示例。这不仅是对技术的探索,也是对知识传递方式的一次创新尝试。让我们一起启航,探索Node.js的奥秘,解锁后端开发的无限可能。