要获得与亚马逊 Timestream 类似的功能 LiveAnalytics,可以考虑适用于 InfluxDB 的亚马逊 Timestream。它为实时分析提供了简化的数据摄取和个位数毫秒的查询响应时间。在这里了解更多。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
WriteRecords
使您能够将时间序列数据写入 Timestream。您可以指定要插入到系统的单个数据点或一批数据点。Timestream 为您提供了一个灵活的架构,它可以根据您在调用写入数据库时指定的数据点的维度名称和数据类型,自动检测 Timestream 表的列名和数据类型。
Timestream 支持最终一致性读取语义。这意味着,当您在将一批数据写入 Timestream 后立即查询数据时,查询结果可能无法反映最近完成的写入操作的结果。结果可能还包括一些陈旧的数据。如果您在短时间后重复查询请求,则结果应返回最新数据。适用服务配额。
请参阅代码示例,了解详细信息。
Upserts
您可以在WriteRecords请求中使用Version参数来更新数据点。Timestream 会跟踪每条记录的版本号。 Version1当请求中没有为记录指定时,默认为。Timestream 会更新现有记录的度量值以及该记录的度量值更高的写入请求Version时该记录的度Version量值。当 Timestream 收到的度量值与现有记录的度量值相同的更新请求时,如果 Timestream 的现有值大于的Version现有值Version,它仍会更新。只要的值Version不断增加,就可以根据需要多次更新数据点。
例如,假设你写了一条新记录,但没有在请求Version中注明。Timestream 存储此记录,并将其设置Version为。1现在,假设您尝试使用具有不同度量值的相同记录的WriteRecords请求来更新此记录,但与以前一样,没有提供Version。在这种情况下,Timestream 将拒绝此更新,RejectedRecordsException因为更新记录的版本不大于版本的现有值。
但是,如果您要在Version设置为的情况下重新发送更新请求2,Timestream 将成功更新记录的值,Version并将设置为。2接下来,假设您发送的WriteRecords请求具有相同的记录和相同的度量值,但Version设置为3。在这种情况下,Timestream 只会更新Version为。3任何进一步的更新都需要发送大于的版本号3,否则更新请求将收到RejectedRecordsException。
请求语法
{
"CommonAttributes": {
"Dimensions": [
{
"DimensionValueType": "string",
"Name": "string",
"Value": "string"
}
],
"MeasureName": "string",
"MeasureValue": "string",
"MeasureValues": [
{
"Name": "string",
"Type": "string",
"Value": "string"
}
],
"MeasureValueType": "string",
"Time": "string",
"TimeUnit": "string",
"Version": number
},
"DatabaseName": "string",
"Records": [
{
"Dimensions": [
{
"DimensionValueType": "string",
"Name": "string",
"Value": "string"
}
],
"MeasureName": "string",
"MeasureValue": "string",
"MeasureValues": [
{
"Name": "string",
"Type": "string",
"Value": "string"
}
],
"MeasureValueType": "string",
"Time": "string",
"TimeUnit": "string",
"Version": number
}
],
"TableName": "string"
}
请求参数
有关所有操作的通用参数的信息,请参阅常用参数。
请求接受采用 JSON 格式的以下数据。
- CommonAttributes
-
包含请求中所有记录共享的常用度量、维度、时间和版本属性的记录。当数据写入 Timestream 时,指定的度量和维度属性将与记录对象中的度量和维度属性合并。尺寸不得重叠,否则
ValidationException会被抛出。换句话说,记录必须包含具有唯一名称的维度。类型:Record 对象
必需:否
- DatabaseName
-
Timestream 数据库的名称。
类型:字符串
长度约束:最小长度为 3。最大长度为 256。
必需:是
- Records
-
包含每个时间序列数据点的唯一度量、维度、时间和版本属性的记录数组。
类型:Record 对象数组
数组成员:最少 1 个项目。最多 100 个项目。
必需:是
- TableName
-
Timestream 表的名称。
类型:字符串
长度约束:最小长度为 3。最大长度为 256。
必需:是
响应语法
{
"RecordsIngested": {
"MagneticStore": number,
"MemoryStore": number,
"Total": number
}
}
响应元素
如果此操作成功,则该服务将会发送回 HTTP 200 响应。
服务以 JSON 格式返回以下数据。
- RecordsIngested
-
有关此请求获取的记录的信息。
类型:RecordsIngested 对象
错误
有关所有操作的常见错误的信息,请参阅常见错误。
- AccessDeniedException
-
您无权执行此操作。
HTTP 状态代码:400
- InternalServerException
-
由于内部服务器错误,Timestream 无法完全处理此请求。
HTTP 状态代码:500
- InvalidEndpointException
-
请求的端点无效。
HTTP 状态代码:400
- RejectedRecordsException
-
WriteRecords 在以下情况下会抛出这个异常:
-
具有重复数据的记录,其中有多个具有相同维度、时间戳和度量名称的记录,但是:
-
测量值不同
-
请求中不存在版本,或者新记录中版本的值等于或小于现有值
在这种情况下,如果 Timestream 拒绝数据,则
RejectedRecords响应中的ExistingVersion字段将指示当前记录的版本。要强制更新,您可以重新发送请求,并将该记录的版本设置为大于。ExistingVersion -
-
时间戳超出内存存储保留期限的记录。
-
维度或度量超过时间流定义限制的记录。
有关更多信息,请参阅《亚马逊 Timestream 开发者指南》中的配额。
- RejectedRecords
-
HTTP 状态代码:400
-
- ResourceNotFoundException
-
该操作试图访问不存在的资源。可能未正确指定资源,或者其状态可能不是 “活动”。
HTTP 状态代码:400
- ThrottlingException
-
用户发出的请求太多,超过了服务配额。请求已被阻止。
HTTP 状态代码:400
- ValidationException
-
请求无效或格式错误。
HTTP 状态代码:400
另请参阅
有关以特定语言之一使用此 API 的更多信息 Amazon SDKs,请参阅以下内容: