【问题标题】:How to use Python to iterate through influxDB results如何使用 Python 迭代 influxDB 结果
【发布时间】:2018-07-11 19:27:33
【问题描述】:

如何遍历从 influxDB 返回的结果集?我通过使用

得到这个结果
client = InfluxDBClient(host=influx_host, port=influx_port,database='db')
q = client.query("select * from cpu limit 1")

ResultSet({'(u'cpu', None)': [{u'usage_guest_nice': 0, u'usage_user': 0.90783871790308868, u'usage_nice': 0, u'usage_steal': 0, u'usage_iowait ': 0.056348610076366427, u'host': u'xxx.xxx.hostname.com', u'usage_guest': 0, u'usage_idle': 98.184322579062794, u'usage_softirq': 0.0062609566755314457, u'time': 06-26T16:25:00Z', u'usage_irq': 0, u'cpu': u'cpu-total', u'usage_system': 0.84522915123660536}]})

我想获取usage_user 值、usage_system 值等并将它们插入到数组中。

【问题讨论】:

  • 你也可以在执行查询的地方发布 sn-p 吗?
  • 什么意思我在哪里执行? IDE?它在 PyCharm 中
  • 您是否使用 rs.get_points() 来获得该结果?
  • 不,我使用查询 q = client.query("select * from events limit 1")
  • 请记住,您可以按测量值或标签进行过滤,请查看 influxdb-python.readthedocs.io/en/latest/… 在您的情况下将是 cpu_points = list(rs.get_points(measurement='usage_system'))

标签: python influxdb influxdb-python


【解决方案1】:

我设法使用 raw 选项以 JSON 格式导出结果,然后以逗号分隔它们,将它们添加到数组中,然后遍历它们。我不得不为此使用数据框

from influxdb import InfluxDBClient
import pandas as pd
client = InfluxDBClient(host=influx_host, port=influx_port,database='db')
q = "select * from cpu limit 1"
result = pd.DataFrame(client.query(q, chunked=False).raw)

我希望这对其他人有所帮助,因为文档不是很清楚如何使用它。

【讨论】:

    【解决方案2】:

    遍历ResultSet 的正确方法是使用其get_points() 方法,该方法可以选择按度量或标签或两者进行过滤。

    例如:

    results = client.query("select * from cpu limit 1")
    for measurement in results.get_points(measurement='cpu'):
        usage_system = measurement['usage_system']
        # do whatever with usage_system
    

    查看官方InfluxDB-Python 文档。

    【讨论】:

      【解决方案3】:

      我同意 Peterdn,因为客户端本身有更简单的方法,就像这样

      results = client.query("select * from cpu limit 100")
      resultInList = results.get_points(measurement='cpu')
      print(type(resultInList)
      --->>> <class 'list'>  
      

      最后一个打印语句显示您有响应数据列表.....这意味着它正在将您的结果集转换为列表,您可以在不使用 Pandas 的情况下轻松迭代...

      【讨论】:

        【解决方案4】:

        正如docs 和@peterdn 中指出的,InfluxDBClient.query() 函数返回一个ResultSet 对象。

        使用rs.get_points() 将为ResultSet 中的所有点返回一个生成器

        示例:

        rs = cli.query("SELECT * from cpu")
        cpu_points = list(rs.get_points(measurement='cpu'))
        

        您甚至可以按如下方式按度量、标签或两者进行过滤:

        按测量过滤:

        rs = cli.query("SELECT * from cpu")
        cpu_points = list(rs.get_points(measurement='cpu'))
        

        按标签过滤:

        rs = cli.query("SELECT * from cpu")
        cpu_influxdb_com_points = list(rs.get_points(tags={"host_name": "influxdb.com"}))
        

        按标签和度量过滤:

        rs = cli.query("SELECT * from cpu")
        points = list(rs.get_points(measurement='cpu', tags={'host_name': 'influxdb.com'}))
        

        希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-11-23
          • 1970-01-01
          • 2016-01-17
          • 2010-09-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多