查询 CSV 数据源
使用 csv.from() 和
experimental csv.from()
用Flux查询CSV数据。
查询CSV字符串、CSV文件或来自URL的CSV数据。
导入 csv 或 experimental/csv 包。
CSV 解析模式
csv.from() 支持两种 CSV 解析模式:
- 注释: (默认) 使用CSV注释来确定列数据类型和表分组。
- 原始: 将所有列解析为字符串,并将第一行用作标题行,所有后续行作为数据。
当使用annotations解析模式时,CSV数据必须包含所有注释行
(#datatype,#group和#default).
结果结构
由 csv.from() 返回的结果结构取决于使用的
解析模式。
- 注释:
csv.from()返回根据在#group注释行中定义为true的列分组的表流。 - 原始:
csv.from()返回一个没有分组的表流(所有行都在一个表中)。所有数据格式化为字符串。
示例
如果刚刚开始,使用 Flux REPL 或 InfluxDB Data Explorer 来执行 Flux 查询。
查询带注释的CSV字符串
- 导入
csv包。 - 使用
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 | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 湿度 | TLM0100 | 1627049400000000000 | 34.79 |
| 空气传感器 | 湿度 | TLM0100 | 1627049700000000000 | 34.65 |
| 数据集 | 指标 | 传感器ID | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 湿度 | TLM0200 | 1627049400000000000 | 35.64 |
| 空气传感器 | 湿度 | TLM0200 | 1627049700000000000 | 35.67 |
| 数据集 | 指标 | 传感器ID | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 温度 | TLM0100 | 1627049400000000000 | 71.84 |
| 空气传感器 | 温度 | TLM0100 | 1627049700000000000 | 71.87 |
| 数据集 | 指标 | 传感器ID | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 温度 | TLM0200 | 1627049400000000000 | 74.10 |
| 空气传感器 | 温度 | TLM0200 | 1627049700000000000 | 74.17 |
查询原始CSV字符串
导入
csv包。使用
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 | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 湿度 | TLM0100 | 1627049400000000000 | 34.79 |
| 空气传感器 | 湿度 | TLM0100 | 1627049700000000000 | 34.65 |
| 空气传感器 | 湿度 | TLM0200 | 1627049400000000000 | 35.64 |
| 空气传感器 | 湿度 | TLM0200 | 1627049700000000000 | 35.67 |
| 空气传感器 | 温度 | TLM0100 | 1627049400000000000 | 71.84 |
| 空气传感器 | 温度 | TLM0100 | 1627049700000000000 | 71.87 |
| 空气传感器 | 温度 | TLM0200 | 1627049400000000000 | 74.10 |
| 空气传感器 | 温度 | TLM0200 | 1627049700000000000 | 74.17 |
从文件中查询CSV数据
- 导入
csv包。 - 使用
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 | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 湿度 | TLM0100 | 1627049400000000000 | 34.79 |
| 空气传感器 | 湿度 | TLM0100 | 1627049700000000000 | 34.65 |
| 数据集 | 指标 | 传感器ID | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 湿度 | TLM0200 | 1627049400000000000 | 35.64 |
| 空气传感器 | 湿度 | TLM0200 | 1627049700000000000 | 35.67 |
| 数据集 | 指标 | 传感器ID | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 温度 | TLM0100 | 1627049400000000000 | 71.84 |
| 空气传感器 | 温度 | TLM0100 | 1627049700000000000 | 71.87 |
| 数据集 | 指标 | 传感器ID | 时间戳 | 值 |
|---|---|---|---|---|
| 空气传感器 | 温度 | TLM0200 | 1627049400000000000 | 74.10 |
| 空气传感器 | 温度 | TLM0200 | 1627049700000000000 | 74.17 |
从URL查询CSV数据
- 导入
experimental/csv包。 - 使用实验性
csv.from()函数和url参数来指定要查询的URL。
实验性 csv.from() 函数不支持多种解析模式,只能与 注释的 CSV 一起使用。
import "experimental/csv"
csv.from(url: "https://example.com/example.csv")
要使用在 csv.from() 中可用的解析模式:
- 导入
csv和experimental/http包。 - 使用
http.get()获取CSV数据。 - 使用
string()将响应主体转换为字符串。 - 使用
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")