v3 InfluxQL troubleshooting (#5261)

* WIP v3 influxql troubleshooting

* WIP influxql troubleshooting

* WIP InfluxQL troubleshooting

* add influxql troubleshooting to serverless

* Update content/influxdb/cloud-dedicated/query-data/influxql/troubleshoot.md

Co-authored-by: Jason Stirnaman <stirnamanj@gmail.com>

* ported influxql troubleshooting to serverless and clustered

---------

Co-authored-by: Jason Stirnaman <stirnamanj@gmail.com>
pull/5263/head
Scott Anderson 2023-12-06 14:04:10 -07:00 committed by GitHub
parent 96cd46ebba
commit ae3341cc70
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 807 additions and 0 deletions

View File

@ -0,0 +1,269 @@
---
title: Troubleshoot InfluxQL errors
description: >
Learn how to troubleshoot and fix common InfluxQL errors.
menu:
influxdb_cloud_dedicated:
name: Troubleshoot errors
parent: Query with InfluxQL
weight: 230
---
Learn how to troubleshoot and fix common InfluxQL errors.
{{% note %}}
**Disclaimer:** This document does not contain an exhaustive list of all
possible InfluxQL errors.
{{% /note %}}
- [error: database name required](#error-database-name-required)
- [error parsing query: found ..., expected identifier at ...](#error-parsing-query-found--expected-identifier-at-)
- [error parsing query: mixing aggregate and non-aggregate queries is not supported](#error-parsing-query-mixing-aggregate-and-non-aggregate-queries-is-not-supported)
- [invalid operation: time and \*influxql.VarRef are not compatible](#invalid-operation-time-and-influxqlvarref-are-not-compatible)
## error: database name required
```
error: database name required
```
### Cause
The `database name required` error occurs when certain
[`SHOW` queries](/influxdb/cloud-dedicated/reference/influxql/show/)
do not specify a [database](/influxdb/cloud-dedicated/reference/glossary/#database)
in the query or with the query request.
For example, the following `SHOW` query doesn't specify the database and assumes
the `db` is not specified in the `/query` API request:
```sql
SHOW MEASUREMENTS
```
### Solution
To resolve this error, specify a database with your query request by doing one
of the following:
{{% code-placeholders "DATABASE_(NAME|TOKEN)" %}}
- Include an `ON` clause with the `SHOW` statement that specifies the database
to query:
```sql
SHOW MEASUREMENTS ON DATABASE_NAME
```
- If using the [InfluxDB v1 query API](/enterprise_influxdb/v1/tools/api/#query-string-parameters),
Include the `db` query parameter in your request:
```sh
curl --get https://{{< influxdb/host >}}/query \
--header "Authorization: Bearer DATABASE_TOKEN" \
--data-urlencode "db=DATABASE_NAME" \
--data-urlencode "q=SHOW MEASUREMENTS"
```
{{% /code-placeholders %}}
**Related:**
[InfluxQL `SHOW` statements](/influxdb/cloud-dedicated/reference/influxql/show/),
[Explore your schema with InfluxQL](/influxdb/cloud-dedicated/query-data/influxql/explore-schema/)
---
## error parsing query: found ..., expected identifier at ...
```
error parsing query: found EXAMPLE, expected identifier at line 1, char 14
```
### Causes
This error occurs when InfluxDB anticipates an identifier in a query but doesn't find it.
Identifiers are tokens that refer to database names, retention policy names,
measurement names, field keys, and tag keys.
This error is generally caused by one of the following:
- [A required identifier is missing](#a-required-identifier-is-missing)
- [A string literal is used instead of an identifier](#a-string-literal-is-used-instead-of-an-identifier)
- [An InfluxQL keyword is used as an unquoted identifier](#an-influxql-keyword-is-used-as-an-unquoted-identifier)
#### A required identifier is missing
Some InfluxQL statements and clauses require identifiers to identify databases,
measurements, tags, or fields. If the statement is missing a required identifier,
the query returns the `expected identifier` error.
For example, the following query omits the measurement name from the
[`FROM` clause](/influxdb/cloud-dedicated/reference/influxql/select/#from-clause):
```sql
SELECT * FROM WHERE color = 'blue'
```
##### Solution
Update the query to include the expected identifier in the `FROM` clause that
identifies the measurement to query:
```sql
SELECT * FROM measurement_name WHERE color = 'blue'
```
#### A string literal is used instead of an identifier
In InfluxQL, string literals are wrapped in single quotes (`''`) while character
sequences wrapped in double quotes (`""`) are parsed as identifiers. If you use
single quotes to wrap an identifier, the identifier is parsed as a string
literal and returns the `expected identifier` error.
For example, the following query wraps the measurement name in single quotes:
```sql
SELECT * FROM 'measurement-name' WHERE color = 'blue'
```
Results in the following error:
```
error parsing query: found measurement-name, expected identifier at line 1, char 14
```
##### Solution
Update single-quoted identifiers to use double quotes so they are parsed as
identifiers and not as string literals.
```sql
SELECT * FROM "measurement-name" WHERE color = 'blue'
```
#### An InfluxQL keyword is used as an unquoted identifier
[InfluxQL keyword](/influxdb/cloud-dedicated/reference/influxql/#keywords)
are character sequences reserved for specific functionality in the InfluxQL syntax.
It is possible to use a keyword as an identifier, but the identifier must be
wrapped in double quotes (`""`).
{{% note %}}
While wrapping identifiers that are InfluxQL keywords in double quotes is an
acceptable workaround, for simplicity, you should avoid using
[InfluxQL keywords](/influxdb/cloud-dedicated/reference/influxql/#keywords)
as identifiers.
{{% /note %}}
```sql
SELECT duration FROM runs
```
Returns the following error:
```
error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
```
##### Solution
Double quote [InfluxQL keywords](/influxdb/cloud-dedicated/reference/influxql/#keywords)
when used as identifiers:
```sql
SELECT "duration" FROM runs
```
**Related:**
[InfluxQL keywords](/influxdb/cloud-dedicated/reference/influxql/#keywords),
[Query Language Documentation](/enterprise_influxdb/v1/query_language/)
---
## error parsing query: mixing aggregate and non-aggregate queries is not supported
```
error parsing query: mixing aggregate and non-aggregate queries is not supported
```
### Cause
The `mixing aggregate and non-aggregate` error occurs when a `SELECT` statement
includes both an [aggregate function](/influxdb/cloud-dedicated/reference/influxql/functions/aggregates/)
and a standalone [field key](/influxdb/cloud-dedicated/reference/glossary/#field-key) or
[tag key](/influxdb/cloud-dedicated/reference/glossary/#tag-key).
Aggregate functions return a single calculated value per group and column and
there is no obvious single value to return for any un-aggregated fields or tags.
For example, the following example queries two fields from the `home`
measurement--`temp` and `hum`. However, it only applies the aggregate function,
`MEAN` to the `temp` field.
```sql
SELECT MEAN(temp), hum FROM home
```
### Solution
To fix this error, apply an aggregate or selector function to each of the queried
fields:
```sql
SELECT MEAN(temp), MAX(hum) FROM home
```
**Related:**
[InfluxQL functions](/influxdb/cloud-dedicated/reference/influxql/functions/),
[Aggregate data with InfluxQL](/influxdb/cloud-dedicated/query-data/influxql/aggregate-select/)
---
## invalid operation: time and \*influxql.VarRef are not compatible
```
invalid operation: time and *influxql.VarRef are not compatible
```
### Cause
The `time and \*influxql.VarRef are not compatible` error occurs when
date-time strings are double-quoted in a query.
Date-time strings should be formatted as string literals and wrapped in single quotes (`''`).
For example:
{{% influxdb/custom-timestamps %}}
```sql
SELECT temp
FROM home
WHERE
time >= "2022-01-01T08:00:00Z"
AND time <= "2022-01-01T00:20:00Z"
```
{{% /influxdb/custom-timestamps %}}
Returns the following error:
```
invalid operation: time and *influxql.VarRef are not compatible
```
### Solution
To fix the error, wrap RFC3339 timestamps in single quotes rather than double quotes.
{{% influxdb/custom-timestamps %}}
```sql
SELECT temp
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T00:20:00Z'
```
{{% /influxdb/custom-timestamps %}}
**Related:**
[Query data within time boundaries](/influxdb/cloud-dedicated/query-data/influxql/basic-query/#query-data-within-time-boundaries),
[`WHERE` clause--Time ranges](/influxdb/cloud-dedicated/reference/influxql/where/#time-ranges),
[InfluxQL time syntax](/influxdb/cloud-dedicated/reference/influxql/time-and-timezone/#time-syntax)

View File

@ -0,0 +1,269 @@
---
title: Troubleshoot InfluxQL errors
description: >
Learn how to troubleshoot and fix common InfluxQL errors.
menu:
influxdb_cloud_serverless:
name: Troubleshoot errors
parent: Query with InfluxQL
weight: 230
---
Learn how to troubleshoot and fix common InfluxQL errors.
{{% note %}}
**Disclaimer:** This document does not contain an exhaustive list of all
possible InfluxQL errors.
{{% /note %}}
- [error: database name required](#error-database-name-required)
- [error parsing query: found ..., expected identifier at ...](#error-parsing-query-found--expected-identifier-at-)
- [error parsing query: mixing aggregate and non-aggregate queries is not supported](#error-parsing-query-mixing-aggregate-and-non-aggregate-queries-is-not-supported)
- [invalid operation: time and \*influxql.VarRef are not compatible](#invalid-operation-time-and-influxqlvarref-are-not-compatible)
## error: database name required
```
error: database name required
```
### Cause
The `database name required` error occurs when certain
[`SHOW` queries](/influxdb/cloud-serverless/reference/influxql/show/)
do not specify a [database](/influxdb/cloud-serverless/reference/glossary/#database)
in the query or with the query request.
For example, the following `SHOW` query doesn't specify the database and assumes
the `db` is not specified in the `/query` API request:
```sql
SHOW MEASUREMENTS
```
### Solution
To resolve this error, specify a database with your query request by doing one
of the following:
{{% code-placeholders "DATABASE_(NAME|TOKEN)" %}}
- Include an `ON` clause with the `SHOW` statement that specifies the database
to query:
```sql
SHOW MEASUREMENTS ON DATABASE_NAME
```
- If using the [InfluxDB v1 query API](/enterprise_influxdb/v1/tools/api/#query-string-parameters),
Include the `db` query parameter in your request:
```sh
curl --get https://{{< influxdb/host >}}/query \
--header "Authorization: Bearer DATABASE_TOKEN" \
--data-urlencode "db=DATABASE_NAME" \
--data-urlencode "q=SHOW MEASUREMENTS"
```
{{% /code-placeholders %}}
**Related:**
[InfluxQL `SHOW` statements](/influxdb/cloud-serverless/reference/influxql/show/),
[Explore your schema with InfluxQL](/influxdb/cloud-serverless/query-data/influxql/explore-schema/)
---
## error parsing query: found ..., expected identifier at ...
```
error parsing query: found EXAMPLE, expected identifier at line 1, char 14
```
### Causes
This error occurs when InfluxDB anticipates an identifier in a query but doesn't find it.
Identifiers are tokens that refer to database names, retention policy names,
measurement names, field keys, and tag keys.
This error is generally caused by one of the following:
- [A required identifier is missing](#a-required-identifier-is-missing)
- [A string literal is used instead of an identifier](#a-string-literal-is-used-instead-of-an-identifier)
- [An InfluxQL keyword is used as an unquoted identifier](#an-influxql-keyword-is-used-as-an-unquoted-identifier)
#### A required identifier is missing
Some InfluxQL statements and clauses require identifiers to identify databases,
measurements, tags, or fields. If the statement is missing a required identifier,
the query returns the `expected identifier` error.
For example, the following query omits the measurement name from the
[`FROM` clause](/influxdb/cloud-serverless/reference/influxql/select/#from-clause):
```sql
SELECT * FROM WHERE color = 'blue'
```
##### Solution
Update the query to include the expected identifier in the `FROM` clause that
identifies the measurement to query:
```sql
SELECT * FROM measurement_name WHERE color = 'blue'
```
#### A string literal is used instead of an identifier
In InfluxQL, string literals are wrapped in single quotes (`''`) while character
sequences wrapped in double quotes (`""`) are parsed as identifiers. If you use
single quotes to wrap an identifier, the identifier is parsed as a string
literal and returns the `expected identifier` error.
For example, the following query wraps the measurement name in single quotes:
```sql
SELECT * FROM 'measurement-name' WHERE color = 'blue'
```
Results in the following error:
```
error parsing query: found measurement-name, expected identifier at line 1, char 14
```
##### Solution
Update single-quoted identifiers to use double quotes so they are parsed as
identifiers and not as string literals.
```sql
SELECT * FROM "measurement-name" WHERE color = 'blue'
```
#### An InfluxQL keyword is used as an unquoted identifier
[InfluxQL keyword](/influxdb/cloud-serverless/reference/influxql/#keywords)
are character sequences reserved for specific functionality in the InfluxQL syntax.
It is possible to use a keyword as an identifier, but the identifier must be
wrapped in double quotes (`""`).
{{% note %}}
While wrapping identifiers that are InfluxQL keywords in double quotes is an
acceptable workaround, for simplicity, you should avoid using
[InfluxQL keywords](/influxdb/cloud-serverless/reference/influxql/#keywords)
as identifiers.
{{% /note %}}
```sql
SELECT duration FROM runs
```
Returns the following error:
```
error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
```
##### Solution
Double quote [InfluxQL keywords](/influxdb/cloud-serverless/reference/influxql/#keywords)
when used as identifiers:
```sql
SELECT "duration" FROM runs
```
**Related:**
[InfluxQL keywords](/influxdb/cloud-serverless/reference/influxql/#keywords),
[Query Language Documentation](/enterprise_influxdb/v1/query_language/)
---
## error parsing query: mixing aggregate and non-aggregate queries is not supported
```
error parsing query: mixing aggregate and non-aggregate queries is not supported
```
### Cause
The `mixing aggregate and non-aggregate` error occurs when a `SELECT` statement
includes both an [aggregate function](/influxdb/cloud-serverless/reference/influxql/functions/aggregates/)
and a standalone [field key](/influxdb/cloud-serverless/reference/glossary/#field-key) or
[tag key](/influxdb/cloud-serverless/reference/glossary/#tag-key).
Aggregate functions return a single calculated value per group and column and
there is no obvious single value to return for any un-aggregated fields or tags.
For example, the following example queries two fields from the `home`
measurement--`temp` and `hum`. However, it only applies the aggregate function,
`MEAN` to the `temp` field.
```sql
SELECT MEAN(temp), hum FROM home
```
### Solution
To fix this error, apply an aggregate or selector function to each of the queried
fields:
```sql
SELECT MEAN(temp), MAX(hum) FROM home
```
**Related:**
[InfluxQL functions](/influxdb/cloud-serverless/reference/influxql/functions/),
[Aggregate data with InfluxQL](/influxdb/cloud-serverless/query-data/influxql/aggregate-select/)
---
## invalid operation: time and \*influxql.VarRef are not compatible
```
invalid operation: time and *influxql.VarRef are not compatible
```
### Cause
The `time and \*influxql.VarRef are not compatible` error occurs when
date-time strings are double-quoted in a query.
Date-time strings should be formatted as string literals and wrapped in single quotes (`''`).
For example:
{{% influxdb/custom-timestamps %}}
```sql
SELECT temp
FROM home
WHERE
time >= "2022-01-01T08:00:00Z"
AND time <= "2022-01-01T00:20:00Z"
```
{{% /influxdb/custom-timestamps %}}
Returns the following error:
```
invalid operation: time and *influxql.VarRef are not compatible
```
### Solution
To fix the error, wrap RFC3339 timestamps in single quotes rather than double quotes.
{{% influxdb/custom-timestamps %}}
```sql
SELECT temp
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T00:20:00Z'
```
{{% /influxdb/custom-timestamps %}}
**Related:**
[Query data within time boundaries](/influxdb/cloud-serverless/query-data/influxql/basic-query/#query-data-within-time-boundaries),
[`WHERE` clause--Time ranges](/influxdb/cloud-serverless/reference/influxql/where/#time-ranges),
[InfluxQL time syntax](/influxdb/cloud-serverless/reference/influxql/time-and-timezone/#time-syntax)

View File

@ -0,0 +1,269 @@
---
title: Troubleshoot InfluxQL errors
description: >
Learn how to troubleshoot and fix common InfluxQL errors.
menu:
influxdb_clustered:
name: Troubleshoot errors
parent: Query with InfluxQL
weight: 230
---
Learn how to troubleshoot and fix common InfluxQL errors.
{{% note %}}
**Disclaimer:** This document does not contain an exhaustive list of all
possible InfluxQL errors.
{{% /note %}}
- [error: database name required](#error-database-name-required)
- [error parsing query: found ..., expected identifier at ...](#error-parsing-query-found--expected-identifier-at-)
- [error parsing query: mixing aggregate and non-aggregate queries is not supported](#error-parsing-query-mixing-aggregate-and-non-aggregate-queries-is-not-supported)
- [invalid operation: time and \*influxql.VarRef are not compatible](#invalid-operation-time-and-influxqlvarref-are-not-compatible)
## error: database name required
```
error: database name required
```
### Cause
The `database name required` error occurs when certain
[`SHOW` queries](/influxdb/clustered/reference/influxql/show/)
do not specify a [database](/influxdb/clustered/reference/glossary/#database)
in the query or with the query request.
For example, the following `SHOW` query doesn't specify the database and assumes
the `db` is not specified in the `/query` API request:
```sql
SHOW MEASUREMENTS
```
### Solution
To resolve this error, specify a database with your query request by doing one
of the following:
{{% code-placeholders "DATABASE_(NAME|TOKEN)" %}}
- Include an `ON` clause with the `SHOW` statement that specifies the database
to query:
```sql
SHOW MEASUREMENTS ON DATABASE_NAME
```
- If using the [InfluxDB v1 query API](/enterprise_influxdb/v1/tools/api/#query-string-parameters),
Include the `db` query parameter in your request:
```sh
curl --get https://{{< influxdb/host >}}/query \
--header "Authorization: Bearer DATABASE_TOKEN" \
--data-urlencode "db=DATABASE_NAME" \
--data-urlencode "q=SHOW MEASUREMENTS"
```
{{% /code-placeholders %}}
**Related:**
[InfluxQL `SHOW` statements](/influxdb/clustered/reference/influxql/show/),
[Explore your schema with InfluxQL](/influxdb/clustered/query-data/influxql/explore-schema/)
---
## error parsing query: found ..., expected identifier at ...
```
error parsing query: found EXAMPLE, expected identifier at line 1, char 14
```
### Causes
This error occurs when InfluxDB anticipates an identifier in a query but doesn't find it.
Identifiers are tokens that refer to database names, retention policy names,
measurement names, field keys, and tag keys.
This error is generally caused by one of the following:
- [A required identifier is missing](#a-required-identifier-is-missing)
- [A string literal is used instead of an identifier](#a-string-literal-is-used-instead-of-an-identifier)
- [An InfluxQL keyword is used as an unquoted identifier](#an-influxql-keyword-is-used-as-an-unquoted-identifier)
#### A required identifier is missing
Some InfluxQL statements and clauses require identifiers to identify databases,
measurements, tags, or fields. If the statement is missing a required identifier,
the query returns the `expected identifier` error.
For example, the following query omits the measurement name from the
[`FROM` clause](/influxdb/clustered/reference/influxql/select/#from-clause):
```sql
SELECT * FROM WHERE color = 'blue'
```
##### Solution
Update the query to include the expected identifier in the `FROM` clause that
identifies the measurement to query:
```sql
SELECT * FROM measurement_name WHERE color = 'blue'
```
#### A string literal is used instead of an identifier
In InfluxQL, string literals are wrapped in single quotes (`''`) while character
sequences wrapped in double quotes (`""`) are parsed as identifiers. If you use
single quotes to wrap an identifier, the identifier is parsed as a string
literal and returns the `expected identifier` error.
For example, the following query wraps the measurement name in single quotes:
```sql
SELECT * FROM 'measurement-name' WHERE color = 'blue'
```
Results in the following error:
```
error parsing query: found measurement-name, expected identifier at line 1, char 14
```
##### Solution
Update single-quoted identifiers to use double quotes so they are parsed as
identifiers and not as string literals.
```sql
SELECT * FROM "measurement-name" WHERE color = 'blue'
```
#### An InfluxQL keyword is used as an unquoted identifier
[InfluxQL keyword](/influxdb/clustered/reference/influxql/#keywords)
are character sequences reserved for specific functionality in the InfluxQL syntax.
It is possible to use a keyword as an identifier, but the identifier must be
wrapped in double quotes (`""`).
{{% note %}}
While wrapping identifiers that are InfluxQL keywords in double quotes is an
acceptable workaround, for simplicity, you should avoid using
[InfluxQL keywords](/influxdb/clustered/reference/influxql/#keywords)
as identifiers.
{{% /note %}}
```sql
SELECT duration FROM runs
```
Returns the following error:
```
error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
```
##### Solution
Double quote [InfluxQL keywords](/influxdb/clustered/reference/influxql/#keywords)
when used as identifiers:
```sql
SELECT "duration" FROM runs
```
**Related:**
[InfluxQL keywords](/influxdb/clustered/reference/influxql/#keywords),
[Query Language Documentation](/enterprise_influxdb/v1/query_language/)
---
## error parsing query: mixing aggregate and non-aggregate queries is not supported
```
error parsing query: mixing aggregate and non-aggregate queries is not supported
```
### Cause
The `mixing aggregate and non-aggregate` error occurs when a `SELECT` statement
includes both an [aggregate function](/influxdb/clustered/reference/influxql/functions/aggregates/)
and a standalone [field key](/influxdb/clustered/reference/glossary/#field-key) or
[tag key](/influxdb/clustered/reference/glossary/#tag-key).
Aggregate functions return a single calculated value per group and column and
there is no obvious single value to return for any un-aggregated fields or tags.
For example, the following example queries two fields from the `home`
measurement--`temp` and `hum`. However, it only applies the aggregate function,
`MEAN` to the `temp` field.
```sql
SELECT MEAN(temp), hum FROM home
```
### Solution
To fix this error, apply an aggregate or selector function to each of the queried
fields:
```sql
SELECT MEAN(temp), MAX(hum) FROM home
```
**Related:**
[InfluxQL functions](/influxdb/clustered/reference/influxql/functions/),
[Aggregate data with InfluxQL](/influxdb/clustered/query-data/influxql/aggregate-select/)
---
## invalid operation: time and \*influxql.VarRef are not compatible
```
invalid operation: time and *influxql.VarRef are not compatible
```
### Cause
The `time and \*influxql.VarRef are not compatible` error occurs when
date-time strings are double-quoted in a query.
Date-time strings should be formatted as string literals and wrapped in single quotes (`''`).
For example:
{{% influxdb/custom-timestamps %}}
```sql
SELECT temp
FROM home
WHERE
time >= "2022-01-01T08:00:00Z"
AND time <= "2022-01-01T00:20:00Z"
```
{{% /influxdb/custom-timestamps %}}
Returns the following error:
```
invalid operation: time and *influxql.VarRef are not compatible
```
### Solution
To fix the error, wrap RFC3339 timestamps in single quotes rather than double quotes.
{{% influxdb/custom-timestamps %}}
```sql
SELECT temp
FROM home
WHERE
time >= '2022-01-01T08:00:00Z'
AND time <= '2022-01-01T00:20:00Z'
```
{{% /influxdb/custom-timestamps %}}
**Related:**
[Query data within time boundaries](/influxdb/clustered/query-data/influxql/basic-query/#query-data-within-time-boundaries),
[`WHERE` clause--Time ranges](/influxdb/clustered/reference/influxql/where/#time-ranges),
[InfluxQL time syntax](/influxdb/clustered/reference/influxql/time-and-timezone/#time-syntax)