brunch

You can make anything
by writing

C.S.Lewis

by 비즈스프링 Apr 15. 2024

BigQuery 행 데이터를 열로 변환하기

이번 포스팅에서는 데이터 작업시 행 데이터를 열로 변환하는 방법에 대해 알아보도록 하겠습니다. 추출한 데이터를 열로 붙여서 만들어야 하는 작업이 있었는데, 진행 하다 보니 유사한 작업을 진행하시는 분들에게 도움이 될 것 같아 공유하고자 합니다.


작업 순서는 아래와 같습니다.


▶ 행으로 추출된 데이터들에 데이터명을 붙인 후 열로 변환하기

    1) 데이터 추출(생성)

    2) 데이터명 추가(STRUCT)

    3) 데이터 유형이 동일한 값을 각각의 행으로 표현(ARRAY)

    4) 데이터를 평면화(Flatten)하여 행에서 열로 변환(UNNEST)




1. 데이터 추출(생성)

지표 데이터들을 추출했다고 가정하고 샘플 데이터를 생성합니다.


WITH

datas AS (

  SELECT 

    current_date('+09:00') AS date

    ,23486 AS Session

    ,996 AS Transactions

),

SELECT * FROM datas


실행한 데이터는 아래와 같습니다.

데이터 추출(생성) 예시 (출처: BizSpring)




2. 데이터명 추가(STRUCT)

STRUCT 를 사용하여 데이터명을 추가합니다.


WITH

datas AS (

  SELECT 

    current_date('+09:00') AS date

    ,23486 AS Session

    ,996 AS Transactions

),

datas_struct AS (

  SELECT

    date

    ,STRUCT("세션" AS metrics_nm, SUM(Session) AS metrics)

    ,STRUCT("트랜잭션" AS metrics_nm, SUM(Transactions) AS metrics)

  FROM datas

  group by 1

)

SELECT * FROM datas_struct


실행한 데이터는 아래와 같습니다.

데이터명 추가(STRUCT) 예시 (출처: BizSpring)




3. 데이터 유형이 동일한 값을 각각의 행으로 표현(ARRAY)

행데이터를 열로 변환하기 위한 사전작업을 진행합니다. ARRAY를 사용하여 데이터 유형이 동일한 값을 각각의 행으로 표현합니다.


STRUCT로 구현한 구문에 []를 사용하여 ARRAY로 감싸주면 됩니다.


WITH

datas AS (

  SELECT 

    current_date('+09:00') AS date

    ,23486 AS Session

    ,996 AS Transactions

),

datas_struct AS (

  SELECT

    date

    ,[

      STRUCT("세션" AS metrics_nm, SUM(Session) AS metrics)

      ,STRUCT("트랜잭션" AS metrics_nm, SUM(Transactions) AS metrics)

    ]

  FROM datas

  group by 1

)

SELECT * FROM datas_struct


실행한 데이터는 아래와 같습니다.

데이터 유형이 동일한 값을 각각의 행으로 표현(ARRAY) 예시 (출처: BizSpring)




4. 데이터를 평면화(Flatten)하여 행에서 열로 변환(UNNEST)

metrics라는 컬럼에 있는 데이터들을 꺼내서 펼쳐주는 작업을 해야합니다.


WITH

datas AS (

  SELECT 

    current_date('+09:00') AS date

    ,23486 AS Session

    ,996 AS Transactions

),

datas_struct_array AS (

  SELECT

    date

    ,[

      STRUCT("세션" AS metrics_nm, SUM(Session) AS metrics)

      ,STRUCT("트랜잭션" AS metrics_nm, SUM(Transactions) AS metrics)

    ] AS metrics

  FROM datas

  group by 1

),

datas_struct_array_unnest AS (

  SELECT

    d.date

    ,m.metrics_nm AS metrics_nm

    ,m.metrics as metrics

  FROM datas_struct_array d

  LEFT JOIN UNNEST(metrics) m

)

SELECT * FROM datas_struct_array_unnest


실행한 데이터는 아래와 같습니다.

데이터를 평면화(Flatten)하여 행에서 열로 변환(UNNEST) 예시 (출처: BizSpring)


위와 같이 행으로 표현된 데이터를 열로 바꾸어 구성할 수 있습니다. 
데이터 작업을 하시는데 도움 되었으면 좋겠으며, 다음에 더 좋은 내용으로 찾아뵙도록 하겠습니다.




이상으로 BigQuery 행 데이터를 열로 변환하는(STRUCT, ARRAY, UNNEST) 방법에 대해 알아보았습니다. 궁금한 점은 아래 채널로 연락주시기 바랍니다.


감사합니다.



ad@bizspring.co.kr / 02-6919-5516




마케팅에서의 데이터 활용 기술과 인사이트
No.1 Data Partner for Data-Driven Growth
비즈스프링

공식 블로그 | 페이스북 | 네이버 블로그 | 유튜브 | 트위터 | 슬라이드쉐어


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari