SQL의 종횡 변환 요약(pivot 및 unpivot)
표준 SQL
SQL-like 쿼리 언어 어디에서나 사용할 수 있는 쓰기 방법입니다.
PivotSELECT uid,
max(CASE WHEN key = 'c1' THEN value END) AS c1,
max(CASE WHEN key = 'c2' THEN value END) AS c2,
max(CASE WHEN key = 'c3' THEN value END) AS c3
FROM vtable
GROUP BY uid
;
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
UnpivotSELECT uid, 'c1' AS key, c1 AS value FROM htable
UNION ALL
SELECT uid, 'c2' AS key, c2 AS value FROM htable
UNION ALL
SELECT uid, 'c3' AS key, c3 AS value FROM htable
;
uid key value
--- --- -----
101 c1 11
102 c1 21
101 c2 12
102 c2 22
101 c3 13
102 c3 23
Presto
표준 SQL 방법도 가능하지만 다음과 같은 방법을 사용할 수도 있습니다.
Pivotmap_agg
함수로 지도형 구조를 만든 후 참조하는 방법.SELECT
uid,
kv['c1'] AS c1,
kv['c2'] AS c2,
kv['c3'] AS c3
FROM (
SELECT uid, map_agg(key, value) kv
FROM vtable
GROUP BY uid
) t
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
Unpivot
열을 만들어 배열한 후CROSS JOIN unnest
펼치는 방법이다.PostgreSQL에서도 사용할 수 있습니다.SELECT t1.uid, t2.key, t2.value
FROM htable t1
CROSS JOIN unnest (
array['c1', 'c2', 'c3'],
array[c1, c2, c3]
) t2 (key, value)
uid key value
--- --- -----
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
Hive
Pivot
표준 Hive 함수는 아니지만 Treasure 데이터의 Hive에 to_map
UDAF를 추가하여 지도형 구조를 만든 후에 참조할 수 있습니다.SELECT
uid,
kv['c1'] AS c1,
kv['c2'] AS c2,
kv['c3'] AS c3
FROM (
SELECT uid, to_map(key, value) kv
FROM vtable
GROUP BY uid
) t
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
UnpivotLATERAL VIEW explode
전개 방법이 있다.SELECT t1.uid, t2.key, t2.value
FROM htable t1
LATERAL VIEW explode (map(
'c1', c1,
'c2', c2,
'c3', c3
)) t2 as key, value
uid key value
--- --- -----
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
Pandas pivot
및 melt
등의 함수를 사용할 수 있습니다.
PivotIn [1]: vtable.pivot('uid', 'key', 'value')
Out[1]:
key c1 c2 c3
uid
101 11 12 13
102 21 22 23
UnpivotIn [2]: pd.melt(htable, 'uid', var_name='key')
Out[2]:
uid key value
0 101 c1 11
1 101 c2 12
2 101 c3 13
3 102 c1 21
4 102 c2 22
5 102 c3 23
Reference
이 문제에 관하여(SQL의 종횡 변환 요약(pivot 및 unpivot)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k24d/items/79bc4828c918dfeeac34
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
SELECT uid,
max(CASE WHEN key = 'c1' THEN value END) AS c1,
max(CASE WHEN key = 'c2' THEN value END) AS c2,
max(CASE WHEN key = 'c3' THEN value END) AS c3
FROM vtable
GROUP BY uid
;
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
SELECT uid, 'c1' AS key, c1 AS value FROM htable
UNION ALL
SELECT uid, 'c2' AS key, c2 AS value FROM htable
UNION ALL
SELECT uid, 'c3' AS key, c3 AS value FROM htable
;
uid key value
--- --- -----
101 c1 11
102 c1 21
101 c2 12
102 c2 22
101 c3 13
102 c3 23
표준 SQL 방법도 가능하지만 다음과 같은 방법을 사용할 수도 있습니다.
Pivot
map_agg
함수로 지도형 구조를 만든 후 참조하는 방법.SELECT
uid,
kv['c1'] AS c1,
kv['c2'] AS c2,
kv['c3'] AS c3
FROM (
SELECT uid, map_agg(key, value) kv
FROM vtable
GROUP BY uid
) t
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
Unpivot열을 만들어 배열한 후
CROSS JOIN unnest
펼치는 방법이다.PostgreSQL에서도 사용할 수 있습니다.SELECT t1.uid, t2.key, t2.value
FROM htable t1
CROSS JOIN unnest (
array['c1', 'c2', 'c3'],
array[c1, c2, c3]
) t2 (key, value)
uid key value
--- --- -----
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
Hive
Pivot
표준 Hive 함수는 아니지만 Treasure 데이터의 Hive에 to_map
UDAF를 추가하여 지도형 구조를 만든 후에 참조할 수 있습니다.SELECT
uid,
kv['c1'] AS c1,
kv['c2'] AS c2,
kv['c3'] AS c3
FROM (
SELECT uid, to_map(key, value) kv
FROM vtable
GROUP BY uid
) t
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
UnpivotLATERAL VIEW explode
전개 방법이 있다.SELECT t1.uid, t2.key, t2.value
FROM htable t1
LATERAL VIEW explode (map(
'c1', c1,
'c2', c2,
'c3', c3
)) t2 as key, value
uid key value
--- --- -----
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
Pandas pivot
및 melt
등의 함수를 사용할 수 있습니다.
PivotIn [1]: vtable.pivot('uid', 'key', 'value')
Out[1]:
key c1 c2 c3
uid
101 11 12 13
102 21 22 23
UnpivotIn [2]: pd.melt(htable, 'uid', var_name='key')
Out[2]:
uid key value
0 101 c1 11
1 101 c2 12
2 101 c3 13
3 102 c1 21
4 102 c2 22
5 102 c3 23
Reference
이 문제에 관하여(SQL의 종횡 변환 요약(pivot 및 unpivot)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/k24d/items/79bc4828c918dfeeac34
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
SELECT
uid,
kv['c1'] AS c1,
kv['c2'] AS c2,
kv['c3'] AS c3
FROM (
SELECT uid, to_map(key, value) kv
FROM vtable
GROUP BY uid
) t
uid c1 c2 c3
--- -- -- --
101 11 12 13
102 21 22 23
SELECT t1.uid, t2.key, t2.value
FROM htable t1
LATERAL VIEW explode (map(
'c1', c1,
'c2', c2,
'c3', c3
)) t2 as key, value
uid key value
--- --- -----
101 c1 11
101 c2 12
101 c3 13
102 c1 21
102 c2 22
102 c3 23
pivot
및 melt
등의 함수를 사용할 수 있습니다.Pivot
In [1]: vtable.pivot('uid', 'key', 'value')
Out[1]:
key c1 c2 c3
uid
101 11 12 13
102 21 22 23
UnpivotIn [2]: pd.melt(htable, 'uid', var_name='key')
Out[2]:
uid key value
0 101 c1 11
1 101 c2 12
2 101 c3 13
3 102 c1 21
4 102 c2 22
5 102 c3 23
Reference
이 문제에 관하여(SQL의 종횡 변환 요약(pivot 및 unpivot)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k24d/items/79bc4828c918dfeeac34텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)