Users.ktr使用文档
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
表的左外连接(这里有一个前提,userinfo
和users
同属于一个数据库,如果属于不同的数据库,则需要使用其他方法)。
注意事项:为了不影响后续的步骤,在查询字段时需要加上字段的别名,别名不建议修改。
SELECTusers.uid uid...
FROM users
例如在需要进行输入的数据库中,用户ID的字段名是user_id
,它在表users_account
中,那么适用的SQL语句为:
SELECTusers_account.user_id uid...
FROM users_account
可以将别名理解为程序中的变量名。为了使得后续流程能够正确使用数据,如果修改了别名,请保证后续步骤中的字段名与该别名保持一致。例如将别名uid
改成了userID
,请将后续步骤中出现的所有有关输入数据1的uid
字段名都改为userID
。
数据筛选及去重
数据筛选
由于新NEUOJ数据库存在用户名不能为空的约束,因此需要进行用户名筛选,将用户名为空值的行筛选出来。
数据筛选的步骤适用于需要对源数据根据某些条件进行筛选的情况。
双击过滤记录
,即可选择相应的过滤条件。这里将符合条件的数据发送给主要流程的下一个步骤按用户名、最近登录时间、用户ID排序
,而将不符合条件的数据发送给Excel输出步骤输出用户名为空的数据
。
注意:此处使用的username
字段与数据库输入中SQL语句的字段别名是相对应的。如果在数据库输入中,将usrs.username
的别名设置成my_username
,那么此处也应该使用my_username
。(相关Q&A: 如何判断在某一步骤中使用的字段名是否正确?)
数据去重
去重提供了两种方式:
- 先排序再筛选(使用
排序
和去除重复记录
组件) - 哈希值(无需排序,仅使用
唯一行(哈希值)
组件)
先排序再筛选
先排序再筛选适用于存在去重条件的情况。
Users.ktr
提供了一个针对以下用户名去重规则的解决方案。
- 对于用户名重复的用户,取lastlogin_time不为空的那个
- 如果lastlogin_time都不为空,则取最近登录的
- 如果用户名重复,且lastlogin_time都为空,则取uid小的那一个
使用伪代码表示即为
if(用户名重复){if(lastlogin_time都为空){取uid最小的数据} else {取lastlogin_time最大的数据}
}
可以得到排序的三个关键字,优先级由高到低分别为:
- 第一关键字 用户名 升序
- 第二关键字 lastlogin_time 降序
- 第三关键字 uid 升序
之后即可根据关键字对数据进行排序。
双击排序记录
,即可修改相应的排序字段。
排序之后是去重的步骤,根据需要去重的字段username
进行去重即可。该步骤保留第一个重复的记录,因此在进行排序的时候应当注意排序关键字。
哈希值
通过哈希的方法保留一个数据,它比较适合简单的去重,适用的情况比前一种方案少一些。
关于重定向重复记录
就是将重复的记录通过错误输出(在kettle界面中表示为带有一个红底x符号的连接线,如图所示,方向向上的连接线是错误输出)
数据输出
选择字段映射
适用于自定义的数据库输出。
点击输入字段映射
,选择相应的字段映射即可。
注意,源字段
和该步骤的输入字段是一致的,目标字段
对应目标数据库的字段。目标字段
是由数据库连接
和目标表
共同决定的,确定了这两项之后,会自动读取目标字段。
Q&A
如何判断在某一步骤中使用的字段名是否正确?
右键选择该步骤,选择显示输入字段
/显示输出字段
,即可查看该步骤的输入/输出字段。请确保在步骤中使用的字段名和对应的输入字段名是一致的。
单击聚焦此步骤,按下空格键也可以查看相应的输入字段。
同时,该步骤的输出字段,也是下一步骤的输入字段。
输出数据库的字段中也有
uid
的时候,不能将其修改为userID
,因为两个字段所属的对象不同。一个是oldDatabase.uid
(修改为oldDatabase.userID
),另一个是newDatabase.uid
。 ↩︎
Users.ktr使用文档相关推荐
- 导出swagger2生成的文档
百度了好多篇用法,没法用.特此记录一下 一.下载项目 下载https://github.com/Swagger2Markup/spring-swagger2markup-demo下的项目,保存,注意文 ...
- README 规范和项目文档规范
1. README 规范 我们直接通过一个 README 模板,来看一下 README 规范中的内容: # 项目名称<!-- 写一段简短的话描述项目 -->## 功能特性<!-- 描 ...
- FastAPI 自动生成的docs文档没法使用
FastAPI 自动生成的docs文档没法使用,当展开路径时候一直在转圈,具体就是这样 这个是由于swagger-ui 3.30.1 中的bug导致,具体bug可以看这里 我们可以通过在FastAPI ...
- 【软件工程】VB版机房文档总结
前言: 软工视频+软工文档+UML视频+UML图的学习过程图! 这部分的知识很厚,只是知道了个大概!最开始 慢悠悠的像个老爷爷走进度,后来遇到点什么事,妈呀,管不了那么多了,赶紧弄完在说,拖了多久了都 ...
- 智能文档理解:通用文档预训练模型
预训练模型到底是什么,它是如何被应用在产品里,未来又有哪些机会和挑战? 预训练模型把迁移学习很好地用起来了,让我们感到眼前一亮.这和小孩子读书一样,一开始语文.数学.化学都学,读书.网上游戏等,在脑子 ...
- 基于javaGUI的文档识别工具制作
基于javaGUI的文档识别工具制作 对于某些文本,其中富含了一些标志,需要去排除,以及去获得段落字数,以下是我个人写的一个比较简单的文档识别工具,含导入文件.导出文件以及一个简单的识别功能. 1.功 ...
- 从单一图像中提取文档图像:ICCV2019论文解读
从单一图像中提取文档图像:ICCV2019论文解读 DewarpNet: Single-Image Document Unwarping With Stacked 3D and 2D Regressi ...
- 函数小知识点(文档字符串,闭包等)
1 文档字符串(Documentation Strings) 一般被称为docstring,一款你应当使用的重要工具,它能够帮助你更好地记录程序并让其更加易于理解.令人惊叹的是,当程序实际运行时,我们 ...
- Spring Boot 集成Swagger2生成RESTful API文档
Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...
- c语言 如何读多种数据类型 非类,c语言程序设计教学大纲(非电气类)文档.doc
c语言程序设计教学大纲(非电气类)文档 <C语言程序设计>课程教学大纲 主任 教研室主任 大纲执笔人 姜长洪 王海荣 C语言备课组 一.课程基本信息 课程编号:×××× 课程名称:C语言程 ...
最新文章
- python的切片和索引是什么_Python*really*中默认的切片索引是什么?
- 数字货币 矿池 矿场 区别
- 使用CXF与Spring集成实现RESTFul WebService
- [Hadoop] Install Hadoop 2.2 on Win7 64bit
- java.util (Collection接口和Map接口)
- 查询空缺_携程旅行2021校招开启,9大类职位,1000+岗位空缺,本科及以上学历...
- DTP动态协商——trunk配置、如何关闭域名解析、光接口无法up的原因详解(附图)
- 蔡奇视察奇安信:对成功登陆科创板表示祝贺
- [基于子串搜索的方法] BNDM算法
- C# winForm utf8 gbk 相互转码小工具
- html设置按钮不同状态的背景图片,CSS实例:创建一个鼠标感应换图片的按钮
- D-tale功能的探索
- 403. 青蛙过河--(每日一难phase2--day10)
- 针对单个网站的渗透思路(精)
- 实例讲解EasyLanguage入门
- 【HTML】-- 用户注册表单
- f分布表完整图a=0.01_c++多态和虚函数表实现原理 - 一字千金
- java两周考核期被辞退_试用期被辞退,会影响一整年,或整个职场生涯
- 算法中的P问题、NP问题、NP难问题和NP完全问题
- 关于EBGP用回环口起邻居遇到的问题