如何将文本文件中的日期时间字符串迁移到数据库中的日期时间字段中?
文本文件源输出配置中将日期时间字段数据类型改为DateTime,并且按照日期时间数据设置相应格式,如数据为2012-01-12 12:12:01,格式要设置为:yyyy-MM-dd HH:mm:ss,即可将文本文件中的日期时间字符串迁移到数据库中的日期时间字段中。
如何将数据库中的日期时间字段按照指定的格式输出到文件中?
在表/视图数据源组件的输出配置中,对日期时间字段的格式进行设置,将数据类型修改为String,然后设置相应的格式字符串,如将格式字符串设置为:yyyy/MM/dd HH:mm:ss后输出日期时间字段格式为:2012/01/12 12:12:10。
如何转换日期时间字符串格式,例如从 14 Jan 2012 15:19:51 转换为 2012-01-14 15:19:51?
使用数据清洗转换组件中的<日期、时间、日期时间字符串格式转换处理>规则,在设置时间日期格式转换界面上按如下说明设置属性:
转换方式:日期时间
地区:英文(美国)
转换前:自定义,dd MMM yyyy HH:mm:ss
转换后:yyyy-MM-dd HH:mm:ss
如果遇到null值导致规则和函数报错怎么办?
可以使用数据清洗转换中<字段若为 NULL,该字段被替换设定的值>规则,将 NULL 值用一个值替换后再进行处理。
转换流程中如何实现分支?
参考列转换组件。
如何给数据添加一个序列列?
应用列转换组件中添加一列,值类型选择序列,并对初始值、最大值、增量值进行设置。
如何生成 GUID 列?
应用列转换组件添加一列,数据类型设置为String,值类型选择表达式,值输入 GUID() 即可。
如何对数据进行过滤?
可以在组件输出线上设置过滤条件。
如何选择合适的增量抽取方式?
可以根据各种增量抽取方式的特点来选择合适的增量抽取方式,各种方式的特点如下:
触发器增量抽取方式:对 DMETL 服务器的负担较小,实现简洁,需要在源数据库中建立触发器,适用于数据量大的表,实时性要求较高的场合。
影子表增量抽取方式:通过对比影子表和原表的差异来捕获变更数据,适用于不能创建触发器的地方,以及实时性要求要求不高的场合。
Oracle 物化视图日志增量:Oracle 物化视图日志会自动记录基表红的数据变化情况,进行增量抽取时,从物化视图日志中读取数据,即可解析出发生在基表中的数据变化信息。
增量比对方式:不会入侵生成环境。使用增量比对组件,比对原表与目的表数据差异,适用于实时性要求不高,并且原表与目的表数据量不太大场合。
转换中<表/视图>源组件和<增量表>源组件的区别是什么?
<表/视图>组件用于全量数据抽取,<增量表>组件用于增量数据抽取。<表/视图>组件中只能选择普通表数据集,而<增量表>组件只能选择增量数据集。<增量表>组件除了读取增量数据集中的数据外,还会记录增量抽取相关的状态信息,以保证数据抽取没有重复和遗漏。
<表>目的组件和<增量表>目的组件的区别是什么?
<表>数据装载组件一般只做数据插入,而<增量表>组件会根据操作列来决定是进行插入、更新或者删除操作。此外<增量表>装载组件还会记录一些状态信息,以保证增量数据装载不会重复或者遗漏。
<增量表>源组件必须和<增量表>目的一起使用吗?
不一定,<增量表>源组件可以和一般的目的组件一起使用,一般的源组件也可以和<增量表>目的一起使用,两者都可以独立的和任何其它组件一起组成构成流程,以满足一些特殊的业务需求,例如:如果要将增量数据记录到文件中,则可以用<增量表>源组件和<文本文件>目的组件结合使用,如果要将文本文件中的增量数据同步到表中可以把<文本文件>读取组件和<增量表>目的一起使用。
增量抽取首次同步时源和目的数据不一致怎么办?
按照以下步骤进行首次同步:
- 清空目的表数据;
- 在<增量表>源组件上勾选“首次同步时同步基表数据选项”并点击“设为首次同步”按钮;
- 在<增量表>目的组件上点击设为首次同步按钮;
- 执行流程。
全量数据抽取时如何实现持断点续传?
可以使用变量实现断点续传,具体说明见典型示例《基于变量实现断点续传》。
如何创建大量类似的转换?
可以使用批量转换生成向导工具。
本地文件路径如何填写?
流程运行在 native 原生本地执行器上时,文件路径就是本地执行器上的路径;流程如果运行 hadoop yarn 集群环境,路径为 hdfs 路径;流程运行在 flink standalone 就是 flink 集群环境 taskmanager 机器上的文件路径。建议非 native 执行器运行 DMETL 流程时使用 hadoop hdfs 路径。
增量比对失败的常见原因
- 源端和目的端的数据没有按比较列进行顺序排列。
- 源端或者目的端的数据在比较列上出现了重复行值。
- 增量比对组件设置的排序方式与源端目的端数据的排序方式不同。
为什么有时候排序正确并且内容相同的两份数据进行增量比对,结果却是每一行数据都不同?
有可能是因为行值里面包含了二进制数据,二进制数据变成二进制数据之前哪怕相同,也会被组件得出不一致的结论。
为什么有时候 kafka 读不动,或者读完了之后不结束?
排除kafka源本身的问题,前者一般是因为没有设置消费组,后者一般是因为没有勾选“主题返回数据为空时停止”。