복붙노트

[SQL] BigQuery에 열로 트랜스 행 (피벗 구현)

SQL

BigQuery에 열로 트랜스 행 (피벗 구현)

나는 새 테이블을 생성하고 BigQuery에를 사용하여 각각의 값으로 열 이름과 값으로 키를 사용하여 모든 키 값 쌍을 배치 할.

예:

**Key**                  **Value**
channel_title           Mahendra Guru    
youtube_id              ugEGMG4-MdA  
channel_id              UCiDKcjKocimAO1tV    
examId                  72975611-4a5e-11e5   
postId                  1189e340-b08f 

channel_title           Ab Live  
youtube_id              3TNbtTwLY0U  
channel_id              UCODeKM_D6JLf8jJt    
examId                  72975611-4a5e-11e5   
postId                  0c3e6590-afeb

나는 그것을 변환 할 :

**channel_title   youtube_id   channel_id         examId               postId**
Mahendra Guru   ugEGMG4-MdA  UCiDKcjKocimAO1tV  72975611-4a5e-11e5   1189e340-b08f
Ab Live         3TNbtTwLY0U  UCODeKM_D6JLf8jJt  72975611-4a5e-11e5   0c3e6590-afeb

방법의 BigQuery를 사용하여 할까?

해결법

  1. ==============================

    1.BigQuery를 아직 피벗 기능을 지원하지 않습니다 당신은 여전히 ​​접근 아래 사용 BigQuery에서이 작업을 수행 할 수 있습니다

    BigQuery를 아직 피벗 기능을 지원하지 않습니다 당신은 여전히 ​​접근 아래 사용 BigQuery에서이 작업을 수행 할 수 있습니다

    하지만 먼저, 입력 데이터의 두 열뿐만 아니라 당신이 필요 출력의 한 행에 결합 할 수 있음을 입력의 행 그룹을 지정합니다 하나 더 열이 있어야합니다

    그래서, 나는 당신의 입력 테이블 (yourTable는) 다음과 같은 가정

    **id**  **Key**                  **Value**
       1    channel_title           Mahendra Guru    
       1    youtube_id              ugEGMG4-MdA  
       1    channel_id              UCiDKcjKocimAO1tV    
       1    examId                  72975611-4a5e-11e5   
       1    postId                  1189e340-b08f 
    
       2    channel_title           Ab Live  
       2    youtube_id              3TNbtTwLY0U  
       2    channel_id              UCODeKM_D6JLf8jJt    
       2    examId                  72975611-4a5e-11e5   
       2    postId                  0c3e6590-afeb  
    

    그래서, 먼저 쿼리 아래 실행해야

    SELECT 'SELECT id, ' + 
       GROUP_CONCAT_UNQUOTED(
          'MAX(IF(key = "' + key + '", value, NULL)) as [' + key + ']'
       ) 
       + ' FROM yourTable GROUP BY id ORDER BY id'
    FROM (
      SELECT key 
      FROM yourTable
      GROUP BY key
      ORDER BY key
    ) 
    

    위의 쿼리의 결과 (형식 경우)는 다음과 같이됩니다 문자열입니다

    SELECT 
      id, 
      MAX(IF(key = "channel_id", value, NULL)) AS [channel_id],
      MAX(IF(key = "channel_title", value, NULL)) AS [channel_title],
      MAX(IF(key = "examId", value, NULL)) AS [examId],
      MAX(IF(key = "postId", value, NULL)) AS [postId],
      MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id] 
    FROM yourTable 
    GROUP BY id 
    ORDER BY id
    

    (당신이 정말로 포맷 할 필요가 없습니다 - 난 단지 제시를 위해 그것을했던 주)와 일반 쿼리로 실행 이제 결과를 복사한다

    당신이 예상하는 것처럼 결과가 될 것입니다

    id  channel_id          channel_title   examId              postId          youtube_id   
    1   UCiDKcjKocimAO1tV   Mahendra Guru   72975611-4a5e-11e5  1189e340-b08f   ugEGMG4-MdA  
    2   UCODeKM_D6JLf8jJt   Ab Live         72975611-4a5e-11e5  0c3e6590-afeb   3TNbtTwLY0U  
    

    참고 :이 또는 한 번 거래의 경우 자신과 작은 필드와 상수의 숫자 (2 단계)을 적절한 쿼리를 구성 할 수있는 경우 1 단계를 건너 뛸 수 있습니다. 그러나 단계는 빠른 언제든지 그것을 만들 수 있도록, 당신을 위해 그것을 만드는 1 단지 도우미 단계!

    어떻게 BigQuery에서 피벗을 확장 할 수? 테이블 당 10K 열 한계가있다 - - 참고 사항은 10K 단체로 제한되도록. (한 자세한 / 너무 복잡 위의 경우) 당신은 또한 간단한 예로 아래를 참조 할 수 있습니다 : 어떻게 BigQuery에 / SQL에서 데이터 다량의 열과 행을 바꾸어 하는가? 어떻게 Google BigQuery에서 범주의 수천 더미 변수 열을 만드는 방법? BigQuery에서의 피벗 반복 필드

  2. from https://stackoverflow.com/questions/40761453/transpose-rows-into-columns-in-bigquery-pivot-implementation by cc-by-sa and MIT license