寫入時序資料
建立時序表後,您可以使用PutTimeseriesData介面批量寫入時序資料。一次PutTimeseriesData調用支援寫入多行資料。
前提條件
已建立時序表。具體操作,請參見建立時序表。
已初始化TimeseriesClient。具體操作,請參見初始化Tablestore Client。
參數
每行時序資料(timeseriesRow)由時間軸標識(timeseriesKey)和時間軸資料兩部分組成。時間軸資料包含資料點的時間戳記(timeInUs,單位為微秒)和欄位集合(fields)。
timeseriesKey 用於標識時間軸的度量類型(如 CPU 或 NETWORK)、資料來源主機及標籤資訊;fields 儲存每個資料點的實際測量值。
|
參數 |
是否必選 |
說明 |
|
timeseriesKey |
是 |
時間軸標識,包括以下內容:
|
|
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)
}
}
常見問題
相關文檔
關於API的更多資訊,請參見PutTimeseriesData。
寫入資料後,可按需讀取時序表中的資料。更多資訊,請參見查詢時序資料。
如需檢索滿足指定條件的時間軸,請參見檢索時間軸。
如需將 Kafka 資料來源的資料移轉到Table Store時序表,可通過 Tablestore Sink Connector 實現。具體操作,請參見同步Kafka資料到時序表。