Delta Lake ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ: ์Šคํ‚ค๋งˆ ์ ์šฉ ๋ฐ ์ง„ํ™”

ํ—ค์ด ํ•˜๋ธŒ๋ฅด! ๋‚˜๋Š” ๊ธฐ์‚ฌ์˜ ๋ฒˆ์—ญ์„ ๋‹น์‹ ์˜ ๊ด€์‹ฌ์— ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค ๋ธํƒ€ ํ˜ธ์ˆ˜ ํƒํ—˜: ์Šคํ‚ค๋งˆ ์ ์šฉ ๋ฐ ์ง„ํ™” Burak Yavuz, Brenner Heintz ๋ฐ Denny Lee๊ฐ€ ์ฝ”์Šค ์ถœ์‹œ๋ฅผ ์˜ˆ์ƒํ•˜์—ฌ ์ค€๋น„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์—”์ง€๋‹ˆ์–ด ์˜คํˆฌ์Šค์—์„œ.

Delta Lake ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ: ์Šคํ‚ค๋งˆ ์ ์šฉ ๋ฐ ์ง„ํ™”

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

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ํšŒ๋กœ ๊ด€๋ฆฌ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋น„์ฆˆ๋‹ˆ์Šค ๋ชฉํ‘œ์™€ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋ฐ”๋€Œ๋ฉด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋„ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. Delta Lake๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์ฐจ์›์„ ์‰ฝ๊ฒŒ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ฐ„๋‹จํ•œ ์˜๋ฏธ ์ฒด๊ณ„์— ์ ‘๊ทผํ•˜์—ฌ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ˆ˜๋กœ ์˜ค๋ฅ˜๋‚˜ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ด๋ธ”์„ ์–ด์ง€๋Ÿฝํžˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์Šคํ‚ค๋งˆ ์ ์šฉ๊ณผ, ์ ์ ˆํ•œ ์œ„์น˜์— ๊ท€์ค‘ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ์ƒˆ ์—ด์„ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ‚ค๋งˆ ์ง„ํ™”๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋„๊ตฌ์˜ ์‚ฌ์šฉ๋ฒ•์„ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ ์ดํ•ด

Apache Spark์˜ ๊ฐ DataFrame์—๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•, ์—ด, ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋“ฑ ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ •์˜ํ•˜๋Š” ์Šคํ‚ค๋งˆ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. Delta Lake๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ๊ฐ€ ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ๋‚ด๋ถ€์— JSON ํ˜•์‹์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ณ„ํš ์ง‘ํ–‰์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์Šคํ‚ค๋งˆ ์ ์šฉ(Schema Enforcement)์€ ์Šคํ‚ค๋งˆ ๊ฒ€์ฆ(Schema Validation)์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ์— ๋งž์ง€ ์•Š๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฑฐ๋ถ€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ์„ ๋ณด์žฅํ•˜๋Š” Delta Lake์˜ ๋ณด์•ˆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค. ์˜ˆ์•ฝ๋งŒ ๋ฐ›๋Š” ์œ ๋ช… ๋ ˆ์Šคํ† ๋ž‘์˜ ํ”„๋ŸฐํŠธ ๋ฐ์Šคํฌ ์ง์›์ฒ˜๋Ÿผ, ๊ทธ๋…€๋Š” ํ…Œ์ด๋ธ”์— ์ž…๋ ฅ๋œ ๊ฐ ๋ฐ์ดํ„ฐ ์—ด์ด ํ•ด๋‹น ์˜ˆ์ƒ ์—ด ๋ชฉ๋ก์— ์žˆ๋Š”์ง€(์ฆ‰, ๊ฐ ์—ด์— "์˜ˆ์•ฝ"์ด ์žˆ๋Š”์ง€) ํ™•์ธํ•˜๊ณ  ๋ชฉ๋ก์— ์—†๋Š” ์—ด์ด ์žˆ๋Š” ํ•ญ๋ชฉ์€ ๋ชจ๋‘ ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ์ ์šฉ์€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

Delta Lake๋Š” ์“ฐ๊ธฐ ์‹œ ์Šคํ‚ค๋งˆ ๊ฒ€์‚ฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋ชจ๋“  ์ƒˆ๋กœ์šด ์“ฐ๊ธฐ๋Š” ์“ฐ๊ธฐ ์‹œ์ ์— ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๊ฐ€ ์ผ๊ด€๋˜์ง€ ์•Š์œผ๋ฉด Delta Lake๋Š” ํŠธ๋žœ์žญ์…˜์„ ์™„์ „ํžˆ ๋กค๋ฐฑํ•˜๊ณ (๋ฐ์ดํ„ฐ๊ฐ€ ๊ธฐ๋ก๋˜์ง€ ์•Š์Œ) ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆ์ผ์น˜๋ฅผ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
Delta Lake๋Š” ๋‹ค์Œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ…Œ์ด๋ธ”๊ณผ ํ˜ธํ™˜๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. DataFrame ์ž‘์„ฑ ์ค‘:

  • ๋Œ€์ƒ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ์— ์—†๋Š” ์ถ”๊ฐ€ ์—ด์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ์— ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์—ด์ด ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์—ด์—๋Š” ๋‹จ์ˆœํžˆ null ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.
  • ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ์—ด ๋ฐ์ดํ„ฐ ์œ ํ˜•๊ณผ ๋‹ค๋ฅธ ์—ด ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ์—ด์— StringType ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€๋งŒ DataFrame์˜ ํ•ด๋‹น ์—ด์— IntegerType ๋ฐ์ดํ„ฐ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ ์Šคํ‚ค๋งˆ ์ ์šฉ์€ ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์“ฐ๊ธฐ ์ž‘์—…์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๋Œ€์†Œ๋ฌธ์ž๋งŒ ๋‹ค๋ฅธ ์—ด ์ด๋ฆ„์„ ํฌํ•จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ™์€ ํ…Œ์ด๋ธ”์— 'Foo'์™€ 'foo'๋ผ๋Š” ์ด๋ฆ„์˜ ์—ด์„ ์ •์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Spark๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๋˜๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆ ํ•จ(๊ธฐ๋ณธ๊ฐ’) ๋ชจ๋“œ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด, Delta Lake๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๋ณด์กดํ•˜์ง€๋งŒ ์Šคํ‚ค๋งˆ ์ €์žฅ์†Œ ๋‚ด์—์„œ๋Š” ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Parquet์€ ์—ด ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•  ๋•Œ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์ ์ธ ์˜ค๋ฅ˜, ๋ฐ์ดํ„ฐ ์†์ƒ ๋˜๋Š” ๋ฐ์ดํ„ฐ ์†์‹ค(Databricks์—์„œ ๊ฐœ์ธ์ ์œผ๋กœ ๊ฒฝํ—˜ํ•œ ๋ฐ” ์žˆ์Œ)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ์ œํ•œ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์•„์ง ํ•ด๋‹น ์—ด์„ ํ—ˆ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์ง€ ์•Š์€ Delta Lake ํ…Œ์ด๋ธ”์— ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์—ด์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์•„๋ž˜ ์ฝ”๋“œ์—์„œ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# ะกะณะตะฝะตั€ะธั€ัƒะตะผ DataFrame ัััƒะด, ะบะพั‚ะพั€ั‹ะน ะผั‹ ะดะพะฑะฐะฒะธะผ ะฒ ะฝะฐัˆัƒ ั‚ะฐะฑะปะธั†ัƒ Delta Lake
loans = sql("""
            SELECT addr_state, CAST(rand(10)*count as bigint) AS count,
            CAST(rand(10) * 10000 * count AS double) AS amount
            FROM loan_by_state_delta
            """)

# ะ’ั‹ะฒะตัั‚ะธ ะธัั…ะพะดะฝัƒัŽ ัั…ะตะผัƒ DataFrame
original_loans.printSchema()

root
  |-- addr_state: string (nullable = true)
  |-- count: integer (nullable = true)
 
# ะ’ั‹ะฒะตัั‚ะธ ะฝะพะฒัƒัŽ ัั…ะตะผัƒ DataFrame
loans.printSchema()
 
root
  |-- addr_state: string (nullable = true)
  |-- count: integer (nullable = true)
  |-- amount: double (nullable = true) # new column
 
# ะŸะพะฟั‹ั‚ะบะฐ ะดะพะฑะฐะฒะธั‚ัŒ ะฝะพะฒั‹ะน DataFrame (ั ะฝะพะฒั‹ะผ ัั‚ะพะปะฑั†ะพะผ) ะฒ ััƒั‰ะตัั‚ะฒัƒัŽั‰ัƒัŽ ั‚ะฐะฑะปะธั†ัƒ
loans.write.format("delta") 
           .mode("append") 
           .save(DELTALAKE_PATH)

Returns:

A schema mismatch detected when writing to the Delta table.
 
To enable schema migration, please set:
'.option("mergeSchema", "true")'
 
Table schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
 
Data schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
-- amount: double (nullable = true)
 
If Table ACLs are enabled, these options will be ignored. Please use the ALTER TABLE command for changing the schema.

Delta Lake๋Š” ์ž๋™์œผ๋กœ ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Œ€์‹  ์Šคํ‚ค๋งˆ๋ฅผ ์ ์šฉํ•˜๊ณ  ์“ฐ๊ธฐ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์—ด(๋˜๋Š” ์—ด ์ง‘ํ•ฉ)์ด ๋ถˆ์ผ์น˜๋ฅผ ์ผ์œผํ‚ค๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Spark๋Š” ์Šคํƒ ์ถ”์ ์—์„œ ๋‘ ์Šคํ‚ค๋งˆ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜์—ฌ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œ๋„๋ฅผ ์‹œํ–‰ํ•˜๋Š” ๋ฐ์—๋Š” ์–ด๋–ค ์ด์ ์ด ์žˆ๋‚˜์š”?

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

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

์ด ๋งˆ์ง€๋ง‰ ์žฅ์• ๋ฌผ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์€ ์‚ฌ์šฉ์ž๋Š” ์ ์ง„์ ์œผ๋กœ ํ…Œ์ด๋ธ”์— ๊ตฌ์กฐ๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฐ„๋‹จํ•œ "๋ฉ€ํ‹ฐํ™‰" ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๋ ค๋ฉด ๊ธฐ์‚ฌ๋ฅผ ์ฝ์–ด๋ณด์„ธ์š”. Delta Lake๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ๋•์…˜ ์ˆ˜์ค€์˜ ๋จธ์‹  ๋Ÿฌ๋‹.

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

๋ฐ์ดํ„ฐ ์•กํ™” ๋ฐฉ์ง€

์ด์ฏค ๋˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„์€ ์ด ๋ชจ๋“  ์†Œ๋ž€์ด ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ "์Šคํ‚ค๋งˆ ๋ถˆ์ผ์น˜" ์˜ค๋ฅ˜๊ฐ€ ์ž‘์—… ํ๋ฆ„์— ๊ฑธ๋ฆผ๋Œ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Delta Lake๋ฅผ ์ฒ˜์Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์™œ ํ•„์š”์— ๋”ฐ๋ผ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ด์„œ ๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ DataFrame์„ ์“ธ ์ˆ˜ ์—†๊ฒŒ ํ•˜์ง€ ์•Š๋‚˜์š”?

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

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

๋” ์ž์„ธํžˆ ๊ณ ๋ คํ•œ ํ›„ ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ํ•„์š”ํ•œ ์ƒˆ๋กœ์šด ์—ด์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”. ๋ฌธ์ œ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ํ•œ ์ค„๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์ฑ…์€ ๊ณ„ํš์„ ๋ฐœ์ „์‹œํ‚ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์Šคํ‚ค๋งˆ ์ง„ํ™”๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

์Šคํ‚ค๋งˆ ์ง„ํ™”๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ…Œ์ด๋ธ”์˜ ํ˜„์žฌ ์Šคํ‚ค๋งˆ๋ฅผ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํ‚ค๋งˆ๋ฅผ ์ž๋™์œผ๋กœ ์กฐ์ •ํ•˜์—ฌ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ƒˆ ์—ด์„ ํฌํ•จํ•˜๋Š” ์ถ”๊ฐ€ ๋˜๋Š” ๋‹ค์‹œ ์“ฐ๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ์ง„ํ™”๋Š” ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋‚˜์š”?

์ด์ „ ์„น์…˜์˜ ์˜ˆ๋ฅผ ๋”ฐ๋ผ ๊ฐœ๋ฐœ์ž๋Š” ์Šคํ‚ค๋งˆ ์ง„ํ™”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „์— ์Šคํ‚ค๋งˆ ๋ถˆ์ผ์น˜๋กœ ์ธํ•ด ๊ฑฐ๋ถ€๋˜์—ˆ๋˜ ์ƒˆ๋กœ์šด ์—ด์„ ์‰ฝ๊ฒŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ณ„ํš์˜ ์ง„ํ™”๋Š” ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. .option('mergeSchema', 'true') Spark ํŒ€์—๊ฒŒ .write ะธะปะธ .writeStream.

# ะ”ะพะฑะฐะฒัŒั‚ะต ะฟะฐั€ะฐะผะตั‚ั€ mergeSchema
loans.write.format("delta") 
           .option("mergeSchema", "true") 
           .mode("append") 
           .save(DELTALAKE_SILVER_PATH)

๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ ค๋ฉด ๋‹ค์Œ Spark SQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.

# ะกะพะทะดะฐะนั‚ะต ะณั€ะฐั„ะธะบ ั ะฝะพะฒั‹ะผ ัั‚ะพะปะฑั†ะพะผ, ั‡ั‚ะพะฑั‹ ะฟะพะดั‚ะฒะตั€ะดะธั‚ัŒ, ั‡ั‚ะพ ะทะฐะฟะธััŒ ะฟั€ะพัˆะปะฐ ัƒัะฟะตัˆะฝะพ
%sql
SELECT addr_state, sum(`amount`) AS amount
FROM loan_by_state_delta
GROUP BY addr_state
ORDER BY sum(`amount`)
DESC LIMIT 10

Delta Lake ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ธฐ: ์Šคํ‚ค๋งˆ ์ ์šฉ ๋ฐ ์ง„ํ™”
๋˜๋Š” ๋‹ค์Œ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ „์ฒด Spark ์„ธ์…˜์— ๋Œ€ํ•ด ์ด ์˜ต์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. spark.databricks.delta.schema.autoMerge = True Spark ๊ตฌ์„ฑ์—. ํ•˜์ง€๋งŒ ์Šคํ‚ค๋งˆ ์ ์šฉ์ด ์˜๋„์น˜ ์•Š์€ ์Šคํ‚ค๋งˆ ๋ถˆ์ผ์น˜์— ๋Œ€ํ•ด ๋” ์ด์ƒ ๊ฒฝ๊ณ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

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

๋‹ค์Œ ์œ ํ˜•์˜ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ์€ ํ…Œ์ด๋ธ” ์ถ”๊ฐ€ ๋˜๋Š” ์žฌ์ž‘์„ฑ ์ค‘ ์Šคํ‚ค๋งˆ ์ง„ํ™”์˜ ์ผ๋ถ€๋กœ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ƒˆ ์—ด ์ถ”๊ฐ€(๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค)
  • NullType์—์„œ ๋‹ค๋ฅธ ์œ ํ˜•์œผ๋กœ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ByteType์—์„œ ShortType์—์„œ IntegerType์œผ๋กœ ์Šน๊ฒฉํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ์ง„ํ™” ๋‚ด์—์„œ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ธฐํƒ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์Šคํ‚ค๋งˆ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฎ์–ด์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค. .option("overwriteSchema", "true"). ์˜ˆ๋ฅผ ๋“ค์–ด, "Foo" ์—ด์ด ์›๋ž˜ ์ •์ˆ˜์ด๊ณ  ์ƒˆ ์Šคํ‚ค๋งˆ๊ฐ€ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ์œ ํ˜•์ธ ๊ฒฝ์šฐ ๋ชจ๋“  Parquet(๋ฐ์ดํ„ฐ) ํŒŒ์ผ์„ ๋ฎ์–ด์จ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์—ด ์‚ญ์ œ
  • ๊ธฐ์กด ์—ด์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋Œ€๋กœ)
  • ๋Œ€์†Œ๋ฌธ์ž๋งŒ ๋‹ค๋ฅธ ์—ด ์ด๋ฆ„ ๋ฐ”๊พธ๊ธฐ(์˜ˆ: "Foo" ๋ฐ "foo")

๋งˆ์ง€๋ง‰์œผ๋กœ, Spark 3.0์˜ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๋ช…์‹œ์  DDL(ALTER TABLE ์‚ฌ์šฉ)์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›๋˜์–ด ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ด๋ธ” ์Šคํ‚ค๋งˆ์—์„œ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • ์—ด ์ถ”๊ฐ€
  • ์—ด ์ฃผ์„ ๋ณ€๊ฒฝ
  • ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ๊ฐ€ ๋ณด๊ด€๋˜๋Š” ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•˜๋Š” ๋“ฑ ํ…Œ์ด๋ธ”์˜ ๋™์ž‘์„ ๊ฒฐ์ •ํ•˜๋Š” ํ…Œ์ด๋ธ” ์†์„ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ์ง„ํ™”์˜ ์ด์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์Šคํ‚ค๋งˆ ์ง„ํ™”๋Š” ์–ธ์ œ๋“ ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜๋„ํ•˜๋‹ค ํ…Œ์ด๋ธ”์˜ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค(์‹ค์ˆ˜๋กœ DataFrame์— ์žˆ์–ด์„œ๋Š” ์•ˆ ๋  ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ์™€๋Š” ๋Œ€์กฐ์ ์ž…๋‹ˆ๋‹ค). ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š๊ณ ๋„ ์˜ฌ๋ฐ”๋ฅธ ์—ด ์ด๋ฆ„๊ณผ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์Šคํ‚ค๋งˆ๋ฅผ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

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

๋ฐ˜๋ฉด, ์ด ์ œ๋„์˜ ๋ฐœ์ „์€ ์ง‘ํ–‰์„ ๋‹จ์ˆœํ™”ํ•จ์œผ๋กœ์จ ์ด๋ฅผ ๋ณด์™„ํ•œ๋‹ค. ๊ฐ€์ •์˜ ์ž๋™ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ. ๊ฒฐ๊ตญ, ์—ด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณ„ํš์„ ๊ฐ•์ œ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์–‘์ด๋ฉฐ, ๊ณ„ํš์˜ ์ „๊ฐœ๋Š” ์Œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์†Œ์Œ ์–ต์ œ ๋ฐ ์‹ ํ˜ธ ์กฐ์ •์ด ๊ทธ ์–ด๋А ๋•Œ๋ณด๋‹ค ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๊ธฐ์‚ฌ์— ๊ธฐ์—ฌํ•ด ์ฃผ์‹  Mukul Murthy์™€ Pranav Anand์—๊ฒŒ๋„ ๊ฐ์‚ฌ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ์‹œ๋ฆฌ์ฆˆ์˜ ๋‹ค๋ฅธ ๊ธฐ์‚ฌ:

๋ธํƒ€ ํ˜ธ์ˆ˜ ํƒ์ƒ‰: ํŠธ๋žœ์žญ์…˜ ๋กœ๊ทธ ์••์ถ• ํ•ด์ œ

๋™์˜์ƒ ์žฌ์ƒ

๊ด€๋ จ ๊ธฐ์‚ฌ

Delta Lake๋ฅผ ํ™œ์šฉํ•œ ํ”„๋กœ๋•์…˜๊ธ‰ ๋จธ์‹  ๋Ÿฌ๋‹

๋ฐ์ดํ„ฐ ๋ ˆ์ดํฌ๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

์ฝ”์Šค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€