返回顶部
e

employee-skills-importer员工技能导入

Parse employee skills CSV files, identify skill categories and individual skills, look up employee IDs from an employees table, and generate idempotent SQL INSERT statements for skill_categories, skills, and employee_skills tables.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 1.0.0
安全检测
已通过
680
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

employee-skills-importer

员工技能导入器

该技能自动化了将员工技能从CSV文件导入Supabase数据库的过程。它解析CSV,检查数据库中已存在的内容,并生成幂等SQL脚本以插入缺失数据。

概述

该技能执行3步流程:

  1. 1. 识别并插入缺失的技能类别 - 从CSV表头提取类别,检查数据库,生成INSERT脚本
  2. 识别并插入缺失的技能 - 提取技能及其类别,检查数据库,生成INSERT脚本
  3. 生成employee_skills INSERT脚本 - 按姓名映射员工,关联技能,创建最终INSERT语句

CSV格式要求

CSV必须包含:

  • - 第1行:空行或元数据(忽略)
  • 第2行:跨多列的技能类别名称
  • 第3行及以上:单个技能名称(列标题,可能因换行跨多行)
  • 员工数据行:员工数据,前两列为名字和姓氏,后跟技能经验值

示例结构:

,,,,,,.NET,,,,,前端,,,Java,,,
名字,姓氏,全名,部门,...,C#,ASP.net,MVC,...,JavaScript,HTML,CSS,...,Java,Spring,...
张三,张三,张三,部门1,...,5,4,3,...,6,6,5,...,0,0,...

工作流程

第1步:技能类别

  1. 1. 解析第2行提取唯一的类别名称
  2. 查询数据库检查现有类别:
sql SELECT name FROM skill_categories
  1. 3. 为缺失类别生成幂等INSERT:
sql INSERT INTO skill_categories (name) VALUES (类别1), (类别2), (类别3) ON CONFLICT (name) DO NOTHING;

第2步:技能

  1. 1. 解析技能名称行并映射到第2行的类别
  2. 查询数据库现有技能:
sql SELECT s.name, sc.name as category_name FROM skills s LEFT JOIN skillcategories sc ON s.categoryid = sc.id
  1. 3. 对每个要插入的技能:
- 使用子查询查找category_id - 生成幂等INSERT: sql INSERT INTO skills (name, category_id) VALUES (C#, (SELECT id FROM skill_categories WHERE name = .NET)), (JavaScript, (SELECT id FROM skill_categories WHERE name = 前端)) ON CONFLICT (name) DO NOTHING;

第3步:员工技能

  1. 1. 解析员工行(名字、姓氏、技能值)
  2. 查询员工表获取员工ID:
sql SELECT id, firstname, lastname FROM employees
  1. 3. 对每个员工,对每个非零经验值的技能:
- 通过匹配firstname + lastname查找employee_id - 使用子查询查找skill_id - 关键:在WHERE子句中使用TRIM()处理数据库中的空白字符差异 - 生成INSERT: sql INSERT INTO employeeskills (employeeid, skillid, yearsof_experience) VALUES ( (SELECT id FROM employees WHERE TRIM(firstname) = John AND TRIM(lastname) = Doe), (SELECT id FROM skills WHERE name = C#), 5 ) ON CONFLICT (employeeid, skillid) DO UPDATE SET yearsofexperience = EXCLUDED.yearsofexperience;

重要说明

数据库架构

  • - skillcategories表:id (uuid), name (text, unique)
  • skills表:id (uuid), name (text, unique), categoryid (uuid FK to skillcategories)
  • employees表:id (uuid), firstname (text), lastname (text)
  • employeeskills表:id (uuid), employeeid (uuid FK), skillid (uuid FK), yearsofexperience (real)

幂等性

所有生成的SQL脚本使用ON CONFLICT子句确保可多次运行而不出错:
  • - 对于类别和技能:ON CONFLICT (name) DO NOTHING
  • 对于员工技能:ON CONFLICT (employeeid, skillid) DO UPDATE SET yearsofexperience = EXCLUDED.yearsofexperience

数据处理

  • - 跳过技能经验值为零或空的员工
  • 处理数值型经验值(可以是整数或小数,如0.5、1.7等)
  • 通过修剪空白和移除换行符清理技能名称
  • 跳过员工查找失败的行(数据库中未找到的员工)
  • 正确处理多行CSV单元格
  • 关键:在生成SQL前对员工-技能对去重 - 存在重复时保留最高年限值
  • 关键:自动纠正员工姓名拼写 - 使用模糊匹配查找并纠正细微拼写差异(例如,Victoriia → Viktoriia)
  • 关键:修剪所有员工姓名 - 移除所有姓名前后的空白字符
  • 关键:在SQL WHERE子句中使用TRIM() - 数据库可能有多余空格(例如,Yurii Solokha有3个空格)
  • 关键:跳过无匹配的员工 - 如果在数据库中未找到接近匹配,排除这些记录并报告

错误预防

  • - 始终使用子查询进行外键查找,而非硬编码UUID
  • 验证类别名称在第2行和技能查找之间匹配
  • 报告CSV中未在数据库中找到的员工
  • 报告无法映射到类别的技能

关键 - 防止重复键冲突:

  1. 1. 在生成employeeskills INSERT之前,按(firstname, lastname, skill)对所有记录去重
  2. 存在重复时,保留yearsof_experience值最高的记录
  3. 这防止了:ON CONFLICT DO UPDATE command cannot affect row a second time

关键 - 自动名称纠正:

  1. 1. 在生成SQL之前,验证所有员工在数据库中存在
  2. 对于未通过精确匹配找到的员工:

- 使用模糊匹配(Levenshtein距离或类似算法)在数据库中查找接近匹配
- 如果找到接近匹配(例如,Victoriia → Viktoriia),自动使用数据库中的拼写
- 如果未找到接近匹配,完全跳过该员工
  1. 3. 生成报告显示:

- 自动纠正的员工:CSV名称 → 数据库名称
- 跳过的员工(未找到匹配):列出跳过的技能数量
  1. 4. 这防止了:null value in column employee_id violates not-null constraint

输出格式

该技能生成三个SQL脚本加一个报告文件:

1insertcategories.sql
sql
-- 插入缺失的技能类别
INSERT INTO skill_categories (name)
VALUES (.NET), (前端), (Java)
ON CONFLICT (name) DO NOTHING;

2insertskills.sql
sql
-- 插入缺失的技能及类别映射
INSERT INTO skills (name, category_id)
VALUES
(C#, (SELECT id FROM skill_categories WHERE name = .NET)),
(ASP.net, (SELECT id FROM skill_categories WHERE name = .NET)),
(JavaScript, (SELECT id FROM skill_categories WHERE name = 前端))
ON CONFLICT (name) DO NOTHING;

3insertemployee_skills.sql
sql
-- 插入员工技能
-- 记录已去重并仅保留有效员工
-- 在WHERE子句中使用TRIM()处理数据库中的空白字符
INSERT INTO employeeskills (employeeid, skillid, yearsof_experience)
VALUES
(
(SELECT id FROM employees WHERE TRIM(firstname) = John AND TRIM(lastname) = Doe),
(SELECT id FROM skills WHERE name = C#),
5
),
(
(SELECT id FROM employees WHERE TRIM(firstname) = John AND TRIM(lastname) = Doe),
(SELECT id FROM skills WHERE name = JavaScript),
6
)
ON CONFLICT (employeeid, skillid) DO UPDATE
SET yearsofexperience = EXCLUDED.yearsofexperience;

执行步骤

当用户提供CSV文件时:

  1. 1. 解析CSV结构
- 读取文件并验证格式 - 从第2行提取类别名称 - 从后续行提取技能名称(处理多行单元格) - 根据列位置将每个技能映射到其类别
  1. 2. 从Supabase查询现有数据
- 获取所有现有技能类别 - 获取所有现有技能及其类别 - 获取所有员工(id, firstname, lastname)
  1. 3. 生成脚本1:类别
- 比较CSV类别与数据库 - 为缺失类别创建INSERT语句 - 保存到文件并呈现给用户
  1. 4. 生成脚本2:技能
- 比较CSV技能与数据库

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 employee-skills-importer-1776420006 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 employee-skills-importer-1776420006 技能

通过命令行安装

skillhub install employee-skills-importer-1776420006

下载

⬇ 下载 employee-skills-importer v1.0.0(免费)

文件大小: 7.63 KB | 发布时间: 2026-4-17 19:17

v1.0.0 最新 2026-4-17 19:17
Employee skills importer skill initial release

- Added functionality to parse employee skills CSV files and identify skill categories and individual skills.
- Generates idempotent SQL INSERT statements for skill_categories and skills tables, avoiding duplicates.
- Includes fuzzy matching and correction of employee names for matching against the employees table.
- Produces deduplicated employee_skills SQL insert scripts, using TRIM() and ON CONFLICT for data integrity.
- Outputs a report of automatic name corrections and skipped employees/skills.

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部