请有人建议一种编写SQL查询的方法,它将生成一个唯一的UUID,对于athena中的一组列来说,UUID是相同的。
例如,我有一个这样的表,其中我想为columns1、columns2和columns3创建一个UUID。
column1 | column2 | column3 | column 4
2016 | 101 | 1 | 25
2016 | 101 | 1 | 59
2017 | 105 | 2 | 57
2017 | 105 | 2 | 78输出1必须如下所示
ID | column1 | column2 | column3 | column 4
UUID-1 | 2016 | 101 | 1 | 25
UUID-1 | 2016 | 101 | 1 | 59
UUID-2 | 2017 | 105 | 2 | 57
UUID-2 | 2017 | 105 | 2 | 78输出2:应该是
ID | count |column1 | column2 | column3
UUID-1 | 2 |2016 | 101 | 1
UUID-2 | 2 |2017 | 105 | 2我知道可以对输出1进行分组以生成输出2,有人能建议我如何生成输出1吗?
谢谢。
发布于 2022-03-08 12:20:56
您可以尝试使用uuid()函数。
SELECT uuid() id,
COUNT(*),
column1 ,
column2 ,
column3
FROM T
GROUP BY column1 ,
column2 ,
column3编辑
我看到你编辑你的问题,你可以尝试使用子查询和自我连接获取output1
SELECT t1.*,t2.column4
FROM (
SELECT DISTINCT uuid() id,
column1 ,
column2 ,
column3
FROM T
) t1 INNER JOIN T t2
ON t1.column1 = t2.column1
AND t1.column2 = t2.column2
AND t1.column3 = t2.column3另一种方法是尝试使用max窗口函数,使每个column1、column2、column3列只获得一个GUID。
select max(id) over (partition by column1,column2,column3) as id,
column1,
column2,
column3,
column4
from
(
SELECT uuid() id,*
FROM T
) t1https://stackoverflow.com/questions/71394705
复制相似问题