Documentation

查询 CSV 数据源

使用 csv.from()experimental csv.from() 用Flux查询CSV数据。 查询CSV字符串、CSV文件或来自URL的CSV数据。 导入 csvexperimental/csv 包。

CSV 解析模式

csv.from() 支持两种 CSV 解析模式:

  • 注释: (默认) 使用CSV注释来确定列数据类型和表分组。
  • 原始: 将所有列解析为字符串,并将第一行用作标题行,所有后续行作为数据。

当使用annotations解析模式时,CSV数据必须包含所有注释行 (#datatype#group#default).

结果结构

csv.from() 返回的结果结构取决于使用的 解析模式

  • 注释: csv.from() 返回根据在 #group 注释行中定义为 true 的列分组的表流。
  • 原始: csv.from()返回一个没有分组的表流(所有行都在一个表中)。所有数据格式化为字符串。

示例

如果刚刚开始,使用 Flux REPLInfluxDB Data Explorer 来执行 Flux 查询。


查询带注释的CSV字符串

  1. 导入csv
  2. 使用 csv.from()csv 参数来指定要查询的注释CSV字符串。

查询

import "csv"

csvData =
    "
#group,false,false,true,true,true,false,false
#datatype,string,long,string,string,string,long,double
#default,_result,,,,,,
,result,table,dataset,metric,sensorID,timestamp,value
,,0,air-sensors,humidity,TLM0100,1627049400000000000,34.79
,,0,air-sensors,humidity,TLM0100,1627049700000000000,34.65
,,1,air-sensors,humidity,TLM0200,1627049400000000000,35.64
,,1,air-sensors,humidity,TLM0200,1627049700000000000,35.67
,,2,air-sensors,temperature,TLM0100,1627049400000000000,71.84
,,2,air-sensors,temperature,TLM0100,1627049700000000000,71.87
,,3,air-sensors,temperature,TLM0200,1627049400000000000,74.10
,,3,air-sensors,temperature,TLM0200,1627049700000000000,74.17
"

csv.from(csv: csvData)

结果

数据集指标传感器ID时间戳
空气传感器湿度TLM0100162704940000000000034.79
空气传感器湿度TLM0100162704970000000000034.65
数据集指标传感器ID时间戳
空气传感器湿度TLM0200162704940000000000035.64
空气传感器湿度TLM0200162704970000000000035.67
数据集指标传感器ID时间戳
空气传感器温度TLM0100162704940000000000071.84
空气传感器温度TLM0100162704970000000000071.87
数据集指标传感器ID时间戳
空气传感器温度TLM0200162704940000000000074.10
空气传感器温度TLM0200162704970000000000074.17

查询原始CSV字符串

  1. 导入csv

  2. 使用 csv.from() 并提供以下参数:

    • csv: 用于查询的CSV字符串
    • 模式: raw

查询

import "csv"

csvData =
    "
dataset,metric,sensorID,timestamp,value
air-sensors,humidity,TLM0100,1627049400000000000,34.79
air-sensors,humidity,TLM0100,1627049700000000000,34.65
air-sensors,humidity,TLM0200,1627049400000000000,35.64
air-sensors,humidity,TLM0200,1627049700000000000,35.67
air-sensors,temperature,TLM0100,1627049400000000000,71.84
air-sensors,temperature,TLM0100,1627049700000000000,71.87
air-sensors,temperature,TLM0200,1627049400000000000,74.10
air-sensors,temperature,TLM0200,1627049700000000000,74.17
"

csv.from(csv: csvData, mode: "raw")

结果

使用原始 CSV 解析模式时,所有列的值都是字符串。

数据集指标传感器ID时间戳
空气传感器湿度TLM0100162704940000000000034.79
空气传感器湿度TLM0100162704970000000000034.65
空气传感器湿度TLM0200162704940000000000035.64
空气传感器湿度TLM0200162704970000000000035.67
空气传感器温度TLM0100162704940000000000071.84
空气传感器温度TLM0100162704970000000000071.87
空气传感器温度TLM0200162704940000000000074.10
空气传感器温度TLM0200162704970000000000074.17

从文件中查询CSV数据

  1. 导入 csv
  2. 使用 csv.from()file 参数从文件中查询 CSV 数据。

Flux 必须能够访问文件系统

要从文件中查询CSV数据,Flux必须能够访问文件系统。如果Flux无法访问文件系统,则查询将返回类似于以下内容的错误:

failed to read file: filesystem service is uninitialized

如果使用 InfluxDB Cloud 或 InfluxDB OSS,Flux 过程具有对文件系统的访问权限。

查询

import "csv"

csv.from(file: "/path/to/example.csv")

/path/to/example.csv

#group,false,false,true,true,true,false,false
#datatype,string,long,string,string,string,long,double
#default,_result,,,,,,
,result,table,dataset,metric,sensorID,timestamp,value
,,0,air-sensors,humidity,TLM0100,1627049400000000000,34.79
,,0,air-sensors,humidity,TLM0100,1627049700000000000,34.65
,,1,air-sensors,humidity,TLM0200,1627049400000000000,35.64
,,1,air-sensors,humidity,TLM0200,1627049700000000000,35.67
,,2,air-sensors,temperature,TLM0100,1627049400000000000,71.84
,,2,air-sensors,temperature,TLM0100,1627049700000000000,71.87
,,3,air-sensors,temperature,TLM0200,1627049400000000000,74.10
,,3,air-sensors,temperature,TLM0200,1627049700000000000,74.17

结果

数据集指标传感器ID时间戳
空气传感器湿度TLM0100162704940000000000034.79
空气传感器湿度TLM0100162704970000000000034.65
数据集指标传感器ID时间戳
空气传感器湿度TLM0200162704940000000000035.64
空气传感器湿度TLM0200162704970000000000035.67
数据集指标传感器ID时间戳
空气传感器温度TLM0100162704940000000000071.84
空气传感器温度TLM0100162704970000000000071.87
数据集指标传感器ID时间戳
空气传感器温度TLM0200162704940000000000074.10
空气传感器温度TLM0200162704970000000000074.17

从URL查询CSV数据

  1. 导入experimental/csv
  2. 使用实验性csv.from()函数url参数来指定要查询的URL。

实验性 csv.from() 函数不支持多种解析模式,只能与 注释的 CSV 一起使用。

import "experimental/csv"

csv.from(url: "https://example.com/example.csv")

要使用在 csv.from() 中可用的解析模式:

  1. 导入 csvexperimental/http 包。
  2. 使用 http.get() 获取CSV数据。
  3. 使用 string() 将响应主体转换为字符串。
  4. 使用 csv.from() 解析CSV数据并返回结果。
import "csv"
import "experimental/http"

url = "https://example.com/example.csv"
csvData = string(v: http.get(url: url).body)

csv.from(csv: csvData, mode: "raw")


Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: