apache-nifi - 如何将 Avro 转换为 SQL 批量更新?
问题描述
我正在尝试将输入 Avro(Avro 记录数组)转换为一批 upsert 语句。有没有可以做到这一点的处理器?
[Read External DB (RDBMS)]->[Avro to Upsert batch]->[Local DB]
我发现可以在 PutSQL 之前使用 sql.N.args.type & name 格式化记录。使用这种方法,是否有处理器或技巧可以使这个干净?
[读取外部数据库(RDBMS)]->[拆分为1]->[将Avro转换为sql.N.args.type和名称格式]->[SetAttribute: sql.statement=SQL]->[Local DB]
在第二种情况下,我被困在 [将 Avro 转换为 sql.N.args.type 和名称格式] 并且我试图抵制使用 ExecuteScript 的冲动......最简单的前进方式是什么?
解决方案
如果您需要生成 SQL(例如进行 upsert 与插入),您可以使用 ConvertJSONToSQL(假设您的内容是 JSON),它会为您完成所有 sql.args.N 的工作。如果您使用 ExecuteSQLRecord 或 QueryDatabaseTableRecord,您可以将源数据库信息作为 JSON(通过使用 JsonRecordSetWriter)与仅输出 Avro 的非基于记录的版本相比。否则,您需要在 ConvertJSONToSQL 之前使用 ConvertAvroToJSON。
推荐阅读
- google-places-api - 如何使用 Google Places API 获取某个区域内的企业或场所的数量?
- spring - 如何在 Spring 应用程序中更改 Hateoas 输出格式?
- python-3.x - numpy 一维数组:识别总和为0的元素对
- javascript - 为什么不能更新 css 变量名称以应用不同的颜色主题?
- c# - 无法将服务层添加到 Orchard 站点
- swift - 如何在创建帐户之前检查电子邮件是否已经存在(Swift)
- python - 对二维数组的每一行对另一个二维数组执行数学运算
- python - 如何从文件夹中读取多个 numpy 数组
- typescript - TypeScript Vue 组件中的泛型
- java - 无法共享我的 android studio 项目以 git 加载永无止境?