文档化文档

扩展注释 CSV

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

Flux的csv.from函数仅支持注释CSV,而不支持扩展注释CSV。

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

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

CSV注释

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

数据类型

使用#datatype注释来指定列表示的行协议元素。为了明确地将列定义为特定数据类型的字段,请使用注释中的字段类型(例如:stringdoublelong等)。

数据类型结果行协议
测量列是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
支持的时戳格式
时戳格式描述示例
RFC3339RFC3339时间戳2020-01-01T00:00:00Z
RFC3339NanoRFC3339时间戳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

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

时区

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

严格模式

使用 :strict 关键字指示解析 longunsignedLong 数据类型时的精度丢失。通过使用以 strict 结尾的列数据类型(例如,long:strict)来打开严格模式。当在严格模式下解析来自字符串值的 longunsignedLong 值时,如果存在小数位,整个 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

这个页面有帮助吗?

感谢您的反馈!


Flux 的未来

Flux 正进入维护模式。您可以在不更改代码的情况下继续像现在一样使用它。

了解更多信息

InfluxDB v3 增强功能和 InfluxDB Clustered 现已正式发布

包括更快的查询性能和管理工具在内的新功能,推动了 InfluxDB v3 产品线的进步。InfluxDB Clustered 现已正式发布。

InfluxDB v3 性能和功能

InfluxDB v3 产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强功能包括用于监控 InfluxDB 集群健康状况的操作仪表板,InfluxDB Cloud Dedicated 中的单点登录(SSO)支持,以及用于令牌和数据库的新管理 API。

了解新的 v3 增强功能


InfluxDB Clustered 正式发布

InfluxDB Clustered 现已正式发布,并为您在自行管理的堆栈中提供 InfluxDB v3 的功能。

与我们谈论 InfluxDB Clustered

InfluxDB云无服务器