大数据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
  }
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
分享
相关文章
阿里云 MaxCompute MaxQA 开启公测,公测可申请 100CU 计算资源解锁近实时高效查询体验
阿里云云原生大数据计算服务 MaxCompute 推出 MaxQA(原 MCQA2.0)查询加速功能,在独享的查询加速资源池的基础上,对管控链路、查询优化器、执行引擎、存储引擎以及缓存机制等多个环节进行全面优化,显著减少了查询响应时间,适用于 BI 场景、交互式分析以及近实时数仓等对延迟要求高且稳定的场景。现正式开启公测,公测期间可申请100CU(价值15000元)计算资源用于测试,欢迎广大开发者及企业用户参与,解锁高效查询体验!
阿里云 MaxCompute MaxQA 开启公测,公测可申请 100CU 计算资源解锁近实时高效查询体验
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
129 2
MaxCompute Bloomfilter index 在蚂蚁安全溯源场景大规模点查询的最佳实践
MaxCompute 在11月最新版本中全新上线了 Bloomfilter index 能力,针对大规模数据点查场景,支持更细粒度的数据裁剪,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
74 12
深入理解RESTful API设计原则与实践
在现代软件开发中,构建高效、可扩展的应用程序接口(API)是至关重要的。本文旨在探讨RESTful API的核心设计理念,包括其基于HTTP协议的特性,以及如何在实际应用中遵循这些原则来优化API设计。我们将通过具体示例和最佳实践,展示如何创建易于理解、维护且性能优良的RESTful服务,从而提升前后端分离架构下的开发效率和用户体验。
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
深入理解RESTful API设计原则
在数字化时代,API已成为连接不同软件应用的桥梁。本文旨在探讨RESTful API设计的基本原则和最佳实践,帮助开发者构建高效、可扩展的网络服务接口。通过解析REST架构风格的核心概念,我们将了解如何设计易于理解和使用的API,同时保证其性能和安全性。
|
4月前
|
深入理解RESTful API设计原则
在现代软件开发中,RESTful API已成为前后端分离架构下不可或缺的通信桥梁。本文旨在探讨RESTful API的核心设计原则,包括资源导向、无状态、统一接口、以及可缓存性等,并通过实例解析如何在实际应用中遵循这些原则来构建高效、可维护的API接口。我们将深入分析每个原则背后的设计理念,提供最佳实践指导,帮助开发者优化API设计,提升系统整体性能和用户体验。
64 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等