[SQL] 어떻게 Google BigQuery에서 범주의 수천 더미 변수 열을 만드는 방법?
SQL어떻게 Google BigQuery에서 범주의 수천 더미 변수 열을 만드는 방법?
나는 간단한의 2 열이있는 테이블이 있습니다 사용자 ID 및 범주, 각 사용자 ID는과 같이 몇 가지 범주로 반복 할 수 있습니다 :
UserID Category
------ --------
1 A
1 B
2 C
3 A
3 C
3 B
(사용자 아이디에 해당 카테고리에 속하는지 여부에 따라 0/1) 가변 수 이루어진 각 카테고리에 대해 고유 한 열이 출력 테이블을 작성 즉 : I "는 dummify"이 테이블 원한다
UserID A B C
------ -- -- --
1 1 1 0
2 0 0 1
3 1 1 1
내 문제는 내가 (그냥 3이 예에서와 같이)이 효율적으로 언제 문 CASE를 사용하여 수행 할 수 없도록 카테고리의 수천을 가지고있다.
그래서 내 질문은 :
1) 언제 CASE의 문을 수천을 사용하지 않고 Google BigQuery에서 "dummify"범주 열 수있는 방법이 있습니다.
2)은 UDF 기능이 잘 작동 상황인가? 이 경우 일 것이다하지만이 문제를 해결하기 위해 BigQuery에있는 UDF에 대해 잘 알고 충분하지 않다 것 같다. 겠습니까 누군가가 도울 수?
감사.
해결법
-
==============================
1.당신은 아래의 "기술"를 사용할 수 있습니다
당신은 아래의 "기술"를 사용할 수 있습니다
먼저 실행 쿼리 # 1. 그것은 당신이 당신이 필요로하는 결과를 얻기 위해 실행해야하는 쿼리 (쿼리 # 2)을 생성합니다. O) : 여전히 수천 개의 범주로 "야생"가기 전에 Mosha의 의견을 고려하시기 바랍니다
검색어 # 1 :
SELECT 'select UserID, ' + GROUP_CONCAT_UNQUOTED( 'sum(if(category = "' + STRING(category) + '", 1, 0)) as ' + STRING(category) ) + ' from YourTable group by UserID' FROM ( SELECT category FROM YourTable GROUP BY category )
# 2 쿼리 - 아래와 같이 될 것입니다 결과
SELECT UserID, SUM(IF(category = "A", 1, 0)) AS A, SUM(IF(category = "B", 1, 0)) AS B, SUM(IF(category = "C", 1, 0)) AS C FROM YourTable GROUP BY UserID
세 가지 범주에 대한 물론 - 당신은 수동으로 할 수 있지만, 수천이 definitelly 당신을 위해 일 할 것입니다 것입니다!
예상대로 쿼리 # 2 의지 외모의 결과 :
UserID A B C 1 1 1 0 2 0 0 1 3 1 1 1
from https://stackoverflow.com/questions/34010002/how-to-create-dummy-variable-columns-for-thousands-of-categories-in-google-bigqu by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 타이 T-SQL에 대한 MySQL의 대안 (0) | 2020.04.27 |
---|---|
[SQL] T-SQL에서 피벗 데이터 (0) | 2020.04.27 |
[SQL] 간극없이 시퀀스를 생성 POSTGRESQL (0) | 2020.04.27 |
[SQL] - 기존 테이블에 삽입 테이블 또는 뷰가 존재하지 않습니다 ORA-00942가 예외를 얻기 (0) | 2020.04.27 |
[SQL] MySQL의 테이블 이름에 특수 문자 (0) | 2020.04.27 |