暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kettle知识库问答系列之四十不惑

以数据之名 2021-07-14
586


知其然,

知其所以然。


摘要:本文由以数据之名分享,正所谓“无论为哀为乐,为怨为怒,为恋为骇,为忧为惭,常若知其然而不知其所以然”。前面的那篇文章Kettle知识库问答系列之三十而立”,叙述了使用Kettle作为ETL开发的常见组件使用说明、业务场景实现逻辑以及组件性能优化相关内容名。今天,我们跟着小编的节奏,继续探讨Kettle知识库问答系列之四十不惑篇,做到“知其然,亦知其所以然”。


第031问:插入更新有没有什么合适的替代方案?

第031答:首先,我们必须承认插入更新组件是数据增量清洗的必不可少的组件,它的组件效率不能主观地说很低,这跟我们的使用(场景依据&使用方式&实际数据)有密不可分的关联。前面我们已经讲过如何优化插入更新组件的执行效率,下面我们继续探讨平行方案:

1、先删除,后插入。每批次数据(N)都是全量(删除N),数据库碎片太多 ;

2、先插入,异常数据再更新(适合同批次数据更新较少,插入较多的情况)。但目标数据库服务端冲突插入异常较多,异常数量跟数据冲突成正相关。总结:三种方案具体执行效率高低,跟数据有关,不能一概而论。


第032问:kettle阻塞组件如何使用?

第032答:转换内使用阻塞组件,要遵循以下两个原则:

1、必须有两个及以上的分支,使用阻塞才会生效;

2、阻塞组件只能阻塞另一分支的某个步骤,且保证该步骤执行完成后,才执行阻塞组件当前所在分支后面的步骤

3、如果要在输入input组件或者Sql脚本组件前加阻塞,需要双重输入才可以控制,如果没有需要如图虚构一个输入(比如此处表输入,输出一个常量值“A”;作为后面的输入和SQL脚本的参数,虚构一个where条件如"A=?")

4、3的虚构输入,主要目的是为了控制参数绑定成功后,再执行后续的输入或SQL脚本操作,以保证业务逻辑事务的先后顺序。

5、示例获取,关注回复block,获取具体下载方式


第033问:Kettle6.x或7.x版本,自带默认的es插件为什么连接服务端es6或es7异常?

第033答:

kettle6.x或7.1自带的es插件,是无法正常连接到es6以上的服务端的。因为自带插件包es客户端版本2.X太低啦,跟服务端高版本的ES不匹配。

旧-> 新->


第034问:具体es插件配置那个端口?

第034答:

这个要看你的es插件代码,如果是通过低阶的transportclient访问es,用的9300端口;如果是通过高阶的resthighlevelclient,用的是9200端口。

具体参考下,我写的es插件文章“Kettle插件开发之Elasticsearch篇”。6.x版本用的低阶API(参考版本匹配:客户端es版本6.3.0,具体参考下,我写的es插件文章“参考版本匹配:客户端es版本7.2.0,服务端es版本是7.4.0)


第035问:连接配置信息如何批量替换?

第035答:linux修改server配置信息,具体脚本如下:

    sed -i "s:<server>127.0.0.1</server>:<server>127.0.0.2</server>:g" `grep "<server>127.0.0.1</server>" -rl ./`
    port、username、password配置修改命令,同步调整,但注意配置检查唯一性,防止修改过度。其中password修改注意先使用工具加密哦


    第036问:连接配置信息批量替换也很麻烦,有没有更简单的操作?

    第036答:在保证连接名称不变的情况下,实际上是可以高效完成配置变更的,具体有以下几种操作:

    1、开发时使用文件资源库或数据库资源,连接配置repositories.xml统一管理和维护,一次变更即可,批量导出和导入即可,建议使用资源库模式运行任务。但如果使用文件模式运行,需要每次变更所有文件;

    2、连接方式使用JNDI,统一配置文件jdbc.properties,每次变更只需修改该文件即可

    3、连接方式使用JDBC,动态连接配置尽量全部使用参数,运行时用“-param”动态传参绑定即可,调整运行脚本即可。这里也可以把连接配置放到数据库等介质,运行前获取参数动态绑定,就可以做到配置统一配置,一次修改,终身受益。


    第037问:kettle 数据流中空字符串为什么会莫名的转为null?

    第037答:这是因为Kettle默认把空字符串处理成NULL,即认为两者相同,具体由下面参数确定,可通过调整参数值来改变。

    变量名:KETTLE_EMPTY_STRING_DIFFERS_FROM_NULL

    默认值:N,

    描述:NULL vs Empty String. If this setting is set to Y, an empty string and null are different. Otherwise they are not.

    NULL与空字符串。如果将此设置设置为Y,则空字符串和null是不同的。否则空字符串就默认赋值为NULL。


    第038问:开并发复制模式可以提高效率嘛?

    第038答:答案是肯定的,但具体的复制模式的使用场景,必须要了解清楚。

    1、输入是不能开的,数据会重复取N倍。

    2、中间数据流组件多分支后面的第一个组件不可以开,会重复N倍。

    3、输出也要适当设置,因为连接数过大,服务端压力就越大,

    4、同时,如果前面的数据流行数越少,那均分到不同的线程,数据行就越少。甚至大部分线程没数据,连接超时的可能性就越大。


    第039问:kettle Linux环境如何创建资源库?

    第039答:数据库资源库可以通过跳板机远程创建,文件资源库和数据库资源库都可以直接修改repositories.xml文件,具体步骤如下:

    • 数据库资源库

    1、先新增connection标签,及连接配置信息,参考windows客户端,或者转换作业JDBC连接配置信息。

    name:连接名称

    server:ip或域名

    type:数据库类型

    access:连接方式,Native即JDBC、ODBC、JNDI

    port:端口号

    username:用户名

    password:密码(Encrypted为前缀,必须添加;后面为真实密码加密后的结果)

    ……,剩余参数不再一一介绍,自己脑补吧。

    2、再新增repository标签,其中id属性KettleDatabaseRepository*****),标记此资源库为数据库资源库

    name:自定义资源库名称

    description:资源库描述信息

    is_default:默认false

    connection:对应上面的连接配置信息的name属性值*****)


    • 文件资源库

    1、文件资源库不需要connection连接配置,直接新增repository标签,其中id属性KettleFileRepository*****),标记此资源库为文件资源库

    name:自定义资源库名称

    description:资源库描述信息

    is_default:默认false

    base_directory:文件资源库根目录*****)

    read_only:是否只读(或者是否修改对应作业或转换),默认N

    hides_hidden_files:是否显示隐藏文件夹,默认N


    第040问:Kettle可以用到数据仓库的哪些层?

    第040答:首先我们要了解下数据仓库分层结构,具体如下:

    DWD可以和ODS层(贴源层,和源库一致的模型 )合并,也可以是架在ODS层之上的明细层,这层可以做一些轻度的维度退化,减少事实表和维度表的关联。

    DWB层,可以看做C层,中间层或者叫中心层,存一些轻度汇总数据。

    再上层是DWS层,高度汇总聚合层,一般采用宽表构建综合指标数据。

    最上层是ADS层,即应用层,存放不同产品的统计指标数据,直接对外提供原子化服务。

        那么中间需要数据转换的步骤,都可以使用Kettle来进行数据清洗,当然前提是数据时效可以满足的情况。


    Kettle插件开发之Splunk篇

    Kettle插件开发之Elasticsearch篇

    Kettle插件开发之KafkaConsumerAssignPartition篇

    Kettle插件开发之KafkaProducer篇

    Kettle插件开发之KafkaConsumer篇

    Kettle插件开发之KafkaConsumerAssignPartition篇

    Kettle插件开发之MQToSQL篇

    Kettle插件开发之Redis篇

    基于Kettle快速构建基础数据仓库平台

    Kettle知识库问答系列之三十而立

    Kettle实战系列之Carte集群应用

    Kettle实战系列之动态邮件


    虽小编一己之力微弱,但读者众星之光璀璨。小编敞开心扉之门,还望倾囊赐教原创之文,期待之心满于胸怀,感激之情溢于言表。一句话,欢迎联系小编投稿您的原创文章!

    回复1,获取全平台解压缩密钥

    回复2,获取kettle快速入门示例

    回复kettle,获取离线和实时数据仓库资料和视频

    回复code,获取全平台Kettle插件及实例源码

    回复plugin,获取全平台插件Release包

    回复ppt,获取全平台分享精彩PPT模板

    回复etl,获取Kettle知识库系列资料

    回复mysql,获取MySQL中英文指导学习手册

    回复mail,获取Kettle实战系列之动态邮件附件

    回复block,获取Kettle阻塞组件使用示例

    文章转载自以数据之名,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论