如何配置 NiFi InvokeHTTP 以在 Clickhouse 中发布插入

Posted

技术标签:

【中文标题】如何配置 NiFi InvokeHTTP 以在 Clickhouse 中发布插入【英文标题】:How to configure NiFi InvokeHTTP to post insert in Clickhouse 【发布时间】:2020-04-09 12:05:32 【问题描述】:

我在 NiFi 属性中添加了适用于 CURL 的完整 INSERT 命令:

echo "INSERT INTO default.PERFTEST_BUFFER VALUES (1, '2020-04-09 19:06:02', 48.8644, 'A')" \
  | curl 'http://xxx.xxx.xxx.xxx:8123/?' --data-binary @-

插入属性:

INSERT INTO default.PERFTEST_BUFFER 
VALUES (1, '2020-04-09 19:06:02', 48.8644, 'A')

我不知道 InvokeHTTP 处理器的所有参数应该是什么。

前两个我用过:

  POST

  http://xxx.xxx.xxx.xxx:8123/

那我就迷路了。 知道如何配置它吗?

【问题讨论】:

在 InvokeHTTP 之前将INSERT INTO ... 放入流文件内容中 【参考方案1】:

如果您的查询是静态的,您可以将其以编码格式传递到查询字符串中:

# GET

curl 'http://xxx.xxx.xxx.xxx:8123/?query=INSERT%20INTO%20default.PERFTEST_BUFFER%20VALUES%20%281%2C%20%272020-04-09%2019%3A06%3A02%27%2C%2048.8644%2C%20%27A%27%29'


# POST

curl -d '' 'http://xxx.xxx.xxx.xxx:8123/?query=INSERT%20INTO%20default.PERFTEST_BUFFER%20VALUES%20%281%2C%20%272020-04-09%2019%3A06%3A02%27%2C%2048.8644%2C%20%27A%27%29'

它只需要将所需的值传递给两个参数:HTTP MethodInvokeHTTP-处理器的 Remote URL

【讨论】:

【参考方案2】:

感谢 daggett 和这里的示例:

https://github.com/zezutom/NiFiByExample

在 InvokeHTTP 之前使用处理器 ReplaceText,将流文件内容替换为具有完整插入命令的变量“Insert”值

搜索值 (?s)(^.*$) 替换值 $Insert

所以流文件内容是

INSERT INTO default.PERFTEST_BUFFER VALUES (1, '2020-04-09 19:06:02', 48.8644, 'A')

处理器InvokeHTTP跟随以下参数

HTTP 方法 POST 远程网址http://xxx.xxx.xxx.xxx:8123/ SSL 上下文服务未设置值 连接超时 5 秒 读取超时 15 秒 包括日期标题真 遵循重定向真 要发送的属性未设置值 基本身份验证用户名未设置值 基本身份验证密码未设置值 代理配置服务未设置值 代理主机未设置值 代理端口未设置值 代理类型http 代理用户名未设置值 代理密码未设置值 将响应正文放入未设置值的属性中 放入属性 256 的最大长度 使用摘要式身份验证错误 始终输出响应为真 将响应标头添加到请求 false 内容类型 $mime.type 发送消息正文 true 使用分块编码 false 惩罚“不重试”错误 使用 HTTP ETag 错误 最大 ETag 缓存大小 10MB

【讨论】:

以上是关于如何配置 NiFi InvokeHTTP 以在 Clickhouse 中发布插入的主要内容,如果未能解决你的问题,请参考以下文章

Nifi InvokeHttp processor

Apache Nifi InvokeHttp超时问题

Nifi多部分形式

NIFI同步API接口数据

OkHttp是否在重定向上发送授权和其他可能敏感的标头?

Apache NiFi系统管理员指南 [ 一 ]