实时数仓项目开发过程中发现的几个问题和优化点(数据接入)

1、属性值被截断的问题

在数据实时接入阶段,使用NIFI ExecuteScript组件生成增、改、删SQL语句,将SQL语句放到了attribute中(详见视频教程icon-default.png?t=N3I4http://mp.weixin.qq.com/s?__biz=MzIyNzkwNDE4Nw==&mid=2247486672&idx=1&sn=41793a61dc5f7ca6b6f9a34b4fa0ac02&chksm=e85b5304df2cda1247e0e6dfdddab7c68ff7b29e2f35b9d3eacb61baf13ec18d27367f78dfe9&scene=21#wechat_redirect)。

在NiFi中,session.putAttribute方法没有对属性值的长度进行限制。 

在使用putAttribute方法时,可以将任何字符串值分配给属性,该字符串可以是任何长度。只要有足够的内存可用来创建和维护该属性的值,就可以将任何长度的字符串值分配给该属性。 

然而,如果同一个流文件上设置重复的属性名,则会被视为同一属性,后面的属性值会覆盖先前的属性值。因此,在设置属性时应格外注意,以避免不必要的数据丢失。

这里会有一个不方便的地方,就是如果使用View Data Provenance菜单查看历史记录时,会发现由于attribute内容过多,显示不完整。出现这个情况,是因为属性nifi.provenance.repository.max.attribute.length的限制:

nifi.provenance.repository.max.attribute.length属性是Apache NiFi工具中的一个属性,用于指定属性值(即Attributes)的最大长度。

在NiFi中,Provenance Repository是一种跟踪数据流的机制,可用于了解从组件到组件的数据处理行为。Provenance事件会记录数据流中每个数据包的信息,包括数据包类型、大小、来源和目标等。该属性指定了Provenance事件中Attribute的最大长度。如果属性的实际长度超过此值,将无法存储Provenance事件。

默认情况下,该属性的值为 65536 字节(64 KB),这意味着属性的最大长度为 64 KB。可以通过编辑nifi.properties文件来更改该值。 

例如,如果将属性设置为100000,则Provenance事件中的属性值不能超过100000字节。如果Provenance事件中的任何属性值超过此限制,则会被截断。

2、将SQL语句输出到FlowFile内容中

这一思路在视频中提了一下,没有详解,有朋友询问如何实现,这里给出方法。

首先,增、改、删三种SQL要输出到三个FlowFile中,因为如果输出到一个FlowFile,三个SQL以分号分割,在下一步执行时,会报错,这是JDBC机制决定的。

其次,输出的顺序应该是增、改、删的顺序,下一步的队列优先级应该设置为FIFO。

下面是实现代码:

 var sql_array = all_sql.split(";"); for(var i=0;i<sql_array.length;i++) {    if(sql_array[i].length>0)    {      var outputFlowFile = session.create();      outputFlowFile = session.write(outputFlowFile,          new OutputStreamCallback(function(outputStream) {              outputStream.write(sql_array[i].getBytes(StandardCharsets.UTF_8))      }));      session.transfer(outputFlowFile, REL_SUCCESS);   }}session.remove(flowFile);

3、JSON.parse方法long精度丢失的问题

如果处理的数据中有长整型,要注意此问题。尤其是主键值为长整型,由于精度丢失,会导致记录被覆盖。笔者遇到此类问题,使用Java语言做了处理,经测试没再发现此类问题。


感谢大家的持续关注!我会持续以文字和视频的形式分享实时数仓项目建设过程中,遇到的各种坑和一些经验。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

登峰大数据

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值