如何构造SQL查询满足AWS Personalize25个每位至少2条记录的唯一用户配额要求
适配AWS Personalize配额的Athena查询方案
实现逻辑为优先固定筛选出符合交互次数要求的25位以上用户,再拉取对应交互记录保证总条数≥1000,即可稳定满足配额要求,无需拉取全量数据集,适配POC场景需求。
修改后的查询语句如下:
SELECT C.productid AS ITEM_ID, A.userid AS USER_ID, A.createdon AS "TIMESTAMP", B.fromaddress_countryname AS "LOCATION" FROM A AS orders JOIN B AS sub_orders ON orders.order_id = sub_orders.order_id JOIN C AS order_items ON orders.order_id = order_items.order_id WHERE orders.userid IN ( SELECT userid FROM A AS ORDERS GROUP BY userid HAVING count(*) >= 2 -- 如需固定用户样本,保留下行;如需随机抽取用户样本,替换为 ORDER BY RAND() ORDER BY userid -- 可调整为30预留冗余,避免JOIN导致部分用户记录丢失后用户数不足25 LIMIT 25 ) -- 可根据POC需要调整大小,只要≥1000即可满足配额要求 LIMIT 1500
核心修改点说明:
- 将原语句
HAVING count(*) > 2调整为HAVING count(*) >= 2,刚好匹配配额要求的「每位用户至少2条记录」规则,不会过滤掉刚好只有2条记录的合格用户 - 子查询新增
LIMIT 25,确保最少覆盖25个符合要求的唯一用户,解决数据未打乱时仅用外层LIMIT可能导致返回用户数不足的问题 - 外层LIMIT调整为1500,既控制了数据集大小避免拉取全量,也能稳定满足总记录数≥1000的配额要求
内容的提问来源于stack exchange,提问作者DiegoTrigueros
相关产品推荐
相关产品推荐

