TL;DR

  • ํŒŒ์ผ์€ ์›๋ž˜ ๋ฒŒํฌ ๋กœ๋”์˜ ์ž…๋ ฅ์ด์—ˆ๊ณ  Hadoop๊ณผ Hive๋ฅผ ๊ฑฐ์น˜๋ฉฐ ์ž„์‹œ๋ฌผ์—์„œ ์ตœ์ข… ์ €์žฅ์†Œ๋กœ ์Šน๊ฒฉ
  • Hive๊ฐ€ ํ…Œ์ด๋ธ”์„ โ€œ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜ ํŒŒ์ผ ์ „๋ถ€โ€๋กœ ์ •์˜ํ•˜๋ฉด์„œ dt=2010-03-01 ๊ฒฝ๋กœ ๊ทœ์•ฝ์ด ๊ตณ์–ด์ง
  • ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€์— UPDATE์™€ ์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด ํŒŒํ‹ฐ์…˜ ๊ฒฝ๋กœ๋ฅผ ์ธ๋ฑ์Šค ๋Œ€์šฉยท์žฌ์ž‘์„ฑ ๋‹จ์œ„ยท๋ฉฑ๋“ฑ ํ‚ค๋กœ ์‚ฌ์šฉ

AI-assisted


1. ํŒŒ์ผ์€ ์›๋ž˜ ์ค‘๊ฐ„ ์‚ฐ๋ฌผ์ด์—ˆ๋‹ค

RDB ์‹œ๋Œ€์˜ ๋ฐฐ์น˜ ์ ์žฌ๋Š” ๋ฒŒํฌ ๋กœ๋”๊ฐ€ ๋งก์•˜๋‹ค. ํ–‰ ๋‹จ์œ„ INSERT๋Š” ๊ฑด๋งˆ๋‹ค ์ธ๋ฑ์Šค ๊ฐฑ์‹ , WAL ๊ธฐ๋ก, ์ œ์•ฝ ๊ฒ€์‚ฌ, ๋ฝ์ด ๋ถ™์–ด์„œ 100๋งŒ ๊ฑด์ด๋ฉด ๋ช‡ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

๊ทธ๋ž˜์„œ DW๋งˆ๋‹ค ๋ฒŒํฌ ๋กœ๋”๊ฐ€ ๋”ฐ๋กœ ์žˆ์—ˆ๊ณ  ์ „๋ถ€ ํŒŒ์ผ์„ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•˜๋‹ค.

์ œํ’ˆ๋ฒŒํฌ ๋กœ๋”
OracleSQL*Loader (sqlldr)
TeradataFastLoad, MultiLoad
SQL ServerBULK INSERT, bcp
PostgreSQLCOPY
MySQLLOAD DATA INFILE

์ ์žฌ ์ˆœ์„œ๋Š” ์ด๋ ‡๋‹ค.

  1. ์ถ”์ถœ: ์†Œ์Šค DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด /tmp/orders_20050301.dat ๊ฐ™์€ flat file๋กœ ์ €์žฅํ•œ๋‹ค.
  2. ๋ฒŒํฌ ๋กœ๋“œ: ๋กœ๋”๊ฐ€ ํŒŒ์ผ์„ ์ฝ์–ด DW ํ…Œ์ด๋ธ”์— ์ ์žฌํ•œ๋‹ค.
  3. ํŒŒ์ผ ์‚ญ์ œ: ์ ์žฌ๊ฐ€ ๋๋‚˜๋ฉด ์ค‘๊ฐ„ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๊ณ  ์ดํ›„ ์กฐํšŒ๋Š” DW ํ…Œ์ด๋ธ”์—์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํŒŒ์ผ์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žˆ์—ˆ์ง€๋งŒ ๋กœ๋”๊ฐ€ ์ฝ์€ ๋’ค ์‚ญ์ œํ•˜๋Š” ์ž„์‹œ ํŒŒ์ผ์ด์—ˆ๋‹ค. ์กฐํšŒํ•˜๋Š” ์ชฝ์ด ๋ณด๋Š” ๊ฒƒ์€ ์–ธ์ œ๋‚˜ DW ํ…Œ์ด๋ธ”์ด์—ˆ๋‹ค.

๋กœ๋”๊ฐ€ ๋น ๋ฅธ ์ด์œ : ์šฐํšŒํ•˜๋Š” ๊ฒƒ์ด ๋งŽ๋‹ค

  • ์ธ๋ฑ์Šค๋ฅผ ๊ฑด๋ณ„๋กœ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ณ  ์ ์žฌ๊ฐ€ ๋๋‚œ ๋’ค ํ•œ ๋ฒˆ์— ๋‹ค์‹œ ๋งŒ๋“ ๋‹ค
  • ๋กœ๊ทธ ๊ธฐ๋ก์„ ์ตœ์†Œํ™”ํ•˜๊ฑฐ๋‚˜ ๋ˆ๋‹ค. ์‹คํŒจํ•˜๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋Œ๋ฆฌ๋Š” ์ชฝ์„ ํƒํ•œ๋‹ค
  • ์ œ์•ฝ ๊ฒ€์‚ฌ๋ฅผ ๋‚˜์ค‘์œผ๋กœ ๋ฏธ๋ฃจ๊ฑฐ๋‚˜ ์œ„๋ฐ˜ ํ–‰์„ ๋ณ„๋„ ํŒŒ์ผ๋กœ ๋บ€๋‹ค
  • Oracle์˜ direct path load๋Š” ํ–‰ ๋‹จ์œ„ SQL ์ฒ˜๋ฆฌ ๋Œ€์‹  ๋ฐ์ดํ„ฐ ๋ธ”๋ก์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ์ €์žฅํ•œ๋‹ค

2. ํŒŒ์ผ์ด ๋ชฉ์ ์ง€๊ฐ€ ๋˜๋‹ค

2000๋…„๋Œ€ ์ค‘๋ฐ˜์—๋Š” ๋Š˜์–ด๋‚˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ DB์— ์ ์žฌํ•˜๊ธฐ ์–ด๋ ค์›Œ์กŒ๋‹ค.

  • ์›น ๋กœ๊ทธ์™€ ํด๋ฆญ์ŠคํŠธ๋ฆผ์ด ํ•˜๋ฃจ ์ˆ˜ TB์”ฉ ์Œ“์ด๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค
  • ์ด ๋ฐ์ดํ„ฐ๋Š” ๋Œ€๋ถ€๋ถ„ ํ•œ ๋ฒˆ ํ›‘๊ณ  ๋งˆ๋Š” ์„ฑ๊ฒฉ์ด๋ผ ์ธ๋ฑ์Šค์™€ ํŠธ๋žœ์žญ์…˜์ด ํ•„์š” ์—†์—ˆ๋‹ค
  • DW์— ๋„ฃ์œผ๋ ค๋ฉด ๋ผ์ด์„ ์Šค์™€ ์žฅ๋น„ ๋น„์šฉ์ด ๋ฐ์ดํ„ฐ ๊ฐ€์น˜๋ฅผ ๋„˜์–ด์„ฐ๋‹ค

Google์˜ GFS์™€ MapReduce ๋…ผ๋ฌธ์„ ๊ฑฐ์ณ Hadoop์ด 2006๋…„์— ๋‚˜์˜ค๋ฉด์„œ ๋‹ค๋ฅธ ์„ ํƒ์ง€๊ฐ€ ์ƒ๊ฒผ๋‹ค. ํŒŒ์ผ์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ํฉ์–ด ๋‘๊ณ  ๊ณ„์‚ฐ์„ ๊ทธ์ชฝ์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

๊ตฌ๋ถ„DB์— ์ ์žฌํ•˜๋Š” ๋ฐฉ์‹๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹
๋ฐ์ดํ„ฐ ์ €์žฅํŒŒ์ผ์„ DB ํ…Œ์ด๋ธ”์— ์ ์žฌํŒŒ์ผ์„ ๋ถ„์‚ฐ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ
์กฐํšŒ ๋Œ€์ƒDB ํ…Œ์ด๋ธ”์ €์žฅ๋œ ํŒŒ์ผ์„ ์—”์ง„์ด ์ง์ ‘ ์ฝ์Œ
ํŒŒ์ผ์˜ ์—ญํ• ์ ์žฌ ํ›„ ์‚ญ์ œํ•˜๋Š” ์ค‘๊ฐ„ ํŒŒ์ผ๋ณด๊ด€ํ•˜๋ฉฐ ์กฐํšŒํ•˜๋Š” ์›๋ณธ ๋ฐ์ดํ„ฐ

๋ฐ”๋€ ๊ฒƒ์€ ํŒŒ์ผ์˜ ์ง€์œ„๋‹ค. ์ ์žฌ ํ›„ ์‚ญ์ œํ•˜๋˜ ํŒŒ์ผ์„ ๋ณด๊ด€ํ•˜๋ฉฐ ์กฐํšŒ์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋๋‹ค.

์ด ์‹œ๊ธฐ ๋‚˜์˜จ Sqoop์€ RDB ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด HDFS์— ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๋Š” ๋„๊ตฌ๋‹ค.

์ด๋•Œ๋Š” ์•„์ง "๋ ˆ์ดํฌ"๊ฐ€ ์•„๋‹ˆ๋‹ค

  • HDFS๋Š” ์ €์žฅ๊ณผ ๊ณ„์‚ฐ์ด ๊ฐ™์€ ์žฅ๋น„์— ๋ฌถ์—ฌ ์žˆ์—ˆ๋‹ค. ์šฉ๋Ÿ‰๋งŒ ๋Š˜๋ฆฌ๊ณ  ์‹ถ์–ด๋„ ์„œ๋ฒ„๋ฅผ ํ†ต์งธ๋กœ ์‚ฌ์•ผ ํ–ˆ๋‹ค
  • ํŒŒ์ผ์€ ์Œ“์˜€์ง€๋งŒ ๊ทธ๊ฑธ ์กฐํšŒํ•  ๋ฐฉ๋ฒ•์ด MapReduce ์ž๋ฐ” ์ฝ”๋“œ๋ฟ์ด์—ˆ๋‹ค
  • ์กฐํšŒ ๋ฌธ์ œ๋Š” Hive๊ฐ€ ํ’€๊ณ  ๊ฒฐํ•ฉ ๋ฌธ์ œ๋Š” S3๊ฐ€ ํ‘ผ๋‹ค

3. Hive๊ฐ€ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ…Œ์ด๋ธ”์ด๋ผ๊ณ  ๋ถˆ๋ €๋‹ค

ํŒŒ์ผ์ด ์Œ“์ด์ž ๋‹ค์Œ ๋ฌธ์ œ๋Š” ์กฐํšŒ์˜€๋‹ค. ์ง‘๊ณ„ ํ•˜๋‚˜ ๋ฝ‘์œผ๋ ค๊ณ  ๋งค๋ฒˆ MapReduce job์„ ์ž๋ฐ”๋กœ ์งœ๋Š” ๊ฒƒ์€ ๊ฐ๋‹น์ด ์•ˆ ๋๋‹ค.

Facebook์ด 2008๋…„์— ๋งŒ๋“  Hive๊ฐ€ SQL์„ MapReduce๋กœ ๋ฒˆ์—ญํ•ด ์ด ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. SQL์„ ๋ถ™์ด๋ ค๋ฉด ํ…Œ์ด๋ธ”์ด ๋ญ”์ง€๋ถ€ํ„ฐ ์ •์˜ํ•ด์•ผ ํ–ˆ๋Š”๋ฐ Hive๋Š” ์ด๋ ‡๊ฒŒ ์ •ํ–ˆ๋‹ค.

  • ํ…Œ์ด๋ธ”: ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜ ์žˆ๋Š” ํŒŒ์ผ ์ „๋ถ€
  • ํŒŒํ‹ฐ์…˜: ๊ทธ ์•„๋ž˜ ํ•˜์œ„ ๋””๋ ‰ํ„ฐ๋ฆฌ
  • ์Šคํ‚ค๋งˆ: ๋ฉ”ํƒ€์Šคํ† ์–ด(๋ณ„๋„ RDB)์— ์ €์žฅ

๊ฒฝ๋กœ๋Š” key=value ํ˜•ํƒœ๋กœ ๊ตณ์—ˆ๋‹ค.

/user/hive/warehouse/orders/
  dt=2010-03-01/000000_0
  dt=2010-03-02/000000_0
  dt=2010-03-03/000000_0

Hive-style partitioning์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ง€๊ธˆ S3์— ์Œ“๋Š” dt=2026-08-17๋„ ์ด ๊ทœ์•ฝ์„ ๋”ฐ๋ฅธ๋‹ค.

์ ์žฌ ๋ฌธ๋ฒ•๋„ ํ•จ๊ป˜ ๋ฐ”๋€Œ์—ˆ๋‹ค.

-- ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํŒŒํ‹ฐ์…˜ ํ•˜๋‚˜๋ฅผ ๊ฐˆ์•„์—Ž๋Š”๋‹ค
INSERT OVERWRITE TABLE orders PARTITION (dt='2010-03-01')
SELECT * FROM staging WHERE order_date = '2010-03-01';

INSERT INTO๋กœ ํ–‰์„ ์ถ”๊ฐ€ํ•˜๋˜ ๋ฐฉ์‹๊ณผ ๋‹ฌ๋ฆฌ INSERT OVERWRITE๋Š” ์ง€์ •ํ•œ ํŒŒํ‹ฐ์…˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋กœ ๊ต์ฒดํ•œ๋‹ค. ์ด๋•Œ ๊ต์ฒด ๋ฒ”์œ„๋Š” ํŒŒํ‹ฐ์…˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ์•„๋ž˜์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ „์ฒด๋‹ค.

๋ฉ”ํƒ€์Šคํ† ์–ด์™€ ํŒŒ์ผ์ด ์–ด๊ธ‹๋‚  ์ˆ˜ ์žˆ๋‹ค

  • Hive๋Š” ์Šคํ‚ค๋งˆ์™€ ํŒŒํ‹ฐ์…˜ ๋ชฉ๋ก์„ ๋ฉ”ํƒ€์Šคํ† ์–ด์— ๋‘๊ณ  ๋ฐ์ดํ„ฐ๋Š” HDFS์— ๋’€๋‹ค. ๋‘ ๊ณณ์ด ๋”ฐ๋กœ ๋…ผ๋‹ค
  • ๋‹ค๋ฅธ job์ด ํŒŒ์ผ์„ ๊ฒฝ๋กœ์— ์ง์ ‘ ์ €์žฅํ•˜๋ฉด ๋ฉ”ํƒ€์Šคํ† ์–ด์— ๋“ฑ๋ก๋˜์ง€ ์•Š์•„ ์ฟผ๋ฆฌ์—์„œ ์กฐํšŒ๋˜์ง€ ์•Š๋Š”๋‹ค
  • ๊ทธ๋ž˜์„œ MSCK REPAIR TABLE๋กœ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ›‘์–ด ํŒŒํ‹ฐ์…˜์„ ๋‹ค์‹œ ๋“ฑ๋กํ•˜๋Š” ๋ช…๋ น์ด ๋”ฐ๋กœ ์žˆ๋‹ค
  • ์ด ์–ด๊ธ‹๋‚จ์ด ๋‚˜์ค‘์— ํ…Œ์ด๋ธ” ํฌ๋งท์ด ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง์ ‘ ์ ๊ฒŒ ๋œ ์ด์œ ๋‹ค

4. ํŒŒํ‹ฐ์…˜ ๊ฒฝ๋กœ์˜ ์„ธ ๊ฐ€์ง€ ์šฉ๋„

ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์—†๋Š” ๊ธฐ๋Šฅ์„ ๋ณด์™„ํ•˜๋ ค๊ณ  ํŒŒํ‹ฐ์…˜ ๊ฒฝ๋กœ์— ํ‚ค๋ฅผ ๋„ฃ๊ณ  ์กฐํšŒ์™€ ์žฌ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉํ–ˆ๋‹ค.

RDB์˜ ๊ธฐ๋Šฅ๋ ˆ์ดํฌ์—์„œ ํŒŒํ‹ฐ์…˜ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹
์ธ๋ฑ์Šคdt=2026-08-17 ๊ฒฝ๋กœ๋กœ ํ›„๋ณด๋ฅผ ์ขํžŒ๋‹ค
UPDATE/DELETE๊ทธ ๋””๋ ‰ํ„ฐ๋ฆฌ๋งŒ ์ƒˆ๋กœ ์“ด๋‹ค
ํŠธ๋žœ์žญ์…˜ ์žฌ์‹คํ–‰๊ฐ™์€ ๊ฒฝ๋กœ๋ฅผ ๋ฎ์–ด์“ฐ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค

์„ธ ๊ฐ€์ง€๋ฅผ ๋‚˜๋ˆ  ๋ณด๋ฉด ์ด๋ ‡๋‹ค.

  • ์ธ๋ฑ์Šค ๋Œ€์šฉ: ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€์—๋Š” B-tree๊ฐ€ ์—†๋‹ค. ๊ฒฝ๋กœ์— ์กฐ๊ฑด์„ ๋„ฃ์–ด๋‘๋ฉด ์กฐํšŒํ•  ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ขํž ์ˆ˜ ์žˆ๋‹ค. WHERE dt='2026-08-17'์ด ๋””๋ ‰ํ„ฐ๋ฆฌ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๋Š” ์—ฐ์‚ฐ์ด ๋œ๋‹ค
  • ์žฌ์ž‘์„ฑ ๋‹จ์œ„: S3 ๊ฐ์ฒด๋Š” ๋ถ€๋ถ„ ์ˆ˜์ •์ด ์•ˆ ๋˜๊ณ  ํ†ต์งธ๋กœ ๋ฎ์–ด์“ฐ๋Š” ๊ฒƒ๋งŒ ๋œ๋‹ค. ๋‹ค์‹œ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œ ๋ฉ์–ด๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ •ํ•ด๋‘ฌ์•ผ ํ•˜๊ณ  ๊ทธ๊ฒƒ์„ ํ‘œํ˜„ํ•  ์ˆ˜๋‹จ์ด ๊ฒฝ๋กœ๋‹ค
  • ๋ฉฑ๋“ฑ ํ‚ค: ๋ฐฐ์น˜๊ฐ€ ์‹คํŒจํ•ด์„œ ๋‹ค์‹œ ๋Œ๋ฆด ๋•Œ INSERT๋Š” ์ค‘๋ณต์ด ์Œ“์ธ๋‹ค. dt=2026-08-17 ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์šฐ๊ณ  ์ƒˆ๋กœ ์“ฐ๋ฉด ๋ช‡ ๋ฒˆ์„ ๋Œ๋ ค๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค

ํŒŒํ‹ฐ์…˜ ๋‹จ์œ„๋กœ ๋ฎ์–ด์“ฐ๋ฉด ๊ฐ™์€ ์ž…๋ ฅ์œผ๋กœ ๋ฐฐ์น˜๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์Œ“์ด์ง€ ์•Š๋Š”๋‹ค.

์ฃผ์˜: ํŒŒํ‹ฐ์…˜ ํ‚ค๋ฅผ ์ž˜๋ชป ์žก์œผ๋ฉด ๋˜๋Œ๋ฆฌ๊ธฐ ์–ด๋ ต๋‹ค

  • ํŒŒํ‹ฐ์…˜ ํ‚ค๋Š” ๊ณง ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ๋‹ค. ๋ฐ”๊พธ๋ ค๋ฉด ์ „์ฒด๋ฅผ ๋‹ค์‹œ ์จ์•ผ ํ•œ๋‹ค
  • ์นด๋””๋„๋ฆฌํ‹ฐ๊ฐ€ ๋†’์€ ์ปฌ๋Ÿผ์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์ˆ˜๋งŒ ๊ฐœ๋กœ ๋ถˆ์–ด๋‚˜ ์ž‘์€ ํŒŒ์ผ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค
  • ๊ทธ๋ž˜์„œ ๋‚ ์งœ์ฒ˜๋Ÿผ ๊ฐ’ ๋ฒ”์œ„๊ฐ€ ์˜ˆ์ธก๋˜๋Š” ์ปฌ๋Ÿผ์„ ์“ด๋‹ค
  • Iceberg๋Š” ํŒŒํ‹ฐ์…˜ ์ŠคํŽ™์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ๊ธฐ๋กํ•ด ํŒŒํ‹ฐ์…˜์„ ๋‚˜๋ˆ„๋Š” ๊ทœ์น™์„ ๊ฒฝ๋กœ์™€ ๋ถ„๋ฆฌํ•œ๋‹ค

5. S3์— ์ €์žฅํ•˜๊ณ  ๊ณ„์‚ฐ ์ž์›์„ ๋”ฐ๋กœ ์“ฐ๋‹ค

Hive๊นŒ์ง€ ์™€๋„ ์ €์žฅ๊ณผ ๊ณ„์‚ฐ์€ ์—ฌ์ „ํžˆ ํ•œ ๋ฉ์–ด๋ฆฌ์˜€๋‹ค. ๋””์Šคํฌ๊ฐ€ ๋ชจ์ž๋ผ๋ฉด CPU๊นŒ์ง€ ๊ฐ™์ด ์‚ฌ์•ผ ํ–ˆ๋‹ค.

2006๋…„์— ๋‚˜์˜จ S3์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ๊ณ„์‚ฐ์šฉ ์„œ๋ฒ„์™€ ๋ณ„๋„๋กœ ์ €์žฅ ์šฉ๋Ÿ‰์„ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์—ˆ๋‹ค. ์ €์žฅ์€ S3์— ๋‘๊ณ  ๊ณ„์‚ฐํ•  ๋•Œ๋งŒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋„์šฐ๋Š” ๊ตฌ์„ฑ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค. ์‹ค์ œ ์ด๋™์€ ๊ด€๋ฆฌํ˜• Hadoop์ธ EMR์ด ๋‚˜์˜จ 2009๋…„ ์ดํ›„์— ๋ณธ๊ฒฉํ™”๋๋‹ค.

  • ๋น„์šฉ: GB๋‹น ๋‹จ๊ฐ€๊ฐ€ ์ž์ฒด ์šด์˜ HDFS๋ณด๋‹ค ๋‚ฎ๊ณ  ์“ฐ๋Š” ๋งŒํผ๋งŒ ๋‚ธ๋‹ค
  • ํƒ„๋ ฅ์„ฑ: ์•ผ๊ฐ„ ๋ฐฐ์น˜์—๋งŒ ๋…ธ๋“œ 100๋Œ€๋ฅผ ๋„์šฐ๊ณ  ๋๋‚˜๋ฉด ๋ฐ˜๋‚ฉํ•œ๋‹ค
  • ์šด์˜: NameNode ์ด์ค‘ํ™”์™€ ๋””์Šคํฌ ๊ต์ฒด๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค

๊ธฐ์กด ๊ฒฝ๋กœ ๊ทœ์•ฝ์„ S3์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. s3://bucket/orders/dt=2026-08-17/์€ HDFS ๊ฒฝ๋กœ์™€ ์ƒ๊น€์ƒˆ๊ฐ€ ๊ฐ™๋‹ค.

์ด ๋ฌด๋ ต James Dixon์ด ๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ๋ผ๋Š” ๋ง์„ ๋งŒ๋“ค์—ˆ๋‹ค.

์ฃผ์˜: S3๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์ด ์•„๋‹ˆ๋‹ค

  • ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์‹ค์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. dt=2026-08-17/part-0์€ ์Šฌ๋ž˜์‹œ๊ฐ€ ๋“  ํ‚ค ํ•˜๋‚˜์ผ ๋ฟ์ด๋‹ค
  • rename์ด ์›์ž์ ์ด์ง€ ์•Š๋‹ค. ๋ณต์‚ฌ ํ›„ ์‚ญ์ œ๋ผ ํŒŒ์ผ ์ˆ˜๋งŒํผ ๋น„์šฉ์ด ๋ถ™๋Š”๋‹ค. ํŒŒํ‹ฐ์…˜ ๋ฎ์–ด์“ฐ๊ธฐ๊ฐ€ ์ค‘๊ฐ„์— ์‹คํŒจํ•˜๋ฉด ๋ถ€๋ถ„ ๋ฐ˜์˜ ์ƒํƒœ๊ฐ€ ๋‚จ๋Š”๋‹ค
  • 2020๋…„ 12์›” ์ „๊นŒ์ง€ ์ฝ๊ธฐ ์ผ๊ด€์„ฑ์ด ์ตœ์ข… ์ผ๊ด€์„ฑ์ด์—ˆ๋‹ค. ๋ฐฉ๊ธˆ ์“ด ํŒŒ์ผ์ด ๋ชฉ๋ก์— ์•ˆ ์žกํžˆ๋Š” ์ผ์ด ์žˆ์—ˆ๋‹ค
  • ์ด ์…‹์ด ํ…Œ์ด๋ธ” ํฌ๋งท์ด ์ปค๋ฐ‹ ์›์ž์„ฑ์„ ๋”ฐ๋กœ ์„ค๊ณ„ํ•˜๊ฒŒ ๋œ ๋ฐฐ๊ฒฝ์ด๋‹ค

6. ์–ป์€ ๊ฒƒ๊ณผ ์žƒ์€ ๊ฒƒ

์Šคํ‚ค๋งˆ๋ฅผ ๋‹ค๋ฃจ๋Š” ์‹œ์ ๋„ ํ•จ๊ป˜ ์˜ฎ๊ฒจ๊ฐ”๋‹ค.

schema-on-writeschema-on-read
๊ฒ€์ฆ ์‹œ์ ๋„ฃ์„ ๋•Œ์ฝ์„ ๋•Œ
์Šคํ‚ค๋งˆ ์œ„์น˜์นดํƒˆ๋กœ๊ทธํŒŒ์ผ ์•ˆ ๋˜๋Š” ์—†์Œ
์†Œ์Šค๊ฐ€ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด์ ์žฌ ์‹คํŒจ์ผ๋‹จ ์Œ“์ด๊ณ  ๋‚˜์ค‘์— ํ•ด์„
๋Œ€ํ‘œRDBMS, DWParquet, Avro, JSON

์–ป์€ ๊ฒƒ.

  • ์›๋ณธ ๋ณด์กด: ๋ณ€ํ™˜ ๋กœ์ง์ด ํ‹€๋ ค๋„ ์›๋ณธ ํŒŒ์ผ์ด ๋‚จ์•„ ์žˆ์–ด ๊ณ ์ณ์„œ ๋‹ค์‹œ ๋Œ๋ฆฐ๋‹ค. INSERTํ•œ ๋ฐ์ดํ„ฐ๋Š” ์›๋ณธ์ด ์‚ฌ๋ผ์ ธ ๋ณต๊ตฌ๊ฐ€ ์•ˆ ๋œ๋‹ค
  • ์ ์žฌ ์ง€์—ฐ ๊ฐ์†Œ: ํŒŒ์‹ฑ๊ณผ ๊ฒ€์ฆ์„ ๋’ค๋กœ ๋ฏธ๋ฃจ๋ฉด ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ˆ˜์ง‘์ด ๋๋‚œ๋‹ค
  • ๋น„์ •ํ˜• ์ˆ˜์šฉ: ๋กœ๊ทธ, ์ค‘์ฒฉ JSON, ์ด๋ฒคํŠธ์ฒ˜๋Ÿผ ๊ด€๊ณ„ํ˜• ํ…Œ์ด๋ธ”์— ์•ˆ ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›๋Š”๋‹ค

์žƒ์€ ๊ฒƒ.

  • ์›์ž์„ฑ: ์“ฐ๋Š” ๋„์ค‘์— ์ฝ์œผ๋ฉด ์ ˆ๋ฐ˜๋งŒ ๋ฐ˜์˜๋œ ์ƒํƒœ๊ฐ€ ๋ณด์—ฌ ์›์ž์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ๋ชปํ•œ๋‹ค
  • ์ผ๊ด€์„ฑ ๊ฐ•์ œ: ์˜คํƒ€๋กœ ์ƒ๊ธด ์ปฌ๋Ÿผ๋„ ๊ทธ๋Œ€๋กœ ์Œ“์ธ๋‹ค. ๊ฒ€์ฆํ•  ์ฃผ์ฒด๊ฐ€ ์—†๋‹ค
  • ๋กค๋ฐฑ: ์ž˜๋ชป ์“ด ๋ฐฐ์น˜๋ฅผ ๋˜๋Œ๋ฆด ๋ฐฉ๋ฒ•์ด ์—†๋‹ค
  • ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ: ํŒŒ์ผ๋งˆ๋‹ค ์Šคํ‚ค๋งˆ๊ฐ€ ๋‹ฌ๋ผ ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋ฉด ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋ฅ˜ ์—†์ด null๋กœ ์ฝํžŒ๋‹ค

๋ฐ์ดํ„ฐ ๋Šช(data swamp)์ด๋ผ๋Š” ๋ง์ด ์ด ์‹œ๊ธฐ์— ๋‚˜์™”๋‹ค. ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“๋‹ค๊ฐ€ ๋ฌด์—‡์ด ๋“ค์–ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„ ์ƒํƒœ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.


7. ๋‹ค์‹œ ํ…Œ์ด๋ธ”๋กœ

2017๋…„ ์ดํ›„ IcebergยทDeltaยทHudi๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๋กœ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋๋‹ค. ํŒŒ์ผ ๋ชฉ๋ก์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์— ์ง์ ‘ ๊ธฐ๋กํ•ด์„œ ๋ฉ”ํƒ€์Šคํ† ์–ด ๋ถˆ์ผ์น˜์™€ ์•ž์—์„œ ์žƒ์€ ๊ฒƒ์„ ๋˜๋Œ๋ฆฌ๋Š” ๋ฐฉ์‹์ด๋‹ค.

์‹œ๊ธฐ์ €์žฅ ๋ฐฉ์‹ํŠธ๋žœ์žญ์…˜์œ ์—ฐ์„ฑ๋น„์šฉ
1990sDB ํ…Œ์ด๋ธ”OX๋น„์Œˆ
2010sํŒŒ์ผ ๋”๋ฏธXO์Œˆ
2020sํŒŒ์ผ + ํ…Œ์ด๋ธ” ํฌ๋งทOO์Œˆ

๋ฌธ๋ฒ•๋„ ๋˜๋Œ์•„์™”๋‹ค.

-- 2010๋…„: ํŒŒํ‹ฐ์…˜์„ ํ†ต์งธ๋กœ ๊ฐˆ์•„์—Ž๋Š”๋‹ค
INSERT OVERWRITE TABLE orders PARTITION (dt='2010-03-01') SELECT ...;
 
-- ์ง€๊ธˆ: ํ–‰ ๋‹จ์œ„๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค
MERGE INTO orders t USING updates s ON t.order_id = s.order_id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;

MERGE INTO๋Š” 20๋…„ ์ „ DW์— ์žˆ๋˜ ๋ฌธ๋ฒ•์ด๋‹ค. ๊ฐ™์€ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๊ตฌ์„ฑ์€ ๋‹ฌ๋ผ์กŒ๋‹ค. ์ €์žฅ์€ ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€์— ๋‚จ์•˜๊ณ  ๊ณ„์‚ฐ์€ ๋ถ„๋ฆฌ๋œ ์ฑ„๋‹ค.

ํ…Œ์ด๋ธ” ํฌ๋งท์—์„œ๋Š” ๊ฒฝ๋กœ์— ์˜์กดํ•˜๋˜ ์„ธ ๊ธฐ๋Šฅ์„ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ฒฝ๋กœ๋กœ ์ฒ˜๋ฆฌํ•˜๋˜ ๊ธฐ๋Šฅํ…Œ์ด๋ธ” ํฌ๋งท์˜ ์ฒ˜๋ฆฌ ์ˆ˜๋‹จ
์ธ๋ฑ์Šคmanifest์˜ ์ปฌ๋Ÿผ ํ†ต๊ณ„์™€ ํŒŒ์ผ ๋‹จ์œ„ min/max
์žฌ์ž‘์„ฑ ๋‹จ์œ„์Šค๋ƒ…์ƒท๊ณผ ์ปค๋ฐ‹
๋ฉฑ๋“ฑ ํ‚คํŠธ๋žœ์žญ์…˜๊ณผ ๋กค๋ฐฑ

ํŒŒํ‹ฐ์…˜ ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์‚ฌ๋ผ์ง„ ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ ๋‹ค๋งŒ ์กฐํšŒ ์„ฑ๋Šฅ์„ ๊ฒฝ๋กœ์—๋งŒ ๊ธฐ๋Œ€์ง€ ์•Š๊ฒŒ ๋๋‹ค. ํ†ต๊ณ„๋Š” ํŒŒ์ผ ํฌ๋งท์˜ footer์™€ ํ…Œ์ด๋ธ” ํฌ๋งท์˜ manifest ๋‘ ๊ณณ์— ๋‚˜๋‰˜์–ด ์žˆ๋‹ค.