微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Python 创建 Nifi PutSQL 处理器

如何解决使用 Python 创建 Nifi PutSQL 处理器

我想将我的 Nifi-ETL 管道(主要是 PUTsql 处理器)从我的开发实例转移到我的生产实例 Apache Nifi,最好使用 Python 以实现重复使用。

我想我可以尝试一下并复制粘贴它们。

  1. 使用 /nifi-api/processors/{id} 上的 GET 请求从 DEV 获取处理器
  2. PUT 处理器到 PRD Nifi 实例,并在 /nifi-api/processors/{id} 上发出 PUT 请求

代码

# GET processor and parse to JSON
response = requests.get(nifi_url_dev + 'processors/' + proc_id,headers=header)
processor = json.loads(response.content)


# PUT processor 
processor['revision']['version'] = 0 # reset version
payload = json.dumps(processor).encode('utf8')
response = requests.put(nifi_url_prd + 'processors/' + proc_id,data=payload,headers=header)

这在带有 409 HTTP Conflict Error 的 PUT 上失败了。我猜这是因为我试图将资源放在一个 URI 上,该 URI 期望资源已经存在于该位置。

documentation 在处理器 API 旁边列出了“创建处理器、设置属性、计划”,但是在查看它时,没有用于创建的专用 API - 我决定使用 PUT,因为它说“更新处理器”,这是我在那里看到的最接近从头开始创建新处理器的东西。

您对如何使用 Python 创建处理器有任何想法吗?是通过复制现有的还是创建全新的?

解决方法

所以问题是 API 文档有点误导... 创建新处理器的正确 API 是 process-groups/{process_group_id}/processors 。尽管有说明,但它也列在“进程组”下的文档中,而不是“处理器”下。

以下对我有用 - 有必要稍微调整一下 json:主要是删除开发环境的任何 ID。

# GET processor and parse to JSON
response = requests.get(nifi_url_dev + 'processors/' + proc_id,headers=header)
processor = json.loads(response.content)


# PUT processor 
del processor["id"]  # Processor ID cannot be specified.
del processor["uri"]  # Processor ID cannot be specified.
del processor["component"]["id"]  # Processor ID cannot be specified.

del processor["component"]["parentGroupId"]  # Parent process group id should not be specified.
# If specified,the parent process group id must be the same as specified in the POST-URI.

processor['revision']['version'] = 0 # reset version
payload = json.dumps(processor).encode('utf8')
response = requests.post(nifi_url_prd + 'process-groups/' + process_group + '/processors',data=payload,headers=header)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。