创建时序表后,您可以使用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。
写入数据后,可按需读取时序表中的数据。更多信息,请参见查询时序数据。
如需检索满足指定条件的时间线,请参见检索时间线。
如需将时序表中的数据迁移到另一个时序表,可通过DataWorks数据集成服务实现。更多信息,请参见时序表同步到时序表。
如需将 Kafka 数据源的数据迁移到表格存储时序表,可通过 Tablestore Sink Connector 实现。具体操作,请参见同步Kafka数据到时序表。