2017-03-08 1 views
1

は、私は赤方偏移で大きなテーブルを旋回させる方法を、次の午前: AWS赤方偏移ピボットテーブルにすべての寸法

Pivot a table with Amazon RedShift/PostgreSQL

は、しかし、私はピボットするグループの数が多いすなわち、 m1m2、... すべての異なる値をループし、それぞれに同じロジックを適用し、結果の列名をエイリアスする方法はありますか?

+1

私が知る限り、あなたはできません。おそらく、いくつかのスクリプトを使用して一意のmetricNameごとにcase文を生成する必要があります。正直なところ、一度のクエリに対しては正常に機能します。 – 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の組み合わせを使用して2つのカスタムデリミタを使用して行うことができます。

JSON column typevarchar(max)を使用すると、65535バイトになります。これは、数千のカテゴリに適しています。

説明slightly differently here

関連する問題