【问题标题】:Insert data into influxdb from node / windows causes problems从节点/窗口将数据插入influxdb会导致问题
【发布时间】:2018-02-01 07:19:57
【问题描述】:

我正在尝试使用 node/windows 将数据插入 InfluxDb,但是有一个(看似众所周知的)错误,我无法解决问题。我正在尝试通过从文件加载数据并使用 POST 发送到我的数据库来批量插入本地数据库。这是我要插入的数据:

test_data.txt

test_measurement test=val1 1516665684
test_measurement price=val2 1516665685
test_measurement price=val3 1516665686

使用代码:

var http = require("http");
var fs = require('fs');


fs.readFile('test_data.txt', { encoding: 'utf8' }, function (err, data) {
  var options = {
    "method": "POST",
    "hostname": "localhost",
    "port": "8086",
    "path": "/write?db=test_db",
    "headers": {
      "cache-control": "no-cache"
    }
  };

  var req = http.request(options, function (res) {
    var chunks = [];

    res.on("data", function (chunk) {
      chunks.push(chunk);
    });

    res.on("end", function () {
      var body = Buffer.concat(chunks);
      console.log(body.toString());
    });
  });

  req.write(data);
  req.end();
});

我得到了错误

{"error":"unable to parse 'test_measurement test=val1 1516665684\r': bad timestamp\nunable to parse 'test_measurement price=val2 1516665685\r': bad timestamp\nunable to parse 'test_measurement price=val3 1516665686': bad timestamp"}

根据我的研究,我了解到 Windows 使用 \r\n 字符作为回车符,但我无法思考如何解决这个问题。当我读入文件时,我尝试删除所有 \r 和 \n 字符,但它似乎没有删除它们,因为我继续收到相同的错误。即使我能够以这种方式移除它们,influx 怎么会知道下一批插入的开始位置?它需要知道批量插入的下一行从哪里开始,但不喜欢换行符。

任何帮助都会很棒!

【问题讨论】:

    标签: node.js windows influxdb carriage-return


    【解决方案1】:

    Double quote string field values. Do not double quote floats, integers, or booleans.

    更新(实际响应出现在描述中之后)

    那么显然是\r

    你的文件是由 Windows 编辑器创建的,我猜 - 就是它最后有两个符号。

    所以你只要把它转成Unix格式,有很多工具,也许Notepad++是最流行的。

    或者,更好的是,只需在代码中添加一些不起眼的字符串预处理,使用 JS 就超级简单:

    req.write(data.replace("\r",""));
    

    【讨论】:

    • 感谢您的回复。我已经阅读了链接,但我不确定它如何适用于这种情况。它说永远不要将时间戳、度量、字段键或字段值引用为浮点数,我都没有这样做。也许您指的是以下行:“InfluxDB 将忽略所有后续字符,直到下一个换行符 \n”?我尝试删除文档中的所有回车符并用 \n 分隔行,但随后我收到一条错误消息,提示 1516665684\\n 'bad timestamp'。
    • 我的错!!我刚刚意识到我发布的错误消息是“无效的布尔值”,但实际的错误消息是“错误的时间戳”,因为 1516665684\r 不是时间戳。修复了原来的问题错误信息-_
    • 然而,字符串字段值在没有双引号的情况下传递看起来是不现实的
    • 解决了!解析出我节点中的 '\r' 就可以了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多