扩展注释的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。
日期时间
表示该列为时间戳。
time
是dateTime
的别名。
如果时间戳格式包含时区,
解析的时间戳包含时区偏移。
默认情况下,所有时间戳均为UTC。
您还可以使用#timezone
注解来将时间戳调整为特定时区。
只能有一个 dateTime
列。
此 influx write
命令将时间戳转换为 Unix 时间戳。将时间戳格式附加到 dateTime
数据类型中,使用 (:
)。
#datatype dateTime:RFC3339
#datatype dateTime:RFC3339Nano
#datatype dateTime:number
#datatype dateTime:2006-01-02
支持的时间戳格式
时间戳格式 | 描述 | 示例 |
---|---|---|
RFC3339 | RFC3339 时间戳 | 2020-01-01T00:00:00Z |
RFC3339Nano | RFC3339 时间戳 | 2020-01-01T00:00:00.000000000Z |
number | Unix 时间戳 | 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
对于具有 measurement
和 dateTime
数据类型的常量,常量定义中的第二个值是 列值。
时区
使用 #timezone
注释将时间戳更新为特定时区。 默认情况下,时间戳被解析为 UTC。 使用 ±HHmm
格式指定相对于 UTC 的时区偏移。
严格模式
使用 :strict
关键字来指示在解析 long
或 unsignedLong
数据类型时的精度损失。通过使用以 strict
结尾的列数据类型来开启严格模式,例如 long:strict
。当从带有小数位的字符串值解析 long
或 unsignedLong
值时,在严格模式下整个 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