文档文档

带注释的 CSV (Annotated CSV)

InfluxDB 的 /api/v2/query API 以带注释的 CSV 格式返回查询结果。 您还可以使用带注释的 CSV 和 influx write 命令将数据写入 InfluxDB,或在 InfluxDB UI 中上传 CSV 文件

CSV 表格必须以 UTF-8 编码和 Unicode Normal Form C(如 UAX15 中定义)编码。 InfluxDB 会在换行符之前删除回车符。

CSV 响应格式 (CSV response format)

InfluxDB 带注释的 CSV 支持以下列出的编码。

表格 (Tables)

表格可以包含以下行和列。

行 (Rows)

  • 注释行 (Annotation rows):描述列属性。
  • 标题行 (Header row):定义列标签(每个表格一个标题行)。
  • 记录行 (Record row):描述表格中的数据(每行一条记录)。
示例 (Example)
#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,mean,,,,,,,,,
,result,table,_start,_stop,_time,_value,_field,_measurement,host,region
,,0,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:52:00Z,15.43,mem,m,A,east
,,1,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:52:00Z,59.25,mem,m,B,east
,,2,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:52:00Z,52.62,mem,m,C,east

列 (Columns)

除了数据列之外,表格还可以包含以下列

  • 注释列 (Annotation column):显示注释的名称。 仅在注释行中使用,并且始终是第一列。 值可以为空或受支持的注释。 响应格式使用逗号 (,) 将注释名称与行中的值分开。 为了解决这个问题,表格中的行以一个前导逗号开始; 您会注意到整个表格的长度都有一列为空。
  • 结果列 (Result column):包含查询指定的结果的名称。
  • 表格列 (Table column):包含结果中每个表格的唯一 ID。

多个表格和结果 (Multiple tables and results)

如果文件或数据流包含多个表格或结果,则必须满足以下要求

  • 表格列指示行属于哪个表格。
  • 表格中的所有行都是连续的。
  • 在以下情况下,空行会分隔新的表格边界
    • 同一结果中不共享公共表格模式的表格之间。
    • 在连接的 CSV 文件之间。
  • 每个新的表格边界都以新的注释行和标题行开始。
示例 (Example)
#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,host,region
,,0,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:00:00Z,15.43,mem,m,A,east
,,1,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:00:00Z,59.25,mem,m,B,east
,,2,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:00:00Z,52.62,mem,m,C,east

#group,false,false,true,true,true,true,false,false,true,true
#datatype,string,long,string,string,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,string,string,string
#default,_result,,,,,,,,,
,result,table,_field,_measurement,_start,_stop,_time,_value,host,region
,,3,mem_level,m,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:00:00Z,ok,A,east
,,4,mem_level,m,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:00:00Z,info,B,east
,,5,mem_level,m,2022-12-31T05:41:24Z,2023-01-31T05:41:24.001Z,2023-01-01T00:00:00Z,info,C,east

方言选项 (Dialect options)

Flux 支持 text/csv 格式的以下方言选项。

选项 (Option)描述 (Description)默认值 (Default)
header如果为 true,则包含标题行。true
delimiter用于分隔列的字符。,
quoteChar用于引用包含分隔符的值的字符。"
annotations要编码的注释列表(datatype、group 或 default)。empty
commentPrefix用于标识注释的字符串前缀。 始终添加到注释。#

注释 (Annotations)

注释行描述列属性,并以 #(或 commentPrefix 值)开头。 注释行中的第一列始终包含注释名称。 后续列包含如下表所示的注释值。

注释名称 (Annotation name)值 (Values)描述 (Description)
datatype数据类型行协议元素描述数据的类型或该列表示哪个行协议元素。
group布尔标志 truefalse指示该列是组键的一部分。
default列数据类型的值用于具有空值的行的值。

某些工具可能会使用或要求使用逗号 (,) 将注释名称与注释行中的值分开。

要使用其组键对表格进行编码,必须包含 datatypegroupdefault 注释。 如果表格没有行,则 default 注释提供组键值。

数据类型 (Data types)

数据类型 (Datatype)Flux 类型 (Flux type)描述 (Description)
booleanbool“true” 或 “false”
unsignedLonguint无符号 64 位整数
longint有符号 64 位整数
doublefloatIEEE-754 64 位浮点数
stringstringUTF-8 编码字符串
base64Binarybytesbase64 编码的字节序列,如 RFC 4648 中定义
dateTimetime时间上的瞬间,后面可能跟一个冒号 : 和格式的描述(number、RFC3339、RFC3339Nano)
durationduration时间长度,表示为无符号 64 位整数的纳秒数

行协议元素 (Line protocol elements)

datatype 注释接受数据类型行协议元素。 行协议元素标识在使用influx write 命令将带注释的 CSV 写入 InfluxDB 时,如何将列转换为行协议。

行协议元素 (Line protocol element)描述 (Description)
measurement列值为 measurement
field (默认)列标题是 field key,列值是 field value
tag列标题是 tag key,列值是 tag value
time列值是时间戳 dateTime 的别名)
ignore orignored该列被忽略,不包含在行协议中

混合数据类型和行协议元素 (Mixing data types and line protocol elements)

#datatype 注释中具有数据类型dateTime 除外)的列在转换为行协议时被视为 fields。 没有指定数据类型的列在转换为行协议时默认使用 field,并且 列值在行协议中保持不变请参阅下面的示例和行协议数据类型和格式

时间列 (Time columns)

带有 timedateTime #datatype 注释的列在转换为 Line Protocol 时用作时间戳。如果存在多个 timedateTime 列,则最右侧的列将用作 Line Protocol 中的时间戳。其他时间列将被忽略,并且 influx write 命令会输出警告。

时间列的值应为 Unix 纳秒时间戳RFC3339RFC3339Nano

数据类型注释中的 Line Protocol 元素示例
#group false,false,false,false,false,false,false
#datatype measurement,tag,tag,field,field,ignored,time
#default ,,,,,,
m,cpu,host,time_steal,usage_user,nothing,time
cpu,cpu1,host1,0,2.7,a,1482669077000000000
cpu,cpu1,host2,0,2.2,b,1482669087000000000

生成的 Line Protocol

cpu,cpu=cpu1,host=host1 time_steal=0,usage_user=2.7 1482669077000000000
cpu,cpu=cpu1,host=host2 time_steal=0,usage_user=2.2 1482669087000000000
混合数据类型和 Line Protocol 元素的示例
#group,false,false,false,false,false,false,false,false,false
#datatype,measurement,tag,string,double,boolean,long,unsignedLong,duration,dateTime
#default,test,annotatedDatatypes,,,,,,
,m,name,s,d,b,l,ul,dur,time
,,,str1,1.0,true,1,1,1ms,1
,,,str2,2.0,false,2,2,2us,2020-01-11T10:10:10Z

生成的 Line Protocol

test,name=annotatedDatatypes s="str1",d=1,b=true,l=1i,ul=1u,dur=1000000i 1
test,name=annotatedDatatypes s="str2",d=2,b=false,l=2i,ul=2u,dur=2000i 1578737410000000000

错误

如果在执行过程中发生错误,则返回一个表,其中包含

  • 包含错误消息的错误列。
  • 包含唯一引用代码的引用列,用于识别有关错误的更多信息。
  • 包含错误属性的第二行。

如果发生错误

  • 在 InfluxDB 响应数据之前,HTTP 状态代码指示错误。输出表包含错误详细信息。
  • 在 InfluxDB 将部分结果发送到客户端后,错误被编码为下一个表,并且其余结果将被丢弃。在这种情况下,HTTP 状态代码保持为 200 OK。
示例 (Example)

带有数据类型注释的错误的编码

#datatype,string,long
,error,reference
,Failed to parse query,897

此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

InfluxDB 3 开源版现已发布公共 Alpha 版

InfluxDB 3 开源版现已可用于 alpha 测试,并已获得 MIT 或 Apache 2 许可。

我们正在发布两个产品作为 alpha 版的一部分。

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

有关如何入门的更多信息,请查看