【问题标题】:importing csv file data into influxdb将csv文件数据导入influxdb
【发布时间】:2017-08-28 09:47:46
【问题描述】:

是否可以将 csv 文件数据推送到 influxdb。例如,我有一个传感器设备,它每分钟将数据更新为 csv 文件。我需要对其进行一些操作。 我需要将 csv 文件数据推送到 influxdb,为此我正在编写一个 python 脚本。 我试图找到一些示例,但找不到任何示例。在我的 python 脚本下面只有读取 csv 文件代码,这很简单,但没有代码如何将这个 csv 传递给 influx db。我正在尝试的 csv 文件和代码如下所示。

DATE,value
2017-03-23 11:50:38,16
2017-03-23 11:50:44,83
2017-03-23 11:50:50,16
2017-03-23 11:50:56,70
2017-03-23 11:51:02,96

代码是

import datetime
import random
import time
import os
import csv
from csv import reader
import argparse
from influxdb import client as influxdb


db = influxdb.InfluxDBClient(host, 8086, rob, xxxx, sensors_data)


def read_data(filename):
    with open(filename) as f:
        reader = f.readlines()[1:]
        for line in reader:
            print line


if __name__ == '__main__':
    filename = '/home/rob/myfile.csv'
    a = read_data(filename)

我找到了这个链接,但它不同,不符合我的要求。 http://coendegroot.com/grafana-influxdb-and-python-simple-sample/ 我可以读取这个 csv 文件,现在我需要将 csv 文件数据发送到 influx db。但我不知道如何处理 python 脚本。我试图找到例子,但没有成功。如果有人指导我,我将非常感激。 非常感谢

我按照 Pigueiras 的建议修改了代码,看起来是这样的

import datetime
import random
import time
import os
import csv
from csv import reader
import argparse
from influxdb import client as influxdb


db = influxdb.InfluxDBClient(host, 8086, rob, xxxx, sensors_data)
def read_data():
    with open('file.csv') as f:
        return [x.split(',') for x in f.readlines()[1:]]

a = read_data()

for metric in a:
    influx_metric = [{
        'measurement': 'your_measurement',
        'time': a[0],
        'fields': {
            'value': a[1]
        }
    }]
    db.write_points(influx_metric)

我尝试了这段代码,它给了我以下错误

 'NameError: name 'your_measurement' is not defined

如果我使用类似“测量”:“你的测量”。然后我得到了这个错误。 .......

    File "all_flux.py", line 37, in <module>
db.write_points(influx_metric)
  File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 411, in write_points
tags=tags, protocol=protocol)
  File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 461, in _write_points
protocol=protocol
  File "/usr/local/lib/python2.7/dist-packages/influxdb/client.py", line 282, in write
data = make_lines(data, precision).encode('utf-8')
  File "/usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py", line 154, in make_lines
_convert_timestamp(point['time'], precision)
  File "/usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py", line 40, in _convert_timestamp
raise ValueError(timestamp)
ValueError: ['2017-03-23 11:50:38', '16\r\n']

DATE 字段或列如下所示“2017-03-23 11:50:38” 所以我使用 return [x.split(',').... 而且我也忽略了第一行。但我得到了这个值错误

【问题讨论】:

    标签: python csv influxdb


    【解决方案1】:

    您只需要构建一个 JSON 主体,将您从 CSV 读取的数据插入到 Influx 中。小心 read_data 函数,它没有返回任何东西。

    这样的东西应该可以正常工作(当然,它可以优化为一次插入多个点):

    def read_data():
        with open('file.csv') as f:
            return [x.split(',') for x in f.readlines()[1:]]
    
    a = read_data()
    
    for metric in a:
        influx_metric = [{
            'measurement': 'your_measurement',
            'time': metric[0],
            'fields': {
                 'value': metric[1]
            }
        }]
        db.write_points(influx_metric)
    

    【讨论】:

    • 非常感谢。我会试一试,很快就会回来。
    • 我试过你的代码,它给了我以下错误''NameError:名称'your_measurement'未定义,如果我使用像'measurement':'your_measurement'。然后我得到了这个错误。 .......'文件“/usr/local/lib/python2.7/dist-packages/influxdb/line_protocol.py”,第 40 行,在 _convert_timestamp 中引发 ValueError(timestamp) ValueError: ['DATE,value' ] '
    • 我将使用您的代码和以下错误更新我的问题。可能看起来很乱。非常感谢您的帮助
    • 我尝试忽略第一行,并且我做了一些更改,这些更改显示在问题中。我编辑了您的问题代码部分以及我收到的错误消息。如果你能给我一个想法。我将不胜感激。
    • @rob 抱歉打错了,应该是 metric[0] 而不是 `a[0]
    【解决方案2】:

    我找到了解决方案:将 csv 导出到 influx。 https://github.com/Bugazelle/export-csv-to-influx

    安装方式:pip install ExportCsvToInflux

    demo.csv

    timestamp,url,response_time
    2019-07-11 02:04:05,https://jmeter.apache.org/,1.434
    2019-07-11 02:04:06,https://jmeter.apache.org/,2.434
    2019-07-11 02:04:07,https://jmeter.apache.org/,1.200
    2019-07-11 02:04:08,https://jmeter.apache.org/,1.675
    2019-07-11 02:04:09,https://jmeter.apache.org/,2.265
    2019-07-11 02:04:10,https://sample-demo.org/,1.430
    2019-07-12 08:54:13,https://sample-show.org/,1.300
    2019-07-12 14:06:00,https://sample-7.org/,1.289
    2019-07-12 18:45:34,https://sample-8.org/,2.876
    
    export_csv_to_influx \
    --csv demo.csv \
    --dbname demo \
    --measurement demo \
    --tag_columns url \
    --field_columns response_time \
    --user admin \
    --password admin \
    --force_insert_even_csv_no_update True \
    --server 127.0.0.1:8086
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2022-11-21
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 2015-02-22
      相关资源
      最近更新 更多