は、私は赤方偏移で大きなテーブルを旋回させる方法を、次の午前: AWS赤方偏移ピボットテーブルにすべての寸法
Pivot a table with Amazon RedShift/PostgreSQL
は、しかし、私はピボットするグループの数が多いすなわち、m1
、
m2
、... すべての異なる値をループし、それぞれに同じロジックを適用し、結果の列名をエイリアスする方法はありますか?
は、私は赤方偏移で大きなテーブルを旋回させる方法を、次の午前: AWS赤方偏移ピボットテーブルにすべての寸法
Pivot a table with Amazon RedShift/PostgreSQL
は、しかし、私はピボットするグループの数が多いすなわち、m1
、
m2
、... すべての異なる値をループし、それぞれに同じロジックを適用し、結果の列名をエイリアスする方法はありますか?
任意の数のグループにピボットできるようにするには、グループを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
ことがデータで可能であるならば、あなたはそれを処理する方法を把握する必要があります。私はそれがどのように実装されたとして振る舞うかはわかりません。私の推測は、抽出される最初の出来事です。
これはおそらくLISTAGGとREGEXP_SUBSTRの組み合わせを使用して2つのカスタムデリミタを使用して行うことができます。
JSON column typeにvarchar(max)
を使用すると、65535バイトになります。これは、数千のカテゴリに適しています。
私が知る限り、あなたはできません。おそらく、いくつかのスクリプトを使用して一意のmetricNameごとにcase文を生成する必要があります。正直なところ、一度のクエリに対しては正常に機能します。 – htf