簡體   English   中英

為 SQL 中的一組列生成相同的 UUID

[英]Generate UUID which is same for a group of columns in SQL

有人可以建議一種編寫 SQL 查詢的方法,該查詢將生成一個唯一的 UUID,該 UUID 對於 amazon athena 中的一組列是相同的。

例如,我有一個這樣的表,我想在其中為 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

Output 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

Output 2:應該看起來像

ID      | count |column1 | column2 | column3
UUID-1  | 2     |2016    | 101     | 1
UUID-2  | 2     |2017    | 105     | 2

我知道可以在 output 1 上進行分組以生成 output 2。有人可以建議我如何生成 output 1 嗎?

謝謝。

你可以嘗試使用uuid() function。

SELECT uuid() id,
       COUNT(*),
       column1 ,
       column2 ,
       column3
FROM T
GROUP BY column1 ,
       column2 ,
       column3

編輯

我看到你編輯了你的問題,你可以嘗試使用子查詢和自連接獲取輸出 1

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 window function 為每個column1column2column3列僅獲取一個 GUID。

select max(id) over (partition by column1,column2,column3) as id, 
       column1,
       column2,
       column3,
       column4
from 
(
    SELECT uuid() id,*
    FROM T
) t1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM