中国石油笔记 数据架构数据源的注册物理模型的设计结束之后才能在数据工厂进行数据的编排。数据工厂完全基于数据模型来集成作业的配置以上可能没多大用初始点击号可创建目录可在目录下创建集成作业点击目录在右侧会出现目录下的那些已有集成作业点击新建作业打开如图界面数据类型结构化有固定表结构的数据非结构化没有固定表格结构的数据。比如图片、PDF、word、excel、视频、音频集成类型多表单表集成方式批处理流处理结构化数据在迁移系统里怎么用比如你要把源库的一张表source_well_info迁移到目标库target_well_info源表字段源字段含义well_no井号well_name井名oilfield油田目标表字段目标字段含义well_id井IDname井名称oilfield_name油田名称那迁移系统里就会配置字段映射source_well_info.well_no → target_well_info.well_idsource_well_info.well_name → target_well_info.namesource_well_info.oilfield → target_well_info.oilfield_name对应 SQL 思维就是select well_no as well_id, well_name as name, oilfield as oilfield_name from source_well_info;非结构化数据迁移是什么非结构化迁移通常不是“字段映射”而是“文件搬运”。比如从 A 文件服务器迁移到 B 文件服务器或者从源系统的附件目录迁移到目标系统的对象存储 / 文件系统它关心的可能是文件路径文件名文件大小文件类型创建时间所属业务ID举个例子file_idfile_namefile_pathbusiness_idF001井场照片.jpg/upload/2024/01/a.jpgW001F002生产日报.pdf/upload/2024/01/b.pdfW002这里有两层第一层文件本身井场照片.jpg生产日报.pdf这是非结构化数据。第二层文件的登记信息file_idfile_namefile_pathbusiness_id这是结构化数据。所以实际项目里经常是结构化数据 非结构化附件 一起迁移比如迁移一口井的信息同时迁移这口井相关的照片、PDF、附件。集成类型单表1. 什么是单表单表就是这次迁移只处理一张源表到一张目标表。比如源表well_info目标表t_well_info只从一张源表取数据不需要关联其他表。例子select well_id as id, well_name as name, oilfield_name as oilfield, status as state from well_info;这里就只有一张表well_info这种就是单表集成 / 单表迁移。单表适合什么情况适合字段基本都在一张表里的情况。比如源表已经很完整well_idwell_nameoilfield_namestatuscreate_timeW0011号井高升油田正常2024-01-01W0022号井高升油田停产2024-01-02目标表也只是换一下字段名idnameoilfieldstatecreated_at那就可以单表迁移select well_id as id, well_name as name, oilfield_name as oilfield, status as state, create_time as created_at from well_info;这就是最简单、最适合新手先掌握的迁移方式。集成类型多表1. 什么是多表多表就是这次迁移需要从多张源表取数据经过关联、拼接、转换后写入目标表。比如目标表需要这些字段目标字段来源well_id井基础表well_name井基础表oilfield_name油田表daily_oil日产表prod_date日产表这些字段不在一张表里。可能来自三张表那就需要多表关联。多表集成通常要写 join比如select a.well_id as well_id, a.well_name as well_name, c.oilfield_name as oilfield_name, b.prod_date as prod_date, b.daily_oil as daily_oil from well_info a inner join production_daily b on a.well_id b.well_id inner join oilfield_info c on a.oilfield_id c.oilfield_id;集成方式批处理1. 什么是批处理批处理就是按照某个时间点或周期一批一批地搬数据。比如每天凌晨 2 点跑一次每小时跑一次手动点执行一次一次迁移昨天的数据一次迁移某个月的数据它不是数据一变化就马上同步而是按批次处理。集成方式流处理什么是流处理流处理就是数据一产生、一变化就尽快同步或处理。适合对实时性要求高的场景。名称你可以怎么理解典型例子结构化数据库表有行有列井信息表、日产表、组织机构表非结构化文件没有固定行列图片、PDF、Word、视频、附件单表只从一张表取数据well_info → t_well多表多张表关联后取数据日产表 join 井表 join 油田表批处理一批一批处理每天凌晨同步昨天数据流处理来一条处理一条设备实时数据、实时报警当前版本不用填写五层数据这五个选项数据源头、贴源层、共享层、分析层、应用层不是普通数据库名字而是数据平台里的“五个数据层级”。数据通常从下往上流动数据源头 → 贴源层 → 共享层 → 分析层 → 应用层。教程选的是源端共享层目标端分析层意思就是从“已经标准化、可复用的公共数据”里取数据再加工成“面向分析场景的数据”。数据层级类比做饭数据状态数据源头菜市场、原材料产地最原始的数据贴源层把菜买回来原样放进厨房尽量保持原样的数据共享层洗菜、切菜、去重、统一标准标准化、可复用的数据分析层按菜谱加工成半成品菜面向分析主题的数据应用层最终端上桌的菜给具体系统、报表、页面用的数据数据源头数据源头就是数据最开始产生的地方。比如油田业务里数据可能来自生产系统井控系统设备采集系统作业管理系统这些系统就是“数据源头”。举个例子某个采油厂每天在业务系统里录入日产数据这个数据最开始是在业务系统里产生的那么那个业务系统就是数据源头。数据源头一般有这些特点原始分散格式不统一字段命名不统一质量不一定好可能有脏数据可能来自不同厂商系统比如不同系统里井号可能叫well_idwell_nojh同一个含义不同系统字段名不一样。这就是为什么后面要有贴源层、共享层、分析层。贴源层贴源层可以理解成把数据源头的数据尽量原样复制一份到数据平台里。也就是说源系统里字段是什么样贴源层尽量就是什么样。贴源层主要做抽取源数据保留原始字段保留原始记录少量清洗增加采集时间、批次号等技术字段为什么不直接从数据源头进共享层或分析层原因是要保留原始数据方便追溯。比如后面分析结果错了你需要查到底是源系统数据就错了还是贴源时错了还是共享层清洗错了还是分析层加工错了共享层共享层是把贴源层的数据清洗、统一、标准化之后形成大家都能复用的数据。共享层解决什么问题比如不同源系统里都有“井”的信息同一个东西字段名和写法都不一样。共享层要把它统一成标准形式为什么叫“共享层”因为它不是只服务某一个报表或某一个应用。它可以被多个下游使用分析层可以用应用层可以用报表可以用接口可以用其他项目也可以用分析层分析层是面向具体分析主题加工出来的数据。从共享层到分析层会发生什么共享层里可能有很多标准表分析层会根据某个分析目的把这些表组合起来。例如要做“单井日产分析”目标表可能需要字段来源well_id井基础表well_name井基础表oilfield_name油田表plant_name组织机构表prod_date日产表daily_oil日产表daily_water日产表water_cut计算字段SQL 思路可能是select a.well_id, b.well_name, c.oilfield_name, d.plant_name, a.prod_date, a.daily_oil, a.daily_water, case when a.daily_liquid 0 then null else a.daily_water / a.daily_liquid end as water_cut from shared_production_daily a inner join shared_well_info b on a.well_id b.well_id inner join shared_oilfield_info c on b.oilfield_id c.oilfield_id inner join shared_org_info d on b.org_id d.org_id;应用层应用层就是最终给具体应用、页面、接口、报表使用的数据。表映射哪张源表的数据要写到哪张目标表字段映射一般点进“详细配置”后会配置源字段 → 目标字段比如WELL_ID → WELL_IDWELL_NAME → WELL_NAMEPROD_DATE → STAT_DATEDAILY_OIL → OIL_QTY共享层转分析层案例如图选择共享层的一个库分析层的一个库然后把源端库和目标库连线。源端一些数据集的名字会变得加粗是因为源库和目标库有同名的表点击猜一猜就会连线但连线有时看得不清晰所以右侧表映射可以较清楚地看出。疑惑但是你看这个图里选择共享层和分析层那我的理解就是共享层数据是存在的分析层数据是不存在的可是如图这个图里为什么会共享层和分析层连接起来的两个库下面有很多同名数据集解答共享层和分析层下面出现很多同名数据集很正常因为它们不是同一个东西。左边是共享层 / chl-mysql / 源表右边是分析层 / chl-Doris / 目标表表名一样只代表系统可能在做共享层的表 → 分析层的同名表目标端分析层下面有同名数据集通常说明目标表结构已经提前建好了系统自动按源表名生成了目标表名之前可能已经同步过所以目标表也存在同名不代表里面一定有数据。关键区别是表存在 ≠ 表里有数据。要判断分析层表里有没有数据要看数据预览或执行select count(*) from 目标表;所以你的理解要改成共享层是这次读取数据的源端分析层是这次写入数据的目标端。目标端可以提前有同名表用来接收同步/迁移后的数据。映射如果有不是同名的也想做映射把同名映射连线删除把想做映射的两个数据源连线详情配置源端策略加一些统一的查询条件新增条件-生成脚本如果所有原表都有update_date字段可以写一个统一的查询条件就会新增一个where条件加在原表所有select语句后面还可以新增源字段即所有表都必须有的字段目标端策略1.目标字段统一处理2.插入更新配置3.统一新增删除条件选择删除后插入的情况可使用先执行delete操作把符合条件的数据删除然后再执行源端数据插入目标端数据的操作运行策略调度策略需要周期性调度就必须勾选-周期性调度生效秒、分钟、小时、天、月、年可以联动设置。例在日里设置从1号开始每1日执行一次此时默认每天000执行可去小时里指定1和5可多选就变成了每天100和500执行一次。所有的配置完后点击保存来到这个界面每个作业名称后面的数字就代表这个作业下面有几个表多张表就是多表作业打开3张表的作业如图单表模式某些场景源表和目标表是异构的做字段映射这时候就用到单表模式新建作业单表模式源端和目标端就都只能选一张表。先在源端选择一张表点击设为源再在目标端选择一张表点击设为目标字段不想做映射可以点击连线删掉可以通过拉线的方式给不同名的字段作映射详情设置-源端策略全量和增量在数据迁移/数据同步里全量和增量是在问这次从源表里取多少数据1. 全量是什么意思全量 每次都把源表所有数据都取出来。比如源表X_TP_ACH_DST里有 100 万条数据。选择全量时任务每次执行都会读select * from X_TP_ACH_DST;也就是不管这些数据以前有没有同步过都重新取一遍。全量适合什么情况适合第一次迁移 数据量不大 目标表需要整体重刷 源表没有更新时间字段 不方便判断哪些是新增/修改数据比如第一次把 MySQL 的表同步到 Doris通常会先跑一次全量。2. 增量是什么意思增量 只取新增或变化的数据。比如昨天已经同步过 100 万条今天源表新增/修改了 500 条。选择增量时任务只同步这 500 条。常见 SQL 思路是select * from X_TP_ACH_DST where UPDATE_DATE 上次同步时间;你图里左侧出现了UPDATE_DATE这个就很像增量字段。它的作用是告诉系统根据 UPDATE_DATE 判断哪些数据是后来新增或修改的。3. 用一个例子理解源表IDNAMEUPDATE_DATE1A2025-09-15 10:00:002B2025-09-15 11:00:003C2025-09-16 09:00:00假设上次同步时间是2025-09-15 23:59:59如果选全量同步 ID1、2、3全都同步如果选增量只同步 ID3因为只有 ID3 的UPDATE_DATE晚于上次同步时间。4. 图里的“自动计算”和“自定义”是什么你图里增量下面还有自动计算 自定义一般含义是自动计算系统自己记录上次同步到哪里了。比如系统记住上次同步到 UPDATE_DATE 2025-09-15 23:59:59下次自动拼条件where UPDATE_DATE 2025-09-15 23:59:59自定义你自己指定增量条件。比如where UPDATE_DATE 2025-09-16 00:00:00或者指定某个时间范围。后面的三个策略和多表模式一样作业配置完成之后点击监控按钮点击立即执行。注意列表不是实时刷新点击查询刷新运行成功后操作-查看详情来到这里给作业执行作业才会开始周期性调度