π GA4 BigQueryμμ μμ£Ό μ¬μ©λμ§λ§ μ€μνκΈ° μ¬μ΄ ν¨μλ€
GA4 λ°μ΄ν°λ₯Ό BigQueryμμ λΆμνλ€ λ³΄λ©΄ μμ£Ό μ¬μ©νκ² λλ ν¨μλ€μ΄ μμ΅λλ€. νμ§λ§ μ무리 μμ£Ό μ°λ ν¨μλΌλ, μ‘°κΈλ§ λ°©μ¬νλ©΄ μ€λ₯κ° λ°μνκ±°λ μλͺ»λ κ²°κ³Όλ₯Ό λ§λ€μ΄λΌ μ μμ΅λλ€.
μ΄ κΈμμλ μ€λ¬΄μμ μμ£Ό νμ©λλ©΄μλ μ½κ² μ€μν μ μλ ν¨μλ€μ μκ°νκ³ , μλͺ»λ μ¬μ© μμ μ¬λ°λ₯Έ μ¬μ© μλ₯Ό λΉκ΅νλ©° μ€λͺ ν΄ λλ¦¬κ² μ΅λλ€.
1. UNNEST()
β λ°°μ΄ νΌμΉκΈ°μμ λ³μΉ λλ½ μ€μ
GA4 μ΄λ²€νΈ λ°μ΄ν°μλ event_params
, items
κ°μ λ°°μ΄ ννμ 컬λΌμ΄ μμ΅λλ€. μ΄λ₯Ό λΆμνκΈ° μν΄μλ UNNEST()
λ₯Ό μ¬μ©νλλ°, λ³μΉ μμ΄ μ¬μ©ν κ²½μ° μλ¬κ° λ©λλ€.
β μλͺ»λ μ¬μ© μ
SELECT user_pseudo_id, event_name, key, value.string_value
FROM `project.dataset.events_*`,
UNNEST(event_params)
β μ¬λ°λ₯Έ μ¬μ© μ
SELECT
e.user_pseudo_id,
e.event_name,
p.key,
p.value.string_value
FROM `project.dataset.events_*` AS e,
UNNEST(e.event_params) AS p
UNNEST()
μλ λ°λμ μ΄λ€ ν μ΄λΈμ 컬λΌμΈμ§ λͺ ννκ² μλ €μ€μΌ ν©λλ€.
2. DATE_DIFF()
β TIMESTAMPμ DATE νμ
νΌλ
GA4μ event_timestamp
λ user_first_touch_timestamp
λ INT64
λ‘ μ μ₯λ λ§μ΄ν¬λ‘μ΄ λ¨μμ νμμ€ν¬νμ
λλ€. μ΄λ₯Ό λ°λ‘ DATE_DIFF()
μ μ¬μ©νλ©΄ μ€λ₯κ° λ°μν©λλ€.
β μλͺ»λ μ¬μ© μ
SELECT DATE_DIFF(event_timestamp, user_first_touch_timestamp, DAY)
FROM `project.dataset.events_*`
β μ¬λ°λ₯Έ μ¬μ© μ
SELECT
DATE_DIFF(DATE(TIMESTAMP_MICROS(event_timestamp)), DATE(TIMESTAMP_MICROS(user_first_touch_timestamp)), DAY) AS days_since_first_touch
FROM `project.dataset.events_*`
TIMESTAMP_MICROS()
λ₯Ό ν΅ν΄ timestampλ‘ λ³ννκ³ ,DATE()
λ‘ λ³νν ν μ¬μ©ν΄μΌ ν©λλ€.
3. SAFE_CAST()
β νμ
λ³ν μ 쿼리 μ€ν¨ λ°©μ§
λ¬Έμν κ°μ μ«μνμΌλ‘ λ³νν λ CAST()
λ₯Ό μ°λ©΄ λ³ν μ€ν¨ μ 쿼리 μμ²΄κ° μ€λ¨λ©λλ€. μ΄λ΄ λ SAFE_CAST()
λ₯Ό μ¬μ©νλ©΄ μμ ν©λλ€.
β μλͺ»λ μ¬μ© μ
SELECT CAST(p.value.string_value AS INT64)
FROM `project.dataset.events_*` AS e,
UNNEST(e.event_params) AS p
β μ¬λ°λ₯Έ μ¬μ© μ
SELECT SAFE_CAST(p.value.string_value AS INT64)
FROM `project.dataset.events_*` AS e,
UNNEST(e.event_params) AS p
WHERE p.key = "screen_view_count"
μ«μκ° μλ κ°μ΄ λ€μ΄ μμ΄λ NULLλ‘ μ²λ¦¬λμ΄ μΏΌλ¦¬κ° μ€ν¨νμ§ μμ΅λλ€.
4. REGEXP_EXTRACT()
β μ κ·ννμ κ·Έλ£Ή μΆμΆ μ€μ
μ κ·ννμμμ μνλ κ°μ μΆμΆνλ €λ©΄ κ΄νΈλ‘ κ·Έλ£Ήμ μ μ§μ ν΄μΌ ν©λλ€.
β μλͺ»λ μ¬μ© μ
SELECT REGEXP_EXTRACT(page_location, '/jobs/\d+')
β μ¬λ°λ₯Έ μ¬μ© μ
SELECT REGEXP_EXTRACT(page_location, r'/jobs/(\d+)') AS job_id
첫 λ²μ§Έ κ΄νΈλ‘ κ°μΌ κ·Έλ£Ήλ§ μΆμΆλ©λλ€.
r''
리ν°λ΄μ μ¬μ©νλ©΄ μ΄μ€μΌμ΄ν μ€λ₯λ μ€μΌ μ μμ΅λλ€.
5. ROW_NUMBER()
β νν°μ
λ λλ½ μ€μ
μ¬μ©μλ³ μ²« μ΄λ²€νΈλ₯Ό ꡬν λ μμ£Ό μ°λ ν¨μμ§λ§, PARTITION BY
λ₯Ό λλ½νλ©΄ μ λ°μ΄ν° κΈ°μ€μΌλ‘ μ λ ¬λ©λλ€.
β μλͺ»λ μ¬μ© μ
SELECT
user_pseudo_id,
event_timestamp,
ROW_NUMBER() OVER (ORDER BY event_timestamp) AS rn
FROM `project.dataset.events_*`
β μ¬λ°λ₯Έ μ¬μ© μ
SELECT *
FROM (
SELECT
user_pseudo_id,
event_timestamp,
ROW_NUMBER() OVER (PARTITION BY user_pseudo_id ORDER BY event_timestamp) AS rn
FROM `project.dataset.events_*`
)
WHERE rn = 1
μ μ λ³ μ²« νλμ ꡬν λ λ°λμ
PARTITION BY
λ₯Ό μ¬μ©ν΄μΌ ν©λλ€.
6. IFNULL()
κ³Ό COALESCE()
β ν¨μ μ©λ νΌλ
IFNULL()
μ λ κ°μ μΈμλ§ λ°μ μ μμΌλ©°, μ¬λ¬ λ체κ°μ΄ μμ λ COALESCE()
λ₯Ό μ¨μΌ ν©λλ€.
β μλͺ»λ μ¬μ© μ
SELECT IFNULL(event_params.value.int_value, 0, 1)
β μ¬λ°λ₯Έ μ¬μ© μ
-- NULLμ΄λ©΄ 0μΌλ‘ λ체
SELECT IFNULL(event_params.value.int_value, 0)
-- μ¬λ¬ λμ²΄κ° μ€ μ²« λ²μ§Έ NULLμ΄ μλ κ° λ°ν
SELECT COALESCE(NULL, NULL, 5, 10) -- κ²°κ³Ό: 5
λ§λ¬΄λ¦¬: GA4 BigQueryμμ μμ£Ό νλ μ€μ, μ΄λ κ² λ°©μ§νμΈμ
μ£Όμ ν¬μΈνΈ | μ€λͺ |
---|---|
λ°μ΄ν° νμ νμΈ | event_timestamp λ INT64 , λ°λμ TIMESTAMP_MICROS() λ‘ λ³ν νμ |
λ°°μ΄ λ°μ΄ν° μ²λ¦¬ | UNNEST() μ¬μ© μ νμ ν
μ΄λΈ λ³μΉκ³Ό ν¨κ» μ¬μ© |
μλ¬ λ°©μ§ν μΊμ€ν | CAST() λμ SAFE_CAST() |
λ μ§ vs νμμ€ν¬ν | DATE_DIFF() λ DATE νμ
, TIMESTAMP_DIFF() λ TIMESTAMP μ μ© |
μ΄μ GA4 BigQuery λ°μ΄ν°λ₯Ό λΆμν λ ν¨μ νλνλμ λ μμ κ°μ΄ μκΈ°μ ¨κΈΈ λ°λλλ€. 쿼리λ λ¨μν μ½λμ§λ§, ν΄μκ³Ό κ²°κ³Όλ μ ν λ€λ₯΄κ² λμ¬ μ μμΌλ, κΌΌκΌΌνκ² μμ±νλ μ΅κ΄μ΄ κ°μ₯ μ€μν©λλ€!
λ΅κΈ λ¨κΈ°κΈ°