TL;DR InfluxDB 技术提示 – 如何解读带注释的 CSV
作者:Anais Dotis-Georgiou / 用例, 开发者, 产品
2020 年 7 月 15 日
导航至
在这篇文章中,我们将分享如何解释 带注释的 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 标题的内容被称为注释。三个注释按顺序为:
#group
:一个布尔值,指示列是否为 组键 的一部分。组键是表中每行都具有相同值的一系列列。让我们看看true
和false
列之间的区别,或者分别是组键的一部分和不是组键一部分的列。true
列: 在上面的示例查询中,我们按单个字段类型adult
、单个"shelter"
标签“A”和单个"type"
标签"calico"
进行了过滤。这些值在各行之间是恒定的,因此这些列设置为true
。此外,跨标签和字段过滤单个值意味着我们的所有表都将属于同一表。因此,对于此查询,table
列也为true
。_start
和_stop
列由我们的范围定义,在各行之间是恒定的,因此这些值也为true
。false
列:_time
和_value
列在各行之间具有不同的值,这就是为什么它们接收到#group
注释值为false
的原因。
#datatype
:描述数据类型或列代表的行协议元素。#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 做什么?
答: 您可以做几件事:
- 您可以使用 InfluxDB 2.0 UI 将数据导出为 CSV。
- 您可以使用 from.csv() 函数创建临时数据,或者如果您在 from.csv() 之后使用 to(),则可以将该数据写入 InfluxDB。
问: 我是 InfluxDB 新手,带注释的 CSV 让我困惑,如何使用常规 CSV 和 InfluxDB 2.0?
答: 有几种方法可以将常规 CSV 写入 InfluxDB。一些方法包括:
提示:我鼓励您尝试不同的查询,并在 InfluxDB 2.0 UI 的原始数据查看器中查看带注释的 CSV 结果,因为带注释的 CSV 分为列,这使其更易于阅读。