如何配置 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 Method 和 InvokeHTTP-处理器的 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 中发布插入的主要内容,如果未能解决你的问题,请参考以下文章