Users.ktr使用文档

  • 流程分析
  • 功能介绍
  • 适用场景举例
  • 流程图示
  • 必做选项
    • 数据输入
      • 选择数据库连接
    • 数据筛选及去重
      • 选择错误数据文件的路径,或取消该步骤
    • 数据输出
      • 选择数据库连接
  • 选做选项
    • 数据输入
      • 修改数据库查询SQL语句
    • 数据筛选及去重
      • 数据筛选
      • 数据去重
        • 先排序再筛选
        • 哈希值
        • 关于重定向重复记录
    • 数据输出
      • 选择字段映射
  • Q&A
    • 如何判断在某一步骤中使用的字段名是否正确?

流程分析

使用Kettle进行单表迁移
两个文档侧重点不太一样,本文档侧重于针对功能进行分析和说明(如何只修改Users.ktr的一部分内容就完成单表迁移),而链接的文档侧重于对整个流程的建立思路和步骤选用进行说明。

功能介绍

本流程主要完成数据库中的单表迁移。主要步骤包括:数据输入、数据筛选及去重、数据输出。
将从这三个步骤介绍具体的使用方法。

适用场景举例

  • 将旧NEUOJ中的用户信息迁移到新NEUOJ的数据库中(只需要做必做项)
  • 需要将一些用户信息导入新NEUOJ的数据库(除了必做项,还需要修改数据库查询SQL语句,可能还需要修改筛选和去重的步骤)
  • 需要将数据库A中的某些数据导入数据库B中(除了必做项,还需要修改数据库查询SQL语句,可能还需要修改筛选和去重的步骤)

流程图示

必做选项

数据输入

选择数据库连接

这一步是必须的,因为在实际的使用场景下数据库连接不同。
双击O_users,找到数据库连接,点击右侧的编辑按钮。

修改相应的连接类型、主机名、数据库名、端口号、用户名、密码等信息。

在不需要对原数据库进行修改的时候,推荐使用一个只读权限的用户进行数据库连接。可以点击数据库连接页面底下的测试按钮来检测数据库是否能成功连接。

数据筛选及去重

选择错误数据文件的路径,或取消该步骤

流程支持将错误数据输出到Excel表格,以便查看未被插入进数据库的数据。在Users.ktr文件中的具体表现为:

  • 输出用户名为空的数据
  • 输出用户名重复的数据
  • 输出邮箱重复的数据

    如果不希望执行该步骤,单击连向该步骤的连接线,使其变为灰色(在Kettle中意味着这条连接线不会生效)。如下图最左边的流程所示。或者直接右键删除步骤,此操作会同时清除与该步骤相连的连接线。
    不执行该步骤则无需设置文件路径及文件名。

    对于每一个需要执行的Excel输出步骤,都需要修改文件路径和文件名。输出用户名为空的数据步骤为例。
    双击输出用户名为空的数据,点击浏览,修改文件路径和文件名。

    注意:在默认模式下,三个表的文件名是不能重合的。 原因是使用了非追加模式,如果想要将输出数据放到同一个表格中,请在每一个使用相同表格步骤的内容标签页中都勾选追加(默认不勾选)。

数据输出

选择数据库连接

道理和方法类似数据输入的选择数据库连接。双击表输出,点击编辑,编辑数据库连接。

注意:这里需要一个具有写入数据库权限的用户

选做选项

这些选项可以实现一些拓展功能,如自定义输入输出数据库的字段、修改数据筛选、去重的方式等。

数据输入

修改数据库查询SQL语句

可以根据实际数据库应用的场景选择使用的SQL语句。在Users.ktr中,就加入了对userinfo表的左外连接(这里有一个前提,userinfousers同属于一个数据库,如果属于不同的数据库,则需要使用其他方法)。
注意事项:为了不影响后续的步骤,在查询字段时需要加上字段的别名,别名不建议修改。

SELECTusers.uid uid...
FROM users

例如在需要进行输入的数据库中,用户ID的字段名是user_id,它在表users_account中,那么适用的SQL语句为:

SELECTusers_account.user_id uid...
FROM users_account

可以将别名理解为程序中的变量名。为了使得后续流程能够正确使用数据,如果修改了别名,请保证后续步骤中的字段名与该别名保持一致。例如将别名uid改成了userID,请将后续步骤中出现的所有有关输入数据1uid字段名都改为userID

数据筛选及去重

数据筛选

由于新NEUOJ数据库存在用户名不能为空的约束,因此需要进行用户名筛选,将用户名为空值的行筛选出来。
数据筛选的步骤适用于需要对源数据根据某些条件进行筛选的情况。
双击过滤记录,即可选择相应的过滤条件。这里将符合条件的数据发送给主要流程的下一个步骤按用户名、最近登录时间、用户ID排序,而将不符合条件的数据发送给Excel输出步骤输出用户名为空的数据

注意:此处使用的username字段与数据库输入中SQL语句的字段别名是相对应的。如果在数据库输入中,将usrs.username的别名设置成my_username,那么此处也应该使用my_username。(相关Q&A: 如何判断在某一步骤中使用的字段名是否正确?)

数据去重

去重提供了两种方式:

  • 先排序再筛选(使用排序去除重复记录组件)
  • 哈希值(无需排序,仅使用唯一行(哈希值)组件)

先排序再筛选

先排序再筛选适用于存在去重条件的情况。
Users.ktr提供了一个针对以下用户名去重规则的解决方案。

  1. 对于用户名重复的用户,取lastlogin_time不为空的那个
  2. 如果lastlogin_time都不为空,则取最近登录的
  3. 如果用户名重复,且lastlogin_time都为空,则取uid小的那一个

使用伪代码表示即为

if(用户名重复){if(lastlogin_time都为空){取uid最小的数据} else {取lastlogin_time最大的数据}
}

可以得到排序的三个关键字,优先级由高到低分别为:

  • 第一关键字 用户名 升序
  • 第二关键字 lastlogin_time 降序
  • 第三关键字 uid 升序

之后即可根据关键字对数据进行排序。
双击排序记录,即可修改相应的排序字段。

排序之后是去重的步骤,根据需要去重的字段username进行去重即可。该步骤保留第一个重复的记录,因此在进行排序的时候应当注意排序关键字。

哈希值

通过哈希的方法保留一个数据,它比较适合简单的去重,适用的情况比前一种方案少一些。

关于重定向重复记录

就是将重复的记录通过错误输出(在kettle界面中表示为带有一个红底x符号的连接线,如图所示,方向向上的连接线是错误输出)

数据输出

选择字段映射

适用于自定义的数据库输出。
点击输入字段映射,选择相应的字段映射即可。

注意,源字段和该步骤的输入字段是一致的,目标字段对应目标数据库的字段。目标字段是由数据库连接目标表共同决定的,确定了这两项之后,会自动读取目标字段。

Q&A

如何判断在某一步骤中使用的字段名是否正确?

右键选择该步骤,选择显示输入字段/显示输出字段,即可查看该步骤的输入/输出字段。请确保在步骤中使用的字段名和对应的输入字段名是一致的。
单击聚焦此步骤,按下空格键也可以查看相应的输入字段。
同时,该步骤的输出字段,也是下一步骤的输入字段。


  1. 输出数据库的字段中也有uid的时候,不能将其修改为userID,因为两个字段所属的对象不同。一个是oldDatabase.uid(修改为oldDatabase.userID),另一个是newDatabase.uid。 ↩︎

Users.ktr使用文档相关推荐

  1. 导出swagger2生成的文档

    百度了好多篇用法,没法用.特此记录一下 一.下载项目 下载https://github.com/Swagger2Markup/spring-swagger2markup-demo下的项目,保存,注意文 ...

  2. README 规范和项目文档规范

    1. README 规范 我们直接通过一个 README 模板,来看一下 README 规范中的内容: # 项目名称<!-- 写一段简短的话描述项目 -->## 功能特性<!-- 描 ...

  3. FastAPI 自动生成的docs文档没法使用

    FastAPI 自动生成的docs文档没法使用,当展开路径时候一直在转圈,具体就是这样 这个是由于swagger-ui 3.30.1 中的bug导致,具体bug可以看这里 我们可以通过在FastAPI ...

  4. 【软件工程】VB版机房文档总结

    前言: 软工视频+软工文档+UML视频+UML图的学习过程图! 这部分的知识很厚,只是知道了个大概!最开始 慢悠悠的像个老爷爷走进度,后来遇到点什么事,妈呀,管不了那么多了,赶紧弄完在说,拖了多久了都 ...

  5. 智能文档理解:通用文档预训练模型

    预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...

  6. 基于javaGUI的文档识别工具制作

    基于javaGUI的文档识别工具制作 对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件.导出文件以及一个简单的识别功能. 1.功 ...

  7. 从单一图像中提取文档图像:ICCV2019论文解读

    从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...

  8. 函数小知识点(文档字符串,闭包等)

    1 文档字符串(Documentation Strings) 一般被称为docstring,一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解.令人惊叹的是,当程序实际运行时,我们 ...

  9. Spring Boot 集成Swagger2生成RESTful API文档

    Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...

  10. c语言 如何读多种数据类型 非类,c语言程序设计教学大纲(非电气类)文档.doc

    c语言程序设计教学大纲(非电气类)文档 <C语言程序设计>课程教学大纲 主任 教研室主任 大纲执笔人 姜长洪 王海荣 C语言备课组 一.课程基本信息 课程编号:×××× 课程名称:C语言程 ...

最新文章

  1. python的切片和索引是什么_Python*really*中默认的切片索引是什么?
  2. 数字货币 矿池 矿场 区别
  3. 使用CXF与Spring集成实现RESTFul WebService
  4. [Hadoop] Install Hadoop 2.2 on Win7 64bit
  5. java.util (Collection接口和Map接口)
  6. 查询空缺_携程旅行2021校招开启,9大类职位,1000+岗位空缺,本科及以上学历...
  7. DTP动态协商——trunk配置、如何关闭域名解析、光接口无法up的原因详解(附图)
  8. 蔡奇视察奇安信:对成功登陆科创板表示祝贺
  9. [基于子串搜索的方法] BNDM算法
  10. C# winForm utf8 gbk 相互转码小工具
  11. html设置按钮不同状态的背景图片,CSS实例:创建一个鼠标感应换图片的按钮
  12. D-tale功能的探索
  13. 403. 青蛙过河--(每日一难phase2--day10)
  14. 针对单个网站的渗透思路(精)
  15. 实例讲解EasyLanguage入门
  16. 【HTML】-- 用户注册表单
  17. f分布表完整图a=0.01_c++多态和虚函数表实现原理 - 一字千金
  18. java两周考核期被辞退_试用期被辞退,会影响一整年,或整个职场生涯
  19. 算法中的P问题、NP问题、NP难问题和NP完全问题
  20. 关于EBGP用回环口起邻居遇到的问题

热门文章

  1. 计算机导论论文对课程的思考,计算机导论课浅析论文
  2. notablilty笔记本模板_notability实测,让你上天的笔记软件
  3. 百度旋转验证码识别平台接口文档
  4. 计算机给文件重命名快捷键,计算机中文件重命名快捷键是什么
  5. vim插件管理利器:pathogen
  6. php代码访问记录系统,对某PHP发卡系统代码审计记录
  7. 【Python百日进阶-Web开发-Feffery】Day344 - fac数据展示02:AntdBadge徽标数
  8. 智能剪刀——交互式图像分割
  9. 【欧拉降幂公式】【欧拉函数】
  10. Chrome添加扩展程序