美团外卖流量数据的采集加工和应用

app采集的10个经典方法 app采集的抓取数据、app抓包、网页爬虫、采集网站数据、app数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么app采集数据的方法有哪些呢?我给大家分享一下,我爬虫的个人经验,我们在采集类似app采集网站数据的时候会遇到什么技术问题,然后再根据这些问题给大家分享采集方案. 写爬虫采集网站之前: 为什么经常听到有些网站的域名被劫持、服务器被黑客攻击、数据库被盗等 大家平时登录一个网站, 阅读详情

分享嘉宾:马骧 美团外卖 技术专家

编辑整理:史士博

出品平台:DataFunTalk

导读:本文介绍了美团外卖流量数据采集、流量数仓的建设以及典型的流量数据应用,其中重点介绍了流量数仓建设过程、在建设过程中需要关注的问题以及对应的解决方案。

01

流量数据采集

1. 美团外卖流量数据采集历史

先介绍下我们团队做流量数据的历史演进过程,我们是从2015年开始做流量数据建设,早期的需求比较简单,主要是分析一些用户行为的 PV/UV。对此我们定义了一些code埋点,它是一种客户端和服务端联合的日志,同时在客户端实现了链路追踪,整体实现还是比较简单的。

2016 年开始,我们业务整体发展迅速,需要深入分析用户行为,所以我们在服务端定义了一套完整的日志采集规范,定义了page(页面)、block(模块)、item(元素)、source(来源)、target(目标)等采集内容, 并且在数仓层面完成了归因统计的数据建设。

到了 2017 年,我们的数据采集使用集团的流量体系,这套体系是客户端日志,主要有下述三个部分:

  • 埋点管理:按照业务通道隔离,埋点统一注册、管理,业务字段管理,需求管理等

  • 开发者平台:主要是面向RD,包括:客户端&前端 RD 使用的埋点 SDK 手册,QA 使用的埋点验证工具,数据 RD 使用的埋点数据表、数据服务接口等

  • 事件分析工具:主要是一些分析工具提供基本数据分析能力,可以支持事件和页面的埋点数据分析

下面简单介绍下埋点在技术上的分类,一般埋点分为前端埋点和后端埋点两种。

前端埋点:

将采集的 SDK 集成在终端上,主要有三种:代码埋点;可视化埋点;无埋点。美团使用的是代码埋点,它比较明显的优点是:

  • 高度定制、控制精准、采集的数据丰富准确

  • 比较方便、灵活,能方便手机到用户在界面上的行为数据

可视化埋点和无埋点原理差不多,PM和运营同学可以在管理平台配置需要的埋点,然后SDK定时检测识别埋点的的控件,获取埋点数据。相比而言可视化埋点实施成本很低,但是埋点质量上我们觉得代码埋点远高于可视化埋点,如果场景简单或者业务处在初期阶段,建议使用可视化埋点或者无埋点这种成本较低的方案;如果业务比较复杂,公司研发规模比较大,而且对数据建设有比较高的要求,代码埋点是最好的选择。目前业界内,神策数据这几种方案都支持,GrowingIO主要是支持无埋点。

后端埋点: 

现在很少单独使用,基本是和前端埋点搭配使用。它的优点是内网传输,即时性强,丢失风险小 。

2. 埋点信息与事件介绍

埋点采集的信息可以分为环境信息和业务信息两大类。

  • 环境信息:环境信息包括一些常见的地理、设备信息,应用的信息,还有 SDK、事件生产信息等。

  • 业务信息:业务信息主要是和当前用户行为有直接关系,比如说:操作的模块中业务字段,用户操作的页面的信息,还有唤起的信息等。

埋点事件分类主要分为三大类:

  • PV:页面事件或者叫做页面曝光事件,就是当用户打开美团 APP,每次进入一个页面的时候,就会立即上报一条页面的 PV 日志,每个页面都有自己的唯一标识 page_id

  • MC:模块点击事件。点击比较好理解,就是用户每次点击都立即上报一条 MC 日志,每个模块都有唯一标识

  • MV:模块曝光事件。曝光指用户浏览某个模块,就是用户看到某模块就会上报一条日志,在 APP 页面上,某个模块只要显示(只有一个像素出现在屏幕上)就会上报一条日志,同样每条 MV 日志都会记录模块的唯一标识

如上图中左下角是个实例:

在 APP 页面的顶部,我们用绿色框圈中的部分是一个 banner,上报这个 banner 日志的时候会携带 page_id ,和首页 pv 日志的 page_id 值相同,上报曝光、点击日志的时候都会有一个自己的唯一标识。中间是频道区,同上面的 banner 一样上报时都会携带 page_id,每次点击都会上报模块唯一标识 click_id,这 15 个频道会分别上报15条曝光日志,它们的 page_id、view_id 相同,通过位置字段(从 0 位到 14 位)来区分。再下面这个的 banner 位置日志上报规则同顶部 banner 相同。

在这样的事件分类下,我们把一个用户行为按照时间排序得到图中右下角所示的序列:用户首先进入一个页面上报PV日志,会看到很多模块上报MV日志,然后点击某个模块上报MC日志,接着发生跳转跳到新的页面,然后接着浏览、点击、跳转、浏览 ......

从这样一个序列中可以看出在整个上报日志中,数据量最大就是 MV 事件。

3. 埋点规范与协作流程

接下来介绍埋点规范与协作流程以及一些问题点。埋点这个事情是一个多团队协作的事情,需要大家一起协同,所以流程、规范很重要,不然会发生不必要的分歧。

协作流程:我们的流程是这样的,先由需求方提出需求交给业务 PM,业务 PM 在埋点平台做埋点配置,埋点平台根据配置生成代码给到客户端 RD,客户端RD 使用埋点 SDK 做埋点实施,实施之后由客户端 QA 来测试校验然后上线,接着数据组 RD 使用日志数据表加工数据将数据结果交付给数据组 PM,最后将结果交付给需求方。这里简单说下埋点配置环节,在美团外卖是由业务 PM 来统一负责,同时数据团队做规范的指导、定期参加一些埋点评审。

埋点规范:主要是约束一些字段的上报方法,包括字段名称、上报时机等。

问题排查:在问题排查方面,我们有一套比较完整埋点问题追踪流程,也是方便后续做埋点问题的复盘。

埋点 SLA:我们专门制定了一套埋点 SLA ( Service Level Agreement - 服务级别协议 ) 机制,目前这块主要由客户端 RD 和 QA 来保证 SLA,业务 PM 根据埋点重要性提供需要保证的 SLA 列表,数据组提供监控工具。

数据生产链路主要有以下几个阶段:需求、配置、埋点、验证、上报、日志表。

流程是:在需求确定之后会做埋点的配置,客户端进行测试上线。之后客户端会根据用户行为将日志上报(这里分为实时上报和延迟上报两种)到 nginx 服务器,通过 flume 将日志收集传输到 kafka 里,然后做实时处理,包括数据校验、过滤、字段拆分等比较简单的数据处理,之后将数据落地到离线的 log 表,在离线阶段的会进行比较重的数据处理操作,比如去重、关联、标记等,最后产出公司级别数据表,提供公司各个业务部门使用。

4. 埋点注意事项

前面介绍了埋点的基本信息与规范流程,这里给大家介绍一些埋点的注意事项。个人觉得做埋点还是非常需要经验的,甚至是需要更多的试错,这里给大家列了一些注意事项以供参考:

同质参数的名称和类型保持一致:主要就是体现在通用参数、业务参数、行为标识的统一,尽量做到事前治理,给整个的数据加工、数仓建设减轻工作量,当然在数仓加工过程中也一定要做一些容错;

通用复用:尽量少的创建新的事件,而是想办法复用原来的事件,方便后续的埋点管理;比如某弹窗在很多页面都出现过,弹窗模块曝光标识需要是唯一的,当它出现在不同的页面的时候,我们可以通过页面标识 page_id 来区分,而不是每出现一个新的页面就重新定义一个模块标识;

最小粒度:埋点定义到模块内的最小元素,可以避免重复上报;

合并上报:相同模块的 MV 事件可以合并上报;某一页面中一定出现的元素可以不用上报 ( 这里是指 MV 曝光事件 ),或者和 PV 时间合并上报,在 PV 中加一个字段标识即可;

历史兼容:不能改变已有事件标识的含义,不能改变属性标识的含义,不能改变参数值的含义;一般只做新增,不做修改,可以废弃;

追踪回溯:埋点设计文档可以回退到历史版本,便于排查问题。

02

流量数据加工

介绍完了埋点信息,接下来重点讲解流量数仓建设和归因建设,首先介绍流量数仓架构。

1. 流量数仓模型架构

在整个流量数仓建设过程中还是面对很多挑战的,比如:

  • 数据量大,每天几百亿条的日志,数仓模型要使用成本低、查询性能较好;

  • 采集的客户端种类多、日志种类多,数仓建模过程中维度建设复杂、数据整合复杂;

  • 业务系统变更频繁,特别是资源位、广告位变更频繁,数仓模型要及时响应、运维成本低;

  • 多变的归因统计需求 ( 目标行为和来源行为都不固定 ),需要归因模型使用成本低且易用性高。

整个流量数仓架构如图中所示,与之前惠明老师介绍的《美团外卖离线数仓建设实践》基本相同,具体细节可参考原文,这里稍微讲下:

ODL:Operational Data Layer,操作型数据层,这一层主要对采集到的数据进行无损着陆、基础字段清洗加工。ODL是原始日志明细宽表,完成了日志数据清洗过滤、归因建设、公共维度建设等。全链路归因建设在这一层实现。公共维度建设比如地理位置维度生成、常用维度代理键生成等,下沉到ODL来进行,降低了运维和下游使用成本,需要依赖于DIM层的环境维度表。

IDL:Integrated Data Layer,集成数据层,这一层在ODL之上,主要完成领域数据建模,描述业务对象属性、业务对象间的关系、业务行为属性、业务行为与业务对象的关系等。IDL层是明细宽表层,根据数据域和业务过程进行主题划分,在主题内描述业务对象和业务行为,特别是对主题内常用的扩展维度字段进行提取,并且进一步使用维度退化手段,提高明细宽表的易用性、降低使用成本。例如搜索主题筛选了用户搜索行为相关的日志,并将描述搜索业务的扩展字段进行提取。

CDL:Component Data Layer,元件数据层,这一层在IDL之上,主要完成分析实体识别,在主题划分基础上,形成分析实体/实体关系特征模型,对模型的指标进行加工,分为明细数据视图和聚合数据表两类。

MDL:Mart Data Layer,集市数据层,这一层在CDL之上,建立在主题划分基础上,通过维度层级汇总形成汇总表,通过维度主键关联形成宽表,给数据应用提供便利应用的半成品数据集,例如,常见的商家流量宽表(商家的点击、曝光、进店统计)。

ADL:App Data Layer,应用数据层,不属于OneData内统一建设,这一层在MDL之上,直接面对数据应用,优先使用MDL的数据,当MDL不满足时,可以向下使用CDL、IDL的数据。ADL作为数据应用的个性化数据一般不对外提供数据服务。

DIM:公共维度层,包括了流量数仓建设过程中使用的流量维表,分成主题维度表和环境维度表。其中主题维度表将埋点标识(用户行为标识)映射成主题维度,是IDL、CDL进行主题划分的核心维度表。环境维度表包括了流量静态属性中常见的维度,例如app名称、启动渠道、设备类型等,主要应用于ODL层的公共维度建设。

2. 流量数仓建设原则

在数仓建设中有很多原则,这里拿出其中三个在流量数仓中比较重要的原则跟大家分享下:

① 高内聚和低耦合

将业务相近或相关、粒度相同、高概率同时访问的数据放在一起。具体在流量数仓建设过程中,合理的主题划分其实就是遵循高内聚低耦合的原则。不合理的主题划分会导致数据使用成本、运维成本增大。主题划分是和业务强相关的事情,需要大家定期 review 自己的主题划分是否合理,一定要紧跟业务需求。

② 公共处理逻辑下沉且单一

越是底层公用的处理逻辑,越要放在数据底层封装与实现,不要让公共逻辑多处存在且暴露给上层的表。流量底层数据的公共处理逻辑主要是环境维度建设和归因建设。

③ 成本与性能平衡

适当的进行数据冗余来换取查询和刷新性能,但不要过度冗余与数据复制。这是最通俗易懂的原则,但在流量数仓建设过程中,需要综合考虑各种使用场景,实践起来很难。美团外卖每天的数据量几百亿条,这样一份数据,如果在多处出现复制,对存储资源就是很大的浪费。成本与性能平衡确实需要多思考,在做数仓规划时就需要把这个事情考虑到。具体实践如下:

  • 仅在IDL层保留了明细的日志数据,且通过维度退化手段提高明细宽表表的易用性、降低使用成本。

  • IDL层的主题划分过程,如果B主题是A主题的子集,两个主题的区别在于业务描述(业务扩展维度字段)不同,那么A主题使用表来存储逻辑和数据,B主题在A主题表之上使用视图的方式存储数据加工逻辑。举例来说,在美团外卖app首页存在着很多资源位,资源位中有有一部分是营销活动的位置,那么营销活动主题就是B主题,美团外卖app首页资源位主题就是A主题。

  • 在CDL层对明细数据也使用了视图,不再占用物理存储。

3. 维度建设

为什么常说流量数据在做数仓建设时比业务数据困难,个人觉得是因为流量数据的数据源本身是一些半结构化的数据,没有分析维度的概念,所以在数仓的建设时我们要做很多的维度建设工作。因此维度建设是整个流量数仓工作中最核心工作,同时也是最大的难点。

我们维度建设分为两种,环境维度和主题维度。

环境维度:

环境维度是指用户行为所处的环境描述,例如用户的定位城市、用户的设备类型、用户使用的app名称等,这些维度是在主题划分基础上,分析实体维度模型中最主要的维度,即用户在选定业务过程后最主要的分析视角。环境维度建设主要遵守公共处理逻辑下沉且单一这个原则,在ODL完成建设。环境维度建设过程中,如果分析的维度在日志中已经存在明确字段,且该字段具有业务含义并是自然主键,那么就会直接使用这个自然键和相对应的维度属性表。如果分析的维度需要日志中的多个字段联合,这时我们会对这多个字段生成一个代理键,并构建以这个代理键为主键的维度属性表。

举例来说,终端维度需要由日志中的操作系统类型、app名称、启动渠道这三个字段联合生成。如下表所示,我们使用这三个字段生成了一个代理键终端id。特别说明的是,终端id的映射维表并不是简单的可以通过操作系统、app名称、启动渠道这三个字段关联得到。比如,终端id = 3的这一行,操作系统字段可以为任意值(对上报日志不做要求)。这就要求我们在生成代理键的时候需要采取一种更加灵活的方式,以应对上游数据的不确定性冲击。所以我们使用了UDF来实现:

UDF ( 操作系统,app名称,启动渠道 ) = 终端id

  • UDF中可以适配各种灵活多变的映射逻辑,这样大大提高了我们的灵活性,降低了运维成本。

  • 代理键生成之后,我们构建了终端id为主键的维度属性表。

主题维度:

原始日志在采集上来之后,是不具备业务过程分类的,仅仅能通过埋点标识来做区分。所以我们需要对日志进行主题划分,也就是业务过程划分。举例来说,我们想知道一个用户在外卖搜索页的全部行为,我们就需要先找到外卖搜索页的全部埋点标识,然后从原始日志中过滤出来。主题划分就是,将原始日志进行按照埋点标识划分到不同的主题表中。

我们将外卖整体的业务过程按照实体加行为进行抽象。外卖业务中,常见的实体包括用户、商家、菜品、订单。实体和实体之间通过行为来连接。比如,用户和商家之间的行为可以有搜索、使用智能助手、使用购物车、点击商家资源位等。

我们将这个埋点标识与主题表中的业务标识构建成主题维度表,用于管理埋点标识与业务标识的关系。在主题维表中,业务标识使用代理键,并在IDL中通过主题维表关联出代理键。主题划分过程中,我们还需要将主题内常用的扩展维度字段进行提取,对于不同的埋点提取这些字段的方式不太一样,我们也将埋点标识与主题扩展维度提取方式的对应关系维护在主题维度表中。

以资源位主题为例讲解一下建设的过程:

业务过程描述:在做主题建设时我们首先要确定业务过程,这里的业务过程就是从外卖的资源位点击开始,用户在点击之后会进入商家页,然后进入提单页提交订单,最后下单。

业务过程提取:描述清楚业务过程之后,要对业务过程进行提取,即从 ODL 日志中找出所有浏览和点击的日志,具体做法是:

  • 首先维护一张资源位主题维度表,表中记录下埋点与资源位的对应关系

  • 然后通过 ODL 日志表与资源位主题维度表关联即可获得资源位埋点的浏览、点击明细日志。

  • 同时我们在描述资源位这个业务活动的时候需要看资源位位置,这个位置就是描述用户点击的商家在商家列表的第几位,资源位位置在各个埋点里上报的值可能不一样,所以需要在资源位主题维度表里记录埋点标识,记录好之后在加工 IDL 表时就可以根据埋点标识将资源位位置加工出来。

  • 同理进入商家页、进入提交订单页还有提交订单的业务过程提取也是一样的,先找出他们的日志,再根据维表信息关联加工出 IDL 表,只不过这里的关联字段使用的链路信息字段

维度管理:

在维度建设这边,最后再聊下维度管理的事情,从刚才的内容大家应该也可以感受到,在流量数仓中维度建设是最核心的内容,它决定流量数仓的分析视角以及流量数仓的运维成本,在做流量数仓建设时建议认真做下维度管理。

我们是专门做了一个工具来做维度管理。所有维度信息在管理平台统一录入、校验、更新,最后同步到数仓的 DIM 层,给数仓的生产使用。这样降低了数仓的运维成本。

4. 归因建设

归因需求介绍:

前面内容我们讲了数仓整体架构以及维度建设方面内容细节,接下来我们介绍流量数据最核心的、也是大家会经常遇到的归因建设。在流量数据分析场景中,有一类需求是基于单一埋点或埋点集合的且不需要进行日志关联的分析,比如某种用户行为的人数、次数等;另一类需求是需要将日志进行关联并且对日志的先后顺序有要求的分析,比如常见的统计经过外卖首页商家列表点击后的成单行为人数、次数。第二类需求其实就是我们说的流量数据归因。

流量数据归因建设在外卖业务场景下是非常难的,难点有二:数据量大,在几百亿条的日志中,将需要的日志进行关联是非常耗时、耗资源的;需求不固定,通常我们无法预知需求方想将哪些日志做归因分析。

因此,流量数据归因建设要重点解决这两个难点问题,特别是难点二,由于需求的不固定,我们要实现全链路的归因建设,而不是只针对某些行为的日志做归因建设。

首先,我们要将需求简化并且标准化,我们将所有的归因统计抽象成如下问题描述:

统计经过A行为的B行为的次 ( 人 ) 数

应对这样的问题,给出的伪SQL:

select count(1) from 日志 where 行为 = B and 链路信息 包含 A

经过这样抽象后,我们发现问题变得清晰一些,这个伪SQL就是所有归因分析场景的标准化查询。问题聚焦在"链路信息"的建设。我们要为每一个用户行为建立一个链路信息字段。

什么是链路信息呢?在外卖业务场景下,链路信息是:某一行为的时间前序行为集合,集合中不包含相同页面之间的行为。

链路信息建设:

在目标表中,为每一行数据新增一列链路信息,使用数组格式来存储当前行的行为的链路信息。数组中每一个元素即代表一个时间前序行为(排除了MV事件),其中包含的字段会选取一些业务独特的、与当前行为不同的字段(不包括通用环境字段),这是由于一个行为的时间前序行为中,通用环境字段一般是相同的(比如设备号、操作系统等),且通用环境字段已经作为了分组排序的条件。这样设计表结构的好处是:目标表的行数没有变多;对所有的用户点击行为和用户进入某一页面行为加工了链路信息字段。

可能会有同学质疑这个字段会不会特别长,特别是当用户行为链路特别长的时候,后面的行为日志这个字段值会很长。这种场景下我们就需要考虑到底哪些行为应该放在这个字段里,这里我们使用因果关系来判断哪个行为是这行日志的原因行为。

我们将因果关系定义为为与相同页面之间的事情无关。如上图中事件序列记录某用户从 P1 点击进入 P2 再点击进入 P3,然后又回到 P2 接着回到了 P1 又点击了其它模块。在这段用户行为中 P3 的链路信息如图中所示彩色部分只包含第一次到达 P3 时经过的路径;M5 模块的链路信息如图中彩色模块所示,我们认为图中所示的两个 P2 之间的链路与 M5 链路信息无关;M7 的链路信息同理。

这样我们屏蔽掉用户操作过程中的回退操作,最终记录的链路信息字段值不会很大,当然这种因果关系一定要契合业务情况。

定义好链路信息和目标表结构之后,我们进行数据加工,链路信息字段使用udf(自定义函数)来加工得到,伪SQL代码如下:

insert into target table select log表中的字段,udf(归因处理输入字段) as 原因行为 from 分组排序后的log表

归因处理输入字段选取了部分通用环境字段和业务字段,通用环境字段用来判断当前行数据中的环境参数是否发生变化(例如是否换了一个设备),业务字段主要用于udf的输出结果。具体数据处理流程如下:

1. 对日志进行分组排序,使用distribute by按照通用环境字段进行分组,使用sort by按照时间戳顺序排序,这样保证了相同分组的数据分配到同一个reducer当中进行处理,并且是按照时间戳排序之后进行有序处理;

2. 在日志分组排序之后,进行链路信息字段加工,使用hive udf来实现。在udf中,通过栈来存储链路信息,一次udf执行过程简述如下图所示:udf输入参数的通用环境字段用来判断是否更换了设备或app,如果通用参数发生变化,说明上一个分组内的数据全部处理完,清空栈内的数据,把当前行为入栈。如果通用参数没有发生变化,说明仍然在处理相同组内的数据。需要判断当前行为的加入是否发生页面回退,如果发生页面回退,则需按将相同页面之间的行为出栈,最终将当前行为入栈。

3. 结果数据输出过程中,会首先进行行为标记,比如将每个页面的最后一次点击行为进行特殊标记,然后再将栈中所有的元素放入数组中,作为最终的链路信息字段。

链路信息字段加工之后,我们要使用这个字段来解决流量归因统计需求。我们回过头来看一下之前提到的流量数据归因建设两个难点。其实,把问题标准化成统计经过A行为的B行为的次(人)数,并且加工出链路信息字段,就已经解决了上述的两个难点问题:链路信息字段是经过分组排序加工出来的,等同于提前做好了日志关联;对所有的用户点击行为和用户进入某一页面行为都加工了链路信息字段,实现了全链路归因。链路信息字段加工过程是与业务需求解耦的,即不根据业务需求定制化开发,这就使得我们的方案具有很强的灵活性和拓展性。在IDL层可以根据主题的需要取出任何主题所需要的归因数据。

其中,链路信息包含某行为需要通过udf来实现,因此我们开发了一系列的udf、udtf来使用链路信息字段。

前面介绍了在归因建设中我们使用的链路信息追加的方案,可能在业界其他团队使用的是其它的方案,比如挂单,这里给出不同方案的简单对比:

  • 链路信息追加:典型空间换时间的方案,特点是存储冗余,同时需要写UDF实现,有一定使用成本,但是它比较灵活,可以支持任意的原因行为、目标行为分析

  • 指定目标事件归因:这种方案是针对固定场景的,适合在需求比较固定的业务场景。比如在当前阶段,我们只对订单这个事件做归因分析,那就可以在每条日志后面加一个字段记录订单id。相对链路信息追加这种方案的特点是存储不冗余、使用成本低,适用于需求固定的场景

仔细对比我们会发现这两种方案是对称的,链路信息追加存储的是当前行为之前发生的行为,挂单存储的是当前行为之后发生的行为。

勾稽关系:

接下来介绍一个流量数据校验方案,勾稽关系校验。勾稽关系在流量数据加工过程中可以很方便的做监控、校验。比如一个简单场景就是落地页流量要等于来源流量,搜索点击的人数一定是跟搜索页面浏览人数相差不大的。这里将勾稽关系单独列出,也是希望大家在做流量数仓过程中可以灵活使用它。

5. 埋点治理

介绍完数据加工内容之后,我们讲解下数据治理方案,整个的数据治理或者数据资产管理包含很多工作,细节可以参考《美团外卖离线数仓建设实践》,这里简单介绍下埋点治理方案。埋点数据的特点是数据量级很大,因此在做埋点治理时一定要做 ROI 评估,目前的办法就是做血缘追溯,追溯埋点在ETL任务中的使用情况。

我们将埋点使用情况分成了三类:

  • 在数仓内建设的表,IDL层的表会属于唯一一个主题,且该表内使用的埋点就是主题维表中的所有埋点;CDL层会依赖于IDL层的一个或多个主题表,可以通过CDL中主题维度代理键使用情况标记出该表使用的所有埋点;MDL层如果依赖于IDL、CDL、MDL的主题表,同样可以通过主题维度代理键使用情况来标记;

  • ADL层的表比较灵活,如果直接依赖于IDL层的明细数据表和主题维表,可以通过主题维表的使用情况来标记使用的埋点;

  • ADL层的数据直接依赖于IDL明细数据,并且直接使用了埋点唯一标识,那就可以直接标记出所用的埋点了。

将全部使用流量数据的ETL任务标记完之后,我们就可以给每个埋点进行评分,分数较低的埋点会进行有计划的删减和治理,对于分数较高的埋点会进行更好的监控及跟踪。

03

流量数据应用

最后简单说下外卖流量数据的应用,目前主要有三类:

  • OLAP 分析:事件分析、页面分析、资源位分析、AB 实验分析

  • 用户行为分析:漏斗分析、路径分析、留存分析、用户细查、用户分群分析;目前主要使用的技术是 Doris

  • 标签数据层:流量数据很大部分场景都是在标签应用,比如:算法策略、营销都会用到标签

在 OLAP 引擎方面,大家都很了解,不做过多介绍,美团外卖对Doris、Kylin、Druid 都有使用,对几种 OLAP 引擎对比以及在美团外卖的使用场景如下图所示:

04

总结与展望

经过几年的建设实践,美团外卖流量数据仓库已经提供了完善、准确的离线数据服务,未来我们将更加关注实时流量数仓的建设,特别是实时数据全链路归因建设依然面临着一些挑战。

  • 在数据治理方面,我们将持续完善数据监控、完善埋点血缘检测,并将预测算法、根因分析等应用于数据监控和问题分析,进一步的降低运维成本

  • 在数据产品方面,我们将继续打造一站式分析平台,让用户更加自助、灵活、即时的进行行为数据分析

今天的分享就到这里,谢谢大家。


在文末分享、点赞、在看,给个3连击呗~


嘉宾介绍:

马骧

美团外卖 | 技术专家

马骧,2015年加入美团外卖。主要负责外卖流量和广告数据仓库建设、流量和广告数据应用建设、外卖数据服务建设。

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

来都来了,喜欢的话就请分享、点赞、在看三连再走吧~~~

JAVA实战:美团商家数据采集与接口调用全解析 本文详细解析了如何使用JAVA进行美团商家数据采集与API接口调用。从申请API密钥、搭建Spring Boot开发环境,到深入解析商家搜索、详情等核心接口,并提供了完整的实战代码示例。文章重点强调了合规操作、签名机制与频率限制,为开发者提供了一套合法、稳定的美团商家信息获取方案。 阅读详情

相关推荐

美团外卖即时配送系统核心技术解析:从智能调度到实时风控

即时配送系统是现代城市生活的重要基础设施,其核心在于通过分布式系统架构与实时算法,解决大规模并发订单与动态运力之间的高效匹配问题。系统基于动态规划、强化学习等算法原理,构建了订单智能分发与实时调度引擎,实现了对骑手位置、商家出餐能力、全局运力等多维度变量的毫秒级决策。这一技术体系的价值在于极大提升了社会资源(劳动力、运力)的配置效率,并保障了服务稳定性与用户体验。其典型应用场景包括外卖配送、生鲜即时达、同城零售等需要极速履约的领域。本文以美团外卖为例,深入剖析了其背后的订单智能分发系统与实时调度系统如何协同

weixin_30924087的博客 682

如何用网络爬虫软件采集美团外卖的数据?

网络爬虫是一种自动化程序,可在网页上搜集信息,并将所获得的数据存储在本地计算机上。当人工搜集数据变得不切实际或不可行时,网络爬虫非常有用。在本篇文章中,我们将介绍如何用 Python 编写一个网络爬虫,以采集美团外卖的数据为例。

Everly_的博客 1万+

Python爬虫实战:美团商家数据采集系统

本文将详细介绍如何使用Python最新技术栈构建高效的美团商家信息采集系统。内容涵盖异步爬虫、反爬对抗、数据存储、可视化分析等完整流程,提供可落地的代码方案和工程实践。

2201_76125261的博客 2661

美团外卖离线数仓建设实践

文章作者:惠明美团外卖 技术专家编辑整理:史士博出品平台:DataFunTalk导读:美团外卖数据仓库主要是收集各种用户终端业务、行为数据,通过统一口径加工处理,通过多种数据服务支撑主...

大数据星球-浪尖 2571

美团外卖的用户画像实践

用户画像是营销的基础; 新美大丰富的数据使我们能更了解用户; 大数据正在革新营销,同时也带来新的挑战。

集成电路模拟版图入门-版图基础学习笔记(四)

第三部分:版图的准备 2. 设计规则 3) Design Rule 2. 设计规则 4) 规则定义 4.1 NW(N WELL) 2. 设计规则 4) 规则定义 4.1 NW(N WELL) 2. 设计规则 4) 规则定义 4.2 PO(Poly) 2. 设计规则 4) 规则定义 4.3 M1(Metal1) 2. 设计规则 4) 规则定义 4.4 VIA 3. DRC文件 3.1 DRC:Design Rule Check,设计规则检查。 3.2 DRC程序了解有关

weixin_52955333的博客 6737

各大厂大数据应用实践

美团 美团外卖流量数据的采集加工和应用 美团外卖实时数仓建设实践 美团外卖离线数仓建设实践 美团 Flink 实时数仓应用经验分享 Druid SQL和Security在美团的实践 阿里 菜鸟实时数仓2.0进阶之路 Flink1.11+Hive批流一体数仓 阿里巴巴电商搜索推荐实时数仓演进之路 优酷大数据OLAP技术选型 深入分析 Flink SQL 工作机制 增强分析技术原理与实践 菜鸟实时数仓技术架构演进 Apache Flink OLAP引擎性能优化及应用 Flink如何支持特征工程、在线学习、在线预

weixin_43947279的博客 532

基于CatBoost回归模型的完整预测分析:从建模到SHAP可解释性分析

本文介绍了使用CatBoost回归模型进行完整预测分析的流程。首先导入必要的Python库并加载数据,进行数据预处理包括训练测试集划分和归一化处理。然后通过网格搜索优化CatBoost超参数,使用最优参数训练模型并评估预测性能。结果显示模型具有较高的决定系数(R²=0.9944)和较低的误差指标(RMSE=0.0696)。接着进行残差分析和正态性检验,发现残差基本服从正态分布。最后通过SHAP分析实现模型可解释性,识别关键特征影响。该方法为梯度提升树在回归问题中的应用提供了完整解决方案。

fx666_的博客 748

美团数十 PB 规模 Apache Doris 实践:从统一 OLAP 到 AI-Native 数据基座

基于 Doris CCR 支撑 300+ 集群、10w 核计算资源 、数十 PB 数据规模的平滑升级,并带来整体查询与导入性能约 20%–40% 的提升,部分极端场景可达 50%。

SelectDB 690

tewa-707e光猫超级密码获取方法

这款光猫很魔性,没有WIFI,没有USB接口,没有Telnet,试了很多方法去获取超级密码都不行。解密时可能会报错,可能是文件后面部分不晓得是咋拼接过来的,用AES解密时分组数据有问题。3、这个文件是用AES加密了的,直接打开是乱码,所以得用AES解密,key为16个字节的 x00。打开解出来的文件,然后搜索 telecomadmin,就可以发现超级密码了。参考资料里面的光猫不是同一款,但解密的方法基本相同的。

shaowl111的专栏 1万+

双向全桥隔离DC-DC变换器(DAB)的调制优化与挑战解析

本文深入解析了双向全桥隔离DC-DC变换器(DAB)的核心调制技术及其面临的挑战。文章从基础的相移调制(SPS)入手,逐步探讨了扩展相移(EPS)、双重相移(DPS)等进阶策略,并重点分析了电流优化与零电压开通(ZVS)等硬核优化技巧。针对DAB在实际应用中存在的建模困难、多模块并联及数字实现等挑战,提供了实用的应对策略与设计思路,旨在帮助工程师在性能、复杂度与成本之间找到最佳平衡。

weixin_29271053的博客 574

各大厂应用实践 — 大数据

大厂应用实践 美团 美团外卖流量数据的采集加工和应用:点击这里 美团外卖实时数仓建设实践:点击这里 美团外卖离线数仓建设实践:点击这里 美团 Flink 实时数仓应用经验分享:点击这里 Druid SQL和Security在美团点评的实践:点击这里 Flink 数据湖 助力美团数仓增量生产:点击这里 Apache Doris在美团外卖数仓中的应用实践:点击这里 阿里 菜鸟实时数仓2.0进阶之路:点击这里 Flink1.11+Hive批流一体数仓:点击这里 阿里巴巴电商搜索推荐实时数仓演进之路:点击这里 优酷

菜鸟也学大数据的博客 809

反应堆设计:基于MATLAB的反应堆仿真和分析,包括反应堆稳态分析、反应堆动态分析和反应堆安全分析 介绍

反应堆设计是利用计算机技术对核反应堆进行设计和模拟,以获得安全、高效、经济的核能发电系统。它是核能领域的重要组成部分,在电力生产、核医学、科学研究等领域有着广泛的应用。

走向CTO的路上... 1113

餐饮行业大数据预测分析实战:从数据采集到销量预测落地

大数据预测分析的核心在于通过数据采集、清洗、特征工程与模型训练,将零散业务数据转化为可量化的趋势判断。其原理是整合历史销量、天气、营销活动等多维特征,利用XGBoost等机器学习模型捕捉非线性规律,从而替代人工经验实现精准预测。该技术的价值已在实际项目中得到验证——某连锁餐饮品牌借助这套方案,将销量预测准确率从60%提升至85%以上,显著降低食材损耗与人力成本。应用场景覆盖门店备货、排班优化及采购决策等日常运营环节。本文以餐饮连锁品牌预测项目为例,完整还原了从Flume/Kafka数据采集、Hive数仓分层

weixin_28224217的博客 231

Android SurfaceFlinger——概述(一)

对于系统渲染流程的理解是指导 SurfaceFlinger 设计的核心思想,从 Android 4.1 一直到 Android 9.0 都没有太大的变化。只要抓住这五个核心思想,我们阅读 SurfaceFlinger 的难度就会下降不少。下面看一下 SurfaceFlinger 的体系和 Skia 以及 View的绘制流程的关系。framework 面向开发者所有的 View 是便于开发的控件,里面仅仅只是提供了当前 View 各种属性以及功能。

小旭的专栏 2584

Java SSH框架学习

Java SSH框架学习

私信可回答各种问题~ 1793

为日均服务十亿人次做准备,美团数据团队如何走在业务前想问题

“你每一次花钱,都是在为自己想要的生活投票。” 2010年3月4日,美团网站上线当天,美团创始人兼CEO王兴发出了这样一条微博,希望以“吃”为核心,去打造一个帮大家吃得更好,生活更好的全方位生活服务平台。 当然,要协调日订单已经突破3000万单的外卖配送以及包括快驴、买菜、单车、酒旅在内的多个业务线,一个稳定、强大的数据基础架构必不可少。 王兴给美团定的下一个目标是每天服务十亿人次,这个并发量对美团数据团队来说,将是不小的挑战。但同时,为了应对异常复杂的业务场景,保证跟技术的极致融合,美团数据团队也发展出.

Dou_Hua_Hua的博客 1024

Kalibr 安装+制作采集的图片和IMU数据生成 .bag 文件 (坑最全,解决方法最简单,最详细哈哈)

方法一、Kalibr标定工具实现 开源代码连接:https://github.com/ethz-asl/kalibr 1.1 创建工作空间 ——下载程序——编译 mkdir -p ~/kalibr_workspace/src cd /kalibr_workspace/src git clone https://github.com/ethz-asl/Kalibr.git cd .. //返回上一级 catkin_make source devel/setup.bash ......

努力努力努力 6939

实时抽hbase数据_合集 大厂大数据应用实践

“文章出自公众号【DataFunTalk】美团▪美团外卖流量数据的采集加工和应用▪美团外卖实时数仓建设实践▪美团外卖离线数仓建设实践▪美团 Flink 实时数仓应用经验分享▪Druid SQL和Security在美团的实践阿里▪菜鸟实时数仓2.0进阶之路▪Flink1.11+Hive批流一体数仓▪阿里巴巴电商搜索推荐实时数仓演进之路▪优酷大数据OLAP技术选型▪深入分析 Flink SQ...

weixin_39829166的博客 471

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

大数据成败之“监”:美团数据质量监管平台这样搭建

http://www.sohu.com/a/227310642_411876 背景 数据,已经成为互联网企业非常依赖的新型重要资产。数据质量的好坏直接关系到信息的精准度,也影响到企业的生存和竞争力。 Michael Hammer(《Reengineering the Corporation》一书的作者)曾说过,看起来不起眼的数据质量问题,实际上是拆散业务流程的重要标志。 数据质量...

317

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

大数据架构相关资料

收藏一些大厂大数据架构相关资料 美团外卖流量数据的采集加工和应用 https://mp.weixin.qq.com/s/HoEjcTSLHclIl7fc-3uxaA

fzyedu1111的博客 435

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

美团大数据开发校招面经:从Spark调优到数仓建模的实战复盘

大数据开发的核心是构建稳定高效的数据管道,涵盖采集、存储、计算与建模全链路。Spark与Flink作为批流计算的主流引擎,其作业调度、Shuffle机制及Checkpoint原理,直接决定任务性能与可靠性;而Kafka削峰填谷、数据仓库分层建模及数据倾斜治理,则是海量数据场景下必须掌握的工程能力。这些技术原理不仅支撑着美团外卖、到店等业务每日千亿级日志的实时分析与离线统计,也是校招面试中考察候选人实战思维的高频考点。本文以2024届美团大数据开发工程师真实面经为基础,梳理从笔试算法到技术面追问的完整准备路径

weixin_34199405的博客 376

各大厂大数据精品分享汇总(进阶版)

关注公众号,在微信端打开。

3153

中台的分类及实时数据中台构建

中台的种类 1.技术中台(基础服务中台) 技术中台指的是将大家都通用的技术能力聚合到一起,由同一个团队负责,防止重复造轮子,是最容易实现的中台化。核心价值是降成本。 各公司的基础服务,以账号体系为代表,都已经是中台化的了。淘宝、天猫、飞猪等业务之间,快车、专车、顺风车等业务之间,美团外卖、酒旅、团购之间,必然要做打通。 2.数据中台 顾名思义,表面上数据中台是各业务的数据能够打通。不过在实际运用中,又分为多种。数据中台的本质就是“数据仓库+数据服务中间件+实时性”。基本的数据采集、数据仓库建立和数据

BabyFish13 1563
上一篇: 爱了爱了!0.052 秒打开 100GB 数据,这个Python开源库火爆了!
下一篇: “25岁该有多少存款? ” 数据分析带你揭露中国打工人的工资真相
Wang_AI
博客等级 码龄12年 996粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值