寫入時序資料

更新時間:
Copy as MD

建立時序表後,您可以使用PutTimeseriesData介面批量寫入時序資料。一次PutTimeseriesData調用支援寫入多行資料。

前提條件

參數

每行時序資料(timeseriesRow)由時間軸標識(timeseriesKey)和時間軸資料兩部分組成。時間軸資料包含資料點的時間戳記(timeInUs,單位為微秒)和欄位集合(fields)。

timeseriesKey 用於標識時間軸的度量類型(如 CPU 或 NETWORK)、資料來源主機及標籤資訊;fields 儲存每個資料點的實際測量值。

參數

是否必選

說明

timeseriesKey

時間軸標識,包括以下內容:

  • measurementName:時間軸的度量名稱。

  • dataSource:資料來源資訊,可以為空白。

  • tags:時間軸的標籤資訊,由多個字串類型的 key-value 對組成。

timeInUs

資料點的時間戳記,單位為微秒。

fields

資料點,由一個或多個欄位名(FieldKey)和欄位值(FieldValue)對組成。

樣本

以下樣本通過 PutTimeseriesData 向時序表中寫入兩行時序資料,分別對應 CPU 指標和網路指標。

timeseriesKey 將同一時間軸下的相關資料點彙總在一起;timeseriesRow 在此基礎上關聯時間戳記和欄位值。

func PutTimeseriesDataSample(client *tablestore.TimeseriesClient , timeseriesTableName string) {
    fmt.Println("[Info]: Begin to PutTimeseriesDataSample !")

    // 構造時序資料行 timeseriesRow。
    // timeseriesKey 標識時間軸:度量名稱、資料來源主機和標籤。
    timeseriesKey := tablestore.NewTimeseriesKey()
    timeseriesKey.SetMeasurementName("CPU")
    timeseriesKey.SetDataSource("127.0.0.1")
    timeseriesKey.AddTag("City" , "Hangzhou")
    timeseriesKey.AddTag("Region" , "Xihu")

    // timeseriesRow 在 timeseriesKey 的基礎上關聯時間戳記和欄位值。
    timeseriesRow := tablestore.NewTimeseriesRow(timeseriesKey)
    timeseriesRow.SetTimeInus(time.Now().UnixNano() / 1000)
    timeseriesRow.AddField("temperature" , tablestore.NewColumnValue(tablestore.ColumnType_INTEGER , 98))
    timeseriesRow.AddField("status" , tablestore.NewColumnValue(tablestore.ColumnType_STRING , "ok"))

    // 構造時序資料行 timeseriesRow1。
    timeseriesKey1 := tablestore.NewTimeseriesKey()
    timeseriesKey1.SetMeasurementName("NETWORK")
    timeseriesKey1.SetDataSource("127.0.0.1")
    timeseriesKey1.AddTag("City" , "Hangzhou")
    timeseriesKey1.AddTag("Region" , "Xihu")

    timeseriesRow1 := tablestore.NewTimeseriesRow(timeseriesKey1)
    timeseriesRow1.SetTimeInus(time.Now().UnixNano() / 1000)
    timeseriesRow1.AddField("in" , tablestore.NewColumnValue(tablestore.ColumnType_INTEGER , 1000))
    timeseriesRow1.AddField("data" , tablestore.NewColumnValue(tablestore.ColumnType_BINARY , []byte("tablestore")))
    timeseriesRow1.AddField("program" , tablestore.NewColumnValue(tablestore.ColumnType_STRING , "tablestore.d"))
    timeseriesRow1.AddField("status" , tablestore.NewColumnValue(tablestore.ColumnType_BOOLEAN, true))
    timeseriesRow1.AddField("lossrate" , tablestore.NewColumnValue(tablestore.ColumnType_DOUBLE , float64(1.9098)))

    // 構造寫入時序資料的請求。
    putTimeseriesDataRequest := tablestore.NewPutTimeseriesDataRequest(timeseriesTableName)
    putTimeseriesDataRequest.AddTimeseriesRows(timeseriesRow , timeseriesRow1)

    // 調用時序用戶端寫入時序資料。
    putTimeseriesDataResponse , err := client.PutTimeseriesData(putTimeseriesDataRequest)
    if err != nil {
        fmt.Println("[Error]: 寫入時序資料失敗,錯誤資訊:" , err)
        return
    }

    // 批量寫入可能部分成功:寫入失敗的行通過索引和錯誤資訊返回,已成功寫入的行立即提交。
    if len(putTimeseriesDataResponse.GetFailedRowResults()) > 0 {
        fmt.Println("[Warning]: 時序資料寫入完成,部分行寫入失敗:")
        for i := 0; i < len(putTimeseriesDataResponse.GetFailedRowResults()); i++ {
            FailedRow := putTimeseriesDataResponse.GetFailedRowResults()[i]
            fmt.Println("[Warning]: 失敗行索引:" , FailedRow.Index , " 錯誤資訊:" , FailedRow.Error)
        }
    } else {
        fmt.Println("[Info]: 時序資料寫入成功!RequestId:" , putTimeseriesDataResponse.RequestId)
    }
}

常見問題

相關文檔