扩展注释 CSV
扩展注释CSV提供了额外的注释和选项,用于指定如何将CSV数据转换为行协议并写入InfluxDB。InfluxDB使用csv2lp
库将CSV转换为行协议。扩展注释CSV支持所有注释CSV注释。
Flux的csv.from
函数仅支持注释CSV,而不支持扩展注释CSV。
要将数据写入InfluxDB,行协议必须包含以下内容
扩展CSV注释标识了列表示的行协议元素。
CSV注释
扩展注释CSV扩展并添加以下注释
数据类型
使用#datatype
注释来指定列表示的行协议元素。为了明确地将列定义为特定数据类型的字段,请使用注释中的字段类型(例如:string
,double
,long
等)。
数据类型 | 结果行协议 |
---|---|
测量 | 列是measurement |
标签 | 列是tag |
dateTime | 列是timestamp |
字段 | 列是field |
忽略 | 列被忽略 |
string | 列是字符串字段 |
double | 列是浮点字段 |
long | 列是整数字段 |
unsignedLong | 列是无符号整数字段 |
boolean | 列是布尔字段 |
测量
指示列是measurement
。
标签
指示列是tag
。列标签是标签键,列值是标签值。
dateTime
指示列是timestamp
。如果时间戳格式包括时区,解析的时间戳将包括时区偏移。默认情况下,所有时间戳都是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 |
数字 | Unix时间戳 | 1577836800000000000 |
如果使用数字
时间戳格式且时间戳不是以纳秒为单位,请使用influx write --precision
标志来指定时间戳精度。
自定义时间戳格式
要指定自定义时间戳格式,请使用Go时间包中描述的时间戳格式。例如:2020-01-02
。
字段
指示该列是一个字段。列标签是字段键。列值是字段值。
使用field
数据类型时,字段值将按原样复制到行协议中。有关行协议值以及如何将它们写入InfluxDB的信息,请参阅行协议数据类型和格式。我们通常建议在注释中指定字段类型。
忽略
该列被忽略,不会写入InfluxDB。
字段类型
该列是具有指定类型的字段。列标签是字段键。列值是字段值。
string
列是一个**字符串字段**。
double
列是一个**浮点字段**。默认情况下,InfluxDB期望使用点(.
)来分隔小数部分和整数部分的浮点值。如果列值包含或使用其他分隔符,如逗号(,
)来可视地将大数字分组,请指定以下**浮点分隔符**
- 小数分隔符:分隔整数部分和小数部分。
- 忽略的分隔符:可视地将整数分组,但在解析浮点值时忽略分隔符。
使用以下语法来指定**浮点分隔符**
# Syntax
<fraction-separator><ignored-separator>
# Example
.,
# With the float separators above
# 1,200,000.15 => 1200000.15
将**浮点分隔符**附加到double
数据类型注释中,并使用冒号(:
)。例如
#datatype "double:.,"
如果您的**浮点分隔符**包括逗号(,
),请将列注释用双引号(""
)括起来,以防止逗号被解析为列分隔符或分隔符。您还可以定义自定义列分隔符。
long
列是一个**整数字段**。如果列值包含分隔符,如点(.
)或逗号(,
),请指定以下**整数分隔符**
- 小数分隔符:分隔整数部分和小数部分。在转换为行协议时,整数值会在小数分隔符处截断。
- 忽略的分隔符:可视地将整数分组,但在解析整数值时忽略分隔符。
使用以下语法来指定**整数分隔符**
# Syntax
<fraction-separator><ignored-separator>
# Example
.,
# With the integer separators above
# 1,200,000.00 => 1200000i
将**整数分隔符**附加到long
数据类型注释中,并使用冒号(:
)。例如
#datatype "long:.,"
如果您的**整数分隔符**包括逗号(,
),请将列注释用双引号(""
)括起来,以防止逗号被解析为列分隔符或分隔符。您还可以定义自定义列分隔符。
unsignedLong
列是一个**无符号整数 (uinteger)字段**。如果列值包含分隔符,如点(.
)或逗号(,
),请指定以下**uinteger分隔符**
- 小数分隔符:分隔整数部分和小数部分。在转换为行协议时,无符号整数值会在小数分隔符处截断。
- 忽略的分隔符:可视地将整数分组,但在解析无符号整数值时忽略分隔符。
使用以下语法来指定**uinteger分隔符**
# Syntax
<fraction-separator><ignored-separator>
# Example
.,
# With the uinteger separators above
# 1,200,000.00 => 1200000u
将冒号(:
)添加到 long
数据类型注释中,以附加无符号整数分隔符。例如
#datatype "unsignedLong:.,"
如果您的无符号整数分隔符包括逗号(,
),则将列注释用双引号(""
)括起来,以防止逗号被解析为列分隔符或分隔符。您还可以定义自定义列分隔符。
boolean
列是一个 布尔 字段。如果列值不是 支持的布尔值,请使用以下语法指定 布尔格式
# 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
将布尔格式附加到布尔数据类型注释中,并用冒号(:
)分隔。例如
#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 行将失败。在非严格模式下,会打印一条警告信息,指出 行 x: 列 y: '1.2' 被截断为 '1' 以适应 long 数据类型
。有关严格解析的更多信息,请参阅包文档。
时区示例
时区 | 偏移 |
---|---|
美国山地夏令时 | -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>
示例注释简写
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》列是一个字段,包含浮点数(双精度浮点数)值,没有默认值。
- 《pm》列是一个字段,包含整数(长整数)值,默认值为《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
这个页面有帮助吗?
感谢您的反馈!