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

news/2025/3/15 12:22:30/

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语言做了处理,经测试没再发现此类问题。


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


http://www.ppmy.cn/news/65835.html

相关文章

基于人工智能AI视频分析的智慧安监解决方案

方案背景 为了保证对园区环境风险进行有效识别&#xff0c;传统视频监控存在视频结构化利用率低的问题&#xff0c;在实际使用过程中&#xff0c;安全管理人员工作效率低下&#xff0c;依靠人工肉眼查看灵活度低&#xff0c;风险漏报概率高&#xff0c;出现异常情况跟踪不及时&…

Linux下的Tomcat的安装详解--值得一看

如有错误&#xff0c;敬请谅解&#xff01; 此文章仅为本人学习笔记&#xff0c;仅供参考&#xff0c;如有冒犯&#xff0c;请联系作者删除&#xff01;&#xff01; 目录 简述静态网页和动态网页的区别。 简述 Webl.0 和 Web2.0 的区别。 tomcat8的安装&#xff0c;配置服…

zeppos 开发工具模拟器 simulator 无法显示app

zeppos 开发工具模拟器 simulator 无法显示app 目录问题描述&#xff1a;simulator的 Apps 不显示 hello-world 工程解决方案 目录 问题描述&#xff1a;simulator的 Apps 不显示 hello-world 工程 已确认部分&#xff1a; 1.网卡驱动安装成功 2.simulator version:1.1.9 3.d…

国内又款智能AI聊天软件-科大讯飞星火模型

介绍 介绍 中国科大讯飞星火GPT聊天软件是一款基于自然语言处理技术的人工智能聊天机器人。它利用了大量的文本数据&#xff0c;通过深度学习模型进行训练&#xff0c;从而实现与用户的智能对话。讯飞星火GPT聊天软件能够理解用户输入的问题或指令&#xff0c;并根据预设的回答…

成为大数据开发工程师要学习哪些知识?

在当今信息时代&#xff0c;大数据已经成为了许多企业的核心竞争力。因此&#xff0c;大数据开发工程师已经成为了当今互联网行业中备受瞩目的职业。如果你想成为一名大数据开发工程师&#xff0c;那么你需要掌握哪些知识呢&#xff1f;在本文中&#xff0c;我们将会详细介绍。…

Netfilter和iptables命令详解,从入门到精通

本文目录 1、netfilter架构和工作原则简介2、iptables操作命令说明2.1 、Filtering Specifications2.2、Target Specifications2.3、一个基于Linux的基本的防火墙的配置例子 netfilter 是Linux内核里网络部分的一个重要框架&#xff0c;内核通过netfilter完成IP报文的一些操作。…

ESP32 FreeRTOS学习总结

2023.5.11 1.Task 创建任务常用API&#xff1a; 任务函数描述xTaskCreate()使用动态的方法创建一个任务xTaskCreatePinnedToCore指定任务的运行核心(最后一个参数)vTaskDelete(NULL)删除当前任务 BaseType_t xTaskCreate(TaskFunction_t pxTaskCode, // 任…

day(2,3)-内核模块

内核模块上 主要内容 向内核添加新功能 内核模块基础代码讲解 内核模块多源文件编程 内核模块信息宏 一、向内核添加新功能 1.1 静态加载法&#xff1a; 即新功能源码与内核其它代码一起编译进uImage文件内 Kconfig是make menuconfig的界面配置文件 1.2动态加载法&am…