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

如何合并含distkey的三个SQL查询且无需创建临时表?

问题描述

现有两个源数据表:

表1:original_xyz

uuidlangnametextabcijk
1231312engeneralthis is a foo bar0.238
1231312engeneralthis is a foo bar0.9358
9890803engeneralanother sent0.3829

表2:qqq(原问题未明确表名,此处为临时命名)

uuidtrg_langrst
1231312de0.95
1231312de0.34

原本的处理流程是创建两个临时表后执行关联查询:

创建临时表new_xyz

CREATE temp TABLE new_xyz sortkey(
    uuid, lang, name, text
) distkey(uuid) as (
    SELECT
        uuid, lang, name, text, min(abc) as abcs, sum(ijk) as ijks
    FROM
        original_xyz
    GROUP BY 1,2,3,4
    ORDER BY 1,2,3,4
)

创建临时表new_qqq

CREATE temp TABLE new_qqq sortkey(
    uuid, trg_lang
) distkey(uuid) as (
    SELECT 
        uuid, trg_lang, min(rst) as rsts
    FROM
        qqq
    GROUP BY 1,2
)

最终关联查询

SELECT * from new_xyz nxyz
INNER JOIN new_qqq nqqq
ON nxyz.uuid = nqqq.uuid

执行后得到结果表:

uuidlangnametextabcijktrg_langrst
1231312engeneralthis is a foo bar0.2366de0.34

现在需要将这三个查询合并为一个,不创建临时表,通过子查询关联实现。


解决方案

完全可以合并为单个查询,无需创建临时表。将原临时表的聚合逻辑作为子查询直接关联即可,Redshift会自动处理查询执行计划,子查询中不需要显式指定distkey或sortkey(这类是表的存储属性,子查询为内存临时计算结果,无需额外配置)。

合并后的完整SQL如下:

SELECT 
    nxyz.uuid, 
    nxyz.lang, 
    nxyz.name, 
    nxyz.text, 
    nxyz.abcs AS abc, 
    nxyz.ijks AS ijk, 
    nqqq.trg_lang, 
    nqqq.rsts AS rst
FROM 
    (
        SELECT
            uuid, lang, name, text, min(abc) as abcs, sum(ijk) as ijks
        FROM
            original_xyz
        GROUP BY 1,2,3,4
        ORDER BY 1,2,3,4
    ) nxyz
INNER JOIN 
    (
        SELECT 
            uuid, trg_lang, min(rst) as rsts
        FROM
            qqq -- 替换为实际表名
        GROUP BY 1,2
    ) nqqq
ON nxyz.uuid = nqqq.uuid

说明

  1. 两个子查询分别对应原临时表的聚合逻辑:
    • 第一个子查询对original_xyz按uuid, lang, name, text分组,计算abc的最小值和ijk的总和;
    • 第二个子查询对目标表按uuid, trg_lang分组,计算rst的最小值;
  2. 通过uuid关联两个子查询结果,输出与原流程完全一致的内容;
  3. 原临时表的distkey和sortkey是针对物理存储的优化配置,子查询无需指定,Redshift会根据查询逻辑自动优化数据分布与排序,保障执行效率。

内容的提问来源于stack exchange,提问作者alvas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:05:33