2017-03-08 33 views
1

我下面的方法來轉動大表紅移:AWS紅移透視表的所有尺寸

Pivot a table with Amazon RedShift/PostgreSQL

不過,我有大量的羣體轉動即m1m2,... 如何循環遍歷所有不同的值並將相同的邏輯應用於其中的每個值並別名生成的列名稱?

+1

據我所知,你不能。您可能只需要通過一些腳本爲每個唯一的metricName生成case語句,或者老實說,excel公式對一次性查詢可以很好地工作。 – htf

回答

1

如果您希望能夠轉到任意數量的組,您可以將這些組合成JSON字符串,然後使用Redshift JSON functions提取您感興趣的組。您可能不希望爲非常大的數據集執行此操作。

這裏是在question linked above根據樣本數據的基本思想:

select DimensionA, DimensionB, 
    json_extract_path_text(json_pivot, 'm1') m1, 
    json_extract_path_text(json_pivot, 'm2') m2 
from (
    select DimensionA, DimensionB, 
     '{' || listagg(quote_ident(MetricName) || ':' || quote_ident(MetricValue), ',') 
       within group (order by MetricName) || '}' as json_pivot 
    from to_pivot 
    group by DimensionA, DimensionB 
) 

在實踐中,你不希望這樣的運行它。內部選擇是您用來生成「旋轉」表的內容,外部選擇顯示如何引用特定的組值。

這並不佔像下面一樣昏暗的組合重複的組記錄:

DimensionA DimensionB MetricName MetricValue 
---------- ---------- ---------- ----------- 
dimA1  dimB2  m1   v13 
dimA1  dimB2  m1   v23 

如果是在數據的可能性,那麼你將必須弄清楚如何處理。我不確定它會如何實施。我的猜測是第一次出現將被提取。

這可能可以使用LISTAGGREGEXP_SUBSTR的組合以及使用兩個自定義分隔符來完成。

JSON column type使用varchar(max)將給出65535個字節,對於幾千個類別應該是空間。

解釋slightly differently here