全网最懂你的助睿ETL学生考勤标签构建保姆级攻略,和官方报告1:1精准对齐,无任何内容缩减,每一步都讲透、每一个配置都标清,小白也能跟着操作一次跑通,告别踩坑✅

🎯 实验开摆前先搞懂:我们到底要做啥?(不跳过!基础必看)

核心目标:基于3张原始数据表,通过助睿ETL平台,完成「数据接入→清洗整合→维度拆解→标签标记→指标计算→结果落地」全流程,最终生成规范的「学生考勤主题标签表」,实现学生考勤行为的多维度统计,支撑校园考勤管理和学生画像分析。

简单说:不用手动Excel统计,让系统自动算出每个学生的迟到、早退、请假次数,还能关联学生基础信息,直接生成可用的考勤台账,高效又精准!

🧩 核心三板斧:3张关键数据表(记牢!后续全靠它们)

表名(原文对应)

江湖身份(好记版)

核心关键字段

作用

3_kaoqin.csv

考勤主表(事实表)

学生ID、班级ID、打卡时间、考勤类型ID、班级名、学生姓名

记录每位学生每天的具体考勤行为,是所有统计的基础

4_kaoqintype.csv

考勤类型码表(维度表)

考勤类型ID、考勤类型名称、考勤事件ID、考勤事件名称

给考勤主表的“考勤类型ID”做翻译,明确每次考勤是“迟到”“早退”还是“没穿校服”

2_student_info.csv

学生信息表(属性表)

学生ID、姓名、性别、出生日期、政治面貌、是否住校、班级名、班级ID

补充学生基础属性,支撑“年级”“是否住校”“校区类型”等维度分析

🏷️ 三大类标签拆解(最终要输出的内容,提前有预期)

我们最终要构建的标签表,包含3大类标签,每一类都不能少,和原文完全一致:

  1. 基础属性标签:学生ID、学生姓名、班级ID、班级名称、性别、出生日期、政治面貌(从学生信息表和考勤主表提取)

  2. 画像维度标签:年级(从班级名称提取)、是否住校(从学生信息表映射)、校区类型(从班级名称判断)

  3. 考勤行为标签:迟到次数、早退次数、请假次数、没穿校服次数(通过考勤记录统计计算)

补充说明:标签口径和原文完全统一,比如“迟到次数”要排除请假记录,“没穿校服”直接识别考勤事件中的“校服”关键词,后续会详细讲配置方法。

🚀 第一步:创建项目+获取数据资源(5分钟搞定,超简单)

这一步的核心是“搭好实验环境”,把需要的项目和数据都准备好,每一步都要跟着做,不能跳!

1.1 创建实验项目

  1. 登录助睿ETL平台,找到页面上的「新建项目」按钮,点击进入创建页面

  2. 在“项目名称”输入框中,精准输入「学生用户画像标签构建」(不能改名字,后续操作要对应);

  3. 点击「确定」,创建成功后,在“数据集成”页面就能看到我们新建的项目,此时项目处于“未开启”状态,后续逐步完善。

温馨提示:创建后可以刷新页面,确认项目已显示,避免后续找不到项目白费功夫~

1.2 打开项目并熟悉页面布局

  1. 找到新建的「学生用户画像标签构建」项目,点击项目右上角的「…」,在弹出的菜单中选择「打开项目」;

  2. 打开后,页面左侧会显示3个核心菜单,记牢它们的作用,后续全要用:

    1. 资源库:管理工作流(新建、修改、运行转换流/作业流),是我们后续操作的核心区域;

    2. 文件库:保存工作流需要用到的原始文件(比如3张CSV表)和运行后产生的文件;

    3. 元数据:配置数据库连接、运行环境等,是“数据导入数据库”的关键前提。

1.3 获取实验数据集(把3张核心表导入项目)

我们需要把公共空间的3张原始CSV表,导入到我们项目的文件库中,方便后续使用,步骤如下:

  1. 点击左侧菜单「文件库」,右键点击“根目录”,在弹出的菜单中选择「新建目录」;

  2. 输入目录名称「数智教育数据集」,点击「确定」,此时文件库中会新增这个目录;

  3. 点击页面上方的「公共空间」,切换到公共空间的“数据资源”页面;

  4. 在数据资源列表中,找到「3_kaoqin.csv」(考勤主表),点击它右上角的「更多」,选择「导出」;

  5. 在弹出的“导出数据资源到项目空间”窗口中,选择导出路径为我们刚刚新建的「数智教育数据集」,点击「确定」;

  6. 等待导出完成,刷新文件库的「数智教育数据集」目录,会看到「3_kaoqin.csv」已导入;

  7. 重复步骤4-6,分别导出「4_kaoqintype.csv」(考勤类型表)和「2_student_info.csv」(学生信息表),确保3张表都成功导入到「数智教育数据集」目录中,缺一不可。

1.4 建立数据源连接(关键!不建连接无法导入数据库)

我们需要建立和“团队私有数据库”的连接,后续才能把CSV表的数据导入数据库,步骤和原文完全一致,参数不能错:

  1. 点击左侧菜单「元数据」,找到「关系数据库」,右键点击「关系数据库」,选择「新建数据源」;

  2. 在弹出的“数据库连接”窗口中,按以下参数配置:

    1. 连接名称:团队私有数据库;

    2. 连接类型:MySQL(下拉选择,不要选错);

    3. 用户名:;

    4. 密码:助教提供(按实际提供的密码填写,注意大小写);

    5. 服务器主机名:rm-2vc3qok06bag39a5n.mysql.cn-chengdu.rds.aliyuncs.com;

    6. 端口号:3306(MySQL默认端口,固定填写);

    7. 数据库名称:labs;

    8. 驱动类型:MySQL 8+(下拉选择,对应数据库版本)。

  3. 配置完成后,点击「测试」按钮,验证连接是否成功;

  4. 若弹出「数据库连接成功」的提示,说明配置正确,点击「添加」,完成数据源连接创建;若连接失败,检查参数是否输错,尤其是服务器主机名和密码。

补充:连接成功后,「关系数据库」节点下会新增「团队私有数据库」子节点,后续所有数据库操作都用这个连接。

📥 第二步:创建原始表+导入数据(核心步骤,SQL直接复制)

这一步是“把CSV文件的数据,导入到数据库中”,需要先创建3张原始表(对应3张CSV表),再分别导入数据,每一张表的操作都要完整,不跳过任何细节,和原文完全一致。

2.1 原始_学生考勤表(对应3_kaoqin.csv)

先创建表结构,再导入CSV数据,步骤如下:

2.1.1 创建原始_学生考勤表(执行SQL脚本)

  1. 点击左侧「资源库」,右键根目录,选择「新建转换流」,输入转换流名称「创建原始_学生考勤表」,点击「确定」;

  2. 进入转换流设计页面,点击页面右侧「组件库」,搜索「执行一个SQL脚本」组件,拖拽到画布中;

  3. 双击「执行一个SQL脚本」组件,进行配置:

    1. 步骤名称:保持默认「执行一个SQL脚本」即可;

    2. 数据库连接:选择我们刚刚创建的「团队私有数据库」;

    3. 在“要执行的SQL脚本”输入框中,复制粘贴以下SQL:

      CREATE TABLE IF NOT EXISTS  `raw_attendance` (
        `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
        `attendance_id` varchar(64) DEFAULT NULL COMMENT '考勤ID',
        `learn_term` varchar(30) DEFAULT NULL COMMENT '学期',
        `data_datetime` varchar(50) DEFAULT NULL COMMENT '时间和日期',
        `attendance_type_id` varchar(64) DEFAULT NULL COMMENT '考勤类型ID',
        `attendance_name` varchar(100) DEFAULT NULL COMMENT '考勤名称',
        `attendance_task_order_id` varchar(64) DEFAULT NULL COMMENT '考勤事件ID',
        `stu_id` varchar(64) DEFAULT NULL COMMENT '学生ID',
        `stu_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
        `cla_name` varchar(100) DEFAULT NULL COMMENT '班级名',
        `cla_id` varchar(64) DEFAULT NULL COMMENT '班级ID',
        `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
        PRIMARY KEY (`id`),
        KEY `idx_student_id` (`stu_id`),
        KEY `idx_term` (`learn_term`)
      ) COMMENT='原始_学生考勤表';

       

  4. 其他参数保持默认,点击「确认」,完成组件配置;

  5. 点击转换流页面上方的「运行」按钮,运行转换流;

  6. 运行过程中,画布下方会显示执行日志,若日志显示「完成处理(R=0.W=1.U=0.E=0)」,说明表创建成功,没有报错。

2.1.2 导入原始考勤数据(把3_kaoqin.csv导入数据库)

  1. 右键「资源库」根目录,新建转换流,命名为「导入原始考勤数据」,点击「确定」;

  2. 在组件库搜索「CSV文件输入」组件,拖拽到画布中,双击组件进行配置:

    1. 步骤名称:输入「考勤记录」(方便识别);

    2. 文件名:点击「浏览文件」,在弹出的窗口中,找到「数智教育数据集」→「3_kaoqin.csv」,点击「确定」;

    3. 列分隔符:保持默认「插入制表符(TAB)」;

    4. 封闭符:保持默认;

    5. 编码:选择「UTF-8」(重点!选错编码会导致中文乱码);

    6. 下滑到“字段表格”,右键空白处,点击「获取字段」,系统会自动读取CSV文件的所有字段;

    7. 字段获取成功后,点击「确认」,完成CSV文件输入组件配置。

  3. 在组件库搜索「表输出」组件,拖拽到画布中;

  4. 创建「考勤记录」(CSV文件输入)到「表输出」的连接线,点击连接线,选择「主输出步骤」;

  5. 双击「表输出」组件,进行配置:

    1. 步骤名称:保持默认「表输出」即可;

    2. 数据库连接:选择「团队私有数据库」;

    3. 目标表:输入「raw_attendance」(我们刚刚创建的原始_学生考勤表,必须完全一致);

    4. 提交记录数量:保持默认1000;

    5. 点击「数据库字段」标签,右键空白处,点击「获取字段」,系统会自动匹配CSV文件字段和数据库表字段;

    6. 将表字段修改为建表语句中对应的字段(确保字段一一对应,比如CSV中的“kaoqing_id”对应表中的“attendance_id”);

    7. 点击「确认」,完成表输出组件配置。

  6. 点击转换流上方的「运行」按钮,运行转换流;

  7. 运行完成后,查看日志,若显示「完成处理」且无报错,说明数据导入成功;若有报错,检查字段映射是否正确、编码是否为UTF-8。

2.2 原始_考勤类型表(对应4_kaoqintype.csv)

2.2.1 创建原始_考勤类型表(执行SQL脚本)

  1. 新建转换流,命名为「创建原始_考勤类型表」;

  2. 拖拽「执行一个SQL脚本」组件到画布,配置数据库连接为「团队私有数据库」;

  3. 复制粘贴以下SQL(原文完整SQL,不修改任何内容):

    DROP TABLE IF EXISTS `raw_attendance_type`;
     
    CREATE TABLE IF NOT EXISTS `raw_attendance_type` (
      `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
      `attendance_type_id` varchar(64) NOT NULL COMMENT '考勤类型id',
      `attendance_type_name` varchar(100) DEFAULT NULL COMMENT '考勤类型名称',
      `attendance_task_order_id` varchar(64) DEFAULT NULL COMMENT '考勤事件id',
      `attendance_task_name` varchar(100) DEFAULT NULL COMMENT '考勤事件名',
      `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
      PRIMARY KEY (`id`)
    )COMMENT='原始_考勤类型表';
  4. 点击「确认」,运行转换流,确保表创建成功(日志无报错)。

2.2.2 导入原始考勤类型数据(把4_kaoqintype.csv导入数据库)

  1. 新建转换流,命名为「导入原始考勤类型数据」;

  2. 拖拽「CSV文件输入」组件到画布,双击配置:

    1. 步骤名称:输入「考勤类型记录」;

    2. 文件名:浏览选择「数智教育数据集」→「4_kaoqintype.csv」;

    3. 列分隔符:选择「插入制表符(TAB)」(重点!和考勤主表一致,但后续编码不同);

    4. 编码:选择「GB2312」(重点差异!选错会导致中文乱码);

    5. 右键字段表格,点击「获取字段」,确认字段读取成功后,点击「确认」。

  3. 拖拽「表输出」组件到画布,创建「考勤类型记录」到「表输出」的主输出连接线;

  4. 双击「表输出」组件,配置如下:

    1. 数据库连接:团队私有数据库;

    2. 目标表:raw_attendance_type(刚刚创建的原始_考勤类型表);

    3. 点击「数据库字段」,获取字段后,按以下对应关系调整: 表字段(数据库)流字段(CSV文件)attendance_type_idcontroler_idattendance_type_namecontroler_nameattendance_task_order_idcontrol_task_order_idattendance_task_namecontrol_task_name

    4. 点击「确认」,完成配置;

    5. 运行转换流,查看日志,确保无报错,数据导入成功。

2.3 原始_学生信息表(对应2_student_info.csv)

操作逻辑和前两张表一致,但有1个关键差异:需要用「字段选择」组件固化2个Integer字段,避免出现小数,其他步骤完全照搬原文。

2.3.1 创建原始_学生信息表(执行SQL脚本)

  1. 新建转换流,命名为「创建原始_学生信息表」;

  2. 拖拽「执行一个SQL脚本」组件到画布,配置数据库连接为「团队私有数据库」;

  3. 复制粘贴以下SQL

    CREATE TABLE IF NOT EXISTS `raw_student_info` (
      `id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID',
      `stu_id` varchar(64) NOT NULL COMMENT '学生ID',
      `stu_name` varchar(100) DEFAULT NULL COMMENT '学生姓名',
      `stu_sex` varchar(10) DEFAULT NULL COMMENT '性别',
      `stu_nation` varchar(50) DEFAULT NULL COMMENT '民族',
      `born_date` varchar(10) DEFAULT NULL COMMENT '出生日期(年)',
      `cla_name` varchar(100) DEFAULT NULL COMMENT '班级名',
      `native_place` varchar(200) DEFAULT NULL COMMENT '家庭住址',
      `residence_type` varchar(50) DEFAULT NULL COMMENT '家庭类型',
      `policy` varchar(50) DEFAULT NULL COMMENT '政治面貌',
      `cla_id` varchar(64) DEFAULT NULL COMMENT '班级ID',
      `cla_term` varchar(30) DEFAULT NULL COMMENT '班级学期',
      `live_on_campus` varchar(10) DEFAULT NULL COMMENT '是否住校',
      `leave_school` varchar(10) DEFAULT NULL COMMENT '是否退学',
      `dormitory_no` varchar(50) DEFAULT NULL COMMENT '宿舍号',
      `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '入库时间',
      PRIMARY KEY (`id`),
      UNIQUE KEY `uk_student_id` (`stu_id`),
      KEY `idx_cla_id` (`cla_id`)
    ) COMMENT='原始_学生信息表';

  4. 点击「确认」,运行转换流,确保表创建成功(日志无报错)。

2.3.2 导入原始学生信息数据(把2_student_info.csv导入数据库)

  1. 新建转换流,命名为「导入原始学生信息数据」;

  2. 拖拽「CSV文件输入」组件到画布,双击配置:

    1. 步骤名称:输入「学生信息记录」;

    2. 文件名:浏览选择「数智教育数据集」→「2_student_info.csv」;

    3. 列分隔符:保持默认「插入制表符(TAB)」;

    4. 编码:选择「UTF-8」;

    5. 右键字段表格,点击「获取字段」,将「bf_leaveSchool」的字段类型修改为「String」(避免类型错误);

    6. 点击「确认」,完成CSV文件输入组件配置。

  3. 拖拽「字段选择」组件到画布,创建「学生信息记录」(CSV文件输入)到「字段选择」的主输出连接线;

  4. 双击「字段选择」组件,进行配置(重点!固化Integer字段):

    1. 步骤名称:输入「固化字段类型」;

    2. 点击「元数据」标签,右键空白处,点击「插入」,新增2行;

    3. 按以下配置设置元数据(确保2个字段为Integer类型,避免小数):字段名称改名成类型长度精度二进制转普通存储bf_zhusu(空着,不改名)Integer-1-1否bf_qinshihao(空着,不改名)Integer-1-1否

    4. 点击「确认」,完成字段选择组件配置。

  5. 拖拽「表输出」组件到画布,创建「固化字段类型」(字段选择)到「表输出」的主输出连接线;

  6. 双击「表输出」组件,配置如下:

    1. 数据库连接:团队私有数据库;

    2. 目标表:raw_student_info(刚刚创建的原始_学生信息表);

    3. 点击「数据库字段」,获取字段后,按以下对应关系调整(原文明确要求,必须对齐): 表字段(数据库)流字段(CSV文件)native_placebf_NativePlaceresidence_typeBf_ResidenceTypepolicybf_policycla_idcla_idcla_termcla_termlive_on_campusbf_zhusuleave_schoolbf_leaveSchooldormitory_nobf_qinshihao

    4. 点击「确认」,完成配置;

    5. 运行转换流,查看日志,确保无报错,数据导入成功。

2.4 创建学生考勤主题标签表(最终输出表,必建!)

这张表是我们最终要输出的标签表,所有统计结果都会写入这张表,步骤和创建原始表一致:

  1. 新建转换流,命名为「创建学生考勤主题标签表」;

  2. 拖拽「执行一个SQL脚本」组件到画布,配置数据库连接为「团队私有数据库」;

  3. 复制粘贴以下SQL(原文完整SQL,不修改任何内容):

CREATE TABLE IF NOT EXISTS student_attendance_stats (
    id INT PRIMARY KEY AUTO_INCREMENT COMMENT '自增主键',
    student_id INT NOT NULL COMMENT '学生ID', 
    student_name VARCHAR(50) NOT NULL COMMENT '学生姓名',
    class_id INT NOT NULL COMMENT '班级ID',
    class_name VARCHAR(50) NOT NULL COMMENT '班级名称',
    grade VARCHAR(10) NOT NULL COMMENT '年级',
    gender VARCHAR(10) NOT NULL COMMENT '性别',
    birth_date  VARCHAR(10) NOT NULL COMMENT '出生日期',
    political_status VARCHAR(20) NOT NULL COMMENT '政治面貌',
    is_boarder VARCHAR(10) NOT NULL COMMENT '是否住校',
    campus_type VARCHAR(10) NOT NULL COMMENT '校区类型',
    late_count INT NOT NULL DEFAULT 0 COMMENT '迟到次数',
    early_leave_count INT NOT NULL DEFAULT 0 COMMENT '早退次数',
    leave_count INT NOT NULL DEFAULT 0 COMMENT '请假次数',
    uniform_violate_count INT NOT NULL DEFAULT 0 COMMENT '没穿校服次数',
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '统计入库时间',
    INDEX idx_student (student_id),
    INDEX idx_class (class_id),
    INDEX idx_grade (grade)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生考勤主题标签表';
  1. 点击「确认」,运行转换流,确保表创建成功(日志无报错);

  2. 创建成功后,后续所有ETL操作的最终结果,都会写入这张表。

⚙️ 第三步:核心ETL转换流(最关键!全流程无删减)

这一步是整个实验的核心,,我们将严格按照“数据接入—清洗整合—维度拆解—标签标记—指标计算—结果落地”逻辑,一步步操作。

3.1 转换流逻辑总览(先看懂逻辑,再操作)

整体逻辑和原文完全一致,用通俗的话讲就是:

1. 数据接入:把刚刚导入数据库的3张原始表(考勤记录、考勤类型、学生信息)读取出来;

2. 数据整合:将考勤记录和考勤类型表关联,给每条考勤记录补充“迟到”“早退”等具体行为名称;

3. 标签标记:用JS脚本识别每条考勤记录的行为,生成“是/否”标记(1=是,0=否);

4. 指标计算:按学生分组,统计每个学生的迟到、早退、请假等次数;

5. 维度补齐:关联学生信息表,补充学生性别、是否住校等属性;

6. 清洗标准化:移除冗余字段、处理空值、映射住校状态、提取年级和校区类型;

7. 结果落地:将最终的标签数据写入「student_attendance_stats」表中。

考勤记录表→排序→记录集连接(关联考勤类型表)→JS脚本(标记行为)→分组(统计次数)→排序→记录集连接(关联学生信息表)→字段选择(删冗余)→替换空值→值映射(住校状态)→表输出(写入目标表)。

3.2 数据接入:读取3张原始表数据

第一步是“把数据库中的3张原始表读出来”,需要拖拽3个「表输入」组件,分别读取3张表的数据:

  1. 点击左侧「资源库」,右键根目录,选择「新建转换流」,输入转换流名称「学生考勤主题标签」,点击「确定」;

  2. 进入转换流设计页面,页面默认是锁定状态,点击页面上方的「锁定」图标(🔒),解锁后才能编辑;

  3. 点击右侧「组件库」,搜索「表输入」组件,拖拽3个「表输入」组件到画布中(分别对应3张原始表);

  4. 配置第一个「表输入」组件(读取考勤记录表):

    1. 双击组件,步骤名称修改为「考勤记录」;

    2. 数据库连接:选择「团队私有数据库」;

    3. 点击「获取SQL查询语句」,在弹出的窗口中,选择数据库「labs」→表「raw_attendance」,点击「确认」;

    4. 系统会自动生成包含「raw_attendance」所有字段的SQL语句,点击「确认」,完成配置(无需修改SQL)。

  5. 配置第二个「表输入」组件(读取考勤类型表):

    1. 双击组件,步骤名称修改为「考勤类型」;

    2. 数据库连接:选择「团队私有数据库」;

    3. 点击「获取SQL查询语句」,选择数据库「labs」→表「raw_attendance_type」,点击「确认」;

    4. 系统自动生成SQL语句,点击「确认」,完成配置。

  6. 配置第三个「表输入」组件(读取学生信息表):

    1. 双击组件,步骤名称修改为「学生信息」;

    2. 数据库连接:选择「团队私有数据库」;

    3. 点击「获取SQL查询语句」,选择数据库「labs」→表「raw_student_info」,点击「确认」;

    4. 系统自动生成SQL语句,点击「确认」,完成配置。

补充:3个表输入组件配置完成后,可分别点击「预览」,查看数据是否读取成功,确保无报错。

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

考勤记录表只有「考勤类型ID」,没有具体的行为名称(比如“迟到”),需要和考勤类型表关联,补充行为名称,步骤如下(原文完整步骤,不删减):

  1. 在组件库搜索「记录集连接」组件,拖拽1个到画布中;

  2. 创建「考勤记录」(表输入)到「记录集连接」的连接线,此时会弹出「排序需要」的提示(原文提示),意思是“连接前必须排序,否则数据会乱”;

  3. 拖拽1个「排序记录」组件到画布,放在「考勤记录」和「记录集连接」之间,创建「考勤记录」到「排序记录」、「排序记录」到「记录集连接」的主输出连接线;

  4. 配置「排序记录」组件(按考勤类型和考勤任务类型排序):

    1. 双击组件,步骤名称修改为「按照考勤类型和考勤任务类型排序」;

    2. 点击「获取字段」,读取所有字段后,删除多余字段,只保留「attendance_type_id」和「attendance_task_order_id」两个字段(这两个是关联字段);

    3. 排序设置:两个字段均选择「升序」,其他参数保持默认;

    4. 点击「确认」,完成排序组件配置。

  5. 创建「考勤类型」(表输入)到「记录集连接」的连接线(考勤类型表默认已按关联字段排序,无需额外排序);

  6. 配置「记录集连接」组件(关联两张表):

    1. 双击组件,步骤名称保持默认「记录集连接」;

    2. 第一个Transform:选择「按照考勤类型和考勤任务类型排序」;

    3. 第二个Transform:选择「考勤类型」;

    4. 连接类型:选择「LEFT OUTER」(左外连接,确保所有考勤记录都能保留);

    5. 点击「第一个Transform的连接字段」中的「获得连接字段」,读取字段后,只保留「attendance_type_id」和「attendance_task_order_id」;

    6. 点击「第二个Transform的连接字段」中的「获得连接字段」,读取字段后,同样只保留「attendance_type_id」和「attendance_task_order_id」;

    7. 点击「确认」,完成连接配置(此时每条考勤记录都关联上了具体的行为名称)。

3.4 行为标签衍生:用JS脚本标记异常考勤行为

这一步是“识别每条考勤记录的行为”,用JS脚本生成二进制标记(1=有该行为,0=没有),为后续统计次数做准备,步骤和原文完全一致:

  1. 在组件库搜索「JavaScript代码」组件,拖拽1个到画布中,创建「记录集连接」到「JavaScript代码」的主输出连接线;

  2. 双击「JavaScript代码」组件,进行配置:

    1. 步骤名称修改为「提取异常考勤记录」;

    2. 在「Script 1」输入框中,复制粘贴以下JS脚本(原文完整脚本,不修改任何内容):

// 核心判断逻辑
if(attendance_type_name != null && attendance_task_name != null){
 
    // 迟到判断(排除请假)
    if((attendance_type_name.includes("迟到") || 
        attendance_type_name.includes("晚到") || 
        attendance_task_name.includes("迟到") || 
        attendance_task_name.includes("晚到")) && 
        !attendance_task_name.includes("请假")){
      isLate = 1;
    }
 
    // 早退判断(排除请假)
    if((attendance_type_name.includes("早退") || 
        attendance_task_name.includes("早退")) && 
        !attendance_task_name.includes("请假")){
      isEarly = 1;
    }
 
    // 校服违规:只要包含“校服”就标记违规
    if(attendance_type_name.includes("校服") || attendance_task_name.includes("校服")){
      isNoUniform = 1;
    }
}
 
// 请假判断
if(attendance_task_name != null){
    if(attendance_task_name.includes("请假")){
      isLeave = 1;
    }
}
  1. 点击「获取变量」按钮,系统会自动解析脚本中的变量(isLate、isEarly、isLeave、isNoUniform),生成输出字段;

  2. 点击「测试脚本」按钮,预览数据,确认输出字段只有0和1两个值(1表示有该行为,0表示没有),无异常;

  3. 点击「确认」,完成JS脚本组件配置。

补充:测试脚本时,若出现报错,检查脚本是否复制完整,字段名是否和数据库字段一致(比如attendance_type_name是否正确)。

3.5 多维度分组聚合:统计每个学生的异常考勤次数

这一步是“把明细的考勤记录,按学生分组,统计每个学生的迟到、早退等总次数”,步骤和原文完全一致:

  1. 在组件库搜索「分组」组件,拖拽1个到画布中,创建「提取异常考勤记录」(JS脚本)到「分组」的主输出连接线;

  2. 双击「分组」组件,进行配置:

    1. 步骤名称保持默认「分组」;

    2. 构成分组的字段:点击空白处,输入4个字段,分别是「stu_id」(学生ID)、「stu_name」(学生姓名)、「cla_id」(班级ID)、「cla_name」(班级名称)(按学生分组,确保每个学生对应一条统计记录);

    3. 聚合设置:点击「聚合」区域的空白处,按以下规则设置(原文聚合规则,不修改): 聚合字段名称对应JS脚本变量聚合函数说明late_countisLateSum(求和)统计迟到总次数early_countisEarlySum(求和)统计早退总次数leave_countisLeaveSum(求和)统计请假总次数no_uniform_countisNoUniformSum(求和)统计没穿校服总次数

    4. 其他参数保持默认,点击「确认」,完成分组组件配置。

补充:分组完成后,数据会变成“每个学生一条记录”,包含学生ID、姓名、班级,以及4种异常行为的总次数。

3.6 关联学生信息表:补充学生基础属性

目前的分组结果,只有学生ID、班级和考勤次数,缺少性别、出生日期、是否住校等基础属性,需要关联学生信息表补充,步骤和原文完全一致:

  1. 拖拽1个「排序记录」组件到画布,创建「学生信息」(表输入)到「排序记录」的主输出连接线;

  2. 配置「排序记录」组件(按学生ID排序):

    1. 步骤名称修改为「按照学生编号进行排序」;

    2. 点击「获取字段」,读取所有字段后,删除多余字段,只保留「stu_id」(学生ID,关联字段);

    3. 排序设置:「stu_id」选择「升序」,其他参数默认;

    4. 点击「确认」,完成配置。

  3. 拖拽1个「记录集连接」组件到画布(用于关联分组结果和学生信息),创建「分组」组件到该「记录集连接」的主输出连接线;

  4. 创建「按照学生编号进行排序」(排序记录)到该「记录集连接」的连接线,确保两个输入流都接入记录集连接组件;

  5. 双击该「记录集连接」组件,进行配置(关联分组结果和学生信息): 步骤名称修改为「关联学生基础信息」;

  6. 第一个Transform:选择「分组」(即学生考勤次数统计结果);

  7. 第二个Transform:选择「按照学生编号进行排序」(即排序后的学生信息);

  8. 连接类型:选择「LEFT OUTER」(左外连接,确保所有学生的考勤统计记录都能保留,即使个别学生无基础信息也不会丢失);点击「第一个Transform的连接字段」中的「获得连接字段」,读取字段后,只保留「stu_id」(学生ID,唯一关联字段);

  9. 点击「第二个Transform的连接字段」中的「获得连接字段」,读取字段后,同样只保留「stu_id」(学生ID);

  10. 点击「确认」,完成关联配置(此时每条学生考勤统计记录,都补充了对应的学生基础信息,如性别、出生日期等)。

3.7 数据清洗:移除冗余字段,避免数据杂乱

关联完成后,数据中会存在大量冗余字段(比如重复的学生ID、班级ID,以及不需要的中间字段),需要通过「字段选择」组件删除冗余,只保留核心字段:

  1. 在组件库搜索「字段选择」组件,拖拽1个到画布中,创建「关联学生基础信息」(记录集连接)到「字段选择」的主输出连接线;

  2. 双击「字段选择」组件,进行配置:步骤名称修改为「删除冗余字段」;

  3. 点击「获取字段」,系统会自动读取所有关联后的字段;

  4. 删除冗余字段,只保留以下核心字段(原文明确要求,缺一不可): 学生相关:stu_id(学生ID)、stu_name(学生姓名)、cla_id(班级ID)、cla_name(班级名称)、stu_sex(性别)、born_date(出生日期)、policy(政治面貌)、live_on_campus(是否住校); 考勤统计相关:late_count(迟到次数)、early_count(早退次数)、leave_count(请假次数)、no_uniform_count(没穿校服次数);

  5. 字段顺序可按需调整(建议按“学生基础信息→考勤统计信息”的顺序排列,方便后续操作);

  6. 点击「确认」,完成冗余字段删除配置。

3.8 空值处理:统一字段格式,避免统计异常

学生基础信息中可能存在空值(比如部分学生的政治面貌、出生日期未填写),需要统一处理为空值占位符,确保数据规范,步骤和原文完全一致:

  1. 在组件库搜索「替换空值」组件,拖拽1个到画布中,创建「删除冗余字段」(字段选择)到「替换空值」的主输出连接线;

  2. 双击「替换空值」组件,进行配置: 步骤名称修改为「处理空值字段」;

  3. 点击「获取字段」,读取所有需要处理的字段;

  4. 按以下规则设置空值替换(原文统一要求,不修改):stu_sex(性别):空值替换为「未知」;

  5. born_date(出生日期):空值替换为「未知」;

  6. policy(政治面貌):空值替换为「未知」;

  7. live_on_campus(是否住校):空值替换为「未知」;

  8. 其他字段(学生ID、姓名、班级等)不会出现空值,无需设置替换规则;

  9. 点击「确认」,完成空值处理配置。

3.9 数据标准化:映射住校状态、提取年级和校区类型

这一步是“让数据更规范、更易读”,主要完成3个标准化操作:住校状态映射、年级提取、校区类型判定,步骤和原文完全一致,每一步都不跳过:

3.9.1 住校状态映射(0→否,1→是)

  1. 在组件库搜索「值映射」组件,拖拽1个到画布中,创建「处理空值字段」(替换空值)到「值映射」的主输出连接线;

  2. 双击「值映射」组件,进行配置:步骤名称修改为「映射住校状态」;

  3. 要映射的字段:选择「live_on_campus」(是否住校);

  4. 目标字段名称:保持默认「live_on_campus」,也可修改为「is_boarder」(和最终标签表字段对应,建议修改);

  5. 映射规则(原文固定规则,不修改): 映射值1:源值「0」→ 目标值「否」;

  6. 映射值2:源值「1」→ 目标值「是」;

  7. 默认值:「否」(若字段值既不是0也不是1,默认按“否”处理);

  8. 点击「确认」,完成住校状态映射配置。

3.9.2 提取年级(从班级名中提取)

  1. 在组件库搜索「计算器」组件,拖拽1个到画布中,创建「映射住校状态」(值映射)到「计算器」的主输出连接线;

  2. 双击「计算器」组件,进行配置:步骤名称修改为「提取年级信息」;

  3. 点击「新建」,新增一个计算字段,字段名称输入「grade」(年级);

  4. 计算表达式:

    var gra_name
    if (cla_name == null){
      gra_name='未知'
    }else if(cla_name.includes('高一')){
      gra_name='高一'
    }else if (cla_name.includes('高二')){
      gra_name='高二'
    }else if (cla_name.includes("高三")){
      gra_name='高三'
    } else{
      gra_name='未知'
    }
  5. 表达式说明:判断班级名称中是否包含“高一”“高二”“高三”,包含则对应提取年级,否则标记为“未知”;

  6. 点击「确认」,完成年级提取配置。

3.9.3 校区类型判定(按班级名开头字符判断)

  1. 在组件库搜索「计算器」组件,拖拽1个到画布中,创建「提取年级信息」(计算器)到该「计算器」的主输出连接线;

  2. 双击该「计算器」组件,进行配置: 步骤名称修改为「判定校区类型」;

  3. 点击「新建」,新增一个计算字段,字段名称输入「campus_type」(校区类型);

  4. 计算表达式

    var class_campus_type
    if (cla_name == null){
      class_campus_type='未知'
    }else if(cla_name.startsWith('白-') || cla_name.startsWith('东-')){
      class_campus_type='新校区'
    }else if (cla_name != null && !isEmpty(cla_name)){
      class_campus_type='老校区'
    } else{
      class_campus_type='未知'
    }

     

  5. 表达式说明:判断班级名称前2个字符是否为“白-”或“东-”,是则判定为“新校区”,否则为“老校区”;

  6. 点击「确认」,完成校区类型判定配置。

3.10 结果落地:将标签数据写入目标表

这是核心ETL转换流的最后一步,将标准化后的所有数据,写入我们之前创建的「student_attendance_stats」(学生考勤主题标签表),步骤和原文完全一致,确保数据落地成功:

  1. 在组件库搜索「表输出」组件,拖拽1个到画布中,创建「判定校区类型」(计算器)到「表输出」的主输出连接线;

  2. 双击「表输出」组件,进行配置(重点!字段映射必须和目标表完全对齐): 步骤名称修改为「写入学生考勤主题标签表」;

  3. 数据库连接:选择「团队私有数据库」;

  4. 目标表:输入「student_attendance_stats」(最终输出表,必须完全一致,不能输错);

  5. 提交记录数量:保持默认1000;

  6. 勾选「裁剪表」(重点!避免重复写入数据,每次运行转换流前,自动清空目标表原有数据);

  7. 点击「数据库字段」标签,右键空白处,点击「获取字段」,系统会自动读取转换流中的所有字段和目标表的所有字段;

  8. 按以下对应关系,手动调整字段映射(原文明确要求,必须一一对应,不能出错): 目标表字段(student_attendance_stats)转换流字段(当前数据)student_idstu_id(学生ID)student_namestu_name(学生姓名)class_idcla_id(班级ID)class_namecla_name(班级名称)gradegrade(提取的年级)genderstu_sex(性别)birth_dateborn_date(出生日期)political_statuspolicy(政治面貌)is_boarderlive_on_campus(映射后的住校状态)campus_typecampus_type(判定的校区类型)late_countlate_count(迟到次数)early_leave_countearly_count(早退次数)leave_countleave_count(请假次数)uniform_violate_countno_uniform_count(没穿校服次数)

  9. 字段映射完成后,仔细核对一遍,确保没有遗漏、没有错配;

  10. 点击「确认」,完成表输出组件配置。

  11. 点击转换流页面上方的「运行」按钮,运行整个核心ETL转换流;

  12. 运行过程中,查看画布下方的执行日志,若日志显示「完成处理」且无任何报错(E=0),说明转换流运行成功;若有报错,根据日志提示排查问题(常见问题:字段映射错误、数据库连接失败、脚本错误);

  13. 运行成功后,可通过数据库工具查看「student_attendance_stats」表,确认数据已成功写入,且每条记录都包含所有核心字段,无空值、无重复。

✅ 第四步:验收标准

所有步骤完成后,按以下标准验收,确保实验成功,符合官方要求:

  1. 转换流全绿无报错:所有创建表、导入数据、核心ETL的转换流,运行后均显示“成功”,日志无报错(E=0);

  2. 目标表数据完整:「student_attendance_stats」表中,每条学生记录都包含以下所有字段,无缺失: 基础信息(student_id、student_name、class_id、class_name、gender、birth_date、political_status); 画像维度(grade、is_boarder、campus_type); 考勤行为(late_count、early_leave_count、leave_count、uniform_violate_count);

  3. 数据规范无异常:空值已处理(均替换为「未知」),住校状态映射正确(0→否,1→是),年级提取准确,校区类型判定无误;

  4. 统计口径统一:迟到、早退次数已排除请假记录,考勤次数统计无失真,数据无重复、无冗余。

⚠️ 避坑小Tips

整理了4个高频踩坑点,提前规避,少走弯路:

  1. 记录集连接必须先排序:无论关联哪两张表,连接前一定要对关联字段进行排序(比如考勤类型ID、学生ID),否则会出现数据乱套、关联失败的问题;

  2. 考勤类型表CSV编码别选错:4_kaoqintype.csv必须选择「GB2312」编码,其他两张CSV表(3_kaoqin.csv、2_student_info.csv)选择「UTF-8」,选错编码会导致中文乱码;

  3. 迟到早退必须排除请假:JS脚本中已包含“排除请假”的逻辑,不要随意修改脚本,否则会把“请假期间的迟到早退”也算入统计,导致数据失真;

  4. 字段选择别手软:冗余字段(比如重复的ID、中间过程字段)一定要删除,避免字段过多导致后续映射出错,同时提升数据处理效率;

  5. 表输出必勾选「裁剪表」:每次运行核心ETL转换流前,确保「表输出」组件勾选了「裁剪表」,避免重复写入数据,导致目标表数据冗余;

  6. 字段映射要反复核对:核心ETL最后一步的表输出字段映射,一定要和目标表字段一一对应,尤其是字段名称、数据类型,错配会导致运行报错。

🎊 实验总结

本次助睿ETL学生考勤画像构建实验,核心是围绕3张原始数据表,完成“数据接入—清洗整合—标签衍生—指标统计—结果落地”的全流程,重点掌握3个核心技能:

  1. 数据导入:掌握CSV文件导入数据库的方法,重点区分不同CSV文件的编码和列分隔符;

  2. 数据关联:学会用「记录集连接」组件关联多张表,记住“连接前先排序”的核心原则;

  3. 标签衍生与标准化:用JS脚本标记异常行为,用计算器提取维度信息,用值映射统一字段格式,最终生成规范的学生考勤标签表。

只要严格按照本教程的每一步操作,不跳过、不修改关键配置,小白也能一次跑通实验,完美输出符合官方要求的学生考勤主题标签表,轻松完成实验任务✅

平台介绍
助睿平台 = 零代码版 Kettle + 可视化 BI + AutoML + 数据治理,是小白快速上手数据工程、数据分析、AI 建模的神器,尤其适合高校实验、教学实训、企业轻量数据治理场景。

 

Logo

一站式 AI 云服务平台

更多推荐