#2 - Z Chart Analysis
μμνκΈ° μ μ
κ·λͺ¨μλ 쿼리λ₯Ό μμ±νκΈ° μν΄μλ μΌκ΄λ μ½λ ꡬ쑰μ μ€νμΌμ μ μ§κ° μ€μνλ€. μ΄ κΈμ μμλ λ€μ BigQuery μ€νμΌ κ°μ΄λλ₯Ό μ°Έκ³ νκ³ μλ€.
BI λΆμ νΈμ¦μ¨
κΈ°μ μ 맀μΆκ³Ό κ°μ΄ μκ°μ κ²½κ³Όμ λ°λΌ λ³ννλ λ°μ΄ν°λ‘λΆν° κ³Όκ±° μ€μ μ΄λ μΆμ΄ λ±μ νμ νκ³ λ―Έλμ μ€μ μ μμΈ‘νκΈ° μν λͺ©μ μΌλ‘ μκ³μ΄ λΆμμ΄ νμ©λλ€.
μ΄λ² νΈμ¦μ¨μ μκ³μ΄ λΆμ κΈ°λ² μ€μ νλμΈ Z-Chart λΆμμ BigQuery μΈμ΄λ‘ μ§ννλ©° SQL νμ© λ₯λ ₯μ ν€μ°λ κ²μ λͺ©νλ‘ νλ€.
μλμ λ¨κ³λ³λ‘ Z-Chart λΆμμ μꡬλλ μ§νλ€μ μ°μΆνκ³ μκ°ννλ κ³Όμ μ λ°λΌκ° 보μ.
raw data --> data mart --> visualization
λ°μ΄ν° μ€λΉ
νΈμ¦μ¨μ μ¬μ©ν λ§€μΆ λ°μ΄ν°λ μλ μ°Έκ³ λμμμ 곡κ°ν λΆλ‘/μμ μμ€
λ₯Ό μ°Έκ³ νμ¬ BigQuery νκ²½μμ μ€μ΅ κ°λ₯νλλ‘ μ 리νμλ€.
[μ°Έκ³ λμ] λ°μ΄ν° λΆμμ μν SQL λ μνΌ - 4μ₯
λ§€μΆ λ°μ΄ν° λΆμ
1. μμ ν
μ΄λΈ μμ±
μ°μ μμ μμ€ μ€ 9-1-data.sql
μ μ΅μνμ λ³κ²½μΌλ‘ BigQuery ν
μ΄λΈλ‘ μμ±ν΄ 보λλ‘ νμ.
무λ£λ‘ μ¬μ©μ€μΈ GCP Project free tier μμ μμ 쿼리λ INSERT
λ¬Έμ μ¬μ©νμ§ λͺ»νλ€λ μλ¬λ₯Ό λλ €μ€λ€.
λ°°μμ κΈΈμ λ©κ³ λ ννλ€. μ΄μ© μ μλ€. μ½κ°μ κ³ κΈμ§ κΈ°λ₯μ μ¬μ©νμ¬ INSERT
κ°μ DML
λ¬Έμ μ¬μ©νμ§ μκ³ μμ ν
μ΄λΈμ λ§λ€μ΄ 보μ.
BigQuery Scriptingμ λ²μ© νλ‘κ·Έλλ° μΈμ΄μ²λΌ λ¬Έμ₯λ΄μμ λ³μλ₯Ό μ μΈνκ³ μ¬μ©ν μ μλλ‘ ν΄μ€λ€.
μ΄ κ°μ΄λ° DECLARE
λ λ³μλ₯Ό μ μΈνλ ꡬ문μΈλ° μ΄λ°κ² μꡬλ μ λλ‘ λμ΄κ°μ. BigQuery Scriptingμ λ³λμ λ¬Έλ² κ°μμμ λ€λ£° μμ μ΄λ€.
λ€λ§, λ°μ΄ν° νμμ΄ κ΅¬μ‘°μ²΄μ λ°°μ΄(Array of Struct)μΈ λ³μλ BigQueryλ΄μμ ν μ΄λΈκ³Ό κ±°μ λλ±νκ² λ€λ£¨μ΄μ§λ€λ κ²λ§ κΈ°μ΅ν΄ λλ©΄ μ’κ² λ€.
μλ κ·Έλ¦Όμμ λ°°μ΄μ κ° μμ(element)λ ν μ΄λΈμμ νλμ ν(row)μΌλ‘, κ° μμμ ν΄λΉνλ ꡬ쑰체λ 4κ°μ λ©€λ²μ κ°μ§λλ° ν μ΄λΈμ 컬λΌ(column)μΌλ‘ μκ°ν μ μλ€.
Nested Table μμ± μΏΌλ¦¬
DECLARE
ꡬ문μ ν΅ν΄μ purchase_log
λΌλ ꡬ쑰체 λ°°μ΄ λ³μλ₯Ό νλ μ μΈνμ. ꡬ쑰체λ ꡬ맀λ μ§
, μ£Όλ¬Έλ²νΈ
, μ¬μ©μμλ³μ
, ꡬ맀κΈμ‘
μ ν¬ν¨νλ λ μ½λμ΄λ€.
UNNEST()
ν¨μλ‘ κ΅¬μ‘°μ²΄ λ°°μ΄(Array of Struct)μ μμμΈ κ΅¬μ‘°μ²΄λ₯Ό κ°κ°μ ν(row)μΌλ‘ νμ΄λ΄κ³ , μ΄μ΄ ꡬ쑰체 μμ νλλ€μ dot operator
λλ member field access operator
(λ©€λ² μ κ·Ό μ°μ°μ) λΌκ³ λΆλ¦¬μ°λ νκΈ°λ²λ₯Ό ν΅ν΄μ μ΄(column)λ‘ λΆλ¦¬μν€λ©΄ μΌλ° ν
μ΄λΈμ SELECT
νλ κ²κ³Ό λμΌν κ²°κ³Όκ° λ§λ€μ΄μ§λ€.
μ FROM
μ μ UNNEST()
ꡬ문과 SELECT
μ μ log.*
νκΈ°μ μ£Όλͺ©νμ.
μ΄νμ CTAS(Create Table As Select) ꡬ문μΌλ‘ Nested Tableμ΄ BigQueryμ Permanant Tableμ΄ λλλ‘ λ§λ λ€.
μ΄μ λ°μ΄ν°κ° μ€λΉλμμΌλ λΆμμ μν λ€μ λ¨κ³λ‘ λμ΄κ°μ.
2. λ μ§λ³ λ§€μΆ μ§κ³
λ€μμΌλ‘ μμ λ§λ€μ΄μ§ ꡬ맀μ΄λ ₯ λ°μ΄ν°λ₯Ό νμνκ³ μ§κ³ν¨μ(aggregate function)μ λΆμν¨μ(analytic function)μ μ¬μ©νμ¬ λͺκ°μ§ μ§νλ€μ μ°μΆν΄ 보μ.
GROUP BY
μ μ§κ³ν¨μμ μ¬μ©νμ¬ λ μ§λ³ λ§€μΆ μ§νλ₯Ό μ°μΆνλ 쿼리λ λ€μκ³Ό κ°λ€.
dt
λ λ μ§λ₯Ό λνλ΄λ νλμ μ°¨μ(dimension)μ΄ λκ³ , COUNT()
, SUM()
, AVG()
μ§κ³ν¨μμ κ²°κ³Όλ€μ κ°κ° ν΄λΉ μ°¨μμμ κ΄μΈ‘λ κ°μΈ λ©νΈλ¦(metric)μ΄ λλ€.
쿼리 μνμ κ²°κ³Όλ₯Ό Explore Data (λ°μ΄ν° νμ)
λ₯Ό ν΅ν΄ Data Studioμμ κ°λ¨νκ² μκ°νλ₯Ό νλ©΄ λ€μκ³Ό κ°λ€.
3. μ΄λνκ· μ μ¬μ©ν λ μ§λ³ μΆμ΄
μμ μκ°νλ₯Ό ν΅ν΄μ μ£Όμ€κ³Ό μ£Όλ§μ λ§€μΆ μ°¨μ΄λ₯Ό νμΈν μ μλ€. μ΄μ μκ³μ΄ λ°μ΄ν°μ κ³μ μ±(seasonality)μ μνμν€κ³ μΆμΈλ₯Ό νμΈν μ μλλ‘ 7μΌ μ΄λνκ· μΌλ‘ ννν΄ λ³΄μ.
μ΄λ νκ· μ ꡬνκΈ° μν΄μλ λΆμν¨μ(λλ μλμ°ν¨μ)λ₯Ό νμλ‘ νλλ° μλ ꡬ문μ λκ° λ³΅μ‘νλ€.
AVG(SUM(purchase_amount)) OVER (ORDER BY dt ROWS 6 PRECEDING)
purchase_amount
λpurchase_log
ν μ΄λΈμ 컬λΌμΌκΉ μλλ©΄ μ§μ μAS purchase_amount
μ μν΄μ μλ‘ μ΄λ¦μ§μ΄μ§ λ³μΉ(alias)μΌκΉ? μ λ΅: ν μ΄λΈμ 컬λΌAVG(SUM(....))
μμ SUM()μ μ§κ³ν¨μμΌκΉ? λΆμν¨μμΌκΉ? μ λ΅: μ§κ³ν¨μAVG()
λ κ·ΈλΌ λ¬΄μ¨ ν¨μμΌκΉ? μ λ΅: λΆμν¨μ
SELECT
λ¬Έ(statment)μ μ΄λ£¨λ κ° μ (clause)μ ν΄μμμμ μ»¬λΌ μ΄λ¦μ ν΅μ©λ²μ(scope) λλ¬ΈμΈλ° 볡μ‘νλ μΌλ¨ λμ΄κ°μ. BigQuery λ¬Έλ² κ°μμμ μ΄κ²λ λ€λ€λ³΄λλ‘ νκ² λ€.
μ ꡬ문μ ν
μ΄λΈ μ 체λ₯Ό λ μ§λ³λ‘ μ€λ¦ μ°¨μμΌλ‘ μ λ ¬μν¨ νμ κ° νμ μ¬μ― λ²μ§Έ μ μ μμΉν νλΆν° νμ¬ νκΉμ§ 7μΌκ°μ SUM(purchase_amount)
κ°μ νκ· μ ꡬνλ ꡬ문μ΄λ€. μ¬κΈ°μ SUM(purchase_amount)
λ GROUP BY
μ μν΄μ λ¨Όμ κ³μ°λμ΄μ§λ λ μ§λ³ ꡬ맀μ‘μ ν΄λΉνλ€.
4. λΉμ λκ³ λ§€μΆ
Z Chart λΆμμμ μꡬνλ μ§νλ€μ ꡬνλ λ°©λ²λ€μ νλμ© μ΄ν΄λ³΄μ.
λ€μμ μΌλ³ λ§€μΆ λ°μ΄ν°κ° μ£Όμ΄μ‘μ λ ν΄λΉ μμ λκ³ λ§€μΆμ ꡬνλ 쿼리μ΄λ€.
μλμ° ν¨μ ꡬ문μμ PARTITION BY SUBSTR(dt, 1, 7)
μ μλμ° ν¨μκ° μ μ©λ νν°μ
μ μ λ¨μλ‘ λλλ€λ μλ―Έμ΄κ³ , ROWS UNBOUNDED PRECEDING
μ μ λ¨μλ‘ λλμ΄μ§ νν°μ
μ 첫λ²μ§Έ ν (맀μ 1μΌμ ν΄λΉ)λΆν° νμ¬ ν (맀μ νμ¬μΌ)κΉμ§ μλμ°λ₯Ό μ€μ νλ€. μ€μ λ μλμ°μ ν¬ν¨λ νλ€μ SUM()
λΆμν¨μλ₯Ό νΈμΆνκ² λλλ° μ¬κΈ°μλ μΌλ³ 맀μΆ(SUM(purchase_amount)
)μ λ€μ SUM()
λΆμν¨μλ‘ λκ³μν€κ³ μλ€.
5. μλ³ λ§€μΆμ μλλΉ(μλ
λλΉλΉμ¨)
μ§κΈκΉμ§ μ¬μ©ν λ°μ΄ν°λ μ΄νκ°μ λ§€μΆ μ€μ λ°μ΄ν°λ‘ μλ³ λ§€μΆ μΆμ΄λ₯Ό λΆμνκΈ°μλ λΆμ‘±νλ€.
λ€μμ 2014λ 1μλΆν° 2015λ 12μκΉμ§ λ§€μΆ λ°μ΄ν°λ‘ μ΄λ₯Ό μ¬μ©νμ¬ μλ³ λ§€μΆμ μλλΉλ₯Ό ꡬν΄λ³΄λλ‘ νμ.
μμ λ°μ΄ν°λ λμ λΆμμ μΈκΈν λμμ κ³΅κ° λ°μ΄ν°λ₯Ό μ¬μ©νμλ€.
μμ κ°μ΄ UNNEST
ν¨μμ λ©€λ²μ κ·Όμ°μ°μλ₯Ό μ¬μ©νμ¬ on-the-flyνκ² μ μλ nested tableμ BigQuery μꡬν
μ΄λΈλ‘ λ¨Όμ λ§λ λ€.
LAG(col, n)
λ€λΉκ²μ΄μ
ν¨μλ νν°μ
μ νμ¬ νμ κΈ°μ€μΌλ‘ nλ§νΌ μμ νμ col
κ°μ κ°μ Έμ¨λ€. λ°λΌμ LAG(purchase_amount, 12)
λ λ μ§μμΌλ‘ μ λ ¬λ μλ³ λ§€μΆμ‘ ν
μ΄λΈμμ μΌλ
μ μ 맀μΆμ‘μ λλ €μ£Όκ² λλ€. μ΄ κ°μΌλ‘ νμ¬ μ맀μΆμ‘μ λλκ² λλ©΄ μλλΉ(purchase_amount_rate
)κ° μ°μΆλλ€.
λͺΈνκΈ°λ₯Ό λ§μ³€μΌλ μ΄μ 본격μ μΌλ‘ Z-Chart λΆμμ λ€μ΄κ° 보λλ‘ νμ.
Z-Chart λΆμ
Z-Chart
λΆμμ μλ³λ§€μΆ
, (λ
)맀μΆλκ³
, μ΄λ(λ
κ°)ν©κ³
λΌλ 3κ°μ§ μ§νλ₯Ό κΊΎμμ κ·Έλνλ‘ λνλΈ κ²μΌλ‘ Z ννλ₯Ό μ΄λ£¬λ€ νμ¬ Z-Chart
λ‘ λΆλ¦°λ€.
κ²½μ λΆμμ΄λ λ§μΌν λΆμΌμμ μ λ³λμ΄λ κ³μ λ³λμ λ°°μ ν λ§€μΆ κ²½ν₯μ λΆμνκΈ° μν΄ μμ£Ό μ΄μ©λλ€. Z-Chart λΆμμ μν΄μλ μλ 3κ°μ§ μ§νκ° νμνλ€.
μλ³λ§€μΆ
맀μΆλκ³
μ΄λλ κ³
λ§€μΆ μ΄λ ₯ λ°μ΄ν°λ‘λΆν° κ°κ°μ μ§νλ₯Ό μ°μΆνλ κ³Όμ μ λ€μκ³Ό κ°λ€.
1. Z-Chart λΆμ 쿼리
μλ³λ§€μΆ
μ GROUP BY
μ§κ³λ₯Ό ν΅ν΄ μ½κ² κ³μ°λλ€. 맀μΆλκ³
μ μ΄λλ
κ³
λ μμ λͺΈνκΈ°μμ μ΄ν΄λ΄€λ μΌλ³ λ§€μΆ λκ³μ μ΄λνκ· λ₯Ό μ°μΆν λ μ¬μ©νλ λΆμν¨μ(μλμ°ν¨μ)λ₯Ό μ¬μ©νμ¬ μ°μΆ κ°λ₯νλ€.
μλμ° ν¨μλ₯Ό μ¬μ©ν λλ νμ νν°μ μ μ΄λ»κ² λλμ§, νν°μ μμμ μλμ°μ λ²μλ₯Ό μ΄λ»κ² μ‘μμ§λ₯Ό κ³ λ―Όν΄μΌ νλ€. μμ λ΄μ©μ λ°νμΌλ‘ κ°μ μκ°ν΄ 보μ.
2. Z-Chart λΆμ μκ°ν
μμμ μ°μΆν 3κ°μ§ μ§νλ€λ€μ λ§νΈννμ¬ BigQuery ν μ΄λΈλ‘ μμ±ν ν Data Studioμμ μκ°νλ₯Ό νλ©΄ μλμ κ°μ΄ Z μ λͺ¨μμ κ·Έλνκ° λ§λ€μ΄μ§λ€.
Last updated