๐Ÿ“

11. Wildcard Tables

ย 

11.1. Wildcard Table ๊ฐœ์š”

์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ”์€ BigQuery์—์„œ ํŠน๋ณ„ํžˆ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ, ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ํ•œ ๋ฒˆ์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. FROM์ ˆ์—์„œ ํŠน์ •ํ•œ ์ด๋ฆ„ ํŒจํ„ด์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ •ํ™•ํ•œ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋Œ€์‹  ํŒจํ„ด์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํŠนํžˆ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์— ๋‚˜๋ˆ ์ ธ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์กฐํšŒํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

11.1.1. Wildcard Table์˜ ์‚ฌ์šฉ

์ฆ‰, ํ…Œ์ด๋ธ” ์ด๋ฆ„์— ๊ณตํ†ต๋œ ๋ถ€๋ถ„์ด ์žˆ์„ ๋•Œ, ๊ทธ ๊ณตํ†ต๋œ ๋ถ€๋ถ„์˜ ํŒจํ„ด์„ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ํ•œ๊บผ๋ฒˆ์— ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค. ํŠน์ •ํ•œ ์ผ์ž ํŒจํ„ด์„ ๊ฐ€์ง„ ํ…Œ์ด๋ธ” ํ˜น์€ ํŠน์ • ์ ‘๋‘์‚ฌ๋ฅผ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”๋“ค์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์›”๊ฐ„ ๊ธฐ์‚ฌ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๋ธ”๋กœ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งค์›” ๊ฐ๊ฐ์˜ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
  • user_blog_202212 (2022๋…„ 12์›”)
  • user_blog_202301 (2023๋…„ 01์›”)
  • user_blog_202302 (2023๋…„ 02์›”)
  • user_blog_202303 (2023๋…„ 03์›”)
11์žฅ ์ด์ „์— ์†Œ๊ฐœํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ 2023๋…„์˜ ๋ชจ๋“  ์‚ฌ์šฉ์ž ๋ธ”๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•˜๋ ค๋ฉด ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ UNION์„ ํ†ตํ•ด ํ•ฉ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ BigQuery์˜ ์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋ชจ๋“  ์›”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ, 2023๋…„์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ณด๊ณ  ์‹ถ์„ ๋•Œ user_blog_2023*์ฒ˜๋Ÿผ Asterisk(๋ณ„ํ‘œ, *) ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๊ทธ ๋‹ฌ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 

11.1.2. ๋ฐ์ดํ„ฐ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

BigQuery์˜ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹ ์ค‘, Google Merchandise Store์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ํฌํ•จ๋œ Google Analytics Sample ๋ฐ์ดํ„ฐ์…‹์„ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  1. ํƒ์ƒ‰๊ธฐ์˜ โ€œ+์ถ”๊ฐ€โ€ ๋ฒ„ํŠผ ํด๋ฆญ ํ›„, ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    1. notion imagenotion image
      notion imagenotion image
      ย 
  1. โ€œgoogle analytics sampleโ€์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
    1. notion imagenotion image
      ย 
  1. ๋ฐ์ดํ„ฐ์„ธํŠธ ๋ณด๊ธฐ๋ฅผ ํด๋ฆญํ•˜์—ฌ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
notion imagenotion image
ย 
4. ๋ฐ์ดํ„ฐ์…‹ ๋‚ด ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ์™€ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ ๋“ฑ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ฟผ๋ฆฌ๋ฅผ ํ†ตํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
notion imagenotion image
ย 

11.1.3. Wildcard Table ๋ฌธ๋ฒ•

SELECT * FROM `<project-id>.<dataset-id>.<table-prefix>*` WHERE bool_expression
  • <project-id>: BigQuery์—์„œ ์‚ฌ์šฉ์ž์˜ ๋ฐ์ดํ„ฐ์™€ ๊ด€๋ จ ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ๊ณ ์œ ํ•œ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. GCP(Google Cloud Platform) ํ”„๋กœ์ ํŠธ์—๋Š” ๊ณ ์œ ํ•œ ID๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ด ID๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ๋‚˜ ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • <dataset-id>: ๋ฐ์ดํ„ฐ์…‹์˜ ์ด๋ฆ„ ๋˜๋Š” ๊ณ ์œ  ID์ž…๋‹ˆ๋‹ค.
  • <table-prefix>: ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ์ ‘๋‘์‚ฌ ๋˜๋Š” ํŒจํ„ด์„ ์ง€์ •ํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž '*'๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํŒจํ„ด์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • * (Wildcard Character): ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ๋™์‹œ์— ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์˜ ์ผ๋ถ€๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋กœ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์ด๋ฆ„์ด ํŠน์ • ํŒจํ„ด์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ๋™์‹œ์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. '*'๋Š” ํŠน์ˆ˜ ๋ฌธ์ž๋กœ ๊ฐ„์ฃผํ•˜๋ฏ€๋กœ ์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๋ฐฑํ‹ฑ(`) ๋ฌธ์ž๋กœ ๋ฌถ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ย 
BigQuery์˜ Google Merchandise Store ๋ฐ์ดํ„ฐ์…‹์„ ํ†ตํ•ด ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐ์ดํ„ฐ์…‹์€ ์›น์‚ฌ์ดํŠธ ํŠธ๋ž˜ํ”ฝ ์†Œ์Šค, ์ฝ˜ํ…์ธ  ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ฐ ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์ „์ž์ƒ๊ฑฐ๋ž˜ ์›น์‚ฌ์ดํŠธ์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์ž ํ™œ๋™์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋Š” 2016๋…„ 08์›” 01์ผ๋ถ€ํ„ฐ 2017๋…„ 08์›” 01์ผ๊นŒ์ง€ ์ด 1๋…„๊ฐ„์˜ ์ผ์ž๋ณ„ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๋ชจ๋‘ "ga_sessions_โ€๋ผ๋Š” prefix(์ ‘๋‘์–ด)๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. 2017๋…„ 01์›” 01์ผ์˜ ํ…Œ์ด๋ธ”์€ "bigquery-public-data.google_analytics_sample.ga_sessions_20170101"๊ณผ ๊ฐ™์ด ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ํ…Œ์ด๋ธ” ๊ทธ๋ฃน์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด FROM ๋ฌธ์—์„œ _TABLE_SUFFIX ๋‹ค์Œ์— ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž '*'๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ย 
Google Merchandise Store ๋ฐ์ดํ„ฐ์…‹์—์„œ 2017๋…„ 1์›” 1์ผ ์ž ํ…Œ์ด๋ธ”์ธ โ€œga_sessions_20170701โ€์—์„œ ๋ฐฉ๋ฌธ์ž ID, ๋‚ ์งœ, ๋ฐฉ๋ฌธ ํšŸ์ˆ˜๋ฅผ ์กฐํšŒํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
SELECT fullVisitorId, date, visitNumber, FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170701`;
notion imagenotion image
ย 
์กฐํšŒํ•œ ํ…Œ์ด๋ธ”์˜ ์ตœ์†Œ ๋‚ ์งœ์™€ ์ตœ๋Œ€ ๋‚ ์งœ๋ฅผ ์ถ”์ถœํ•ด ๋ณด๋ฉด ๋‹น์—ฐํžˆ 2017๋…„ 07์›” 01์ผ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WITH GA AS ( SELECT fullVisitorId, date, visitNumber, FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20170101` ) SELECT MIN(date) AS min_date , MAX(date) AS max_date FROM GA;
notion imagenotion image
ย 
์ด์ œ ์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด์„œ 2017๋…„ 7์›” ๋ชจ๋“  ์ผ์ž์˜ ํ…Œ์ด๋ธ”์„ ํ•œ ๋ฒˆ์— ์กฐํšŒํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฆ‰, FROM ์ ˆ์˜ ํ…Œ์ด๋ธ” ์ด๋ฆ„์ด โ€œga_sessions_20170101โ€์—์„œ โ€œga_sessions_201707*โ€๋กœ, ๋‚ ์งœ ๋ฒ”์œ„์ธ [1-31] ๋ถ€๋ถ„์„ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž์ธ โ€œ*โ€ ๊ธฐํ˜ธ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์กฐํšŒํ•œ ํ…Œ์ด๋ธ”์˜ ์ตœ์†Œ ๋‚ ์งœ์™€ ์ตœ๋Œ€ ๋‚ ์งœ๋ฅผ ์ถ”์ถœํ•˜๋ฉด 2017๋…„ 7์›” 01์ผ๋ถ€ํ„ฐ 2017๋…„ 7์›” 31์ผ์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WITH GA AS ( SELECT fullVisitorId , date , visitNumber FROM `bigquery-public-data.google_analytics_sample.ga_sessions_201707*` ) SELECT MIN(date) AS min_date , MAX(date) AS max_date FROM GA;
notion imagenotion image
ย 
์•„๋ž˜์˜ ์˜ˆ์‹œ์—์„œ๋Š” 2017๋…„ 7์›” ๋™์•ˆ์˜ ๋ฐฉ๋ฌธ์ž("fullVisitorId")์™€ ๋ฐฉ๋ฌธ ํšŸ์ˆ˜("visitCount")๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๋ฐฉ๋ฌธ ํšŸ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ์ƒ์œ„ 10๋ช…์˜ ๋ฐฉ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
SELECT fullVisitorId , COUNT(DISTINCT visitId) AS visitCount FROM `bigquery-public-data.google_analytics_sample.ga_sessions_201707*` GROUP BY fullVisitorId ORDER BY visitCount DESC LIMIT 10;
notion imagenotion image
ย 
์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•  ๋•Œ๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ์ ๋“ค์„ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  1. ์ฟผ๋ฆฌ ๋ฒ”์œ„ ์„ค์ •: ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” _TABLE_SUFFIX์™€ ๊ฐ™์€ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐํšŒํ•  ํ…Œ์ด๋ธ”์˜ ๋ฒ”์œ„๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐ์ดํ„ฐ์–‘๊ณผ ๋น„์šฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ๋น„์šฉ ๊ด€๋ฆฌ: ์™€์ผ๋“œ์นด๋“œ ์ฟผ๋ฆฌ๋Š” ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฟผ๋ฆฌ ๋น„์šฉ์ด ์ƒ์Šนํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BigQuery์˜ ๊ฐ€๊ฒฉ ์ •์ฑ…์„ ์ดํ•ดํ•˜๊ณ  ์ฟผ๋ฆฌ ์ „์— ์˜ˆ์ƒ ๋น„์šฉ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  1. ์„ฑ๋Šฅ ์ตœ์ ํ™”: ๊ฐ€๋Šฅํ•œ ํ•œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์Šค์บ”ํ•˜๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ์ •๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์Šค์บ”์€ ๋น„์šฉ ์ฆ๊ฐ€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ์ €ํ•˜๋กœ๋„ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  1. ํŒจํ„ด ์ผ์น˜: ์™€์ผ๋“œ์นด๋“œ๋Š” ๋งค์šฐ ์œ ์—ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ํ…Œ์ด๋ธ”์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๋งค์นญ๋˜๋Š” ํ…Œ์ด๋ธ” ๋ชฉ๋ก์„ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
ย 

11.2. ํ…Œ์ด๋ธ” ํ•„ํ„ฐ๋ง

11.2.1. _TABLE_SUFFIX

BigQuery ์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ”์—์„œ _TABLE_SUFFIX๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ” ์ค‘์—์„œ ํŠน์ •ํ•œ ํ…Œ์ด๋ธ”์„ ์„ ๋ณ„์ ์œผ๋กœ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ€์ƒ์˜ ์ปฌ๋Ÿผ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ƒ ์ปฌ๋Ÿผ์„ ํ™œ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”์˜ ์ ‘๋ฏธ์‚ฌ, ์ฆ‰ ์™€์ผ๋“œ์นด๋“œ์— ์˜ํ•ด ๋™์ ์œผ๋กœ ์„ ํƒ๋˜๋Š” ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ์ผ๋ถ€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฟผ๋ฆฌ์˜ ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ž๋™์œผ๋กœ ํ•ด๋‹น ๋ฒ”์œ„ ๋‚ด์˜ ํ…Œ์ด๋ธ”๋งŒ์„ ์Šค์บ”ํ•˜๊ฒŒ ๋˜๋ฏ€๋กœ, ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์Šค์บ”ํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Google Merchandise Store ๋ฐ์ดํ„ฐ์…‹์—์„œ 2017๋…„ 07์›”์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์Šค์บ”ํ•˜๋Š” ์ฟผ๋ฆฌ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_201707*`
ํ•ด๋‹น ํŒจํ„ด์—์„œ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž โ€˜*โ€™๋Š” 01๋ถ€ํ„ฐย 31๊นŒ์ง€์˜ ๋ฒ”์œ„์— ์žˆ๋Š” ๊ฐ’์ด๋ฉฐ, โ€ga_sessions_20170701โ€๋ถ€ํ„ฐย โ€ga_sessions_20170731โ€๊นŒ์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ 7์›” 10์ผ๋ถ€ํ„ฐ 7์›” 20์ผ๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋งŒ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, _TABLE_SUFFIX๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ WHERE _TABLE_SUFFIX BETWEEN '10' AND '20' ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ์ฟผ๋ฆฌ์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น WHERE ์ ˆ๊ณผ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์กฐํšŒํ•œ ํ…Œ์ด๋ธ”์˜ ์ตœ์†Œ ๋‚ ์งœ์™€ ์ตœ๋Œ€ ๋‚ ์งœ๋ฅผ ์ถ”์ถœํ•˜๋ฉด 2017๋…„ 7์›” 10์ผ๋ถ€ํ„ฐ 2017๋…„ 7์›” 20์ผ๊นŒ์ง€์ธ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
WITH GA AS ( SELECT fullVisitorId, date, visitNumber, FROM `bigquery-public-data.google_analytics_sample.ga_sessions_201707*` WHERE _TABLE_SUFFIX BETWEEN "10" AND "20" ) SELECT MIN(date) AS min_date , MAX(date) AS max_date FROM GA;
notion imagenotion image
ย 
์•„๋ž˜์˜ ์˜ˆ์‹œ๋Š” 2017๋…„ 07์›” 10์ผ์—์„œ 2017๋…„ 07์›” 20์ผ ์‚ฌ์ด์— ๊ฐ€์žฅ ๋งŽ์€ ๊ธˆ์•ก์„ ์ง€๋ถˆํ•œ ๊ณ ๊ฐ์˜ ์•„์ด๋””์™€ ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
SELECT fullVisitorId AS customer_id , MAX(totals.totalTransactionRevenue) AS max_revenue FROM `bigquery-public-data.google_analytics_sample.ga_sessions_201707*` WHERE _TABLE_SUFFIX BETWEEN '10' AND '20' AND totals.transactions IS NOT NULL GROUP BY customer_id ORDER BY max_revenue DESC LIMIT 1;
notion imagenotion image
ย 

11.2.2. ๋ชจ๋“  ํ…Œ์ด๋ธ” ์Šค์บ”

๋ฐ์ดํ„ฐ์…‹์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์Šค์บ”ํ•˜๋ ค๋ฉด prefix(์ ‘๋‘์–ด)๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์™€์ผ๋“œ์นด๋“œ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์–ด๋– ํ•œ ํŠน์ • ๋ฌธ์ž์—ด์ด ์—†๋Š” ์ƒํƒœ์—์„œ ์™€์ผ๋“œ์นด๋“œ ๋ฌธ์ž โ€œ*โ€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์˜ˆ์‹œ๋Š” Google Merchandise Store ๋ฐ์ดํ„ฐ์…‹์˜ ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค.
FROM `bigquery-public-data.google_analytics_sample.*`
ย 
์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ prefix(์ ‘๋‘์–ด)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์™€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋น„๊ตํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์ฟผ๋ฆฌ ๋ชจ๋‘ 2017๋…„ 7์›” 10์ผ์—์„œ 2017๋…„ 7์›” 20์ผ ์‚ฌ์ด์— ๊ฐ€์žฅ ๋งŽ์€ ๊ธˆ์•ก์„ ์ง€๋ถˆํ•œ ๊ณ ๊ฐ์˜ ์•„์ด๋””์™€ ๊ธˆ์•ก์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
Prefix(์ ‘๋‘์–ด)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์˜ˆ์‹œ์—์„œ๋Š” "ga_sessions_201707"์™€ ๊ฐ™์€ ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, WHERE ์ ˆ์—์„œ _TABLE_SUFFIX BETWEEN '10' AND '20'์™€ ๊ฐ™์€ ์กฐ๊ฑด์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ์›”์˜ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
๋ฐ˜๋ฉด์— prefix(์ ‘๋‘์–ด)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์˜ˆ์‹œ์—์„œ๋Š” ์ ‘๋‘์–ด๋ฅผ ๋”ฐ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ , WHERE ์ ˆ์—์„œ _TABLE_SUFFIX BETWEEN 'ga_sessions_20170710' AND 'ga_sessions_20170720'์™€ ๊ฐ™์ด ์ „์ฒด ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋‚ ์งœ ๋ฒ”์œ„์˜ ๋ฐ์ดํ„ฐ๋งŒ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ’ก
BigQuery ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด ๊ธด ํ”„๋ฆฌํ”ฝ์Šค๊ฐ€ ์งง์€ ํ”„๋ฆฌํ”ฝ์Šค๋ณด๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.
# Prefix ์‚ฌ์šฉ SELECT fullVisitorId AS customer_id , MAX(totals.totalTransactionRevenue) AS max_revenue FROM `bigquery-public-data.google_analytics_sample.ga_sessions_201707*` WHERE _TABLE_SUFFIX BETWEEN '10' AND '20' AND totals.transactions IS NOT NULL GROUP BY customer_id ORDER BY max_revenue DESC LIMIT 1; #----------------------------------------------------------------------------- # Prefix ๋ฏธ์‚ฌ์šฉ (๋นˆ ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ๋” ๋‚ฎ์Œ) SELECT fullVisitorId AS customer_id , MAX(totals.totalTransactionRevenue) AS max_revenue FROM `bigquery-public-data.google_analytics_sample.*` WHERE _TABLE_SUFFIX BETWEEN 'ga_sessions_20170710' AND 'ga_sessions_20170720' AND totals.transactions IS NOT NULL GROUP BY customer_id ORDER BY max_revenue DESC LIMIT 1;
notion imagenotion image