我在AWS TimeStream中创建了一个数据库表,其内存保留期为7天:
但是,当我尝试上传 3 天前的数据时,它将被拒绝。似乎只接受超过 24 小时的数据:
2020-10-26T13:43:33.244+01:00: Rejected a record: The record timestamp is outside the time range [2020-10-25T12:38:33.242Z, 2020-10-26T13:18:33.242Z) of the memory store.
Run Code Online (Sandbox Code Playgroud)
这是我所期望的,还是我缺少配置选项?
在 Amazon Timestream 数据库上执行删除查询。
执行此查询时:
delete from "data-api-timestream-test"."test_table"
Run Code Online (Sandbox Code Playgroud)
我收到错误:
The query syntax is invalid at line 1:1
Run Code Online (Sandbox Code Playgroud)
我可以从 Amazon Timestream 中删除记录吗?
TimeStream 使用键:值方法存储数据。
是否有任何简单的方法可以根据维度对数据进行透视以获取例如名为度量名称的列中所有可用度量的最大值?
让我们举个例子,使用以下数据集:
| time | instance_id | measure_name | measure_value::double | measure_value::bigint |
|------------------------------- |------------- |-------------------- |----------------------- |----------------------- |
| 2019-12-04 19:00:00.000000000 | A | cpu_utilization | 35 | null |
| 2019-12-04 19:00:01.000000000 | A | cpu_utilization | 38.2 | null |
| 2019-12-04 19:00:02.000000000 | B | cpu_utilization | 45.3 | null |
| 2019-12-04 19:00:00.000000000 | A | memory_utilization | 54.9 | null |
| 2019-12-04 19:00:01.000000000 | A | memory_utilization | 42.6 | null …Run Code Online (Sandbox Code Playgroud) 众所周知,AWS Timestream 已于上周正式发布。
从那时起,我一直在尝试对它进行试验并了解它如何建模和存储数据。
我在将记录摄取到 Timestream 时遇到问题。我有一些日期为 2020 年 4 月 23 日的记录。在尝试将这些记录插入时间流表时,我收到 RecordRejected 错误。根据此链接,如果记录具有相同的维度、时间戳或时间戳超出表的内存存储的保留期,则会拒绝记录。
我已将表的内存存储的保留期设置为 12 个月。根据文档:任何时间戳超过 12 个月的记录都将被拒绝。然而,尽管上面提到的记录在 12 个月内有时间戳,但还是被拒绝了。
在进一步调查中,我注意到,今天日期(2020 年 10 月 5 日)的记录被成功摄取,但是,日期为 30 天前的记录(即 2020 年 9 月 5 日)不会被摄取。为确保这一点,我还尝试插入日期为 9 月 6 日和今天日期和 9 月 5 日之间还有几天的记录。所有这些都已成功插入。
有人可以解释为什么我无法在内存存储的保留期内插入具有时间戳的记录吗?它只允许我插入最多 30 天的记录。我也想知道是否有一种方法可以将历史数据直接插入到磁存储中。内存存储保留期可能不足以满足我的用例,我可能需要插入 2 年或更长时间的数据。我知道这不是时间流的经典用例,但我仍然很想知道。
我被困在这个问题上,非常感谢一些帮助。
先感谢您。
我一直在尝试将我的 InfluxDb 迁移到 Amazon Timestream。由于它是一项新服务,我无法找到将 Influx 迁移到 Timestream 的确切文档。我发现 Telegraf 可用于将 InfluxDB 连接到 Timestream,但找不到太多有关迁移的信息。谁能分享一下迁移步骤吗?非常感谢任何文档。
database-migration amazon-web-services influxdb telegraf amazon-timestream
AWS TimeStream 开发工具包的 SQL 查询接口仅接受查询字符串。看起来,构建查询字符串(包括 where 子句中的任何参数值等)完全由 SDK 用户完成,这在 Python 和 Java 等语言中并不常见。
有哪些解决方案可以安全地引用不受信任的输入值,以用作具有 AWS 开发工具包的语言(例如 Python 和 Java)中 SQL 查询的一部分?
为了按时间流更新插入记录,新记录的版本号应高于现有记录的版本号。但我一直无法找到获取现有记录版本的方法。AWS 控制台中未返回版本。以编程方式查询时也不会返回。
如何获取记录的当前版本?
我有一个带有时间字段的表,我试图在 2 个时间戳之间进行选择,格式如下:
“2020-10-10 09:00:00.000000000”
我尝试过这里列出的一些功能,但没有成功。
编辑:数据就在那里,如图所示。但该示例显示使用 7 天前而不是传递时间戳。
我是 SQL 和 AWS Timestream 的新手,我想编写一个查询来获取设备处于活动状态的总时间。然后我想根据设备的千瓦时额定值将其转换为能源使用量。
数据点的时间间隔不是固定的。数据看起来像这样:
| 时间戳(秒) | 活动(布尔值) |
|---|---|
| 1617697080 (10点18分) | 错误的 |
| 1617697920 (10点32分) | 真的 |
| 1617698280 (10点38分) | false(活跃 6 分钟) |
| 1617699000 (10点50分) | 真的 |
| 1617699120 (10点52分) | false(活跃 2 分钟) |
| ETC。 |
上面的总活跃时间是8分钟。
我想提出的查询类型是这样的,
什么样的查询会给我这个信息并且能够容忍可变的间隔?
我正在考虑但还没有完全弄清楚两条路,
我一直在尝试获取正确的查询来插入数据,但尚未成功。我正在遵循 AWS Timestream SQL 文档中的模式,但还不太理解它。
我什至不知道从哪里开始或在哪里寻找求和时间戳差异的示例。逻辑过程会是这样的,
if (this_point == true) then
total_active_time += next_point_timestamp - this_point_timestamp
Run Code Online (Sandbox Code Playgroud)
可能的解决方案#1:插值
插值在一定范围内效果很好,尽管对于解决方案来说感觉有点矫枉过正。设备的开/关分辨率为 10 秒,因此如果插值采样时间太大,数据就会开始出现偏差。当插值时间序列超过 10k 点时,这会出现问题 - AWS Timestream 会抛出错误“序列函数的结果不得超过 10000 个条目”。因此,在短时间内,这是可行的,但如果我想计算出一个月内的能源使用情况,那么它永远不会成功(至少在 10 秒分辨率下不行)。使用 1m 分辨率可以提供足够好的精度来处理超过 6 天的时间。可以在不同的日期范围内多次使用此查询来获取数据。
WITH active_timeseries AS (
SELECT time, COUNT_IF(measure_value::boolean) AS Active …Run Code Online (Sandbox Code Playgroud) 我正在尝试将记录插入到我的 aws 时间流表中。它的获取导致了访问被拒绝错误。
这是serverless.yml上的权限
- Effect: Allow
Action:
- timestream:*
Resource:
- arn:aws:timestream:${self:provider.region}:*:database/*
- arn:aws:timestream:${self:provider.region}:*:database/*/*/*
Run Code Online (Sandbox Code Playgroud)
我是 lambda 的角色详细信息。
{
"Action": [
"timestream:*"
],
"Resource": [
"arn:aws:timestream:us-east-1:*:database/*",
"arn:aws:timestream:us-east-1:*:database/*/*/*"
],
"Effect": "Allow"
},
Run Code Online (Sandbox Code Playgroud)
记录样本
{
"DatabaseName": "developmentreportsdb",
"TableName": "developmenteventstable",
"Records": [
{
"Dimensions": [
{
"Name": "accountId",
"Value": "6921e43e-266c-4adf-8a69-d90bd8743d1b"
},
{
"Name": "userId",
"Value": "6921e43e-266c-4adf-8a69-d90bd8743d1b"
}
],
"MeasureName": "ACCOUNT.NEW",
"MeasureValue": "6921e43e-266c-4adf-8a69-d90bd8743d1b",
"MeasureValueType": "VARCHAR",
"Time": "1644234263813",
"TimeUnit": "MILLISECONDS",
"Version": 1
}
]
}
Run Code Online (Sandbox Code Playgroud)
错误详情:
Error writing records: AccessDeniedException: User: arn:aws:sts::344128203239:assumed-role/development-us-east-1-lambdaRole/development-worker is not authorized …Run Code Online (Sandbox Code Playgroud) amazon-web-services aws-cloudformation serverless amazon-timestream
我正在尝试更新 Timestream 中记录中的字段,但它不断插入新记录。这是我的代码:
$dimensions= [];
$dimensions[] = [
'Dimensions' => [
[
'DimensionValueType' => 'VARCHAR',
'Name' => 'id',
'Value' => '123456',
],
[
'DimensionValueType' => 'VARCHAR',
'Name' => 'remark',
'Value' => 'Remark test text',
],
],
];
$query = [
'CommonAttributes' => [
'MeasureName' => 'table_cnt',
'MeasureValue' => 'table_cnt',
'MeasureValueType' => 'VARCHAR',
'Time' => '1651501311000',
'TimeUnit' => 'MILLISECONDS',
'Version' => 1,
],
'DatabaseName' => 'mydb',
'Records' => $dimensions,
'TableName' => 'table',
];
$db->WriteRecords($query);
Run Code Online (Sandbox Code Playgroud)
现在我如何尝试更新插入上面插入的相同记录:
$dimensions= [];
$dimensions[] = [
'Dimensions' …Run Code Online (Sandbox Code Playgroud) sql ×2
aws-iot ×1
influxdb ×1
java ×1
nosql ×1
php ×1
python ×1
serverless ×1
telegraf ×1
validation ×1