NiFi QueryRecord处理器提取可选JSON属性报错的解决咨询
解决NiFi QueryRecord可选字段提取报错的方案
方案1:使用TRY()函数直接处理可选字段
NiFi的QueryRecord基于Apache Calcite,支持TRY()函数,它会在字段不存在或转换失败时返回NULL,完美适配可选字段场景,完全不用引用flowfile表名:
SELECT is_answered, view_count, answer_count, score, last_activity_date, creation_date, question_id, title, TRY(last_edit_date) AS last_edit_date FROM flowfile
这个函数会自动处理字段不存在的情况,返回NULL,不会触发“列不存在”的错误。
方案2:提前用UpdateRecord补全可选字段
如果不想在SQL里写特殊逻辑,可以先用UpdateRecord处理器给所有JSON对象补全可选字段(缺失的设为NULL):
- 配置UpdateRecord的
Record Reader和Record Writer为对应的JSON reader/writer - 添加一个
Update Record属性:- 目标字段:
/last_edit_date - 值:
coalesce(/last_edit_date, null)
处理后所有FlowFile都会有last_edit_date字段,后续QueryRecord直接正常选择该字段即可,无需额外判断。
- 目标字段:
方案3:使用Calcite的CASE结合字段存在判断(无需flowfile表名)
如果不想用TRY函数,也可以通过元数据查询判断字段是否存在,写法如下:
SELECT is_answered, view_count, answer_count, score, last_activity_date, creation_date, question_id, title, CASE WHEN EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'flowfile' AND COLUMN_NAME = 'last_edit_date') THEN last_edit_date ELSE NULL END AS last_edit_date FROM flowfile
不过这个方法依赖元数据查询,相比TRY函数稍显繁琐,优先推荐方案1。
内容的提问来源于stack exchange,提问作者donut123
相关产品推荐
相关产品推荐

