大数据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

}

相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
6天前
|
敏捷开发 测试技术 API
阿里云云效产品使用问题之如何通过API查询指定人在指定时间内提交了多少行代码
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
10天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用问题之如何调整改变SQL查询的严格性
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
11天前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用问题之如何优化大数据量的查询和处理
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
11天前
|
分布式计算 大数据 数据处理
MaxCompute操作报错合集之出现无法在 information_schema.TASKS_HISTORY 表中查询到特定类型的 DI 上线任务记录,该怎么办
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
11天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之如何实现查询不存在分区的表时能够报错
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
10天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之使用Table 2.0的表时,如何加快查询速度
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
1天前
|
API 开发工具
支付系统17------支付宝支付-----API预览以及签名验签说明,出现支付宝扫描二维码的操作,支付完成之后,查询订单的状态,支付成功之后,需要退款调用的接口,退款状态的接口,完成退款之后,通知
支付系统17------支付宝支付-----API预览以及签名验签说明,出现支付宝扫描二维码的操作,支付完成之后,查询订单的状态,支付成功之后,需要退款调用的接口,退款状态的接口,完成退款之后,通知
|
8天前
|
存储 缓存 Java
掌握Elasticsearch集群参数查询API
掌握Elasticsearch集群参数查询API
|
11天前
|
SQL 分布式计算 DataWorks
MaxCompute产品使用问题之如何通过临时查询功能来书写和运行SQL语句
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
24天前
|
Cloud Native 数据管理 OLAP
云原生数据仓库AnalyticDB产品使用合集之是否可以创建表而不使用分区
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
374 2
云原生数据仓库AnalyticDB产品使用合集之是否可以创建表而不使用分区