복붙노트

[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.당신은 아래의 "기술"를 사용할 수 있습니다

    당신은 아래의 "기술"를 사용할 수 있습니다

    먼저 실행 쿼리 # 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    
    
  2. 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