返回

將自定義時間戳發送到 InfluxDBv2:問題和解決方案

python

如何使用 InfluxDB-Client Python 將自定義時間戳發送到 InfluxDBv2

背景

InfluxDB 是流行的時間序列資料庫,用於儲存和分析時間序列資料。InfluxDB-Client Python 函式庫提供了與 InfluxDB 互動的方便方式。在某些情況下,開發人員可能會遇到將自定義時間戳發送到 InfluxDB 時遇到的問題。本指南將探討這些問題並提供解決方案。

問題

將自定義時間戳發送到 InfluxDB 時,可能會遇到以下問題:

  • 無法將記錄添加到 InfluxDB
  • 時間戳不正確,顯示為記錄添加至資料庫的時間,而非自定義時間

原因

這些問題是由於未正確使用時間戳函數造成的。InfluxDB-Client Python 函式庫使用 .time() 函數指定時間戳,但這並非建議的方法。

解決方案

要使用自定義時間戳,請執行以下步驟:

1. 使用 utcnow() 函數

InfluxDB-Client Python 函式庫提供了 utcnow() 函數,用於獲取當前時間戳。此函數將返回表示協調世界時 (UTC) 的時間戳。

2. 設置寫入精度

設置寫入精度為 NS,以確保時間戳精度為納秒。

範例

以下 Python 程式碼範例示範了如何使用 utcnow() 函數和 WritePrecision.NS 設置時間戳:

from influxdb_client import InfluxDBClient, Point, WritePrecision
from datetime import datetime

client = InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org")

time = datetime.utcnow()
point = Point("Solar_data") \
    .tag("Project", "777") \
    .tag("Installation", 1223) \
    .field("total_consumption", 0.5) \
    .time(time, WritePrecision.NS)

client.write(bucket="my-bucket", record=point)

注意事項

  • 確保 InfluxDB 服務器正在運行。
  • 使用最新版本的 InfluxDB-Client Python 函式庫。
  • 驗證 InfluxDB 服務器的日誌中是否有任何錯誤訊息。

結論

使用 utcnow() 函數並設置適當的寫入精度,可以輕鬆地將自定義時間戳發送到 InfluxDBv2。遵循本指南中的步驟,開發人員可以避免常見問題,並確保他們的時間戳資料正確而準確。

常見問題解答

1. 為什麼使用 utcnow() 函數而不是 .time() 函數?

.time() 函數不建議使用,因為它可能會導致時間戳不正確。utcnow() 函數專門用於獲取 UTC 時間戳,並提供更好的精確度。

2. 如何確保時間戳精度為納秒?

通過將寫入精度設置為 WritePrecision.NS,可以確保時間戳精度為納秒。

3. 如何驗證時間戳是否正確?

您可以使用 InfluxDB CLI 工具來驗證時間戳是否正確。執行以下命令,查詢資料點並驗證時間戳:

influx query -n "bucket=my-bucket" -q "from(bucket: "Solar_data") |> range(start: -1h)"

4. 如果遇到問題該怎麼辦?

如果您在使用自定義時間戳時遇到問題,請檢查 InfluxDB 服務器的日誌並確保您使用的是最新版本的 InfluxDB-Client Python 函式庫。如果您仍然遇到問題,可以提交問題至 GitHub 上的 InfluxDB-Client Python 函式庫儲存庫。

5. 什麼是時間戳精度?

時間戳精度是指時間戳的最小表示單位。例如,寫入精度為 WritePrecision.NS 表示時間戳精度為納秒。