content/influxdb3/cloud-serverless/reference/syntax/annotated-csv/_index.md
You can write data to InfluxDB using annotated CSV and the InfluxDB HTTP API or upload a CSV file in the InfluxDB UI.
CSV tables must be encoded in UTF-8 and Unicode Normal Form C as defined in UAX15. InfluxDB removes carriage returns before newline characters.
InfluxDB annotated CSV supports encodings listed below.
A table may have the following rows and columns.
Annotation rows: describe column properties.
Header row: defines column labels (one header row per table).
Record row: describes data in the table (one record per row).
#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
In addition to the data columns, a table may include the following columns:
Annotation column: Displays the name of an annotation.
Only used in annotation rows and is always the first column.
Value can be empty or a supported annotation.
The response format uses a comma (,) to separate an annotation name from values in the row.
To account for this, rows in the table start with a leading comma; you'll notice an empty column for the entire length of the table.
Result column: Contains the name of the result specified by the query.
Table column: Contains a unique ID for each table in a result.
If a file or data stream contains multiple tables or results, the following requirements must be met:
#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
Flux supports the following dialect options for text/csv format.
| Option | Description | Default |
|---|---|---|
| header | If true, the header row is included. | true |
| delimiter | Character used to delimit columns. | , |
| quoteChar | Character used to quote values containing the delimiter. | " |
| annotations | List of annotations to encode (datatype, group, or default). | empty |
| commentPrefix | String prefix to identify a comment. Always added to annotations. | # |
Annotation rows describe column properties, and start with # (or commentPrefix value).
The first column in an annotation row always contains the annotation name.
Subsequent columns contain annotation values as shown in the table below.
| Annotation name | Values | Description |
|---|---|---|
| datatype | a data type or line protocol element | Describes the type of data or which line protocol element the column represents. |
| default | a value of the column's data type | Value to use for rows with an empty value. |
| Datatype | Description |
|---|---|
| boolean | "true" or "false" |
| unsignedLong | unsigned 64-bit integer |
| long | signed 64-bit integer |
| double | IEEE-754 64-bit floating-point number |
| string | UTF-8 encoded string |
| base64Binary | base64 encoded sequence of bytes as defined in RFC 4648 |
| dateTime | instant in time, may be followed with a colon : and a description of the format (number, RFC3339, RFC3339Nano) |
| duration | length of time represented as an unsigned 64-bit integer number of nanoseconds |
The datatype annotation accepts data types and line protocol elements.
Line protocol elements identify how columns are converted into line protocol when using the
influx write command to write annotated CSV to InfluxDB.
| Line protocol element | Description |
|---|---|
measurement | column value is the measurement |
field (default) | column header is the field key, column value is the field value |
tag | column header is the tag key, column value is the tag value |
time | column value is the timestamp (alias for dateTime) |
ignore orignored | column is ignored and not included in line protocol |
Columns with data types (other than dateTime) in the
#datatype annotation are treated as fields when converted to line protocol.
Columns without a specified data type default to field when converted to line protocol
and column values are left unmodified in line protocol.
See an example below and
line protocol data types and format.
A column with time or dateTime #datatype annotations are used as the timestamp
when converted to line protocol.
If there are multiple time or dateTime columns, the last column (on the right)
is used as the timestamp in line protocol.
Other time columns are ignored and the influx write command outputs a warning.
Time column values should be Unix nanosecond timestamps, RFC3339, or RFC3339Nano.
#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
Resulting 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
#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
Resulting 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
If an error occurs during execution, a table returns with:
If an error occurs:
Encoding for an error with the datatype annotation:
#datatype,string,long
,error,reference
,Failed to parse query,897