使用 boto3 从数据集中检索数据的 AWS IoT Analytics 查询

AWS IoT Analytics queries for retrieving data from dataset using boto3

我们可以在从 AWS IoT Analytics 中的数据集中检索数据时使用查询吗,我想要 2 个时间戳之间的数据。我正在使用 boto3 来获取数据。我没有看到任何在获取数据集内容中使用查询的选项下面是 boto3 代码: response = client.get_dataset_content( datasetName='string', versionId='string' )

有没有人建议如何使用查询或如何在 AWS IoT Analytics 中检索 2 个时间戳之间的数据?

谢谢, 潘卡吉

坦率地说,最简单的事情就是自己进行时间过滤(get_dataset_content 的结果是一个 csv 文件)。

这就是 QuickSight 让您及时浏览数据集的功能。

如果这不可行,另一种方法是 重新处理 数据存储,使用更新的管道过滤除您感兴趣的时间范围以外的所有内容(更多信息 here).您应该注意,虽然很想为 StartPipelineReprocessing 使用 startTimeendTime 参数,但这些参数仅近似于最近的小时数。

根据您的工作流程,可能有几种方法可以做到这一点,如果您有更多详细信息,那将会很有帮助。

可能的方法是;

1) 创建一个计划查询 运行 每小时(例如)查询看起来像这样;

SELECT * FROM my_datastore WHERE __dt >= current_date - interval '1' day
AND my_timestamp >= now() - interval '1' hour

您可能需要根据存储时间的方式调整时间戳的格式(纪元秒、纪元毫秒、ISO8601 等。如果您将其设置为每小时 运行,则每次执行,您将获得最后一小时的数据。请注意,__dt 约束通过将扫描限制为仅最近一天来帮助您的查询 运行 更快(并且更便宜)。

2) 您可以使用数据集的 delta window 函数改进上述内容,这样您就可以更轻松地获取自上次查询 运行 以来到达的数据。然后,您可以将查询简化为;

select * from my_datastore where __dt >= current_date - interval '1' day

并配置增量时间 window 以查看您的时间戳字段。然后,您可以通过执行查询的频率(每 15 分钟、每小时等)来控制检索的数据量。

3) 如果您有更通用的要求来获取您正在以编程方式计算的 2 个时间戳之间的数据,并且可能不是 now() 的形式 - 某个时间间隔,您可以这样做的方法是创建数据集,然后在使用 create-dataset-content 运行 之前使用修改后的 SQL 表达式更新数据集。这样,数据集内容将仅使用每次执行所需的结果进行更新。如果对此感兴趣,我可以扩展实际需要的 python。

4) 正如 Thomas 所建议的,通常可以很容易地使用数据集(例如最后一天)提取更大的数据块,然后在代码中过滤到您想要的时间戳。如果您使用的 panda dataframes for example and there are plenty of related questions such as 有很好的答案,这将特别容易。