すべてのプロダクト
Search
ドキュメントセンター

Time Series Database:よくある質問

最終更新日:Apr 29, 2025

このトピックでは、TSDB for InfluxDB® に関連する類似概念の違い、および TSDB for InfluxDB® と他のデータベースサービスの運用上の違いに関するよくある質問 (FAQ) への回答を提供します。

FAQ ガイド

時系列と時系列カーディナリティ

管理

データクエリ

データ書き込み

TSDB for InfluxDB® の CLI

データ型

InfluxQL 関数

InfluxDB データ移行

時系列と時系列カーディナリティ

時系列カーディナリティが重要なのはなぜですか?

TSDB for InfluxDB® は、システム内の各系列のインメモリ インデックスを保持します。 系列数が増加すると、ランダムアクセス メモリ(RAM)の使用量が増加します。 系列カーディナリティが過度に高い場合、オペレーティング システムは TSDB for InfluxDB® プロセスを終了し、メモリ不足(OOM)例外をスローします。InfluxQL リファレンス

モデリングはどのように実行しますか? 注意点はありますか?

100 万個以下の時系列を格納することをお勧めします。多数の時系列を含むシナリオの詳細については、「はじめに」をご参照ください。モデリングを開始する前に、「InfluxDB スキーマ設計とデータレイアウト」をご参照ください。InfluxDB は、クエリを高速化するためにタグに基づいてインデックスを作成します。 タグが多すぎると、大量の時系列データのために読み取り/書き込み速度が低下します。 したがって、時系列の数を制御し、次の項目に注意する必要があります。

  • ID、ハッシュ値、時間など、無限に拡張されやすい値をタグとして使用しないでください。

  • メジャーメントとタグの名前に情報を格納しないでください。 関連情報をタグまたはフィールドに保存します。

  • 1 つのタグに複数の情報を格納しないでください。 それらを複数のタグに分割します。

  • フィールドが Group By 操作で頻繁に使用される場合、このフィールドはタグとしてモデル化できます。

管理

システムの安定性を維持するにはどうすればよいですか?

  • メモリ使用量を 80% 未満に保ちます。

  • 時系列の数を制御し、100 万未満に保ちます。 適切な計画については、「モデリングの注意事項」を参照することをお勧めします。

  • メジャーメントの数を制御します。 適切な計画については、「モデリングの注意事項」を参照することをお勧めします。

  • 適切なデータ総量を制御します。 データ保持ポリシーを設定して、既存データを定期的に削除することをお勧めします。

  • シャードの数と同時書き込みシャードの数を制御します。 適切なシャードグループ期間を設定し、データ保持ポリシーを設定して既存のシャードを削除することをお勧めします。

メジャーメントのディスク使用量を確認するにはどうすればよいですか?

メジャーメントレベルではディスク使用量を確認できません。 メジャーメントは論理的な概念であり、同じデータベース内のすべてのメジャーメントは基になるデータファイルに混在しています。

効率的かつ安全にデータを削除するにはどうすればよいですか?

drop measurement、drop series、および delete 操作は、InfluxDB データベースで論理削除を実行します。 この削除方法には、次の欠点があります。

  • InfluxDB 1.X では、コード実装レベルでデッドロックが発生する可能性があります。

  • クエリは削除されたタイムラインを除外する必要があり、これはクエリ効率に深刻な影響を与えます。

  • ディスク容量はすぐに解放されません。 データがマージされ、バックグラウンドでスケジュールされた後にのみ解放されます。

データ保持ポリシーを変更するか、drop shard または drop database 操作を実行してデータを削除することをお勧めします。

変更した保持ポリシーが有効にならないのはなぜですか?

TSDB for InfluxDB® 1.8.13 以降では、変更された保持ポリシーはすぐに有効になります。 そうでない場合は、次の操作を実行します。

  • TSDB for InfluxDB® のバージョンが 1.8.12 以前かどうかを確認します。 はいの場合は、30 ~ 60 分待ちます。

  • show shards 操作を実行して、シャードがカバーする時間範囲を確認します。 シャードは、現在の時刻が時間範囲の終了後である場合にのみ削除できます。

サービスが頻繁に中断されるのはなぜですか?

メモリ使用量が多いかどうかを確認します。 メモリ使用量が 80% を超えると、OOM が発生する可能性があります。 インスタンスの仕様をアップグレードすることをお勧めします。 詳細については、「メモリ使用量が多いのはなぜですか? インスタンスの仕様をアップグレードする必要がありますか?」をご参照ください。

メモリ使用量が多いのはなぜですか? インスタンスの仕様をアップグレードする必要がありますか?

メモリ使用量が多い原因としては、次のことが考えられます。

  • 多数の時系列。 インデックスのマージは大量のメモリを消費します。 スキーマ設計が合理的かどうかを確認します。 100 万個以下の時系列を格納することをお勧めします。 多数の時系列を含むシナリオの詳細については、「はじめに」をご参照ください。

  • 大量のデータまたは多数のシャード。 データ量が多いほど、占有される容量が多くなります。 データファイルのマージも大量のメモリを消費し、再起動に時間がかかります。 「効率的かつ安全にデータを削除するにはどうすればよいですか?」を参照して、一部のデータを削除することをお勧めします。 大量のデータが格納されるシナリオの詳細については、「はじめに」をご参照ください。

  • 大量のクエリ。 タグと時間フィルターを含めて、大量のクエリを回避し、スキャンされるデータ量を減らすことをお勧めします。

  • Grafana を使用してデータをクエリする場合、Grafana はチャートを設定するときに show tag keys 操作を実行する場合があります。 このクエリは短期間に大量のメモリを消費し、OOM を引き起こす可能性があります。 TSDB for InfluxDB® のバージョンを 1.8.13 以降に更新することをお勧めします。 更新後、show tag keys 操作を無効にできます。

上記の課題を解決できず、メモリ使用量が 80% を超える場合は、インスタンスの仕様をアップグレードすることをお勧めします。 詳細については、「TSDB for InfluxDB® インスタンスのアップグレードとダウングレード」をご参照ください。

ストレージ容量をスケールインできますか?

InfluxDB はクラウドディスクを使用して基になるファイルを格納します。 クラウドディスクのストレージ容量をスケールインすることはできません。

ディスクのサイズを変更するとサービスは再起動されますか?

InfluxDB ディスクのサイズが変更されると、プロセスが再起動されます。 Standard Edition インスタンスの場合、再起動中にサービスが利用できなくなる可能性があります。 High-availability Edition インスタンスの場合、3 つのノードが 1 つずつ再起動されるため、ほとんどの場合、サービスは影響を受けません。

サービスの再起動にはどれくらい時間がかかりますか?

再起動時間は、格納されているデータ量に関連しています。 格納されているデータが多いほど、再起動時間は長くなります。

InfluxDB に事前設定された Grafana はサポートされていますか?

Alibaba Cloud が提供する を使用することをお勧めします。 事前設定された Grafana はメンテナンスされなくなったため、InfluxDB の事前設定された Grafana は使用しないことをお勧めします。

インスタンスへの接続中に IP block エラーが発生したのはなぜですか?

TSDB for InfluxDB® 1.8.12 以前では、誤ったパスワードで複数回ログインを試みたために、IP アドレスが一時的にブロックされます。 バージョンを 1.8.13 以降に更新することをお勧めします。

TSDB for InfluxDB® のバージョンを確認するにはどうすればよいですか?

次の方法を使用して、TSDB for InfluxDB® のバージョンを確認できます。

  • curl path/ping コマンドを実行します。

    $ curl -i 'https://<Endpoint>:3242/ping?u=<Account name>&p=<Password>'
    HTTP/1.1204NoContent
    Content-Type: application/json
    X-Influxdb-Build: OSS
    X-Influxdb-Version:1.7.x
  • TSDB for InfluxDB® の CLI を使用します。

    $ influx -ssl -username <Username> -password <Password> -host <Endpoint> -port 3242
    
    Connected to https://<Endpoint>:3242 version 1.7.x

シャードグループ期間と保持ポリシーの関係は何ですか?

TSDB for InfluxDB® は、シャードグループにデータを格納します。 各シャードグループは、指定された時間間隔をカバーします。 TSDB for InfluxDB® で指定された時間間隔を表示するには、保持ポリシーの DURATION 要素の値を確認します。 次の表に、シャードグループの時間間隔と保持ポリシーの DURATION 要素の値のデフォルトの関係を示します。

保持ポリシーで指定された期間

シャードグループがカバーする時間間隔

2 日未満

1 時間

2 日以上 6 か月以下

1 日

6 か月超

7 日

保持ポリシーのシャードグループ期間を表示するには、SHOW RETENTION POLICIES 文を実行します。

保持ポリシーを変更した後もデータが失われないのはなぜですか?

これは、次の理由による可能性があります。

  • デフォルトでは、TSDB for InfluxDB® は 30 分ごとに保持ポリシーをチェックして適用します。 TSDB for InfluxDB® は、次回のチェック時にデータを削除する場合があります。 これは、データが duration から除外された時間範囲内で取得された場合に適用されます。 この場合、期間は新しい保持ポリシーによって指定されます。

  • 保持ポリシーの DURATION 値と SHARD DURATION 値の変更により、予期しないデータ保持が発生する可能性があります。 TSDB for InfluxDB® は、シャードグループにデータを格納します。 各シャードグループには、特定の保持ポリシーと時間間隔が含まれています。 TSDB for InfluxDB® が保持ポリシーを適用する場合、TSDB for InfluxDB® はシャードグループ内のすべてのポイントを削除します。 この場合、個々のポイントは削除されません。 TSDB for InfluxDB® はシャードグループを分割できません。 次の 2 つの条件が満たされると、システムはすべてのデータを以前のシャードグループに保存することを強制されます。(1) 新しい保持ポリシーの DURATION 値が以前の保持ポリシーの SHARD DURATION 値よりも小さい、(2) TSDB for InfluxDB® が DURATION 要素で指定された時間間隔よりも長い時間間隔をカバーする以前のシャードグループにデータを書き込んでいる。 この場合、シャードグループ内の一部のポイントが新しい DURATION 値で指定された時間間隔から外れていても、システムはすべてのデータを以前のシャードグループに保存します。 以前のシャードグループ内のすべてのデータポイントが新しい DURATION 値で指定された時間間隔から外れている場合、TSDB for InfluxDB® はシャードグループ全体を削除します。 その後、システムは、SHARD DURATION 要素で指定された新しい短い時間間隔を持つシャードグループにデータの書き込みを開始します。 これにより、予期しないデータ保持を防ぐことができます。

TSDB for InfluxDB® がマイクロ秒単位を解析できないのはなぜですか?

マイクロ秒単位を指定するために使用される構文は、特定のシナリオによって異なります。 これらのシナリオには、データ書き込み、TSDB for InfluxDB® の CLI での時間粒度設定、およびデータクエリが含まれます。 次の表に、各シナリオでサポートされている構文を示します。

HTTP API を呼び出してデータを書き込む

すべてのクエリ

TSDB for InfluxDB® の CLI で時間粒度を設定する

u

us

µ

µs

データクエリ

遅いクエリのトラブルシューティングを行うにはどうすればよいですか?

遅いクエリは、一般に、大量の時系列または生データをスキャンすることによって発生します。 したがって、各クエリにタグと時間範囲のフィルター条件を追加することをお勧めします。 また、EXPLAIN ANALYZE 文を実行して、クエリをチェックおよび最適化することもできます。 execution_time フィールドは、生データを読み取って計算操作を実行する時間を指定します。 planning_time フィールドは、時系列をスキャンする時間を指定します。 これらの 2 つのフィルター条件に基づいてクエリを最適化できます。

返される時間間隔を指定するにはどうすればよいですかtime() でグループ化 クエリ?

GROUP BY time() クエリによって返される時間間隔を指定するには、2 つの方法があります。TSDB for InfluxDB® のプリセットタイムバケットを使用するか、オフセット間隔を指定します。 例:

  • プリセットタイムバケット

    次の文を実行して、sunflowers フィールドの 18:15 から 19:45 までの平均値を計算し、平均値を時間ごとにグループ化します。

    SELECT mean("sunflowers")
    FROM "flower_orders"
    WHERE time >='2016-08-29T18:15:00Z' AND time <='2016-08-29T19:45:00Z' GROUP BY time(1h)

    次のクエリ結果は、TSDB for InfluxDB® がプリセットタイムバケットをどのように維持するかを示しています。

    この例では、18:00 と 19:00 はプリセットタイムバケットです。 WHERE 句では、クエリの時間範囲が指定されています。 指定された時間範囲に基づいて、18:15 より前に生成されたデータは、18:00 のプリセットタイムバケットの平均値の計算には使用されません。 18:00 のタイムバケットの平均値の計算に使用されるデータは、18:00 から始まる時間内である必要があります。 同じルールが 19:00 のプリセットタイムバケットにも適用されます。 19:00 のタイムバケットの平均値の計算に使用されるデータは、19:00 から始まる時間内である必要があります。 点線は、各平均値の計算に使用されるポイントを示しています。

    結果の最初のタイムスタンプは 2016-08-29T18:00:00Z です。 ただし、18:00 のプリセットタイムバケットのクエリ結果には、2016-08-29T18:15:00Z タイムスタンプで指定された時間より前に生成されたデータは除外されます。 このタイムスタンプは、クエリ時間範囲の開始時刻を指定し、WHERE 句で設定されます。

    生データの結果:

    name: flower_orders                                name: flower_orders
    ------------------------------------
    time                    sunflowers                 time                  mean
    2016-08-29T18:00:00Z342016-08-29T18:00:00Z22.332
    |--|2016-08-29T19:00:00Z62.75
    2016-08-29T18:15:00Z|28|
    2016-08-29T18:30:00Z|19|
    2016-08-29T18:45:00Z|20|
    |--|
    |--|
    2016-08-29T19:00:00Z|56|
    2016-08-29T19:15:00Z|76|
    2016-08-29T19:30:00Z|29|
    2016-08-29T19:45:00Z|90|
    |--|
    2016-08-29T20:00:00Z70
  • オフセット間隔

    次の文を実行して、sunflowers フィールドの 18:15 から 19:45 までの平均値を計算し、平均値を時間ごとにグループに分割します。 この文では、TSDB for InfluxDB® のプリセットタイムバケットに 15 分のオフセットが指定されています。

    SELECT mean("sunflowers")
    FROM "flower_orders"
    WHERE time >='2016-08-29T18:15:00Z' AND time <='2016-08-29T19:45:00Z' GROUP BY time(1h,15m)
    ---
    |
                                                                                      オフセット間隔

    指定されたオフセットにより、TSDB for InfluxDB® の各プリセットタイムバケットは 15 分だけ前方にシフトされます。 この場合、18:15 から 19:15 の間に生成されたデータは、18:00 のプリセットタイムバケットの平均値の計算に使用されます。 19:15 から 20:15 の間に生成されたデータは、19:00 のプリセットタイムバケットの平均値の計算に使用されます。 点線は、各平均値の計算に使用されるポイントを示しています。

    注:結果の最初のタイムスタンプは、2016-08-29T18:00:00Z ではなく 2016-08-29T18:15:00Z です。

    生データの結果:

    name: flower_orders                                name: flower_orders
    ------------------------------------
    time                    sunflowers                 time                  mean
    2016-08-29T18:00:00Z342016-08-29T18:15:00Z30.75
    |--|2016-08-29T19:15:00Z65
    2016-08-29T18:15:00Z|28|
    2016-08-29T18:30:00Z|19|
    2016-08-29T18:45:00Z|20|
    2016-08-29T19:00:00Z|56|
    |--|
    |--|
    2016-08-29T19:15:00Z|76|
    2016-08-29T19:30:00Z|29|
    2016-08-29T19:45:00Z|90|
    2016-08-29T20:00:00Z|70|
    |--|

クエリ応答にデータが含まれていない、または一部のデータしか含まれていないのはなぜですか?

考えられる原因は、シナリオによって異なります。 次の原因が最も一般的です。

  • 保持ポリシー

    保持ポリシーが最も一般的な原因です。 TSDB for InfluxDB® は、データベースのデフォルトの保持ポリシー (DEFAULT) からデータを自動的にクエリします。 データがデフォルトの保持ポリシーに格納されておらず、ターゲットの保持ポリシーが指定されていない場合、TSDB for InfluxDB® はデータを返しません。

  • SELECT 文のタグキー

    SELECT 文は、文に少なくとも 1 つのフィールドキーが含まれている場合にのみデータを返します。 SELECT 文にタグキーのみが含まれている場合、文は空の結果を返します。 詳細については、「データ探索」をご参照ください。

  • 時間範囲

    時間範囲も考えられる原因です。 デフォルトでは、ほとんどの SELECT 文は、タイムスタンプが 1677-09-21 00:12:43.145224194 (UTC+0) から 2262-04-11T23:47:16.854775806Z (UTC+0) までのデータをクエリします。 SELECT 文に GROUP BY time() 句が含まれている場合、システムは、タイムスタンプが指定された時間範囲内にあるポイントのみを返します。 デフォルトでは、時間範囲の開始時刻は 1677-09-21 00:12:43.145224194 タイムスタンプで指定されます。 時間範囲の終了時刻は、now() 関数によって返されます。 デフォルトでは、 クエリは、タイムスタンプが now() 関数によって返される時間より後のデータは返しません。 タイムスタンプが now() 関数によって返される時間より後のデータを取得するには、GROUP BY time() クエリで時間範囲の終了時刻を指定する必要があります。GROUP BY time()

  • 識別子名

    スキーマは最後の一般的な原因です。 スキーマの問題は、フィールドとタグの名前が同じ場合に発生する可能性があります。 フィールドキーがタグキーと同じ場合、クエリではフィールドキーのフィルターの優先順位がタグキーよりも高くなります。 クエリでは、::tag 構文を使用してタグキーを指定する必要があります。

なぜ DescribeDBInstances の応答はtime() でグループ化 クエリは、[タイムスタンプ] が [時間] よりも後のデータを [除外] します。now()関数ですか?

デフォルトでは、ほとんどの SELECT 文は、タイムスタンプが 1677-09-21 00:12:43.145224194 UTC から 2262-04-11T23:47:16.854775806Z UTC までのデータを検索します。 SELECT 文に GROUP BY time() 句が含まれている場合、システムは、タイムスタンプが特定の時間範囲内にあるポイントのみを返します。 デフォルトでは、時間範囲の開始時刻は 1677-09-21 00:12:43.145224194 タイムスタンプで指定されます。 時間範囲の終了時刻は、now() 関数によって返されます。

タイムスタンプが now() 関数で指定された時間より後のデータを取得するには、SELECT 文の各 GROUP BY time() 句で時間範囲の終了時刻を指定します。 この場合、SELECT 文には、InfluxQL 関数と WHERE 句が含まれている必要があります。

次の例では、最初のクエリは、2015-09-18T21:30:00Z タイムスタンプと now() 関数で指定された時間範囲内にあるタイムスタンプを持つデータをカバーしています。 2 番目のクエリは、2015-09-18T21:30:00Z タイムスタンプと now() 式で指定された時間範囲内にあるタイムスタンプを持つデータをカバーしています。 この式は、now() 関数によって返される時間の 180 週間後を示します。

> SELECT MEAN("boards") FROM "hillvalley" WHERE time >='2015-09-18T21:30:00Z' GROUP BY time(12m) fill(none)


> SELECT MEAN("boards") FROM "hillvalley" WHERE time >='2015-09-18T21:30:00Z' AND time <= now()+180w GROUP BY time(12m) fill(none)

注:now() 関数で指定されたデフォルトの終了時刻をオーバーライドするには、WHERE 句で指定された時間範囲の終了時刻を指定する必要があります。 次のクエリ文では、クエリ時間範囲の開始時刻が now() 関数によって返される時間に設定されています。 したがって、文を実行して、タイムスタンプが 関数で指定された時間を示すデータのみをクエリできます。

> SELECT MEAN("boards") FROM "hillvalley" WHERE time >= now() GROUP BY time(12m) fill(none)
>

時間の構文の詳細については、「データ探索」をご参照ください。

タイムスタンプに対して算術演算を実行できますか?

いいえ、TSDB for InfluxDB® ではタイムスタンプに対して算術演算を実行できません。 時間の計算は、クエリ結果を受け取るクライアントによって実行する必要があります。

TSDB for InfluxDB® は、タイムスタンプで InfluxQL 関数を使用することについて限定的なサポートを提供しています。 ELAPSED() 関数は、単一フィールドのタイムスタンプ間の差を返します。

返されたタイムスタンプに基づいて、データ書き込みの時間粒度を識別できますか?

いいえ、返されたタイムスタンプに基づいてデータ書き込みの時間粒度を識別することはできません。 データ書き込みにどの時間粒度が指定されていても、TSDB for InfluxDB® はすべてのタイムスタンプをナノ秒値として格納します。 注:クエリ結果が返されると、データベースは通知を送信せずにタイムスタンプの末尾からゼロを削除します。 したがって、返されたタイムスタンプに基づいてデータ書き込みの時間粒度を識別することはできません。

次の例では、precision_supplied タグは、データが書き込まれたときにユーザーが提供した時間粒度を示します。 timestamp_supplied タグは、データが書き込まれたときにユーザーが提供したタイムスタンプを示します。 TSDB for InfluxDB® は、返されたタイムスタンプの末尾からゼロを削除します。 したがって、返されたタイムスタンプに基づいてデータ書き込みの時間粒度を識別することはできません。

name: trails
-------------
time                  value  precision_supplied  timestamp_supplied
1970-01-01T01:00:00Z3      n                   3600000000000
1970-01-01T01:00:00Z5      h                   1
1970-01-01T02:00:00Z4      n                   7200000000000
1970-01-01T02:00:00Z6      h                   2

クエリで単一引用符 (') と二重引用符 (") はいつ使用しますか?

単一引用符 (') は、タグ値などの文字列値を囲むために使用します。 データベース名、保持ポリシー名、ユーザー名、メジャーメント名、タグキー、フィールドキーなどの識別子を囲むために単一引用符 (') を使用することはできません。

識別子が数字で始まり、文字、数字、アンダースコア (_) 以外の文字、または InfluxQL キーワードが含まれている場合は、二重引用符 (") を使用して識別子を囲みます。 それ以外の場合は、二重引用符 (") を使用して識別子を囲む必要はありません。 ただし、すべての場合において、二重引用符 (") を使用して識別子を囲むことをお勧めします。

例:

有効なクエリ:SELECT bikes_available FROM bikes WHERE station_id='9'

有効なクエリ:SELECT "bikes_available" FROM "bikes" WHERE "station_id"='9'

有効なクエリ:SELECT MIN("avgrq-sz") AS "min_avgrq-sz" FROM telegraf

有効なクエリ:SELECT * from "cr@zy" where "p^e"='2'

無効なクエリ:SELECT 'bikes_available' FROM 'bikes' WHERE 'station_id'="9"

無効なクエリ:SELECT * from cr@zy where p^e='2'

日付と時刻の文字列を囲むには、単一引用符 (') を使用します。 日付と時刻の文字列を囲むために二重引用符 (") を使用すると、TSDB for InfluxDB® は次のエラーを返します:ERR: invalid operation: time and *influxql.VarRef are not compatible

例:

有効なクエリ:SELECT "water_level" FROM "h2o_feet" WHERE time > '2015-08-18T23:00:01.232000000Z' AND time < '2015-09-19'

無効なクエリ:SELECT "water_level" FROM "h2o_feet" WHERE time > "2015-08-18T23:00:01.232000000Z" AND time < "2015-09-19"

時間の構文の詳細については、「データ探索」をご参照ください。

デフォルトの保持ポリシーを作成した後にデータが失われるのはなぜですか (既定)?

データベースにデフォルトの保持ポリシーを作成した後、以前のデフォルトの保持ポリシーに書き込まれたデータは、以前のデフォルトの保持ポリシーに残ります。 デフォルトでは、クエリに保持ポリシーが指定されていない場合、システムは新しい保持ポリシーからデータをクエリします。 この場合、以前のデフォルトの保持ポリシーに書き込まれたデータは返されません。 以前のデフォルトの保持ポリシーに書き込まれたデータをクエリするには、クエリ文で関連データを完全修飾する必要があります。 例:

fleeting メジャーメントのすべてのデータは、one_hour デフォルトの保持ポリシーに属しています。

> SELECT count(flounders) FROM fleeting
name: fleeting
--------------
time                     count
1970-01-01T00:00:00Z8

two_hour という名前のデフォルトの保持ポリシーを作成し、同じクエリを実行します。

> SELECT count(flounders) FROM fleeting
>

以前のデフォルトの保持ポリシーに書き込まれたデータをクエリするには、fleeting メジャーメントを完全修飾して、以前のデフォルトの保持ポリシーを指定します。

> SELECT count(flounders) FROM fish.one_hour.fleeting
name: fleeting
--------------
time                     count
1970-01-01T00:00:00Z8

なぜ DescribeDBInstances の応答はWHERE OR複数の時間範囲を指定するために OR 演算子を使用する句にデータが含まれていない場合

TSDB for InfluxDB® では、WHERE 句で OR 演算子を使用して複数の時間範囲を指定することはできません。 WHERE 句で OR 演算子を使用して複数の時間範囲を指定すると、TSDB for InfluxDB® は結果を返しません。

例:

> SELECT * FROM "absolutismus" WHERE time ='2016-07-31T20:07:00Z' OR time ='2016-07-31T23:07:17Z'
>

なぜ fill(前値)関数が値を返さない場合

前の値が、指定されたクエリ時間範囲から外れている可能性があります。 この場合、fill(previous) 関数は、前の値を使用してクエリ時間範囲の欠損値を埋めません。

次の例では、TSDB for InfluxDB® は、2016-07-12T16:50:00Z から 2016-07-12T16:50:10Z までの時間範囲の値を使用して、2016-07-12T16:50:20Z から 2016-07-12T16:50:30Z までの時間範囲の欠損値を埋めません。 これは、前の時間範囲がクエリ時間範囲から除外されているために発生します。

例:

> SELECT * FROM "cupcakes"
name: cupcakes
--------------
time                   chocolate
2016-07-12T16:50:00Z3
2016-07-12T16:50:10Z2
2016-07-12T16:50:40Z12
2016-07-12T16:50:50Z11

GROUP BY time() クエリ:

> SELECT max("chocolate") FROM "cupcakes" WHERE time >='2016-07-12T16:50:20Z' AND time <='2016-07-12T16:51:10Z' GROUP BY time(20s) fill(previous)
name: cupcakes
--------------
time                   max
2016-07-12T16:50:20Z
2016-07-12T16:50:40Z12
2016-07-12T16:51:00Z12

なぜ TRUNCATE TABLE を実行するとデータが失われるのですか?INTO クエリですか?

デフォルトでは、SELECT INTO クエリは、生データのタグを新しく書き込まれたデータのフィールドに変換します。 その結果、TSDB for InfluxDB® は、タグを使用して区別されるポイントを上書きします。 SELECT INTO 文に GROUP BY * 句を追加して、新しく書き込まれたデータのタグを保持できます。

説明

この方法は、TOP() または BOTTOM() 関数を使用するクエリには適用されません。 TOP() 関数と BOTTOM() 関数の詳細については、「関数の一般的な構文」をご参照ください。

french_bulldogs メジャーメントには、color タグと name フィールドが含まれています。

> SELECT * FROM "french_bulldogs"
name: french_bulldogs
---------------------
time                  color  name
2016-05-25T00:05:00Z  peach  nugget
2016-05-25T00:05:00Z  grey   rumple
2016-05-25T00:10:00Z  black  prince
  • GROUP BY * 句を除外する SELECT INTO 文

    GROUP BY * 句を除外する SELECT INTO 文は、新しく書き込まれたデータの color タグをフィールドに変換します。 生データでは、nugget ポイントと rumple ポイントは color タグによってのみ区別されます。 color タグがフィールドに変換されると、TSDB for InfluxDB® は nugget ポイントと rumple ポイントが重複していると見なします。 したがって、TSDB for InfluxDB® は rumple ポイントを nugget ポイントで上書きします。

    > SELECT * INTO "all_dogs" FROM "french_bulldogs"
    name: result
    ------------
    time                  written
    1970-01-01T00:00:00Z3
    
    > SELECT * FROM "all_dogs"
    name: all_dogs
    --------------
    time                  color  name
    2016-05-25T00:05:00Z  grey   rumple                <---- nugget はもうありません
    2016-05-25T00:10:00Z  black  prince
  • GROUP BY * 句を含む SELECT INTO 文

    GROUP BY * 句を含む SELECT INTO 文は、新しく書き込まれたデータの color タグを保持します。 この場合、nugget ポイントと rumple ポイントは互いに異なり、TSDB for InfluxDB® はポイントを上書きしません。

    > SELECT "name" INTO "all_dogs" FROM "french_bulldogs" GROUP BY *
    name: result
    ------------
    time                  written
    1970-01-01T00:00:00Z3
    
    > SELECT * FROM "all_dogs"
    name: all_dogs
    --------------
    time                  color  name
    2016-05-25T00:05:00Z  peach  nugget
    2016-05-25T00:05:00Z  grey   rumple
    2016-05-25T00:10:00Z  black  prince

タグキーとフィールドキーの名前が同じ場合、データをクエリするにはどうすればよいですか?

:: 構文を使用して、キーがフィールドキーかタグキーかを指定します。 例:

> INSERT candied,almonds=true almonds=50,half_almonds=511465317610000000000
> INSERT candied,almonds=true almonds=55,half_almonds=561465317620000000000

> SELECT * FROM "candied"
name: candied
-------------
time                   almonds  almonds_1  half_almonds
2016-06-07T16:40:10Z50       true       51
2016-06-07T16:40:20Z55       true       56
  • フィールドキーとして:

    > SELECT * FROM "candied" WHERE "almonds"::field >51
    name: candied
    -------------
    time                   almonds  almonds_1  half_almonds
    2016-06-07T16:40:20Z55       true       56
  • タグキーとして:

    > SELECT * FROM "candied" WHERE "almonds"::tag='true'
    name: candied
    -------------
    time                   almonds  almonds_1  half_almonds
    2016-06-07T16:40:10Z50       true       51
    2016-06-07T16:40:20Z55       true       56

メジャーメントをまたいでデータをクエリするにはどうすればよいですか?

メジャーメントをまたいで算術演算を実行したり、データをグループ化したりすることはできません。 同じメジャーメントに属するデータのみをクエリできます。 TSDB for InfluxDB® はリレーショナルデータベースではありません。 したがって、スキーマにクロス測定データマッピングを使用しないことをお勧めします。

クエリ文のタイムスタンプフィルターの順序は、応答時間に大きな影響を与えますか?

いいえ、クエリ文のタイムスタンプフィルターの順序は、応答時間に大きな影響を与えません。 テスト結果によると、TSDB for InfluxDB® の最初のクエリの応答時間は、2 番目のクエリの応答時間と同様です。

SELECT ... FROM ... WHERE time >'timestamp1' AND time <'timestamp2'
SELECT ... FROM ... WHERE time <'timestamp2' AND time >'timestamp1'

値のないタグをクエリする場合、SELECT 文はどのように指定しますか?SELECT

'' を使用して空のタグ値を指定します。 例:

> SELECT * FROM "vases" WHERE priceless=''
name: vases
-----------
time                   origin   priceless
2016-07-20T18:42:00Z8

データ書き込み

書き込みジッターが定期的に発生するのはなぜですか?

書き込みジッターは、TSDB for InfluxDB® がパーティションを切り替えるときに発生します。 ジッター周期が保持ポリシーのシャードグループ期間と同じかどうかを確認できます。 メジャーメントと時系列の数を減らすことで、ジッターの振幅を減らすことができます。

InfluxDB ラインプロトコルを使用してデータを書き込む際の注意事項

InfluxDB ラインプロトコルを使用してデータを書き込む際の注意事項を以下に示します。

  • 数値の末尾に i を追加して、値が整数であることを指定します。 たとえば、value=100i は値が整数であることを指定し、value=100 は値が浮動小数点数であることを指定します。

  • 二重引用符 (") は、STRING データ型のフィールド値でのみ使用されます。 メジャーメント、タグキー、タグ値、およびフィールドキーの二重引用符 (") は、名前の一部として扱われます。

  • 特殊文字を囲むために引用符を使用しないでください。 バックスラッシュ (\) エスケープ文字を使用して特殊文字を書式設定します。

テーブルに書き込まれたデータが表示されないのはなぜですか?

InfluxDB は、保持ポリシーに基づいて期限切れのデータを破棄します。 書き込み操作中に、partial write: points beyond retention policy というエラーメッセージが表示される場合があります。 書き込みタイムスタンプと保持ポリシーで指定された TTL を確認することをお勧めします。

ディスク容量の使用量を削減した後も、データがディスクに書き込まれないのはなぜですか?

InfluxDB ディスクがいっぱいになると、ディスク容量の使用量を削減した後でも書き込み操作は失敗します。 インスタンスをスケールアップするか、データをクリアした後に書き込みを再開するには、コンソールでプロセスを手動で再起動します。

INTEGER データ型のフィールド値を書き込むにはどうすればよいですか?

整数データ型のフィールド値を書き込むには、フィールド値の末尾に i を追加します。 i を追加しないと、TSDB for InfluxDB® は値を浮動小数点数として処理します。

整数を書き込む:value=100i。 浮動小数点数を書き込む:value=100

TSDB for InfluxDB® は重複ポイントをどのように処理しますか?

ポイントは、メジャーメント名、タグセット、およびタイムスタンプによって一意に識別されます。 2 つのポイントのメジャーメント名、タグセット、およびタイムスタンプが同じ場合、それらは重複ポイントと見なされます。 既存のポイントとは異なるフィールドセットを持つ重複ポイントを送信すると、ポイントのフィールドセットは以前のフィールドセットと新しいフィールドセットの合計になります。 競合が発生した場合、新しいフィールドセットが優先されます。 これは予期された結果です。

例:

以前のポイント:cpu_load,hostname=server02,az=us_west val_1=24.5,val_2=7 1234567890000000

新しいポイント:cpu_load,hostname=server02,az=us_west val_1=5.24 1234567890000000

新しいポイントを送信すると、TSDB for InfluxDB® は新しい val_1 値を使用して以前の値 val_1 を上書きします。 値 val_2 は、ポイントのフィールドセットに保持されます。

> SELECT * FROM "cpu_load" WHERE time =1234567890000000
name: cpu_load
--------------
time                      az        hostname   val_1   val_2
1970-01-15T06:56:07.89Z   us_west   server02   5.247

以前のポイントと新しいポイントを格納するには、次の方法を使用できます。

  • 新しいタグを導入して一意性を確保します。

    以前のポイント:cpu_load,hostname=server02,az=us_west,uniq=1 val_1=24.5,val_2=7 1234567890000000

    新しいポイント:cpu_load,hostname=server02,az=us_west,uniq=2 val_1=5.24 1234567890000000

    新しいポイントを TSDB for InfluxDB® に書き込むと、次の結果が表示されます。

    > SELECT * FROM "cpu_load" WHERE time =1234567890000000
    name: cpu_load
    --------------
    time                      az        hostname   uniq   val_1   val_2
    1970-01-15T06:56:07.89Z   us_west   server02   124.57
    1970-01-15T06:56:07.89Z   us_west   server02   25.24
  • 新しいポイントのタイムスタンプに 1 ナノ秒を追加します。

    以前のポイント:cpu_load,hostname=server02,az=us_west val_1=24.5,val_2=7 1234567890000000

    新しいポイント:cpu_load,hostname=server02,az=us_west val_1=5.24 1234567890000001

    新しいポイントを TSDB for InfluxDB® に書き込むと、次の結果が表示されます。

    > SELECT * FROM "cpu_load" WHERE time >=1234567890000000 and time <=1234567890000001
    name: cpu_load
    --------------
    time                             az        hostname   val_1   val_2
    1970-01-15T06:56:07.89Z          us_west   server02   24.57
    1970-01-15T06:56:07.890000001Z   us_west   server02   5.24

HTTP API リクエストで必要な改行は何ですか?

TSDB for InfluxDB® のラインプロトコルでは、\n 改行は行の終わりと新しい行の始まりを示すために使用されます。 改行の ASCII コードは 0x0A です。 \n 以外の改行がファイルまたはデータで使用されている場合、bad timestamp および unable to parse エラーが発生します。

注:Windows は、\r\n 改行またはキャリッジリターンを使用して、行の終わりと新しい行の始まりを示します。

TSDB for InfluxDB® にデータを書き込む際に推奨されない文字や単語は何ですか?

  • InfluxQL キーワード

    InfluxQL キーワードを識別子として使用する場合、クエリでキーワードを二重引用符 (") で囲む必要があります。 そうしないと、エラーが発生する可能性があります。 識別子は、連続クエリ名、データベース名、フィールドキー、メジャーメント名、保持ポリシー名、サブスクリプション名、タグキー、またはユーザー名にすることができます。

  • time

    クエリ文では、time キーワードを識別子として使用でき、識別子を二重引用符 (") で囲む必要はありません。 time キーワードは、連続クエリ名、データベース名、メジャーメント名、保持ポリシー名、またはユーザー名として使用できます。 これらの場合、time を二重引用符 (") で囲む必要はありません。 ただし、time キーワードをフィールドキーまたはタグキーとして使用することはできません。 TSDB for InfluxDB® は、time キーワードがフィールドキーまたはタグキーであるデータ書き込みを拒否し、エラーを報告します。 例:

    • time キーワードをメジャーメント名として使用してデータを書き込み、メジャーメントをクエリします。

      > INSERT time value=1
      
      > SELECT * FROM time
      
      name: time
      time                            value
      ---------
      2017-02-07T18:28:27.349785384Z1

      TSDB for InfluxDB® では、time キーワードは有効なメジャーメント名です。

    • time キーワードをフィールドキーとして使用してデータを書き込み、フィールドキーをクエリしようとします。

      > INSERT mymeas time=1
      ERR:{"error":"partial write: invalid field name: input field \"time\" on measurement \"mymeas\" is invalid dropped=1"}

      TSDB for InfluxDB® では、time キーワードは無効なフィールドキーです。 システムはポイントの書き込みに失敗し、400 エラーコードを返します。

    • time キーワードをタグキーとして使用してデータを書き込み、タグキーをクエリしようとします。

      > INSERT mymeas,time=1 value=1
      ERR:{"error":"partial write: invalid tag key: input tag \"time\" on measurement \"mymeas\" is invalid dropped=1"}

      TSDB for InfluxDB® では、time キーワードは無効なタグキーです。 システムはポイントの書き込みに失敗し、400 エラーコードを返します。

  • 文字

    単純な正規表現と引用符の使用を維持するために、識別子には次の文字を使用しないことをお勧めします。バックスラッシュ (\)、カレット (^)、ドル記号 ($)、単一引用符 (')、二重引用符 (")、等号 (=)、およびコンマ (,)。

データを書き込む際に、単一引用符 (') と二重引用符 (") はいつ使用しますか?

  • ラインプロトコルに基づいてデータを書き込む場合、識別子を囲むために単一引用符 (') または二重引用符 (") を使用しないでください。 次の例では、引用符を使用した後、クエリがより複雑になります。 識別子は、連続クエリ名、データベース名、フィールドキー、メジャーメント名、保持ポリシー名、サブスクリプション名、タグキー、またはユーザー名にすることができます。

    • 二重引用符 (") で囲まれたメジャーメントを書き込む:INSERT "bikes" bikes_available=3。 該当するクエリ:SELECT * FROM "\"bikes\""

    • 単一引用符 (') で囲まれたメジャーメントを書き込む:INSERT 'bikes' bikes_available=3。 該当するクエリ:SELECT * FROM "\'bikes\'"

    • 引用符で囲まれていないメジャーメントを書き込む:INSERT bikes bikes_available=3。 該当するクエリ:SELECT * FROM "bikes"

  • 文字列フィールド値を囲むには、二重引用符 (") を使用する必要があります。

    データを書き込む:INSERT bikes happiness="level 2"。 該当するクエリ:SELECT * FROM "bikes" WHERE "happiness"='level 2'

  • 特殊文字を囲むために引用符を使用しないでください。 バックスラッシュ (\) エスケープ文字を使用して特殊文字を書式設定します。

    データを書き込む:INSERT wacky va\"ue=4。 該当するクエリ:SELECT "va\"ue" FROM "wacky"

ドキュメント行プロトコル リファレンスで詳細をご確認ください。

タイムスタンプの粒度はシステムパフォーマンスに大きな影響を与えますか?

はい、タイムスタンプの粒度はシステムパフォーマンスに大きな影響を与えます。 システムパフォーマンスを最大化するには、粗い時間粒度を使用して TSDB for InfluxDB® にデータを書き込むことをお勧めします。

次の 2 つの例では、最初の要求にデフォルトの時間粒度 (ナノ秒単位) が指定されています。 2 番目の要求には、時間粒度 (秒単位) が指定されています。

curl -i -XPOST "https://<Endpoint>:3242/write?db=weather&u=<Account name>&p=<Password>"--data-binary 'temperature,location=1 value=90 1472666050000000000'

curl -i -XPOST "https://<Endpoint>:3242/write?db=weather&precision=s&u=<Account name>&p=<Password>"--data-binary 'temperature,location=1 value=90 1472666050'

ただし、より粗い時間粒度を使用してデータを書き込むと、同じタイムスタンプを持つ重複ポイントが発生しやすくなります。 この場合、一部のポイントが上書きされる可能性があります。

TSDB for InfluxDB® の CLI

Influx CLI を使用して TSDB for InfluxDB® に接続できないのはなぜですか??

次の条件を満たしているかどうかを確認します。

  • 実行権限が必要です。 chmod +x ./influx コマンドを実行して権限を追加できます。

  • 接続文に -ssl オプションを指定する必要があります。

  • -host オプションの接続文字列 (例:ts-bp17j28j2y7pm****.influxdata.rds.aliyuncs.com) のみ指定する必要があります。 プロトコルとポート番号を指定する必要はありません。

TSDB for InfluxDB® の CLI が人間が読めるタイムスタンプを返すようにするにはどうすればよいですか?人間が判読できるタイムスタンプを返すにはどうすればよいですか?

CLI に初めて接続するときは、RFC 3339 に基づいて時間粒度を指定する必要があります。

$ influx -ssl -username <Account name>-password <Password>-host <Endpoint>-port 3242-precision rfc3339

CLI に接続した後に時間粒度を指定することもできます。

$ influx -ssl -username <Username> -password <Password> -host <Endpoint> -port 3242
Connected to https://<Endpoint>:3242 version 1.7.x
> precision rfc3339

詳細については、「TSDB for InfluxDB® の CLI」をご参照ください。

管理者でない場合、USE 文を実行してデータベースを指定するにはどうすればよいですか?使用管理者でない場合にデータベースを指定する文はありますか?

管理者でない場合は、USE <database_name> 文を実行してデータベースを指定できます。ただし、この場合、データベースに対する READ 権限と WRITE 権限、または READ 権限のみを持っている必要があります。そうでない場合、システムは次のエラーを返します:

ERR:Database<database_name> doesn't exist. Run SHOW DATABASES for a list of existing databases.
説明

SHOW DATABASES 文は、管理者以外のユーザーが READ または WRITE アクセス権を持つデータベースのみを返します。

TSDB for InfluxDB® の CLI を使用して、デフォルト以外の保持ポリシーにデータを書き込むにはどうすればよいですか?デフォルト以外の保持ポリシーにデータを書き込むにはどうすればよいですか?

INSERT INTO [<database>.]<retention_policy> <line_protocol> 文を実行して、デフォルト以外の保持ポリシーにデータを書き込みます。 この方法は、TSDB for InfluxDB® の CLI でのみ使用して、データベースと保持ポリシーを指定できます。 HTTP 経由でデータを書き込むには、db パラメーターと rp パラメーターを使用して、それぞれデータベースと保持ポリシーを指定する必要があります。 rp パラメーターはオプションです。 例:

> INSERT INTO one_day mortality bool=true
Using retention policy one_day
> SELECT * FROM "mydb"."one_day"."mortality"
name: mortality
---------------
time                             bool
2016-09-13T22:29:43.229530864Z   true

デフォルト以外の保持ポリシーのデータをクエリする場合、メジャーメントを完全修飾する必要があります。 次の構文を使用して、メジャーメントを完全修飾できます。

"<database>"."<retention_policy>"."<measurement>"

データ型

BOOLEAN データ型のフィールド値をクエリできないのはなぜですか?

BOOLEAN 値を書き込む構文は、BOOLEAN 値をクエリする構文とは異なります。

BOOLEAN 値の構文

書き込み

クエリ

tf

TF

truefalse

TrueFalse

TRUEFALSE

たとえば、SELECT * FROM "hamlet" WHERE "bool"=True 文は、bool の値が TRUE であるすべてのポイントを返します。 ただし、SELECT * FROM "hamlet" WHERE "bool"=T 文は結果を返しません。

TSDB for InfluxDB® は、シャード間でのフィールドデータ型の違いをどのように処理しますか?

フィールド値のデータ型は、FLOAT、INTEGER、STRING、または BOOLEAN にすることができます。 フィールド値のデータ型は、各シャードで同じである必要があります。 ただし、フィールド値のデータ型は、シャード間で異なる場合があります。

  • SELECT 文

    すべてのフィールド値のデータ型が同じ場合、SELECT 文はすべてのフィールド値を返します。 フィールド値のデータ型がシャード間で異なる場合、TSDB for InfluxDB® はデータ型を変換するために必要な操作を実行します (該当する場合)。 その後、TSDB for InfluxDB® は、FLOAT、INTEGER、STRING、BOOLEAN というデータ型のシーケンスに基づいてすべてのフィールド値を返します。 データに異なるデータ型を持つフィールド値が見つかった場合は、<field_key>::<type> 構文を使用して異なるデータ型をクエリします。 例:

    just_my_type メジャーメントでは、my_field フィールドには 4 つのシャードに 4 つの値があります。 my_field フィールドのこれらの値のデータ型は互いに異なります。 データ型は FLOAT、INTEGER、STRING、および BOOLEAN です。

    SELECT * 文は、FLOAT データ型と INTEGER データ型の値のみを返します。 文への応答で、TSDB for InfluxDB® は INTEGER データ型の値を FLOAT データ型の値に変換します。

    > SELECT * FROM just_my_type
    
    name: just_my_type
    ------------------
    time                      my_field
    2016-06-03T15:45:00Z9.87034
    2016-06-03T16:45:00Z7

    SELECT <field_key>::<type> [...] 文は、すべてのデータ型の値を返します。 TSDB for InfluxDB® は、各型の出力データを別々の列に格納し、列名は my_field、my_field_1、my_field_2 などのようにインクリメントされます。 TSDB for InfluxDB® を使用して、フィールド値のデータ型を別のデータ型に変換できます。 ただし、これは特定の要件に基づいています。 次の例では、TSDB for InfluxDB® は 7 整数を最初の列に含まれる浮動小数点数に変換します。 TSDB for InfluxDB® は、9.879034 浮動小数点数を 2 番目の列に含まれる整数に変換します。 TSDB for InfluxDB® は、浮動小数点数または整数を文字列またはブール値に変換できません。

    > SELECT "my_field"::float,"my_field"::integer,"my_field"::string,"my_field"::boolean FROM just_my_type
    
    name: just_my_type
    ------------------
    time                   my_field  my_field_1  my_field_2  my_field_3
    2016-06-03T15:45:00Z9.870349
    2016-06-03T16:45:00Z77
    2016-06-03T17:45:00Z                         a string
    2016-06-03T18:45:00Z                                     true
  • SHOW FIELD KEYS 文

    SHOW FIELD KEYS 文は、指定されたフィールドキーに関連付けられている各シャードのすべてのデータ型を返します。 例:

    just_my_type メジャーメントでは、my_field フィールドには 4 つのシャードに 4 つの値があります。 my_field フィールドのこれらの値のデータ型は互いに異なります。 データ型は FLOAT、INTEGER、STRING、および BOOLEAN です。

    SHOW FIELD KEYS 文は、4 つのデータ型すべてを返します。

    > SHOW FIELD KEYS
    
    name: just_my_type
    fieldKey   fieldType
    -----------------
    my_field   float
    my_field   string
    my_field   integer
    my_field   boolean

TSDB for InfluxDB® が格納できる最小整数と最大整数は何ですか?

TSDB for InfluxDB® は、整数を符号付き Int64 値として格納します。 有効な Int64 値の最小値は -9023372036854775808 です。 有効な Int64 値の最大値は 9023372036854775807 です。 詳細については、「Go builtins」をご参照ください。

格納されている値が最小整数または最大整数に近い場合、予期しない結果が発生する可能性があります。 一部の関数と演算子は、計算中に Int64 値を Float64 値に変換する場合があります。 ただし、これによりオーバーフローの問題が発生する可能性があります。

TSDB for InfluxDB® が格納できる最小タイムスタンプと最大タイムスタンプは何ですか?

最小タイムスタンプは -9223372036854775806 または 1677-09-21T00:12:43.145224194Z です。 最大タイムスタンプは 9223372036854775806 または 2262-04-11T23:47:16.854775806Z です。 タイムスタンプが有効な範囲から外れている場合、解析エラーが発生します。

フィールドのデータ型を表示するにはどうすればよいですか?

SHOW FIELD KEYS 文を実行して、フィールドのデータ型を表示できます。

> SHOW FIELD KEYS FROM all_the_types
name: all_the_types
-------------------
fieldKey  fieldType
blue      string
green     boolean
orange    integer
yellow    float

フィールドのデータ型を変換できますか?

はい、フィールドのデータ型を変更できます。 ただし、TSDB for InfluxDB® を介して他のデータ型に変換できるデータ型は限られています。 <field_key>::<type> 構文を使用して、フィールド値を整数から浮動小数点数に変換できます。 また、フィールド値を浮動小数点数から整数に変換することもできます。 データ型変換の詳細については、「データ探索」をご参照ください。 浮動小数点数または整数を文字列またはブール値に変換することはできません。 同様の場合、文字列またはブール値を浮動小数点数または整数に変換することはできません。

次の代替方法を使用して、データ型を変更できます。

  • データを別のフィールドに書き込む

    最も簡単な方法は、新しいデータ型のデータを同じ時系列の別のフィールドに書き込むことです。

  • シャードシステムを使用する

    フィールド値のデータ型は、各シャードで同じである必要があります。 ただし、フィールド値のデータ型は、シャード間で異なる場合があります。

    フィールド値のデータ型を変更する場合、SHOW SHARDS 文を実行して、現在のシャードの end_time 値をクエリできます。 TSDB for InfluxDB® を使用して、異なるデータ型のデータを既存のフィールドに書き込むことができます。 これは、ポイントのタイムスタンプが end_time で指定された時間より後の場合に適用されます。 たとえば、データのタイムスタンプが現在のシャードの終了時刻より前の場合、フィールドに整数を書き込むことしかできません。 ただし、データのタイムスタンプが end_time で指定された時間より後の場合、フィールドに浮動小数点数を書き込むことができます。

    このプロセスでは、元のシャードのフィールド値のデータ型は変更されません。

InfluxQL 関数

関数内で算術演算を実行するにはどうすればよいですか?

TSDB for InfluxDB® を使用して関数内で算術演算を実行することはできません。 サブクエリを実行して同じ目的を達成することをお勧めします。 例:

InfluxQL は次の構文をサポートしていません。

SELECT MEAN("dogs"-"cats")from"pet_daycare"

ただし、次のサブクエリを実行して同じ目的を達成できます。

> SELECT MEAN("difference") FROM (SELECT "dogs"-"cat" AS "difference" FROM "pet_daycare")

サブクエリの詳細については、「データ探索」をご参照ください。

クエリ応答でエポック 0 がタイムスタンプとして使用されるのはなぜですか?

ほとんどの場合、エポック 0 (1970-01-01T00:00:00Z) は、TSDB for InfluxDB® でヌルタイムスタンプとして使用されます。 クエリでタイムスタンプを返すことができない場合、TSDB for InfluxDB® はエポック 0 をタイムスタンプとして返します。 たとえば、このルールは、集計関数に時間範囲が指定されていない場合に適用されます。

どの InfluxQL 関数をネストできますか?

次の InfluxQL 関数をネストできます。

  • DISTINCT() にネストされた COUNT()

  • CUMULATIVE_SUM()

  • DERIVATIVE()

  • DIFFERENCE()

  • ELAPSED()

  • MOVING_AVERAGE()

  • NON_NEGATIVE_DERIVATIVE()

  • HOLT_WINTERS() および HOLT_WINTERS_WITH_FIT()

ネストされた関数の代わりにサブクエリを使用する方法の詳細については、「データ探索」をご参照ください。

InfluxDB データ移行

セルフマネージド InfluxDB をクラウドに移行するにはどうすればよいですか?

InfluxDB が提供する公式の influx_inspect ツールを使用して、セルフマネージド InfluxDB サーバーからラインプロトコルファイルをエクスポートし、「TSDB for InfluxDB® の CLI」を使用してファイルを TSDB for InfluxDB® にインポートできます。

クラウド内の異なる InfluxDB インスタンス間でデータを移行するにはどうすればよいですか?

異なる InfluxDB インスタンス間でデータを移行することはできません。 これを行うには、移行するデータをクエリしてエクスポートし、手動でデータを移行する必要があります。 クエリプロセス中は、システムの安定性に影響を与える大きなクエリを避ける必要があります。 時間または時系列でフィルタリングして、複数のデータを同時に移行できます。

InfluxDB から LindormTSDB にデータを移行するにはどうすればよいですか?

LindormTSDB は、InfluxDB から既存データをインポートするための Lindorm Tunnel Service (LTS) を提供します。 LTS を使用して、InfluxDB から LindormTSDB に完全データを移行できます。