Skip to content

joonp/gcp-bq-advanced-runtime-introduction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

30 Commits
ย 
ย 
ย 
ย 

Repository files navigation

SQL 2๋ฌธ์žฅ์œผ๋กœ ๋น…์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋–ก์ƒ์‹œํ‚ค๋Š” ๊ฟ€ํŒ(feat. advanced runtime)

Intro(์‹œ์ž‘ํ•˜๋ฉฐ...)

๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ๋น…์ฟผ๋ฆฌ(BigQuery)๋Š” 1998๋…„ ๊ตฌ๊ธ€ ์„ค๋ฆฝ ์ดํ›„๋กœ ๊ตฌ๊ธ€ ๋‚ด๋ถ€์—์„œ ์—ฐ๊ตฌ๊ฐœ๋ฐœ๋œ ๋ชจ๋“  ๊ธฐ์ˆ ์ด ์ง‘์•ฝ๋˜์–ด ์žˆ๋Š” ๋งค์šฐ ๊ณ ๋„ํ™”๋œ ํ”„๋กœ๋•ํŠธ๋ผ๊ณ  ๋งํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น…์ฟผ๋ฆฌ๋Š” ์•„๋ž˜์˜ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ† ๋ฆฌ์ง€์™€ ์ปดํ“จํŒ… ๋…ธ๋“œ๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ , ๊ฐ๊ฐ์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅํ• ์ˆ˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ํŽ˜ํƒ€๋ฐ”์ดํŠธ ์Šค์ผ€์ผ ์„œ๋ฒ„๋ฆฌ์Šค ๋ฐ์ดํ„ฐ์›จ์–ดํ•˜์šฐ์Šค(Petabyte Scale Serverless Data Warehouse) ์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ์— ์†Œ๊ฐœํ•  Advanced Runtime์€ ๋น…์ฟผ๋ฆฌ์˜ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์˜ ์ง‘ํ•ฉ์ฒด์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ์กด ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์Šคํ‚ค๋งˆ๋‚˜ ์ฟผ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์ „ํ˜€ ์—†์œผ๋ฉฐ, ๋น…์ฟผ๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ์ ๊ฒฉํ•œ ์ฟผ๋ฆฌ์— ์ ์šฉํ•˜์—ฌ์„œ ์„ฑ๋Šฅ์„ ๊ฐ€์†ํ™” ํ• ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ธฐ๋Šฅ์€ ํฌ๊ฒŒ Enhanced Vectorization, Short Query Optimization ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ง‘๋‹ˆ๋‹ค.

  • Enhanced Vectorization : ๋ฒกํ„ฐํ™”๋œ ๋Ÿฐํƒ€์ž„์„ ํ†ตํ•˜์—ฌ ์กฐ์ธ(Join)๊ณผ ์–ด๊ทธ๋ฆฌ๊ฒŒ์ด์…˜(Aggregation) ์ตœ์ ํ™”
  • Short Query Optimization: ์…”ํ”Œ ๋ฐ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์—ฌ์„œ ์ˆ์ฟผ๋ฆฌ(Short Query) ์ตœ์ ํ™”

1. Enhanced Vectorization: ๋ฒกํ„ฐํ™”๋ฅผ ํ†ตํ•œ ์ฐจ์„ธ๋Œ€ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ธฐ์ˆ 

๋ฒกํ„ฐํ™”(Vectorization)๋Š” ๊ณผ๊ฑฐ์˜ CPU๊ฐ€ ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค์นผ๋ผ(Scalar) ๋ฐฉ์‹์ด ์•„๋‹Œ, SIMD(Single Instruction Multiple Data) ๊ธฐ์ˆ ์„ ํ†ตํ•˜์—ฌ ํ•œ๋ฒˆ์˜ ๋ช…๋ น์–ด๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

์Šค์นผ๋ผ ๋ฐฉ์‹์€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ• ๋•Œ ํ–‰๋‹จ์œ„(row-by-row)๋ฐฉ์‹์œผ๋กœ ์ฟผ๋ฆฌ ์—”์ง„์ด ํ•˜๋‚˜์˜ ํ–‰(row)์„ ์ฝ๊ณ , ํ•ด๋‹น ํ–‰(row)์˜ ์—ฐ์‚ฐ์„ ๋งˆ์นœํ›„ ๋‹ค์Œ ํ–‰(row)์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ตฌ์กฐ๋กœ์„œ, ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ํšจ์œจ์ด ๋งค์šฐ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

๋ฐ˜๋ฉด, ๋ฒกํ„ฐํ™”๋Š” ์—ฌ๋Ÿฌ ํ–‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฌถ์–ด์„œ ๋ฒกํ„ฐ(Vector)ํ˜•ํƒœ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•œ๋ฒˆ์— ๋ฌถ์ธ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•˜์—ฌ ์ฟผ๋ฆฌ ์—”์ง„์—์„œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, ๋น…์ฟผ๋ฆฌ์˜ ๋ฒกํ„ฐํ™”๋œ ์ฟผ๋ฆฌ ์‹คํ–‰(Vectorized a query execution)์€ CPU ์บ์‹œ ํฌ๊ธฐ์˜ ๋ธ”๋ก ๋‹จ์œ„๋กœ ์ปฌ๋Ÿผํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ๋ฒˆ์— ์ฒ˜๋ฆฌ(SIMD(Single Instruction Multiple Data)ํ•˜์—ฌ ํšจ์œจ์„ ๋†’์ด๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ถ”๊ฐ€๋กœ, ๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ ์ตœ์ ํ™”(Data-encoding-enabled optimizations), ํ‘œํ˜„์‹ ํด๋”ฉ(Expression Folding), ๊ณตํ†ต ํ•˜์œ„ ํ‘œํ˜„์‹ ์ œ๊ฑฐ(Common Subexpression Elimination), ๋ณ‘๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ์กฐ์ธ ๋ฐ ์ง‘๊ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Parallelizable join and aggregation algorithms) ๋“ฑ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฟผ๋ฆฌ์ฒ˜๋ฆฌ์— ๋ฒกํ„ฐํ™”(Vectorization)๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์ง์ ‘ ์ฒ˜๋ฆฌ: ๋ฐฑ๋งŒ๊ฐœ์˜ ํ–‰์— ๋‹จ 3๊ฐœ์˜ ๊ณ ์œ  ๊ฐ’(sedan, wagon, suv)๋งŒ ์กด์žฌํ•˜๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค๋ฉด, ๋”•์…”๋„ˆ๋ฆฌ ์ธ์ฝ”๋”ฉ์„ ํ†ตํ•˜์—ฌ 3๊ฐœ๊ฐ’๋งŒ ์ €์žฅํ•˜๊ณ , ๊ฐ ํ–‰์—๋Š” ์ž‘์€ ์ •์ˆ˜ ID(0, 1, 2)๋งŒ ํ• ๋‹นํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ €์žฅ ์šฉ๋Ÿ‰ ์ ˆ๊ฐ ํšจ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ–ฅ์ƒ๋œ ๋ฒกํ„ฐํ™”(Enhanced Vectorization)๋Š” ํ•ด๋‹น ์ธ์ฝ”๋”ฉ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ’€์ง€(๋””์ฝ”๋”ฉ) ์•Š๊ณ  ์ง์ ‘ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ค‘๋ณต ๊ณ„์‚ฐ์„ ์›์ฒœ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ณ , ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ ์šฉ๋Ÿ‰์ด ์ค„๊ธฐ ๋•Œ๋ฌธ์— ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ๊ทน์ ์œผ๋กœ ํ–ฅ์ƒ ์‹œํ‚ฌ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

  • ํ‘œํ˜„์‹ ํด๋”ฉ(Expression Folding): ํ‘œํ˜„์‹ ํด๋”ฉ์€ ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ์ ์— ๊ณ„์‚ฐํ•  ํ•„์š” ์—†์ด, ๊ณ„ํš(plan) ๋‹จ๊ณ„์—์„œ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์‹์„ ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋น…์ฟผ๋ฆฌ๋Š” ๊ณ„ํš๋‹จ๊ณ„์—์„œ ์ฟผ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ ๋™์ผํ•œ ํ‘œํ˜„์‹์„ ์ฐพ์•„๋‚ด๊ณ  ์ด๋ฅผ ์ƒ์ˆ˜๊ฐ’์œผ๋กœ ์ ‘์–ด์„œ(fold) ์ฟผ๋ฆฌ ์ž์ฒด๋ฅผ ๋‹จ์ˆœํ™” ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฟผ๋ฆฌ์—์„œ sales_price ์— 1.1์„ ๊ณฑํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ์— ๋‹ค์‹œ 1.05๋ฅผ ๊ณฑํ•˜๋Š” ๋‘๋ฒˆ์˜ ์—ฐ์‚ฐ์ด ์žˆ๋‹ค๋ฉด, ํ‘œํ˜„์‹ ํด๋”ฉ์„ ์ ์šฉํ•˜์—ฌ 1.1 * 1.05 ๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ 1.155 ๋ผ๋Š” ์ƒ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์–ป์–ด์„œ, ํ–ฅํ›„ sales_price * 1.55 ๋‹จ์ผ ์—ฐ์‚ฐ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด์ฒ˜๋Ÿผ ํ‘œํ˜„์‹ ํด๋”ฉ์€ ์ฟผ๋ฆฌ ๊ณ„ํš ๋‹จ๊ณ„์—์„œ ์ƒ์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•˜์—ฌ ์‹คํ–‰ ์‹œ์ ์— ํ•„์š”ํ•œ ์—ฐ์‚ฐ์˜ ์–‘์„ ์ค„์—ฌ ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ๋น…์ฟผ๋ฆฌ ์Šฌ๋กฏ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    ## Expression Folding example
    SELECT
      (sale_price * 1.1) * 1.05 AS final_price
    FROM
      `sales_data`;
  • ๊ณตํ†ต ํ•˜์œ„ ํ‘œํ˜„์‹ ์ œ๊ฑฐ(Common Subexpression Elimination): ๊ณตํ†ต ํ•˜์œ„ ํ‘œํ˜„์‹ ์ œ๊ฑฐ๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰์‹œ ์—ฌ๋Ÿฌ๊ณณ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋™์ผํ•œ ํ‘œํ˜„์‹(Common Subexpression)์„ ํ•œ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜๋„๋ก ํ•˜๋Š” ์ตœ์ ํ™”๋œ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฟผ๋ฆฌ์—์„œ sale_price + tax_amount ๋ผ๋Š” ํ‘œํ˜„์‹์ด subtotal ๊ณผ discounted_subtotal ๋‘๊ณณ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณตํ†ต ํ•˜์œ„ ํ‘œํ˜„์‹ ์ œ๊ฑฐ๋ฅผ ์ ์šฉํ•˜๋ฉด sales_price + tax_amount ๋ฅผ ํ•œ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ž„์‹œ ๋ณ€์ˆ˜๋‚˜ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•˜๊ณ , ์ €์žฅ๋œ ๊ฒฐ๊ณผ๋ฅผ subtotal ๊ณผ discounted_subtotal ๊ณ„์‚ฐ์— ์žฌ์‚ฌ์šฉ(์ˆ˜ํ•™์— โ€œ์น˜ํ™˜โ€์„ ์ƒ๊ฐํ•˜์‹œ๋ฉด ํŽธํ•ฉ๋‹ˆ๋‹ค =p)ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๊ธฐ์ˆ ์€ ๋ณต์žกํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด๋‚˜ ์—ฐ์‚ฐ์ด ๋งŽ์€ ์ฟผ๋ฆฌ์—์„œ ๋น›์„ ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ณ„์‚ฐ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ค๊ณ , ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ ๋‚ญ๋น„๋ฅผ ์—†์• ์ค๋‹ˆ๋‹ค.

    ## Common Subexpression Elimination example
    SELECT
      (sale_price + tax_amount) AS subtotal,
      (sale_price + tax_amount) * discount_rate AS discounted_subtotal
    FROM
      `sales_data`;
  • ๋ณ‘๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ์กฐ์ธ ๋ฐ ์ง‘๊ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜(Parallelizable join and aggregation algorithms): ์กฐ์ธ์€ ์„œ๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํŠน์ • ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค. ํ•ด์‹œ ์กฐ์ธ(Hash Join)์˜ ๊ฒฝ์šฐ์—๋Š” ๋นŒ๋“œ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํ•ด์‹œ ํ…Œ์ด๋ธ”๋กœ ๋งŒ๋“ค๊ณ , ํ”„๋กœ๋ธŒ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์œผ๋ฉฐ ํ•ด์‹œ ํ…Œ์ด๋ธ”์„ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋ณ‘๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ์กฐ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ง‘๊ณ„๋Š” SUM, COUNT, AVG ์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ํ–‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃน๋ณ„๋กœ ์š”์•ฝํ•˜๋Š” ์—ฐ์‚ฐ์ด๋ฉฐ, ๋ณ‘๋ ฌํ™” ๊ฐ€๋Šฅํ•œ ์ง‘๊ณ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด๋Ÿฌํ•œ ์ง‘๊ณ„ ๊ณผ์ •์„ ๋กœ์ปฌ ์ง‘๊ณ„(Local Aggregation)์—์„œ ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ ์„œ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ๊ณ„์‚ฐ(๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ)ํ•˜๊ณ , ์ดํ›„ ์ „์—ญ ์ง‘๊ณ„(Global Aggregation)์—์„œ ๋กœ์ปฌ ์ง‘๊ณ„ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์‚ฐํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ฐฉ์‹์„ ํ†ตํ•ด์„œ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์ž์‹ ์ด ๋งก์€ ๋กœ์ปฌ ์ง‘๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋งˆ์ง€๋ง‰์— ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ•ฉ์ณ์„œ ์ „์ฒด๋ฅผ ์ง‘๊ณ„ ํ•˜๋ฏ€๋กœ ์—ฐ์‚ฐ ์†๋„๊ฐ€ ๋งค์šฐ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค.

    ๊ฒฐ๋ก ์ ์œผ๋กœ, Dremel ์—”์ง„์˜ ๋ฆฌํ”„ ๋…ธ๋“œ(Leaf Nodes)์—์„œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ(Multi Threads)๋ฅผ ํ™œ์šฉํ•˜์—ฌ, ์กฐ์ธ ํ•ด์‹œ ํ…Œ์ด๋ธ” ๋นŒ๋“œ ๋ฐ ํ”„๋กœ๋ธŒ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ , ์ง‘๊ณ„ ์‹œ์—๋Š” ๋กœ์ปฌ ๋ฐ ์ „์—ญ ์ง‘๊ณ„๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜์—ฌ, ์ฟผ๋ฆฌ ์‹คํ–‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ ๋˜๋ฉฐ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋ถ„์„ ์ž‘์—…์˜ ํšจ์œจ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•  ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

2 . Short Query Optimization: ์งง์€ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•œ ํ˜์‹ 

์งง์€ ์ฟผ๋ฆฌ ์ตœ์ ํ™”(Short Query Optimization)๋Š” ๋Œ€์‹œ๋ณด๋“œ์™€ ๊ฐ™์€ BI(Business Intelligence) ๋„๊ตฌ์—์„œ ์ƒ์„ฑ๋˜๋Š” ์งง๊ณ  ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ๋“ค์„ ๊ทน์ ์œผ๋กœ ๊ฐ€์†ํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋น…์ฟผ๋ฆฌ๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ๋‹จ๊ณ„(stage)๋กœ ๋‚˜๋ˆ„์–ด ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์งง๊ณ  ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋‹ค๋‹จ๊ณ„ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๊ฑด๋„ˆ ๋›ฐ๊ณ , ๋‹จ์ผ์˜ ํšจ์œจ์ ์ธ ๋‹จ๊ณ„(single stage)๋กœ ํ†ตํ•ฉํ•˜์—ฌ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•˜์—ฌ, ๋ฐ์ดํ„ฐ ์…”ํ”Œ๋ง ๋ฐ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์—ฌ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์งง์€ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์…”ํ”Œ(shuffle)์ด ์•„์˜ˆ ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์…”ํ”Œ์€ ์—ฌ์ „ํžˆ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๊ทธ ์–‘๊ณผ ํšŸ์ˆ˜๊ฐ€ ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์—ฌ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

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

๋น…์ฟผ๋ฆฌ๋ฅผ ์•„๋ž˜์˜ ์š”์†Œ๋“ค์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ, Short Query Optimization ์„ ์ ์šฉํ• ์ง€์— ๋Œ€ํ•˜์—ฌ ์ž๋™์œผ๋กœ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ์˜ˆ์ƒ ๋ฐ์ดํ„ฐ ์Šค์บ”์šฉ๋Ÿ‰(The estimated amount of data to be read)
  • ํ•„ํ„ฐ์˜ ๋ฐ์ดํ„ฐ ๊ฐ์†Œ ํšจ์œจ์„ฑ(How effectively the filters are reducing the data size)
  • ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ €์žฅ ๋ฐฉ์‹ ๋ฐ ์œ ํ˜•(The type and physical arrangement of the data in storage)
  • ์ „์ฒด์ ์ธ ์ฟผ๋ฆฌ ๊ตฌ์กฐ(The overall query structure)
  • ๊ณผ๊ฑฐ ์ฟผ๋ฆฌ ์‹คํ–‰ ํ†ต๊ณ„(The runtime statistics of pas query executions)

3 . ํ•ธ์ฆˆ์˜จ ํŠœํ† ๋ฆฌ์–ผ(Hands-on Tutorial)

ํ•ธ์ฆˆ์˜จ ํŠœํ† ๋ฆฌ์–ผ์„ ํ†ตํ•˜์—ฌ ๊ตฌ๊ธ€ ํด๋ผ์šฐ๋“œ ํ”„๋กœ์ ํŠธ ๋ ˆ๋ฒจ์—์„œ Advanced Runtime ๊ธฐ๋Šฅ์„ enable ์‹œํ‚ค๊ณ , ์ƒ˜ํ”Œ ์ฟผ๋ฆฌ๋ฌธ์„ ํ†ตํ•˜์—ฌ ์‹ค์ œ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์ด ์–ผ๋งˆ๋‚˜ ํ–ฅ์ƒ ๋˜์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๋น…์ฟผ๋ฆฌ์˜ ์Šฌ๋กฏ(slot)์‚ฌ์šฉ๋Ÿ‰์ด ์–ผ๋งˆ๋‚˜ ์ค„์—ˆ๋Š”์ง€์— ๋Œ€ํ•˜์—ฌ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰์‹œ์—๋Š” ๊ฒฐ๊ณผ ๋น„๊ต๋ฅผ ์œ„ํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ Query Settings ์—์„œ โ€œUse cached resultsโ€๋ฅผ ์ฒดํฌ ํ•ด์ œํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

  • BigQuery Advanced Runtime ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”(2025๋…„ 9์›” 3์ผ ๊ธฐ์ค€์œผ๋กœ, ํ•ด๋‹น ๊ธฐ๋Šฅ์€ Public Preview ์ƒํƒœ์ด๋ฉฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ disable ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค)

    ## ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ์˜ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ์…‹์˜ ๋ฆฌ์ „์œผ๋กœ ๋ณ€๊ฒฝ: `[dataset-region].query_runtime`
    ## ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋น…์ฟผ๋ฆฌ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์ง„ํ–‰ `region-us`
    ALTER PROJECT `[your-project-id]`
    SET OPTIONS (  
        `region-us.query_runtime` = 'advanced'
    );
  • BigQuery Advanced Runtime ๊ธฐ๋Šฅ ํ™œ์„ฑํ™” ์ƒํƒœ ํ™•์ธ

    • ์ธํฌ๋ฉ”์ด์…˜ ์Šคํ‚ค๋งˆ๋ฅผ ํ†ตํ•˜์—ฌ ํ™œ์„ฑํ™” ์ƒํƒœ ํ™•์ธ ๊ฐ€๋Šฅ(์ƒํƒœ ๋ณ€๊ฒฝํ›„ ์ธํฌ๋ฉ”์ด์…˜ ์Šคํ‚ค๋งˆ ๋ฐ˜์˜๊นŒ์ง€๋Š” ์ตœ๋Œ€ 15์ดˆ ์†Œ์š”)
    SELECT option_name, option_value
    FROM `region-us`.INFORMATION_SCHEMA.PROJECT_OPTIONS;
    • ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ(results)์—์„œ option_name(query_runtime), option_value(ADVANCED) ๋กœ ๋‚˜์˜ค๋ฉด ํ™œ์„ฑํ™”(enable)๋œ ์ƒํƒœ

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

  • ๋น…์ฟผ๋ฆฌ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์— ์กด์žฌํ•˜๋Š” ์ƒ˜ํ”Œ ํ…Œ์ด๋ธ”์—์„œ ํ…Œ์ŠคํŠธ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰
    • ํŠœํ† ๋ฆฌ์–ผ์—์„œ ์‚ฌ์šฉํ•  ๋ฐ๋ชจ ์ฟผ๋ฆฌ๋Š” ์ „์ž์ƒ๊ฑฐ๋ž˜(e-commerce) ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•˜์—ฌ ์–ด๋–ค ์ƒํ’ˆ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์–ด๋А ๋ฌผ๋ฅ˜์„ผํ„ฐ์—์„œ, ์–ด๋А ๊ตญ๊ฐ€์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ ธ๋Š”์ง€๋ฅผ ๋ถ„์„ํ•˜๋Š” ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฟผ๋ฆฌ๋Š” orders(์ฃผ๋ฌธ), products(์ƒํ’ˆ) ๋“ฑ์˜ ์ด 6๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜์—ฌ, WHERE ์ ˆ์—์„œ ๋ช…์‹œํ•œ ์นผ๋Ÿผ(order_id, product_id ๋“ฑ) ๊ธฐ์ค€์œผ๋กœ, GROUP BY ๊ตฌ๋ฌธ์„ ํ†ตํ•˜์—ฌ ๊ทธ๋ฃนํ™”์—ฌ ํ•ด๋‹น ์ปฌ๋Ÿผ์˜ ๊ฐ’์„ ์ง‘๊ณ„(COUNT, AVG, SUM)ํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ total_sales_amount ๊ธฐ์ค€์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ(DESC)์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์ฟผ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฟผ๋ฆฌ ์ˆ˜ํ–‰์„ ํ†ตํ•˜์—ฌ ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ฒฐ๊ณผ(๊ฒฝ๊ณผ ์‹œ๊ฐ„, ์‚ฌ์šฉ๋œ ์Šฌ๋กฏ ์‹œ๊ฐ„, ์…”ํ”Œ๋œ ๋ฐ”์ดํŠธ ์šฉ๋Ÿ‰)์— ๋Œ€ํ•ด์„œ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
    • ํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰์‹œ์—๋Š” ๊ฒฐ๊ณผ ๋น„๊ต๋ฅผ ์œ„ํ•˜์—ฌ ๋ฐ˜๋“œ์‹œ Query Settings ์—์„œ Use cached results๋ฅผ ์ฒดํฌ ํ•ด์ œํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
 SELECT
 	p.category,
 	dc.name AS distribution_center_name,
 	u.country AS user_country,
 	SUM(oi.sale_price) AS total_sales_amount,
 	COUNT(DISTINCT o.order_id) AS total_unique_orders,
 	COUNT(DISTINCT o.user_id) AS total_unique_customers_who_ordered,
 	AVG(oi.sale_price) AS average_item_sale_price,
 	SUM(CASE WHEN oi.status = 'Complete' THEN 1 ELSE 0 END) AS completed_order_items_count,
 	COUNT(DISTINCT p.id) AS total_unique_products_sold,
 	COUNT(DISTINCT ii.id) AS total_unique_inventory_items_sold
 FROM
 	`bigquery-public-data.thelook_ecommerce.orders` AS o,
 	`bigquery-public-data.thelook_ecommerce.order_items` AS oi,
 	`bigquery-public-data.thelook_ecommerce.products` AS p,
 	`bigquery-public-data.thelook_ecommerce.inventory_items` AS ii,
 	`bigquery-public-data.thelook_ecommerce.distribution_centers` AS dc,
 	`bigquery-public-data.thelook_ecommerce.users` AS u
 WHERE
 	o.order_id = oi.order_id AND oi.product_id = p.id AND ii.product_distribution_center_id = dc.id AND oi.inventory_item_id = ii.id AND o.user_id = u.id
 GROUP BY
 	p.category,
 	dc.name,
 	u.country
 ORDER BY
 	total_sales_amount DESC
 LIMIT 1000;
  • Advanced Runtime ํ™œ์„ฑํ™”(enable) ์ƒํƒœ์—์„œ์˜ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

  • BigQuery Advanced Runtime ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™”

    ## ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ์ฟผ๋ฆฌ์˜ ๋Œ€์ƒ ๋ฐ์ดํ„ฐ์…‹์˜ ๋ฆฌ์ „์œผ๋กœ ๋ณ€๊ฒฝ: `[dataset-region].query_runtime`
    ## ํŠœํ† ๋ฆฌ์–ผ์—์„œ๋Š” ๋น…์ฟผ๋ฆฌ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ ์ง„ํ–‰ `region-us`
    ALTER PROJECT `[your-project-id]`
    SET OPTIONS (  
        `region-us.query_runtime` = null
    );
  • BigQuery Advanced Runtime ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ ํ™•์ธ

    • ์ธํฌ๋ฉ”์ด์…˜ ์Šคํ‚ค๋งˆ๋ฅผ ํ†ตํ•˜์—ฌ ํ™œ์„ฑํ™” ์ƒํƒœ ํ™•์ธ ๊ฐ€๋Šฅ, ์ƒํƒœ ๋ณ€๊ฒฝํ›„ ์ธํฌ๋ฉ”์ด์…˜ ์Šคํ‚ค๋งˆ ๋ฐ˜์˜๊นŒ์ง€๋Š” ์ตœ๋Œ€ 15์ดˆ ์†Œ์š”
    SELECT option_name, option_value
    FROM `region-us`.INFORMATION_SCHEMA.PROJECT_OPTIONS;
    • ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ(Results)๋‚ด์—ญ์— There is no data to display. ๋กœ ๋‚˜์˜ค๋ฉด ๋น„ํ™œ์„ฑํ™”(disable) ์ƒํƒœ

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

  • Advanced Runtime ๋น„ํ™œ์„ฑํ™”(disable) ์ƒํƒœ์—์„œ์˜ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ
    • ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ์—์„œ ํ…Œ์ŠคํŠธ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰์‹œ์—๋Š” ๋ฐ˜๋“œ์‹œ Query Settings ์—์„œ Use cached results๋ฅผ ์ฒดํฌ ํ•ด์ œํ•˜์—ฌ ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

  • Advance Runtime ํ™œ์„ฑํ™” ์—ฌ๋ถ€(enable/disable)์— ๋”ฐ๋ฅธ ์„ฑ๋Šฅ ๋น„๊ต ๊ฒฐ๊ณผ

Screenshot 2024-07-28 at 4 21 13โ€ฏPM

๋น…์ฟผ๋ฆฌ์˜ Advanced Runtime ๊ธฐ๋Šฅ์„ ๋น„ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ(์ขŒ์ธก)์—์„œ๋Š” ์ฟผ๋ฆฌ ์‹คํ–‰์‹œ๊ฐ„์ด 1์ดˆ ์ด์ƒ์ด๋ฉฐ, ์•ฝ20์Šฌ๋กฏ/์ดˆ๊ฐ€ ์†Œ๋ชจ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ทธ๋ž˜ํ”„(Execution Graph) ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ์กฐ์ธ(Join) ๋‹จ๊ณ„์™€ ์ง‘๊ณ„(Aggregation) ๋‹จ๊ณ„์—์„œ ๋งŽ์€ ์‹œ๊ฐ„์ด ์†Œ์š” ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๊ธฐ๋Šฅ์„ ํ™œ์„ฑํ™”ํ•œ ์ƒํƒœ(์šฐ์ธก)์—์„œ๋Š” 50๋ฐฐ ์ด์ƒ ์ ์€ ์Šฌ๋กฏ์„ ์†Œ๋ชจํ•˜๋ฉด์„œ, ์ฟผ๋ฆฌ์ˆ˜ํ–‰์‹œ๊ฐ„์€ 0.5์ดˆ๋งŒ์— ์™„๋ฃŒ๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Advanced Runtime ๊ธฐ๋Šฅ ํ™œ์„ฑํ™”๋ฅผ ํ†ตํ•˜์—ฌ ๋น…์ฟผ๋ฆฌ ์‚ฌ์šฉ์ž๋Š” ๋”์šฑ ๋น ๋ฅธ ์ฟผ๋ฆฌ ์‘๋‹ต์‹œ๊ฐ„์„ ๊ธฐ๋Œ€ํ• ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉฐ, ์ถ”๊ฐ€๋กœ ์Šฌ๋กฏ ์†Œ๋ชจ๋Ÿ‰์ด ์ค„์–ด ๋“ค์–ด ์Šฌ๋กฏ ์š”๊ธˆ์— ๋Œ€ํ•œ ์ ˆ๊ฐ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Outro(๋งˆ์น˜๋ฉฐ..)

๋น…์ฟผ๋ฆฌ์˜ ์žฅ์ ์€ ์„œ๋ฒ„๋ฆฌ์Šค(Serveless), ์ปดํ“จํŒ…๊ณผ ์Šคํ† ๋ฆฌ์ง€ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ถ„๋ฆฌ(Storage and Compute Separation ), ํŽ˜ํƒ€ ๋ฐ”์ดํŠธ ์Šค์ผ€์ผ(Petabyte Scale), BQML(๋น…์ฟผ๋ฆฌ ๋จธ์‹ ๋Ÿฌ๋‹) , Data Security and Governance(๋ฐ์ดํ„ฐ ๋ณด์•ˆ ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค) ๋“ฑ๊ณผ ๊ฐ™์ด ๋งŽ์ด ์žˆ์ง€๋งŒ, ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘์— ํ•˜๋‚˜๋Š” ๋ฐ”๋กœ ๋น…์ฟผ๋ฆฌ ์Šค์Šค๋กœ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ž…(SQL์ฟผ๋ฆฌ๋‚˜ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ) ์—†์ด ์ž๋™์œผ๋กœ ์ฟผ๋ฆฌ ํผํฌ๋จผ์Šค ํ–ฅ์ƒ์„ ์œ„ํ•œ ์ง„ํ™”(Self Performance Tuning)๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹๊นŒ ๊ฐœ์ธ์ ์œผ๋กœ ์ƒ๊ฐ์ด ๋ฉ๋‹ˆ๋‹ค. ๋๊นŒ์ง€ ์ฝ์–ด ์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. by Joon Park

์ฐธ๊ณ ์ž๋ฃŒ