InfluxDB Docs

Annotated CSV syntax

Annotated CSV (comma-separated values) format is used to encode HTTP responses and results returned to the Flux csv.from() function.

CSV tables must be encoded in UTF-8 and Unicode Normal Form C as defined in UAX15. Line endings must be CRLF (Carriage Return Line Feed) as defined by the text/csv MIME type in RFC 4180.

Examples

In this topic, you’ll find examples of valid CSV syntax for responses to the following query:

from(bucket:"mydb/autogen")
    |> range(start:2018-05-08T20:50:00Z, stop:2018-05-08T20:51:00Z)
    |> group(columns:["_start","_stop", "region", "host"])
    |> yield(name:"my-result")

CSV response format

Flux supports encodings listed below.

Tables

A table may have the following rows and columns.

Rows

  • 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).

Example

Encoding of a table with and without a header row.

result,table,_start,_stop,_time,region,host,_value
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62

Columns

In addition to the data columns, a table may include the following columns:

  • Annotation column: Only used in annotation rows. Always the first column. Displays the name of an annotation. Value can be empty or a supported annotation. You’ll notice a space for this column for the entire length of the table, so rows appear to start with ,.

  • Result column: Contains the name of the result specified by the query.

  • Table column: Contains a unique ID for each table in a result.

Multiple tables and results

If a file or data stream contains multiple tables or results, the following requirements must be met:

  • A table column indicates which table a row belongs to.
  • All rows in a table are contiguous.
  • An empty row delimits a new table boundary in the following cases:
    • Between tables in the same result that do not share a common table schema.
    • Between concatenated CSV files.
  • Each new table boundary starts with new annotation and header rows.
Example

Encoding of two tables in the same result with the same schema (header row) and different schema.

result,table,_start,_stop,_time,region,host,_value
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62
my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,west,A,62.73
my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,west,B,12.83
my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,west,C,51.62
,result,table,_start,_stop,_time,region,host,_value
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62

,result,table,_start,_stop,_time,location,device,min,max
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,USA,5825,62.73,68.42
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,USA,2175,12.83,56.12
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,USA,6913,51.62,54.25

Dialect options

Flux supports the following dialect options for text/csv format.

OptionDescriptionDefault
headerIf true, the header row is included.true
delimiterCharacter used to delimit columns.,
quoteCharCharacter used to quote values containing the delimiter."
annotationsList of annotations to encode (datatype, group, or default).empty
commentPrefixString prefix to identify a comment. Always added to annotations.#

Annotations

Annotation rows are optional, 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 nameValuesDescription
datatypea valid data typeDescribes the type of data.
groupboolean flag true or falseIndicates the column is part of the group key.
defaulta valid data typeValue to use for rows with an empty string value.
Example

Encoding of datatype and group annotations for two tables.

#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,string,string,double
,result,table,_start,_stop,_time,region,host,_value
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,west,A,62.73
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,west,B,12.83
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,west,C,51.62
#group,false,false,true,true,false,true,false,false
,result,table,_start,_stop,_time,region,host,_value
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,west,A,62.73
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,west,B,12.83
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,west,C,51.62
#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,string,string,double
,result,table,_start,_stop,_time,region,host,_value
#group,false,false,true,true,false,true,false,false
,result,table,_start,_stop,_time,region,host,_value
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,east,A,15.43
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,east,B,59.25
,my-result,0,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,east,C,52.62
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,west,A,62.73
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,west,B,12.83
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,west,C,51.62

Notes:

To encode a table with its group key, the datatype, group, and default annotations must be included.

If a table has no rows, the default annotation provides the group key values.

Valid data types

DatatypeFlux typeDescription
booleanboola truth value, one of “true” or “false”
unsignedLonguintan unsigned 64-bit integer
longinta signed 64-bit integer
doublefloatan IEEE-754 64-bit floating-point number
stringstringa UTF-8 encoded string
base64Binarybytesa base64 encoded sequence of bytes as defined in RFC 4648
dateTimetimean instant in time, may be followed with a colon : and a description of the format
durationdurationa length of time represented as an unsigned 64-bit integer number of nanoseconds

Errors

If an error occurs during execution, a table returns with:

  • An error column that contains an error message.
  • A reference column with a unique reference code to identify more information about the error.
  • A second row with error properties.

If an error occurs:

  • Before results materialize, the HTTP status code indicates an error. Error details are encoded in the csv table.
  • After partial results are sent to the client, the error is encoded as the next table and remaining results are discarded. In this case, the HTTP status code remains 200 OK.
Example

Encoding for an error with the datatype annotation:

#datatype,string,long
,error,reference
,Failed to parse query,897

Encoding for an error that occurs after a valid table has been encoded:

#datatype,string,long,dateTime:RFC3339,dateTime:RFC3339,dateTime:RFC3339,string,string,double,result,table,_start,_stop,_time,region,host,_value
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:00Z,west,A,62.73
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:20Z,west,B,12.83
,my-result,1,2018-05-08T20:50:00Z,2018-05-08T20:51:00Z,2018-05-08T20:50:40Z,west,C,51.62
#datatype,string,long
,error,reference,query terminated: reached maximum allowed memory limits,576