【问题标题】:influxdb data/table be downloaded as csv file?将 influxdb 数据/表下载为 csv 文件?
【发布时间】:2018-11-19 02:58:54
【问题描述】:

Influxdb 是一个时间序列数据库,它将数据及其属性存储在表中,通常称为测量值。

influxdb数据库中的表可以以csv格式提取到本地系统吗?

【问题讨论】:

    标签: database csv influxdb


    【解决方案1】:

    使用 CLI 工具 influx 可以设置结果的 csv 输出格式:

    influx -host your_host -port 8086 -database 'your_db' -execute 'select * from your_metric' -format 'csv'
    

    如果在本地 InfluxDB 主机上运行命令,则可以省略-host 和 -port 选项。 还有一个有用的-precision 选项来设置时间戳的格式。

    【讨论】:

    • 它在 CLI 中工作,但我需要将它下载到我的本地系统。是否可以在本地系统中将这些结果下载为“csv”?
    【解决方案2】:

    在 CLI 中,可以使用以下命令在本地系统上下载表:

    influx -database 'database_name' -execute 'SELECT * FROM table_name' -format csv > test.csv
    

    【讨论】:

    • 请注意,它有一个荒谬的内存使用。我在 postgres 和 influx 中有相同的数据集,试图将它们都导出到 csv。 Influx 使系统内存不足并崩溃。在 postgres 中,导出期间的内存使用几乎不明显......
    【解决方案3】:

    或者,您可以使用jq 将 JSON 输出转换为 CSV,如下所示,这还允许您获取 RFC3339 格式的时间戳:

    jq -r "(.results[0].series[0].columns), (.results[0].series[0].values[]) | @csv"
    

    给出输出

    "time","ppm","T"
    "2019-01-17T19:45:00Z",864.5,18.54
    "2019-01-17T19:50:00Z",861.4,18.545
    "2019-01-17T19:55:00Z",866.2,18.5
    "2019-01-17T20:00:00Z",863.9,18.47
    

    之所以有效,是因为:

    • (.results[0].series[0].columns) 获取列名作为数组
    • , 连接输出
    • (.results[0].series[0].values[]) 将数据值作为数组获取
    • | @csv 使用 jq csv 格式化程序
    • -r 用于获取原始输出

    更多资源:

    【讨论】:

      【解决方案4】:

      surya rahul 发布的答案对我有用,但有小幅修正。

      原文:influx -database 'database_name' -execute 'SELECT * FROM table_name' -format csv > test.csv。
      该命令返回了一个错误“错误解析查询:无效持续时间”

      但是。在查询部分使用双引号 " " 而不是单引号 ' ' 的简单修改解决了这个问题。 修改:influx -database 'database_name' -execute "SELECT * FROM table_name" -format csv > test.csv。

      作为新手,不确定它是如何工作的,但它确实有效。希望对您有所帮助。

      【讨论】:

        【解决方案5】:

        其他答案中解释了 CLI 方式。我使用了 HTTP-API 方式:

        curl -G 'http://localhost:8086/query' --data-urlencode "db=mydb" --data-urlencode "q=SELECT * FROM \"mymeasurement\" " -H "Accept: application/csv" >  mytargetcsv.csv
        database = mydb
        measurement/table = mymeasurement
        CSV-File = mytargetcsv
        

        您也可以在远程机器上使用它并将查询切割成时间片(标题:内存使用情况):

        "q=SELECT * FROM \"mymeasurement\" where time > now() - 130d"
        "q=SELECT * FROM \"mymeasurement\" where (time < now() - 130d) and  (time > now() - 260d)"
        

        https://docs.influxdata.com/influxdb/v1.8/tools/api/

        【讨论】:

        • 如果在 data-urlencode 部分中添加“chunked=true chunk_size=20000”,则对于大型数据集和有限 RAM 最稳定的解决方案
        【解决方案6】:

        只需选择行 -> 右键单击​​ -> 导出所选 -> 选择所需的格式

        【讨论】:

          猜你喜欢
          • 2017-08-28
          • 1970-01-01
          • 1970-01-01
          • 2021-11-22
          • 1970-01-01
          • 2018-12-04
          • 1970-01-01
          • 2014-02-06
          • 2019-08-02
          相关资源
          最近更新 更多