Documentation

扩展注释的CSV

扩展注释CSV 提供了额外的注释和选项,指定如何将CSV数据转换为 行协议 并写入InfluxDB。InfluxDB使用 csv2lp 将CSV转换为行协议。扩展注释CSV支持所有 注释CSV 注释。

The Flux csv.from function 只支持 带注解的CSV,而不支持扩展带注解的CSV。

要将数据写入InfluxDB,行协议必须包括以下内容:

扩展的CSV注释标识列所表示的行协议元素。

CSV 注释

扩展注释的CSV扩展并添加以下注释:

数据类型

使用 #datatype 注释来指定一个列代表的 行协议元素。要明确将列定义为特定数据类型的 字段,请在注释中使用字段类型(例如: string, double, long 等)。

数据类型生成的线协议
measurement列是measurement
tag列是一个 tag
dateTime列是时间戳
field列是一个 field
ignored该列被忽略
string列是一个 字符串字段
double列是一个 浮点字段
long列是一个整数字段
unsignedLong列是一个无符号整数字段
boolean列是一个布尔字段

测量

表示该列为测量

标签

指示该列是一个 tag列标签tag key列值tag value

日期时间

表示该列为时间戳timedateTime的别名。 如果时间戳格式包含时区, 解析的时间戳包含时区偏移。 默认情况下,所有时间戳均为UTC。 您还可以使用#timezone注解来将时间戳调整为特定时区。

只能有一个 dateTime列。

influx write 命令将时间戳转换为 Unix 时间戳。将时间戳格式附加到 dateTime 数据类型中,使用 (:)。

#datatype dateTime:RFC3339
#datatype dateTime:RFC3339Nano
#datatype dateTime:number
#datatype dateTime:2006-01-02
支持的时间戳格式
时间戳格式描述示例
RFC3339RFC3339 时间戳2020-01-01T00:00:00Z
RFC3339NanoRFC3339 时间戳2020-01-01T00:00:00.000000000Z
numberUnix 时间戳1577836800000000000

如果使用number时间戳格式并且时间戳不是以纳秒为单位,请使用influx write --precision标志来指定时间戳精度

自定义时间戳格式

要指定自定义时间戳格式,请使用 Go time package 中描述的时间戳格式。 例如: 2020-01-02

字段

指示该列是一个 字段列标签字段键列值字段值

使用 field 数据类型时,字段值会保持原样复制到行协议中。 有关行协议值的信息以及它们如何写入 InfluxDB, 请参见 行协议数据类型和格式。 我们通常建议在注释中指定 字段类型

被忽视

该列被忽略,不会写入InfluxDB。

字段类型

列是一个指定类型字段列标签字段关键字列值字段值

字符串

列是一个 string 字段

双精度

列是一个float字段。 默认情况下,InfluxDB期望浮点值使用句点(.)来分隔分数和整数。如果列值包含或使用其他分隔符,例如逗号(,)来将大数字视觉上分组,请指定以下浮点分隔符

  • 分数分隔符: 将分数与整数分开。
  • 忽略分隔符: 从视觉上将整个数字分成组,但在解析浮点值时忽略分隔符。

使用以下语法来指定 浮动分隔符

# Syntax
<fraction-separator><ignored-separator>

# Example
.,

# With the float separators above
# 1,200,000.15 => 1200000.15

浮点分隔符附加到double数据类型注释中,使用冒号(:)。
例如:

#datatype "double:.,"

如果您的 小数分隔符 包含一个逗号 (,),请将列注释用双引号 ("") 包裹,以防止逗号被解析为列分隔符或定界符。您还可以 定义一个自定义列分隔符

长整型

列是一个整数字段

如果列值包含分隔符,例如句点(.)或逗号(,),请指定以下整数分隔符

  • 分数分隔符: 将分数与整数分开。 整数值在转换为行协议时会在分数分隔符处被截断。
  • 忽略分隔符: 视觉上将整数分组,但在解析整数值时忽略该分隔符。

使用以下语法来指定 整数分隔符

# Syntax
<fraction-separator><ignored-separator>

# Example
.,

# With the integer separators above
# 1,200,000.00 => 1200000i

long 数据类型注解中附加 整数分隔符,使用冒号 (:)。 例如:

#datatype "long:.,"

如果你的 整数分隔符 包含逗号 (,), 请将列注释用双引号 ("") 括起来,以防止逗号被解析为列分隔符或定界符。你也可以 定义一个自定义列分隔符

无符号长整型

列是一个无符号整数 (uinteger)字段。如果列值包含分隔符,例如句点 (.) 或逗号 (,),请指定以下uinteger 分隔符:

  • 分数分隔符: 将分数与整数部分分开。 在转换为行协议时,整数值在分数分隔符处被截断。
  • 忽略的分隔符: 从视觉上将整数分成多个组,但在解析无符号整数值时会忽略该分隔符。

使用以下语法指定无符号整数分隔符

# Syntax
<fraction-separator><ignored-separator>

# Example
.,

# With the uinteger separators above
# 1,200,000.00 => 1200000u

无符号整数分隔符附加到long数据类型注释中,并用冒号(:)分隔。 例如:

#datatype "unsignedLong:.,"

如果您的 uinteger separators 包含逗号 (,), 请将列注释用双引号 ("") 包裹起来,以防止逗号被解析为列分隔符或定界符。您还可以 定义自定义列分隔符

布尔值

列是一个布尔字段。如果列的值不是支持的布尔值,请使用以下语法指定布尔格式

# Syntax
<true-values>:<false-values>

# Example
y,Y,1:n,N,0

# With the boolean format above
# y => true, Y => true, 1 => true
# n => false, N => false, 0 => false

布尔格式附加到boolean数据类型注释后面,使用冒号(:)。
例如:

#datatype "boolean:y,Y:n,N"

如果您的 布尔格式 包含逗号 (,),请将列注释用双引号 ("") 包裹起来,以防止逗号被解析为列分隔符或定界符。您还可以 定义自定义列分隔符

常量

使用#constant注释来为每一行定义一个常量列标签和值。#constant注释提供了一种方法来提供在CSV数据中不存在的行协议元素

使用以下语法来定义常量:

#constant <datatype>,<column-label>,<column-value>

要提供多个常量,请在单独的行上包含每个 #constant 注释。

#constant measurement,m
#constant tag,dataSource,csv

对于具有 measurementdateTime 数据类型的常量,常量定义中的第二个值是 列值

时区

使用 #timezone 注释将时间戳更新为特定时区。 默认情况下,时间戳被解析为 UTC。 使用 ±HHmm 格式指定相对于 UTC 的时区偏移。

严格模式

使用 :strict 关键字来指示在解析 longunsignedLong 数据类型时的精度损失。通过使用以 strict 结尾的列数据类型来开启严格模式,例如 long:strict。当从带有小数位的字符串值解析 longunsignedLong 值时,在严格模式下整个 CSV 行会失败。当不在严格模式下时,会打印警告,内容为 line x: column y: '1.2' truncated to '1' to fit into long data type。有关严格解析的更多信息,请参阅 package documentation

时区示例
时区偏移量
美国山区夏令时间-0600
中欧夏令时+0200
澳大利亚东部标准时间+1000
阿皮亚夏令时+1400
时区注释示例
#timezone -0600

连接

这个 #concat 注解添加了一个新列,该列是根据类似bash的字符串插值文字与变量引用现有列标签,从现有列中连接而成。

例如:

#concat,string,fullName,${firstName} ${lastName}

当从多个列构建时间戳时,这尤其有用。 例如,以下注释将给定的CSV列组合成一个时间戳:

#concat,dateTime:2006-01-02,${Year}-${Month}-${Day}

Year,Month,Day,Hour,Minute,Second,Tag,Value
2020,05,22,00,00,00,test,0
2020,05,22,00,05,00,test,1
2020,05,22,00,10,00,test,2

定义自定义列分隔符

如果列是使用除逗号以外的字符分隔的,请使用 sep 关键字在您的CSV文件的第一行中定义一个自定义分隔符。

sep=;

注释简写

扩展注释的CSV支持注释简写。在每个列标题行中包含列标签、数据类型和(可选)默认值,使用以下语法:

<column-label>|<column-datatype>|<column-default-value>
示例注释 shorthand
m|measurement,location|tag|Hong Kong,temp|double,pm|long|0,time|dateTime:RFC3339
weather,San Francisco,51.9,38,2020-01-01T00:00:00Z
weather,New York,18.2,,2020-01-01T00:00:00Z
weather,,53.6,171,2020-01-01T00:00:00Z
速记解释
  • m 列代表 测量,并没有默认值。
  • location”列是一个标签,默认值为Hong Kong
  • temp 列是一个 字段,具有 浮点 (double) 值,并且没有默认值。
  • pm 列是一个 字段,其值为 整数 (long),默认值为 0
  • time列表示时间戳,使用RFC3339时间戳格式,并且没有默认值。
生成的行协议
weather,location=San\ Francisco temp=51.9,pm=38i 1577836800000000000
weather,location=New\ York temp=18.2,pm=0i 1577836800000000000
weather,location=Hong\ Kong temp=53.6,pm=171i 1577836800000000000


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 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

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