You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Amazon Timestream中低成本获取随机数据样本?

低成本获取Timestream小时级随机数据样本的方案

针对你的问题,以下几种方法可以在控制扫描成本的同时保证样本随机性:

方法1:基于时间切片的随机采样

利用Timestream的时间分区特性,将目标小时拆分为多个小时间窗口(比如1分钟/5分钟窗口),先随机挑选若干窗口,再在每个窗口内取固定数量的数据。这种方式只扫描选中窗口的数据,大幅降低扫描量。

示例SQL(以1分钟窗口为例,随机选10个窗口,每个取100条,总计1000条):

SELECT * FROM (
  -- 随机选0-59之间的分钟数作为偏移
  SELECT * FROM table_name 
  WHERE time >= from_iso8601_timestamp('2022-10-11T11:31:51') + interval '7' minute 
    AND time < from_iso8601_timestamp('2022-10-11T11:31:51') + interval '8' minute 
  LIMIT 100
  
  UNION ALL
  
  SELECT * FROM table_name 
  WHERE time >= from_iso8601_timestamp('2022-10-11T11:31:51') + interval '23' minute 
    AND time < from_iso8601_timestamp('2022-10-11T11:31:51') + interval '24' minute 
  LIMIT 100
  
  -- 重复添加8个类似的随机窗口查询
) AS sampled_data
LIMIT 1000

你可以根据数据密度调整窗口大小和选中数量,比如数据稀疏时用5分钟窗口,数据密集时用30秒窗口。

方法2:用rand()过滤实现轻量随机采样

直接在WHERE子句中加入rand()过滤条件,让Timestream在扫描过程中直接筛选出随机行,避免全量数据排序的开销。这种方式扫描的是时间范围内的数据,但不需要排序,成本远低于ORDER BY random()。

示例SQL:

SELECT *
FROM table_name 
WHERE time >= from_iso8601_timestamp('2022-10-11T11:31:51') 
  AND time <= from_iso8601_timestamp('2022-10-11T12:31:51')
  AND rand() < 0.01 -- 调整该阈值控制返回数量,比如目标1000条,总数据10万则设为0.01
LIMIT 1000

注意:rand()的阈值需要根据目标小时内的预估数据总量调整,若返回数量不足,可以适当调高阈值。

方法3:随机时间点精准采样

如果数据在时间上分布均匀,可以预生成1000个目标范围内的随机时间点,查询每个时间点附近的最新/任意一条数据。这种方式单条查询扫描量极小,但依赖数据分布的均匀性。

示例SQL(单时间点示例):

SELECT * FROM table_name 
WHERE time >= from_iso8601_timestamp('2022-10-11T11:45:23') 
  AND time < from_iso8601_timestamp('2022-10-11T11:45:24')
LIMIT 1

将上述语句用UNION ALL拼接1000个不同的随机时间点即可。

内容的提问来源于stack exchange,提问作者dor-amberflo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:40:32