如何将多条无关SQL语句合并为单结果(Amazon Timestream场景)
合并Amazon Timestream多查询以降低计费成本
问题背景
我需要通过不同SQL查询构建仪表盘,涉及50个组件,每个组件对应一条独立的SELECT语句,这些语句的结果形式差异极大——有的返回单值,有的返回多行数据。使用的数据库是Amazon Timestream,由于该数据库单查询最低计费为10MB,执行50次独立查询的成本过高。我的目标是将所有查询合并为一次执行,仅支付一次扫描费用,但不确定如何合并这些无关的查询并正确解析结果。
期望结果
希望合并后的查询返回如下格式的结果:所有查询的列都保留,每行仅包含对应查询的结果数据,无关列填充null,最终结果的总行数等于各查询结果行数之和:
| max_val | count_val | items |
|---|---|---|
| 50 | null | null |
| null | 100 | null |
| null | null | item1 |
| null | null | item2 |
| null | null | item3 |
之后可通过遍历结果行提取对应数据,完成仪表盘构建。
解决方案
通过FULL OUTER JOIN并指定ON 1 = 0的方式,可将多个无关查询合并为一个,实现预期结果格式:
SELECT * FROM (QUERY 1) FULL OUTER JOIN (QUERY 2) ON 1 = 0 FULL OUTER JOIN (QUERY 3) ON 1 = 0 -- 依次添加剩余47个查询,每个都用 FULL OUTER JOIN ... ON 1=0
原理是ON 1=0会让两个结果集之间无匹配行,FULL OUTER JOIN会保留两个结果集的所有行,未匹配的列自动填充null。重复此逻辑即可将50个查询合并为一次执行,仅产生一次扫描计费。
内容的提问来源于stack exchange,提问作者ArielB
相关产品推荐
相关产品推荐

