一、实验说明

1.1实验目的

基于"数智教育"大赛公开数据集,设计实现学生多维度考勤统计助睿ETL转换流,掌握ETL数据处理全流程(数据接入、跨表关联、字段衍生、数据聚合、结果落地),解决校园考勤人工统计效率低、口径不统一的问题;结合数据集实际特征优化空值处理逻辑,保障转换流稳定运行,输出精准多维度考勤统计结果,为校园精细化考勤管理提供数据支撑。

1.2实验环境

实验工具:助睿零代码在线实验平台(地址:https://lab.guilian.cn/

助睿数智(Uniplore)平台覆盖数据接入、ETL处理、机器学习建模到可视化展示全链路零代码功能,适配数据分析教学与企业数据加工场景。(官网:https://www.uniplore.com/

实验数据源:"数智教育"大赛官方数据集。

1.3实验范围

本次实验覆盖助睿ETL转换流完整配置流程,包括多源数据表接入、跨表数据关联、考勤行为标签衍生、多维度聚合统计及结果落地存储;重点验证数据关联精度与统计指标准确性,结合数据集分布特征动态优化配置参数,保障实验顺利完成。

二、转换流整体设计

2.1功能用途与业务价值

本ETL转换流替代传统人工Excel统计方式,构建原始打卡数据到标准化结果的全自动化闭环处理链路,可批量生成多维度考勤分析指标。通过固化考勤统计规则与计算口径,大幅提升数据处理效率,沉淀可追溯的标准化考勤台账,为校园考勤管理提供数据支撑;同时具备良好扩展性,新增考勤类型无需修改核心转换逻辑,可快速适配校园考勤各类核心需求。

2.2核心处理逻辑

三、数据与标签梳理

3.1源数据说明

本次实验数据来源于"数智教育"大赛公开数据集,共包含7张独立业务数据表:

1_teacher.csv:教师信息

2_student_info.csv:学生信息

3_kaoqin.csv:考勤主表

4_kaoqintype.csv:考勤类型码表

5_chengji.csv:成绩信息

6_exam_type.csv:考试类型

7_consumption.csv:消费信息

围绕"学生考勤"核心主题,筛选出3张与考勤行为直接相关、支撑多维度分析的核心数据表,共同构成"事实表+维度表+属性表"的标准星型数据模型,各表核心作用与关键字段如下:

3.2标签体系设计

学生考勤主题标签分为三类:学生基础属性标签、学生画像维度标签、考勤行为统计标签。

3.2.1学生基础属性标签

选表依据:上述字段为学生基础身份信息,主要从2_student_info表提取,考勤主表信息可用于交叉验证,是后续多维度统计分析的核心基础。

示例用途:按性别分析男女生迟到率差异,按政治面貌对比不同群体整体考勤特征。

3.2.2学生画像维度标签

选表依据:上述标签为衍生分析维度,需基于班级名称和住校字段二次加工;年级维度支撑分层管理,住校维度区分不同考勤模式群体,校区维度适配新旧校区管理差异。

示例用途:分析走读生与住校生迟到概率差异,对比新旧校区校服规范执行情况。

3.2.3考勤行为统计标签

选表依据:上述四类异常考勤是学生日常管理核心关注点;迟到早退反映纪律意识,请假区分正常/异常缺勤,校服穿戴是行为规范考核项;”校服[移动考勤]”特指未穿校服违规。

示例用途:综合学生各类异常考勤次数,评估其考勤风险等级。

3.3标签处理口径

为保证统计结果准确、一致、可比,统一固化所有标签计算口径:

3.3.1基础属性字段处理口径

3.3.2衍生维度字段处理口径

3.3.3考勤行为指标统计口径

统计口径设计理由:

排除请假记录:请假属于正常缺勤,不计入迟到早退统计,避免重复计数与误判

请假类型全覆盖:所有含"请假"关键词的记录均计入,统一统计标准

校服违规唯一识别:含"校服"关键词的记录均视为未穿校服违规,符合数据集定义

四、实验步骤

4.1 创建实验项目

1.在助睿 ETL 平台主界面点击 “新建项目” 按钮。

2.在弹出的输入框中填写项目名称 “学生用户画像标签构建”,点击 “确定” 完成项目创建。

3.创建成功后,系统会自动跳转至数据集成页面,在项目列表中可以看到刚刚生成的新项目。

4.2 数据资源获取

为了便于后续数据处理与管理,本步骤将把实验所需的原始数据导入到 “团队私有数据库” 中。

1.首先点击新建项目右上角的 “…” 按钮,选择 “打开项目” 进入项目详情页。项目页面左侧包含三个核心菜单:

  • 资源库:用于工作流的全生命周期管理,包括新建、修改、删除、查看工作流信息,以及工作空间的导入导出和调度管理
  • 文件库:用于存储工作流运行所需的输入文件和生成的输出文件
  • 元数据:是助睿 ETL 平台的核心基础,用于配置数据库连接、Flink 集群等运行环境参数

4.2.1获取实验数据集

首先需要将公共空间中的实验数据集导入到项目文件库中:

1.点击左侧菜单栏的 “文件库”,右键点击根目录选择 “新建目录”。

2.输入目录名称 “数智教育数据集” 并点击 “确定”。

3.切换到 “公共空间” 页面。

4.点击 “数据资源” 选项卡。

5.找到 3_kaoqin.csv 数据表,点击其右上角的 “更多” 按钮,选择 “导出”。

6.选择导出到刚才创建的目录下,点击 “确定” 导出。

7.重复上述导出操作,依次将 4_kaoqintype.csv 和 2_student_info.csv 两张数据表也导出到 “数智教育数据集” 目录下。

4.2.2 建立数据源连接

在导入数据到数据库之前,需要先建立与 “团队私有数据库” 的连接。

1.点击左侧菜单栏的 “元数据”,右键点击 “关系数据库” 选择 “新建数据源”。

2.在弹出的新建数据库连接窗口中,按以下参数进行配置:

    • 连接类型:MySQL
    • 服务器主机名:rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com
    • 端口号:3306
    • 数据库名:使用助教提供的数据库名称
    • 用户名:使用助教提供的账号
    • 密码:使用助教提供的密码
    • 驱动类型:MySQL 8+
    • 连接名称:团队私有数据库

3.填写完成后点击 “测试” 按钮验证连接信息,当系统提示 “数据库连接成功” 后,点击 “添加” 完成数据源创建。

4.创建成功后,“关系数据库” 节点下会新增一个名为 “团队私有数据库” 的子节点。

4.2.3 数据导入团队私有数据库

本步骤将把文件库中的三张 CSV 数据表分别导入到 “团队私有数据库” 中,每张表的导入都分为创建数据表和导入数据两个环节。

4.2.3.1 原始考勤记录表数据导入

1.创建原始_学生考勤表

新建转换工作流,命名为 “创建原始_学生考勤表”

在工作流画布中拖拽 “执行一个 SQL 脚本” 组件

双击组件进行配置:选择数据库连接为 “团队私有数据库”,在脚本编辑区输入创建 raw_attendance 表的 SQL 语句。其他参数保持默认,点击 “确定” 。

参考SQL语句:

运行转换流,完成数据表创建。

2.导入原始考勤数据

新建转换工作流,命名为 “导入原始考勤数据”

拖拽 “CSV 文件输入” 组件到画布,双击组件设置步骤名称为 “考勤记录”

点击 “浏览文件” 按钮,选择 “数智教育数据集” 目录下的 3_kaoqin.csv 文件

列分隔符和封闭符使用默认值,编码设置为 “UTF-8”

下滑至字段表格,右键点击空白处选择 “获取字段”,确认后完成组件配置

拖拽 “表输出” 组件到画布,建立 “CSV 文件输入” 到 “表输出” 的主输出连线

双击 “表输出” 组件:选择数据库连接为 “团队私有数据库”,目标表设置为 “raw_attendance”

切换到 “数据库字段” 标签页,右键点击空白处选择 “获取字段”,将表字段修改为与建表语句对应的字段名。

确认后运行转换流,完成原始考勤数据的导入。

4.2.3.2 原始考勤类型表数据导入

参照原始考勤记录表的导入流程,完成原始考勤类型表的数据导入。

新建转换工作流 “创建原始_考勤类型表”,使用 “执行一个 SQL 脚本” 组件执行创建 raw_attendance_type 表的 SQL 语句,运行转换流完成表创建。

新建转换工作流 “导入原始考勤类型数据”,拖拽 “CSV 文件输入” 组件选择 4_kaoqintype.csv 文件。

特别注意:该表的列分隔符需要设置为 “插入制表符(TAB)”,编码设置为 “GB2312”

获取字段后添加 “表输出” 组件,配置目标表为 “raw_attendance_type”,完成字段映射后运行转换流导入数据。

4.2.3.3 原始学生基本信息表数据导入

参照原始考勤记录表的导入流程,完成原始学生基本信息表的数据导入:

新建转换工作流 “创建原始_学生信息表”,使用 “执行一个 SQL 脚本” 组件执行创建 raw_student_info 表的 SQL 语句,运行转换流完成表创建。

新建转换工作流 “导入原始学生信息数据”,拖拽 “CSV 文件输入” 组件选择 2_student_info.csv 文件

获取字段时,将 “bf_leaveSchool” 字段的类型修改为 “String”

特别注意:为避免 bf_zhusu 和 bf_qinshihao 字段出现小数,需要添加 “字段选择” 组件进行数据类型固化。

建立 “CSV 文件输入” 到 “字段选择” 的主输出连线。

双击 “字段选择” 组件,切换到 “元数据” 标签页,插入两行分别设置 bf_zhusu 和 bf_qinshihao 字段的元数据为整数类型。

添加 “表输出” 组件,配置目标表为 “raw_student_info”,完成字段映射后运行转换流导入数据。

4.2.4 创建学生考勤主题标签表

为了存储最终的多维度考勤统计结果,需要创建专门的学生考勤主题标签表。

1.新建转换工作流,命名为 “创建学生考勤主题标签表”。

2.在画布中拖拽 “执行一个 SQL 脚本” 组件

3.双击组件进行配置:选择数据库连接为 “团队私有数据库”,在脚本编辑区输入创建 student_attendance_stats 表的 SQL 语句,点击“确认”。

4.运行转换流,完成标签表的创建。

4.3 学生考勤主题标签构建

4.3.1 数据转换流逻辑说明

本转换流遵循 “数据接入 — 清洗整合 — 维度拆解 — 标签标记 — 指标计算 — 结果落地” 的核心处理逻辑:

数据接入:读取数据库中的考勤原始打卡表、考勤类型码表和学生信息基础表

数据整合:通过多表关联为原始打卡记录补充学生班级、住校属性和考勤事件名称

标签标记:通过关键词匹配自动识别迟到、早退、请假、未穿校服等考勤行为

指标计算:按学生维度聚合统计各类异常考勤的累计次数

结果落地:将统计结果统一写入学生考勤主题标签表,供后续查询和分析使用

转换流中各核心组件的作用如下:

整体逻辑:

4.3.2 数据接入:获取考勤记录、考勤类型数据、学生信息数据

首先需要将三张核心数据表接入到转换流中:

1.点击左侧菜单栏的 “资源库”,右键点击根目录选择 “新建转换流”。

2.输入转换流名称 “学生考勤主题标签” 并点击 “确定”。

3.进入转换流设计页面后,点击右上角的锁定图标解锁画布。

4.在组件库中搜索 “表输入”,拖拽三个 “表输入” 组件到画布中。

5.别双击三个组件进行配置:

第一个组件命名为 “考勤记录”,选择数据库连接为 “团队私有数据库”,点击 “获取 SQL 查询语句” 选择 raw_attendance 表。

第二个组件命名为 “考勤类型”,选择数据库连接为 “团队私有数据库”,获取 raw_attendance_type 表的查询语句。

第三个组件命名为 “学生信息”,选择数据库连接为 “团队私有数据库”,获取 raw_student_info 表的查询语句。

4.3.3 数据关联:关联考勤记录 + 考勤类型

由于考勤记录表中只有考勤类型 ID 和考勤任务顺序 ID,缺少具体的考勤行为名称,需要将考勤记录表与考勤类型码表进行关联。

1.在组件库中搜索 “记录集连接” 并拖拽到画布中。

2.在建立 “考勤记录” 到 “记录集连接” 的连线时,系统会提示需要对数据进行排序。因此在 “考勤记录” 和 “记录集连接” 之间添加一个 “排序记录” 组件。

3.双击 “排序记录” 组件,设置步骤名称为 “按照考勤类型和考勤任务类型排序”,获取字段后只保留 “attendance_type_id” 和 “attendance_task_order_id” 两个排序字段。

4.建立 “考勤类型” 到 “记录集连接” 的连线(考勤类型表已按关联字段排序,无需额外排序)。

5.双击 “记录集连接” 组件:第一个 Transform 选择 “按照考勤类型和考勤任务类型排序”,第二个 Transform 选择 “考勤类型”,连接类型选择 “LEFT OUTER”。

6.分别获取两个 Transform 的连接字段,只保留 “attendance_type_id” 和 “attendance_task_order_id”,确认后完成关联配置。

4.3.4 行为标签衍生:统计学生异常考勤次数

通过 JavaScript 脚本对关联后的考勤记录进行处理,生成各类异常考勤行为的二进制标记,为后续聚合统计做准备:

1.在组件库中搜索 “JavaScript 代码” 并拖拽到画布中,建立 “记录集连接” 到 “JavaScript 代码” 的主输出连线。

2.双击该组件设置步骤名称为 “提取异常考勤记录”,在脚本编辑区输入用于判断迟到、早退、请假和未穿校服行为的 JavaScript 代码。

脚本代码如下:

3.点击 “获取变量” 按钮自动解析脚本中定义的输出字段。

4.点击 “测试脚本” 按钮验证标记逻辑的正确性,确保输出字段只有 1 和 0 两个值,确认后完成配置。

4.3.5 多维度分组聚合统计

将生成的行为标记按学生维度进行分组聚合,计算每位学生的各类异常考勤累计次数:

1.在组件库中搜索 “分组” 并拖拽到画布中,建立 “JavaScript 代码” 到 “分组” 的主输出连线。

2.双击 “分组” 组件,设置分组字段为 “stu_id”、“stu_name”、“cla_id” 和 “cla_name”。

3.设置聚合字段为“late_early_count”、“leave_count”、“no_uniform_count”、“compliant_count”、“total_attendance”,分别对应 “isLate”、“isEarly”、“isLeave” 和 “isNoUniform”,聚合函数均选择 “SUM”,分别对应迟到次数、早退次数、请假次数和没穿校服次数。

4.确认后完成分组配置。

4.3.6 关联学生信息

为了补全学生的基础属性信息,需要将聚合后的考勤统计结果与学生信息表进行关联:

1.添加一个 “排序记录” 组件,建立 “学生信息” 到该组件的连线,双击组件设置步骤名称为 “按照学生编号进行排序”,排序字段设置为 “stu_id”。

2.再添加一个 “排序记录” 组件,建立 “分组” 到该组件的连线,双击组件设置步骤名称为 “考勤数据按学号排序”,排序字段也设置为 “stu_id”。

3.添加一个 “记录集连接” 组件,分别建立两个排序组件到该记录集连接的连线。

4.双击 “记录集连接” 组件:第一个 Transform 选择 “考勤数据按学号排序”,第二个 Transform 选择 “按照学生编号进行排序”,连接类型选择 “LEFT OUTER”,连接字段均设置为 “stu_id”。

5.确认后完成关联配置。

4.3.7 字段选择:移除冗余字段

经过多轮关联和处理后,数据中包含了大量冗余字段,需要进行清理以提升后续处理效率。

1.在组件库中搜索 “字段选择” 并拖拽到画布中,建立 “记录集连接” 到 “字段选择” 的主输出连线。

2.双击该组件设置步骤名称为 “移除冗余字段”,切换到 “移除” 标签页。

右键点击空白处选择 “获取字段”,然后删除除了学生 ID、学生姓名、班级 ID、班级名称、迟到次数、早退次数、请假次数、没穿校服次数、性别、出生日期、政治面貌和是否住校之外的所有字段。

3.配置完成后可以右键点击组件选择 “显示输出字段”,验证保留的字段是否正确。

4.3.8 空值处理

由于原始数据中存在部分空值,需要进行统一处理以保证数据的一致性。

1.在组件库中搜索 “替换 NULL 值” 并拖拽到画布中,建立 “字段选择”(移除冗余字段) 到 “替换 NULL 值” 的主输出连线。

2.双击该组件,勾选 “选择字段”。

3.在字段表格中插入四行,分别将 “stu_sex”、“born_date”、“policy” 和 “live_on_campus” 字段的空值替换为 “未知”。

4.3.9 学生基础属性标准化处理

经过多表关联与字段筛选后,原始数据中部分字段为编码形式,且缺少年级、校区类型等画像分析必需字段,需要进行标准化处理。

4.3.9.1 住校状态映射

原始数据中的住校状态是以数字编码形式存储的,可读性较差,需要转换为规范的文本值。

1.在组件库中搜索 “值映射” 并拖拽到画布中,建立 “替换 NULL 值” 到 “值映射” 的主输出连线。

2.双击该组件设置步骤名称为 “住校状态映射”,使用的字段名为 “live_on_campus”,不匹配时的默认值设置为 “否”。

3.在字段值表格中插入两行,分别将源值 “0” 映射为目标值 “否”,源值 “1” 映射为目标值 “是”。确认后完成映射配置。

4.3.9.2 从班级名提取年级

原始数据中没有独立的年级字段,需要从班级名称中提取年级信息以支撑按年级的考勤分析:

1.在组件库中搜索 “JavaScript 代码” 并拖拽到画布中,建立 “值映射” 到 “JavaScript 代码” 的主输出连线。

2.双击该组件设置步骤名称为 “从班级提取年级”,在脚本编辑区输入用于从班级名称中提取年级的 JavaScript 代码。

3在下方的字段表格中插入一行,设置字段名称为 “gra_name”,类型为 “String”,确认。

4.3.9.3 校区类型判定

为了支撑按校区的考勤分析,需要根据班级名称的前缀特征判定校区类型。

1.在组件库中搜索 “JavaScript 代码” 并拖拽到画布中,建立 “从班级提取年级” 组件到该组件的主输出连线。

2.双击该组件设置步骤名称为 “校区类型判定”,在脚本编辑区输入用于判定校区类型的 JavaScript 代码。

3.在下方的字段表格中插入一行,设置字段名称为 “class_campus_type”,类型为 “String”。

4确认后完成配置.

4.3.10 结果入库

将最终处理完成的考勤统计结果写入到学生考勤主题标签表中。

1.在组件库中搜索 “表输出” 并拖拽到画布中,建立 “校区类型判定” 组件到 “表输出” 的主输出连线

2.双击 “表输出” 组件,选择数据库连接为 “团队私有数据库”,目标表设置为 “student_attendance_stats”。

勾选 “裁剪表” 选项,这样在插入数据前会清空表中的原有数据,避免重复插入。

勾选 “指定数据库字段” 选项,切换到 “数据库字段” 标签页。

3.右键点击空白处选择 “获取字段”,然后将工作流字段与数据库表字段一一对应。

4.确认后完成表输出配置。

4.3.11 执行工作流

所有组件配置完成后,执行转换流。点击工具栏中的 “执行” 按钮,在弹出的执行配置窗口中使用默认配置,点击 “启动” 按钮运行转换流。

五、实验结果

1.转换流运行过程中可以在画布下方查看实时执行日志,监控运行状态。

2.运行完成后,切换到 “元数据” 标签页,右键点击 “团队私有数据库” 连接选择 “加载元数据”。

3.展开数据库连接后双击 “student_attendance_stats” 表,在右侧页面切换到 “查询” 标签页。

4.查看表中的数据是否符合预期,验证实验结果的正确性。

六、问题与解决

问题 1:

导入 4_kaoqintype.csv 考勤类型表时出现中文乱码且字段全部错位。

现象

导入原始考勤类型数据后,查询 raw_attendance_type 表发现 attendance_type_name、attendance_task_name 字段显示为乱码,且所有字段值错位,部分行出现空值。

原因

该 CSV 文件采用制表符(TAB)作为列分隔符,编码格式为 GB2312,而默认配置使用逗号作为分隔符、UTF-8 编码,导致字段解析错误和中文乱码。

解决方法

双击 "CSV 文件输入" 组件,将 "列分隔符" 设置为 "插入制表符(TAB)"。

将 "编码" 选项从 "UTF-8" 修改为 "GB2312"。

重新获取字段并验证字段数量和类型是否与源文件一致。

重新运行转换流完成数据导入。

问题 2:

记录集连接后数据大量丢失,考勤记录数大幅减少。

现象:

考勤记录与考勤类型表关联后,输出记录数从 23630 条骤降至不足 1000 条,大量原始打卡记录丢失。

原因:

助睿 ETL 平台的 "记录集连接" 组件要求两个输入数据集必须严格按照关联字段升序排序,未排序的数据集会导致连接逻辑异常,左连接退化为内连接。

解决方法:

在 "考勤记录" 组件后添加 "排序记录" 组件。

设置排序字段为attendance_type_id和attendance_task_order_id,均为升序。

确认 "考勤类型" 表已按关联字段排序(原始表已按主键排序,无需额外处理)。

重新配置记录集连接,连接类型保持 "LEFT OUTER",确保所有考勤记录都被保留。

七、实验总结

7.1 实验完成情况

本次实验基于助睿零代码 ETL 平台,成功完成了学生考勤主题标签构建的全流程任务:

完成了 3 张核心业务表(考勤主表、考勤类型码表、学生信息表)的数据导入。

构建了完整的 ETL 转换流,实现了数据接入、多表关联、行为标签衍生、多维度聚合统计和结果落地的自动化处理。

生成了标准化的学生考勤主题标签表student_attendance_stats,包含学生考勤统计记录,覆盖基础属性、衍生维度和行为指标三大类标签。

解决了数据导入乱码、记录集连接数据丢失、脚本空值异常等 5 类典型问题,保障了转换流的稳定运行和统计结果的准确性。

7.2 核心收获

掌握了 ETL 数据处理全流程:深入理解了 "数据接入 - 清洗整合 - 维度拆解 - 标签标记 - 指标计算 - 结果落地" 的核心逻辑,学会了使用零代码平台快速构建数据转换流。

建立了数据建模思维:掌握了 "事实表 + 维度表 + 属性表" 的星型数据模型设计方法,理解了数据关联的基本原则和注意事项。

明确了数据口径统一的重要性:通过固化考勤统计口径,解决了人工统计口径不一致的问题,保证了数据的可比性。

积累了数据质量处理经验:学会了空值统一替换、数据类型转换、编码格式适配等常见数据质量问题的处理方法,提升了数据处理的健壮性。

7.3 存在的不足

标签体系不够丰富:目前仅实现了基础的异常考勤次数统计,未构建考勤风险等级、考勤趋势变化等高级标签,无法支撑更深入的学生行为分析。

未实现增量数据处理:当前转换流为全量覆盖模式,每次运行都会清空历史数据重新计算,无法支持日常考勤数据的增量更新。

缺乏数据质量校验机制:转换流中未添加数据校验步骤,无法自动识别异常数据,可能影响统计结果的准确性。

未结合可视化分析:仅完成了数据统计和存储,未将结果与可视化工具结合,无法直观展示考勤数据的分布特征和趋势变化。

Logo

一站式 AI 云服务平台

更多推荐