【深入MaxCompute】人力家:借助Information Schema合理治理费用

news2024/11/17 14:37:21

简介: 人力家是由阿里钉钉和人力窝共同投资成立,帮助客户进入人力资源数字化,依靠产品技术创新驱动战略的互联网公司。本文将为大家带来MaxCompute与人力家客户案例深度解读。

作者:石玉阳 人力家 高级数据研发工程师

业务简介

人力家是由阿里钉钉和人力窝共同投资成立,帮助客户进入人力资源数字化,依靠产品技术创新驱动战略的互联网公司。公司主要提供包括人事管理、薪酬管理、社保管理、增值服务在内的人力资源SaaS服务,加速对人力资源领域赋能,实现人力资源新工作方式。目前已服务电子商务、零售服务等领域的多行业客户。

人力家是一家典型的创业公司,目前处于一个竞争激烈的市场环境中,公司具有多产品性质,每个产品的数据具有独立性,同时为了配合内部CRM数据需求,更好地把数据整合,对于数仓团队来说是一个不小的挑战,对于数仓团队要求的是稳,准,及时响应。需要数仓团队既要满足内部的数据需求,也需要在计算的成本上实现优化。

业务痛点

MaxCompute作为一款优秀的大数据产品,其不仅可以高性价比分析处理海量数据,同时MaxCompute支持开发接口和生态,为数据、应用迁移、二次开发提供灵活性。QuickBI可以直连MaxCompute产出报表数据供公司内部分析、统计、决策。因为公司开通的MaxCompute是按量付费规格,所以计算任务和QuickBI 报表每次不同的查询都会耗费计算资源导致MaxCompute计算费用增加,在过去的一段时间,MaxCompute每个月的成本波动较大,不符合期望值,且不能有效、及时的发现一些高成本sql和多频访问报表数据集。

具体原因分析

分析 MaxCompute 账单发现费用波动是因为大计算任务和QuickBI报表数据集的自定义sql,主要为以下五点。

1、单SQL查询费用较高

MaxCompute计算和部分QuickBI报表按照时间维度来进行查询数据,但是有些时间查询跨度较大,或者基表数据量大从而形成一条大查询sql。

2、分区不合理

部分MaxCompute计算逻辑和报表数据集设置不合理,有些查询是直接查询近3年分区的数据, 造成计算成本费用增加。

3、报表访问频率高,筛选项不同

部分QuickBI报表的数据集成本其实很低,但是每天访问的次数确实很大,由于重复执行造成MaxCompute计算作业量增加,从而导致计算费用增加。

4、兼容报表增加维表数据

部分报表数据集为了兼容数据产出,需要增加部分维表数据来进行关联,但有些维表数据集其实很大,最后也会形成一条大查询sql。

5、运行时间较长

MaxCompute部分计算sql和QuickBI报表数据集计算时间较长,影响整体业务运行时间和报表数据产出。

基于Information Schema分析项目作业

MaxCompute元数据服务Information Schema提供了项目元数据及使用历史数据等信息。在ANSI SQL-92的Information Schema基础上,添加了面向MaxCompute服务特有的字段及视图。

租户级别Information Schema是原项目级别Information Schema的升级版,是在每个阿里云账号下创建名为SYSTEM_CATALOG的项目,并内置Information Schema,通过访问该内置Schema提供的只读视图,查询当前用户所有项目的元数据信息以及使用历史信息。元数据视图列表如下

在这里插入图片描述

对于以上部分视图元数据信息,我们更关心的是Information_Schema.TASKS_HISTORY表中每日任务计算的时间、成本和次数。

分析SQL脚本

这里我们使用的是租户级别的 Information Schema,相比于项目级别的 Information Schema,租户级别的只需要创建一个计算节点就可以计算所有 project 的任务,而项目级别的 Information Schema 每个 project 都需要一个计算节点,这里更推荐租户级别的 Information Schema。

set odps.namespace.schema=true;
set odps.sql.decimal.odps2=true;

create table if not exists ads_project_cost_pay_di
(
    env_type  string comment '环境类型'
    ,cost_type string comment '消费类型'
    ,inst_id string comment  '唯一id,作业id'
    ,owner_name string comment  '作业所属人'
    ,task_type string  comment  '作业类型  SQL:SQL作业 CUPID:Spark或Mars作业 SQLCost:SQL预估作业 SQLRT:查询加速SQL作业 LOT:MapReduce作业 PS:PAI的Parameter Server AlgoTask:机器学习作业'
    ,input_records string comment  '作业输入的records数目'
    ,output_records string comment '作业输出的records数目'
    ,input_bytes string comment '实际扫描的数据量,与Logview相同。'
    ,output_bytes string comment '输出字节数。'
    ,status string comment '数据采集瞬间的运行状态(非实时状态)。包含以下状态:Terminated:作业已执行结束。Failed:作业失败。 Cancelled:作业被取消。'
    ,cost_pay DECIMAL(18,5) comment '费用 单位元'
    ,complexity string  comment  '任务复杂度'
    ,settings string comment '上层调度或用户传入的信息,以JSON格式存储。包含字段:USERAGENT、BIZID、SKYNET_ID和SKYNET_NODENAME。'
    ,sql_script string comment 'sql 代码'
    ,start_time string comment '开始时间'
    ,end_time string comment '结束时间'
        ,data_collection string comment  'quickbi数据集'
)
comment 'odps 费用 明细'
partitioned by (ds string comment '分区')
;

insert overwrite table ads_project_cost_pay_di partition(ds=${bizdate})
select  case when task_catalog = 'renlijia_ng' then '生产' 
             when task_catalog = 'renlijia_ng_dev' then '测试'
             else  task_catalog
         end as   env_type
        ,if(regexp_count(settings,'quickbi')>0,'quickbi',task_catalog)cost_type
        ,inst_id
        ,owner_name
        ,task_type
        ,input_records
        ,output_records
        ,input_bytes
        ,output_bytes
        ,status
        ,nvl(case   when task_type = 'SQL' then cast(input_bytes/1024/1024/1024 * complexity * 0.3 as DECIMAL(18,5) )
                    when task_type = 'SQLRT' then cast(input_bytes/1024/1024/1024 * complexity * 0.3 as DECIMAL(18,5) )
                    when task_type = 'CUPID' and status='Terminated'then cast(cost_cpu/100/3600 * 0.66 as DECIMAL(18,5) ) 
                    else 0 
        end,0) cost_pay
        ,complexity 
        ,settings
        ,operation_text sql_script
        ,start_time
        ,end_time
        ,regexp_extract(operation_text,'(?<=quickbi=).*?(?==quickbi)',0)data_collection
from  SYSTEM_CATALOG.INFORMATION_SCHEMA.TASKS_HISTORY where ds=${bizdate};

注:sql成本计算公式(官方示例):

case   
when task_type = 'SQL' then cast(input_bytes/1024/1024/1024 * complexity * 0.3 as DECIMAL(18,5) )
when task_type = 'SQLRT' then cast(input_bytes/1024/1024/1024 * complexity * 0.3 as DECIMAL(18,5) )
when task_type = 'CUPID' and status='Terminated'then cast(cost_cpu/100/3600 * 0.66 as DECIMAL(18,5) ) 
else 0 
end;
治理前后MaxCompute整体成本对比

在这里插入图片描述

报表产出明细数据

因为公司是按量付费的MaxCompute,所有我们主要关心的是成本问题和报表的访问情况。对此我们主要从环境、数据集、用户等维度进行分析。

QuickBI数据集(查ads_project_cost_pay_di表)

在这里插入图片描述

QuickBI报表Demo

在这里插入图片描述

QuickBI数据集字段是从sql-script中正则匹配出来,且QuickBI数据集需要单独增加一个字段用来抽取数据集名。

1、手动在QuickBI数据集增加如下字段:

‘quickbi=xxx数据集=quickbi’ as 数据集自定义字段

2、利用MaxCompute函数regexp_extract按照如下方式正则匹配:

regexp_extract(operation_text,'(?<=quickbi=).*?(?==quickbi)',0)
分析改进项:

1、替换分区不合理数据表或数据集。

2、维表数据在上层加工,下层减少依赖项,做到最好只查一张表。

3、高频访问数据集优化存储大小和QuickBI 报表仪表盘数量。

4、减少报表产出时间。

综上:借助MaxCompute 租户级别Information Schema,拉取每日历史作业信息,公司成功把每日MaxCompute成本降低到合理波动区间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“益路同行”栏目人物专访 第0010期——中国公益万里行发起人李现

中国善网在本届&#xff08;第十届&#xff09;慈展会上特别推出了《益路同行》采访栏目&#xff0c;《益路同行》栏目旨在寻觅公益之路上同行者的故事&#xff0c;挖掘公益更深层次的内涵&#xff0c;探索新时代公益发展道路。希望公益企业、人物、故事被更多人看到&#xff0…

Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

腾讯发布《2023数字经济高质量发展报告》

导读 2018年9月30日&#xff0c;腾讯宣布“扎根消费互联网&#xff0c;拥抱产业互联网”的全新战略&#xff0c;并进行历史上第三次大规模组织变革&#xff0c;成立云与智慧产业事业群&#xff08;简称CSIG&#xff09;&#xff0c;开启ToB领域的深耕。也是在这一年&#xff…

有什么好用的站内搜索SaaS能帮网站实现站内搜索功能?

在当今数字时代&#xff0c;拥有一个用户友好且高效的网站对于企业在线发展至关重要。一个能够极大增强用户体验的关键功能就是网站内部搜索能力。这正是站内搜索SaaS发挥作用的地方。 站内搜索SaaS是指一种基于云的软件解决方案&#xff0c;使网站能够实现内部搜索功能。借助…

设计模式 - 迭代器模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 迭代器模式是一种行为型设计模式&#xff0c;它提供了一种统一的方式来访问集合对象中的元素&#xff0c;而不暴露集合内部的表示方式。简单地说&#xff0c;就是将遍历集合的责任封装到一个单独的对象中&#xff0c;我们可以按…

智能化之路:即时零售的崛起与线下商超的转型

最近两年&#xff0c;线下商超骤然迎来“闭店潮”&#xff0c;集体陷入了经营泥潭&#xff0c;其中包括家乐福和永辉超市&#xff0c;以及步步高等大型传统商超。 今年6月底&#xff0c;家乐福中国关闭了深圳的所有门店&#xff1b;8月底&#xff0c;家乐福关闭了广州的最后一…

设计行业中如何保证图纸设计稿在数据传输中不会泄密

设计行业是一个充满创意和专业的行业&#xff0c;图纸设计稿是设计师的心血和财富&#xff0c;也是和客户和合作伙伴沟通和交流的桥梁。可是&#xff0c;现在互联网技术发展得很快&#xff0c;设计师在传输图纸设计稿的时候&#xff0c;会遇到很多安全问题和挑战&#xff0c;怎…

软件开发项目管理工具盘点:探索多种选择

人们常问&#xff1a;“软件研发项目有专门的项目管理软件吗&#xff1f;”你可能会在早期使用更多Office协助项目研发管理&#xff0c;进而使用通用项目管理软件&#xff0c;在一定程度上解决了项目进度跟进问题.资源分配.合作与沟通存在问题&#xff0c;但最终软件研发项目的…

前端js调试如何复制console.log打印的对象或数组

在使用console.log()打印我们的内容时&#xff0c;时常需要将打印的内容复制粘贴使用&#xff0c;然而控制台打印出来的对象是经过格式化处理且直接选择粘贴会有格式问题&#xff0c;此时我们可以通过控制台的 copy() 方法来进行打印结果的复制&#xff0c;如图所示&#xff1a…

Redis 分布式锁 @Klock 注解详解及使用教程

文章目录 一、作用二、参数三、锁的流程四、SpringBoot 集成1. pom 依赖2. yaml 配置3. 使用方式 五、变量级锁和方法级锁六、常见应用场景1. 页面重复提交2. 定时任务3. 核心业务 七、锁的粒度与锁的时间 一、作用 注解 klock 是基于 Redis 的分布式锁&#xff0c;作用在分布…

数据结构--》解锁数据结构中树与二叉树的奥秘(二)

数据结构中的树与二叉树&#xff0c;是在建立非线性数据结构方面极为重要的两个概念。它们不仅能够模拟出生活中各种实际问题的复杂关系&#xff0c;还常被用于实现搜索、排序、查找等算法&#xff0c;甚至成为一些大型软件和系统中的基础设施。 无论你是初学者还是进阶者&…

PHP会话技术跟踪和记录用户?使用cookie会话你必须掌握

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《速学数据结构》 《C语言进阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 &#x1f4cb; 前言会话技术的概述一. Cookie简介二. Cookie基本使用——创建Cookie2.1 创建Cookie演示实例&am…

Zinquin ethyl ester(CAS NO. 181530-09-6),TSQ的类似物

Zinquin ethyl ester&#xff08;CAS NO. 181530-09-6&#xff09;&#xff0c;是广泛使用锌离子荧光探针TSQ的类似物&#xff0c;也是一种细胞渗透性、基于喹诺酮结构的锌离子&#xff08;Zn2&#xff09;荧光探针&#xff0c; 该探针可以用于在细胞中检测和定位锌离子。它具…

软件公司的项目管理软件选择指南

我们经常在项目推进中经常遇到各种各样的问题&#xff0c;最常见的是因团队工作效率低而无法在截止日期之前按时完成工作。但是如果能合理使用项目管理软件&#xff0c;可以有效监控项目进程&#xff0c;提高工作效率&#xff0c;从而保证按时完成任务。那么软件公司适合什么项…

Qt编程-QTableView同时冻结行和列

前言 Qt编程-QTableView同时冻结行和列。如题&#xff0c;先看效果是不是你需要的。网上找到的代码片段要么不全要么不是想要的。如果你只需要需要冻结行或冻结列&#xff0c;请看上篇博客 Qt编程-QTableView冻结行或冻结列或冻结局部单元格 &#xff0c;代码更少一些。 同时…

ansible 调研

参考&#xff1a;自动化运维工具——ansible详解&#xff08;一&#xff09; - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xf…

专用/独享代理与共享代理有何区别?如何选择?

近年来&#xff0c;互联网发展快速&#xff0c;随着许多互联网业务的迸发&#xff0c;代理IP也作为一种互联网工具进入大家的业务&#xff0c;广泛地运用于跨境电商、社媒运营、SEO检测、市场研究等业务中。那么代理IP分为共享与独享&#xff0c;他们使用上有什么区别&#xff…

让你的对象变得拗口:JSON.stringify(),我把对象夹进了 JSON 魔法帽!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 引言 1. JSON.stringify() 属性 replacer …

Gartner中国零信任网络访问市场指南发布!持安科技获评代表厂商

近日&#xff0c;全球权威市场研究与咨询机构Gartner发布《中国零信任网络访问市场指南》。其中&#xff0c;零信任办公安全企业持安科技入选为中国零信任网络访问领域“代表厂商”。 市场指南报告&#xff08;Market Guide&#xff09;是Gartner基于技术发展、落地案例等进行严…

Linux 实时补丁开启内核抢占了吗?

Linux 实时补丁开启内核抢占了吗&#xff1f; 开启了。 查看Linux实时补丁&#xff0c;发现修了如下内核宏&#xff1a; PREEMPT_RT补丁的关键点是最小化不可抢占的内核代码量&#xff0c;同时最小化为了提供这种额外的可抢占性而必须更改的代码量。特别是&#xff0c;临界区…