TL;DR InfluxDB 技术提示 – 如何解读带注释的 CSV

导航至

在这篇文章中,我们将分享如何解释 带注释的 CSV,这是 Flux 查询结果格式,适用于 InfluxDB。

问: 什么是带注释的 CSV?

答: 带注释的 CSV 是 InfluxDB 2.0 的 Flux 查询的输出格式。例如,假设我们正在写入关于两个收容所“A”和“B”中“玳瑁猫”和“虎斑猫”的数量的数据,包括“幼年”猫和“成年”猫。数据布局如下:

存储桶 "cats-and-dogs"
指标 "cats"

标签键

标签值

"shelter" "A", "B"
"type" "calico" , "tabby"

字段键

"young" , "adult"

如果我们使用以下查询查询数据

from(bucket: "cats-and-dogs")
  |> range(start: 2020-05-15T00:00:00Z, stop: 2020-05-16T00:00:00Z)
  |> filter(fn: (r) => r["_measurement"] == "cats")
  |> filter(fn: (r) => r["_field"] == "adult")
  |> filter(fn: (r) => r["shelter"] == "A")
  |> filter(fn: (r) => r["type"] == "calico")
  |> limit(n:2)

这是我们的带注释 CSV 结果的样子

#group,false,false,true,true,false,false,true,true,true,true
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string,string,string
#default,_result,,,,,,,,,
,result,table,_start,_stop,_time,_value,_field,_measurement,shelter,type
,,0,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:50:33.262484Z,8,adult,cats,A,calico
,,0,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:51:48.852085Z,7,adult,cats,A,calico

理解注释

问: 什么是带注释 CSV 的“井号标题”?

答: 首先,看起来像 CSV 标题的内容被称为注释。三个注释按顺序为:

  1. #group:一个布尔值,指示列是否为 组键 的一部分。组键是表中每行都具有相同值的一系列列。让我们看看 truefalse 列之间的区别,或者分别是组键的一部分和不是组键一部分的列。
    • true 列: 在上面的示例查询中,我们按单个字段类型 adult、单个 "shelter" 标签“A”和单个 "type" 标签 "calico" 进行了过滤。这些值在各行之间是恒定的,因此这些列设置为 true。此外,跨标签和字段过滤单个值意味着我们的所有表都将属于同一表。因此,对于此查询,table 列也为 true_start_stop 列由我们的范围定义,在各行之间是恒定的,因此这些值也为 true
    • false 列:_time_value 列在各行之间具有不同的值,这就是为什么它们接收到 #group 注释值为 false 的原因。
  2. #datatype:描述数据类型或列代表的行协议元素。
  3. #default:用于空值的行的默认值。例如,如果我们已将查询分配给变量 ourQuery,则此注释将如下所示:#default,ourQuery,,,,,,,,,

由于 #group 注释特别棘手,让我们用另一个例子进一步研究它。假设我们过滤两个 "shelters"。我们执行以下查询

from(bucket: "cats-and-dogs")
  |> range(start: 2020-05-15T00:00:00Z, stop: 2020-05-16T00:00:00Z)
  |> filter(fn: (r) => r["_measurement"] == "cats")
  |> filter(fn: (r) => r["_field"] == "adult")
  |> filter(fn: (r) => r["shelter"] == "A" or r["shelter"] == "B")
  |> filter(fn: (r) => r["type"] == "calico")
  |> limit(n:2)

我们的带注释 CSV 如下所示

#group,false,false,true,true,false,false,true,true,false,true
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,double,string,string,string,string
#default,_result,,,,,,,,,
,result,table,_start,_stop,_time,_value,_field,_measurement,shelter,type
,,0,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:50:33.262484Z,9,adult,cats,B,calico
,,0,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:51:48.852085Z,7,adult,cats,B,calico
,,1,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:50:33.262484Z,8,adult,cats,A,calico
,,1,2020-05-15T00:00:00Z,2020-05-16T00:00:00Z,2020-05-15T18:51:48.852085Z,7,adult,cats,A,calico

现在,shelter 列的 #group 注释为 false。我们现在也将有两个组键。这意味着我们的数据有两个表,因此“table”列的 #group 注释也为 false

问: 我可以用带注释的 CSV 做什么?

答: 您可以做几件事:

  1. 您可以使用 InfluxDB 2.0 UI 将数据导出为 CSV
  2. 您可以使用 from.csv() 函数创建临时数据,或者如果您在 from.csv() 之后使用 to(),则可以将该数据写入 InfluxDB。

问: 我是 InfluxDB 新手,带注释的 CSV 让我困惑,如何使用常规 CSV 和 InfluxDB 2.0?

答: 有几种方法可以将常规 CSV 写入 InfluxDB。一些方法包括:

提示:我鼓励您尝试不同的查询,并在 InfluxDB 2.0 UI 的原始数据查看器中查看带注释的 CSV 结果,因为带注释的 CSV 分为列,这使其更易于阅读。

annotated CSV results InfluxDB