常見問題
本文介紹常見的TSDB For InfluxDB?錯誤信息和關于它們的描述,以及常見的解決方案。
如何處理報錯“database name required”?
當包含SHOW
的查詢沒有明確指定一個數據庫時,錯誤database name required
就會發生。指定數據庫的方法包括:在SHOW
查詢中使用ON
子句,在CLI中使用USE <database_name>
,或者在HTTP API請求中使用參數db
。
相關的SHOW
查詢包括SHOW RETENTION POLICIES
、SHOW SERIES
、SHOW MEASUREMENTS
、SHOW TAG KEYS
、SHOW TAG VALUES
和SHOW FIELD KEYS
。
如何處理報錯“max series per database exceeded: < >”?
當寫入導致數據庫中序列的數量超過每個數據庫允許的最大序列數量時,錯誤max series per database exceeded
就會發生。每個數據庫允許的最大序列數量由購買的實例規格所決定。
< >
內的信息展示了那些超出max-series-per-database
限制的序列的measurement和tag set。
如何處理報錯“found < >, expected identifier at line < >, char < >”?
InfluxQL語法
當TSDB For InfluxDB?在查詢中找不到預期的標識符時,錯誤
expected identifier
就會發生。標識符是連續查詢名字、數據庫名字、field key、measurement的名字、保留策略名字、subscription的名字、tag key和用戶名。這個錯誤通常用于提醒您仔細檢查您的查詢語法。示例:
> SELECT * FROM WHERE "blue"= true ERR: error parsing query: found WHERE, expected identifier at line 1, char 15
該查詢在
FROM
和WHERE
之間缺少measurement的名字。InfluxQL關鍵字
在某些情況下,當查詢中某個標識符是InfluxQL關鍵字時,錯誤
expected identifier
就會發生。如果要查詢也是InfluxQL關鍵字的標識符,請用雙引號將標識符括起來。在某些情況下,當查詢中某個標識符是InfluxQL關鍵字時,錯誤
expected identifier
就會發生。如果要查詢也是InfluxQL關鍵字的標識符,請用雙引號將標識符括起來。示例
> SELECT duration FROM runs ERR: error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8
在查詢中,field key
duration
是一個InfluxQL關鍵字。為了避免錯誤,請用雙引號將duration
括起來:> SELECT "duration" FROM runs
如何處理報錯“found < >, expected string at line < >, char < >”?
當TSDB For InfluxDB?在查詢中找不到預期的字符串時,錯誤expected string
就會發生。
如何處理報錯“mixing aggregate and non-aggregate queries is not supported”?
當SELECT
語句同時包含聚合函數和不使用聚合函數的field key或tag key時,錯誤mixing aggregate and non-aggregate
就會發生。
聚合函數返回一個計算結果,對于沒有被聚合的field或tag,沒有明顯的單個值可以返回。
示例
原始數據:measurement peg
有兩個field(square
and round
)和一個tag(force
):
name: peg
---------
time square round force
2016-10-07T18:50:00Z281
2016-10-07T18:50:10Z4122
2016-10-07T18:50:20Z6144
2016-10-07T18:50:30Z7153
查詢一:
> SELECT mean("square"),"round" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
查詢一包含一個聚合函數和一個單獨的field。
mean("square")
返回一個聚合值,這是measurement peg
中的四個square
值的平均值,但是從field round
的四個非聚合的field value中,沒有明顯的單個值可以返回。
查詢二:
> SELECT mean("square"),"force" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supported
查詢二包含一個聚合函數和一個單獨的tag。
mean("square")
返回一個聚合值,這是measurement peg
中的四個square
值的平均值,但是從tag force
的四個非聚合的tag value中,沒有明顯的單個值可以返回。
如何處理報錯“time and *influxql.VarRef are not compatible”?
當在查詢中用雙引號把日期時間字符串括起來時,錯誤time and \*influxql.VarRef are not compatible
就會發生。需要用單引號把日期時間字符串括起來。
示例
用雙引號把日期時間字符串括起來:
> SELECT "water_level" FROM "h2o_feet" WHERE "location"='santa_monica' AND time >="2015-08-18T00:00:00Z" AND time <="2015-08-18T00:12:00Z"
ERR: invalid operation: time and *influxql.VarRef are not compatible
用單引號把日期時間字符串括起來:
> SELECT "water_level" FROM "h2o_feet" WHERE "location"='santa_monica' AND time >='2015-08-18T00:00:00Z' AND time <='2015-08-18T00:12:00Z'
name: h2o_feet
time water_level
---------------
2015-08-18T00:00:00Z2.064
2015-08-18T00:06:00Z2.116
2015-08-18T00:12:00Z2.028
如何處理報錯“bad timestamp”?
時間語法
當行協議包含不是UNIX時間戳格式的時間戳時,錯誤
bad timestamp
就會發生。示例
> INSERT pineapple value=1'2015-08-18T23:00:00Z' ERR:{"error":"unable to parse 'pineapple value=1 '2015-08-18T23:00:00Z'': bad timestamp"}
上面的行協議使用了RFC3339格式的時間戳。為了避免錯誤,成功將數據點寫入TSDB For InfluxDB?,將時間戳替換成UNIX時間戳:
> INSERT pineapple,fresh=true value=11439938800000000000
行協議語法
在某些情況下,當行協議中有更通用的語法錯誤時,錯誤
bad timestamp
就會發生。示例
寫入一:
> INSERT hens location=2 value=9 ERR:{"error":"unable to parse 'hens location=2 value=9': bad timestamp"}
在寫入一中的行協議使用空格將measurement
hen
和taglocation=2
分開,而不是用逗號。TSDB For InfluxDB?把fieldvalue=9
當成了時間戳,所以返回錯誤。為了避免錯誤,使用逗號(而不是空格)將measurement和tag分開:
> INSERT hens,location=2 value=9
寫入二:
> INSERT cows,name=daisy milk_prod=3 happy=3 ERR:{"error":"unable to parse 'cows,name=daisy milk_prod=3 happy=3': bad timestamp"}
在寫入二中的行協議使用空格將field
milk_prod=3
和fieldhappy=3
分開,而不是用逗號。TSDB For InfluxDB?把fieldhappy=3
當成了時間戳,所以返回錯誤。為了避免錯誤,使用逗號(而不是空格)將兩個field分開:
> INSERT cows,name=daisy milk_prod=3,happy=3
如何處理報錯“time outside range”?
當行協議中的時間戳在TSDB For InfluxDB?的有效時間范圍之外時,錯誤time outside range
就會發生。
最小的有效時間戳是-9223372036854775806
或1677-09-21T00:12:43.145224194Z
,最大的有效時間戳是9223372036854775806
或2262-04-11T23:47:16.854775806Z
。
如何處理報錯“engine: cache maximum memory size exceeded”?
當寫入速度過快,導致服務端cache大小短時間超過預設的門限時,錯誤cache maximum memory size exceeded
就會發生。預設的門限由購買的實例規格決定。