このトピックでは、TSDB For InfluxDB® でよくあるエラーメッセージとその解決策について説明します。
「database name required」エラーの対処法
database name required エラーは、SHOW を含むクエリでデータベースが指定されていない場合に発生します。データベースを指定するには、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 の制限を超えたシリーズのメジャーメントとタグセットを示します。
「found < >, expected identifier at line < >, char < >」エラーの対処法
InfluxQL 構文
expected identifierエラーは、TSDB For InfluxDB® がクエリ内で想定される識別子を見つけられない場合に発生します。識別子とは、継続的クエリ、データベース、フィールドキー、メジャーメント、保持ポリシー、サブスクリプション、タグキー、およびユーザー名の名前です。このエラーは通常、クエリ構文に問題があることを示します。例:
> SELECT * FROM WHERE "blue"= true ERR: error parsing query: found WHERE, expected identifier at line 1, char 15このクエリでは、
FROMとWHEREの間にメジャーメント名がありません。InfluxQL キーワード
場合によっては、クエリ内の識別子が InfluxQL のキーワードであるときに
expected identifierエラーが発生します。InfluxQL のキーワードでもある識別子をクエリするには、識別子を二重引用符で囲みます。クエリ内の識別子が InfluxQL のキーワードである場合、
expected identifierエラーが発生することがあります。このような識別子をクエリするには、二重引用符で囲みます。例
> SELECT duration FROM runs ERR: error parsing query: found DURATION, expected identifier, string, number, bool at line 1, char 8このクエリでは、フィールドキー
durationが InfluxQL のキーワードです。エラーを回避するには、durationを二重引用符で囲みます:> SELECT "duration" FROM runs
「found < >, expected string at line < >, char < >」エラーの対処法
expected string エラーは、TSDB For InfluxDB® がクエリ内で文字列値を予期している箇所に、それが見つからない場合に発生します。
「mixing aggregate and non-aggregate queries is not supported」エラーの対処法
mixing aggregate and non-aggregate エラーは、SELECT 文に集計関数と集計されていないフィールドキーまたはタグキーの両方が含まれている場合に発生します。
集計関数は、計算された単一の結果を返します。集計されていないフィールドやタグについては、返す単一の明確な値がありません。
例
生データ:メジャーメント peg には 2 つのフィールド (square と round) と 1 つのタグ (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クエリ 1:
> SELECT mean("square"),"round" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supportedクエリ 1 には、集計関数と集計されていないフィールドが含まれています。
mean("square") は集計値を返します。これは、peg メジャーメント内の 4 つの square 値の平均値です。しかし、round フィールドの 4 つの集計されていないフィールド値に対して、返す単一の明確な値はありません。
クエリ 2:
> SELECT mean("square"),"force" FROM "peg"
ERR: error parsing query: mixing aggregate and non-aggregate queries is not supportedクエリ 2 には、集計関数と集計されていないタグが含まれています。
mean("square") は集計値を返します。これは、peg メジャーメント内の 4 つの square 値の平均値です。しかし、force タグの 4 つの集計されていないタグ値に対して、返す単一の明確な値はありません。
「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」エラーの対処法
時刻の構文
bad timestampエラーは、ラインプロトコルに UNIX タイムスタンプ形式ではないタイムスタンプが含まれている場合に発生します。例
> 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エラーは、ラインプロトコルに一般的な構文エラーがある場合に発生します。例
書き込み 1:
> INSERT hens location=2 value=9 ERR:{"error":"unable to parse 'hens location=2 value=9': bad timestamp"}書き込み 1 では、ラインプロトコルは、メジャーメント
hensとタグlocation=2を区切るために、カンマではなくスペースを使用しています。TSDB For InfluxDB® はフィールドvalue=9をタイムスタンプとして解釈し、エラーを返します。エラーを回避するには、メジャーメントとタグを区切るためにスペースではなくカンマを使用します:
> INSERT hens,location=2 value=9書き込み 2:
> INSERT cows,name=daisy milk_prod=3 happy=3 ERR:{"error":"unable to parse 'cows,name=daisy milk_prod=3 happy=3': bad timestamp"}書き込み 2 では、ラインプロトコルは
milk_prod=3フィールドとhappy=3フィールドを区切るために、カンマではなくスペースを使用しています。その結果、TSDB For InfluxDB® はhappy=3をタイムスタンプとして解釈し、エラーを返します。エラーを回避するには、2 つのフィールドをスペースではなくカンマで区切ります:
> INSERT cows,name=daisy milk_prod=3,happy=3
「time outside range」エラーの対処法
time outside range エラーは、ラインプロトコルのタイムスタンプが TSDB For InfluxDB® の有効な時間範囲外の場合に発生します。
有効な最小タイムスタンプは -9223372036854775806 または 1677-09-21T00:12:43.145224194Z で、有効な最大タイムスタンプは 9223372036854775806 または 2262-04-11T23:47:16.854775806Z です。
「engine: cache maximum memory size exceeded」エラーの対処法
cache maximum memory size exceeded エラーは、高い書き込み速度により、サーバー側のキャッシュサイズが一時的に事前設定されたしきい値を超えた場合に発生します。事前設定されたしきい値は、インスタンスタイプによって決まります。