복붙노트

[SQL] 어떻게 BigQuery에 / SQL에서 데이터 다량의 열과 행을 바꾸어 하는가?

SQL

어떻게 BigQuery에 / SQL에서 데이터 다량의 열과 행을 바꾸어 하는가?

나는 컬럼에 행에서 BigQuery의 데이터 테이블의 많은 양의 (15 억 행) 전치에 문제가 있습니다. 나는 하드 코딩 할 때 데이터의 소량을 수행하는 방법을 알아낼 수 있지만, 다량의 수 있습니다. 테이블의 스냅 샷은 다음과 같다 :

+ -------------------------- + | CustomerID를 기능 가치 | + -------------------------- + | 1 A123 3 | | 1 F213 7 | | 1 F231 8 | | 1 B789 9.1 | | 2 A123 4 | | 2 U123 4 | | 2 B789 12 | | .. .. .. | | .. .. .. | | 400000 A123 8 | | 400000 U123 7 | | 400000 R231 6 | + -------------------------- +

그래서 기본적으로 3000 기능과 함께 약 40 만 별개의 CUSTOMERID이 있고, 일부는 내가 좀하고 싶습니다 최종 결과 테이블은 각 행의 선물을 한 별개의 고객 ID입니다 3000있는 동안 일부 고객 ID가 2000 기능을 가질 수 있도록하지 모든 고객 ID가 같은 기능을 가지고 있습니다, 3000 열 선물 모든 기능이. 이 같이 :

CustomerID를 Feature1 Feature2 ... Feature3000

세포의 일부가 누락 값을 가질 수 있도록.

사람은 어떻게 BigQuery에 또는 SQL에서이 작업을 수행하는 생각이있다?

미리 감사드립니다.

해결법

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

    1.

    STEP #1
    

    쿼리 아래에서 실행 / 테이블의 실제 이름으로 yourTable을 교체하고 실행

    SELECT 'SELECT CustomerID, ' + 
       GROUP_CONCAT_UNQUOTED(
          'MAX(IF(Feature = "' + STRING(Feature) + '", Value, NULL))'
       ) 
       + ' FROM yourTable GROUP BY CustomerID'
    FROM (SELECT Feature FROM yourTable GROUP BY Feature) 
    

    결과적으로 일부 문자열을 얻을 것이다 다음 단계에서 사용할 수!

    STEP #2
    

    1 단계에서 당신이 가지고 문자열을 가지고 단지 쿼리로 실행 출력은 당신이 질문에 질문 피벗입니다

  2. ==============================

    2.안녕하세요 @Jade 내가 전에 매우 비슷한 질문을 기록했다. 그리고 @MikhailBerlyant에서 매우 도움 (유사한) 대답을 얻었다. 무엇의 가치를 위해, 나는 내 경우에는 dummify하는 4000에 대한 기능을 가지고 있으며 오류 "자원 쿼리 실행 중에 초과"로 달렸다.

    안녕하세요 @Jade 내가 전에 매우 비슷한 질문을 기록했다. 그리고 @MikhailBerlyant에서 매우 도움 (유사한) 대답을 얻었다. 무엇의 가치를 위해, 나는 내 경우에는 dummify하는 4000에 대한 기능을 가지고 있으며 오류 "자원 쿼리 실행 중에 초과"로 달렸다.

    나는 대규모 데이터 변환 (오히려 쿼리 이상)이 유형의 더 나은 (예 : 스파크 등)이 작업에 더 적합한 다른 도구 방치 생각합니다.

  3. from https://stackoverflow.com/questions/34798244/how-to-transpose-rows-to-columns-with-large-amount-of-the-data-in-bigquery-sql by cc-by-sa and MIT license