ํค์ด ํ๋ธ๋ฅด! ๋๋ ๊ธฐ์ฌ์ ๋ฒ์ญ์ ๋น์ ์ ๊ด์ฌ์ ์ ์ํฉ๋๋ค
์ฐ๋ฆฌ์ ๊ฒฝํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐ์ดํฐ๋ ์ง์์ ์ผ๋ก ์ถ์ ๋๊ณ ์งํํ๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ก๊ธฐ ์ํด ์ธ๊ณ์ ๋ํ ์ฐ๋ฆฌ์ ์ ์ ๋ชจ๋ธ์ ์๋ก์ด ๋ฐ์ดํฐ์ ์ ์ํด์ผ ํ๋ฉฐ, ๊ทธ ์ค ์ผ๋ถ๋ ์๋ก์ด ์ฐจ์, ์ฆ ์ฐ๋ฆฌ๊ฐ ์ด์ ์ ์ ํ ๋ชฐ๋๋ ๊ฒ์ ๊ด์ฐฐํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ ํฌํจํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ ์ ๋ชจ๋ธ์ ์ฐ๋ฆฌ๊ฐ ์๋ก์ด ์ ๋ณด๋ฅผ ๋ถ๋ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ํ ์ด๋ธ ์คํค๋ง์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค.
์ด๋ก ์ธํด ์คํค๋ง ๊ด๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋น์ฆ๋์ค ๋ชฉํ์ ์๊ตฌ ์ฌํญ์ด ๋ณ๊ฒฝ๋จ์ ๋ฐ๋ผ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๋ณ๊ฒฝ๋ฉ๋๋ค. Delta Lake๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์๋ก์ด ์ธก์ ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ๊ฐ๋จํ ์๋ฏธ ์ฒด๊ณ์ ์ก์ธ์คํ์ฌ ํ ์ด๋ธ ์คํค๋ง๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ์๋ ์ฌ์ฉ์๊ฐ ์ค์๋ก ์ค๋ฅ๋ ๋ถํ์ํ ๋ฐ์ดํฐ๋ก ํ ์ด๋ธ์ ์ค์ผ์ํค๋ ๊ฒ์ ๋ฐฉ์งํ๋ Schema Enforcement์ ์ค์ํ ๋ฐ์ดํฐ์ ์ ์ด์ ์ ์ ํ ์์น์ ์๋์ผ๋ก ์ถ๊ฐํ ์ ์๋ Schema Evolution์ด ํฌํจ๋ฉ๋๋ค. ์ด ๊ธฐ์ฌ์์๋ ์ด๋ฌํ ๋๊ตฌ์ ์ฌ์ฉ์ ๋ํด ์์ธํ ์ค๋ช ํฉ๋๋ค.
ํ ์ด๋ธ ์คํค๋ง ์ดํด
Apache Spark์ ๊ฐ DataFrame์๋ ๋ฐ์ดํฐ ์ ํ, ์ด ๋ฐ ๋ฉํ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฐ์ดํฐ์ ํํ๋ฅผ ์ ์ํ๋ ์คํค๋ง๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. Delta Lake๋ฅผ ์ฌ์ฉํ๋ฉด ํ
์ด๋ธ ์คํค๋ง๊ฐ ํธ๋์ญ์
๋ก๊ทธ ๋ด์ JSON ํ์์ผ๋ก ์ ์ฅ๋ฉ๋๋ค.
์คํค๋ง ์ ์ฉ์ด๋ ๋ฌด์์ ๋๊น?
์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ๋ผ๊ณ ๋ ํ๋ ์คํค๋ง ์ ์ฉ์ ํ ์ด๋ธ ์คํค๋ง์ ์ผ์นํ์ง ์๋ ๋ ์ฝ๋๋ฅผ ๊ฑฐ๋ถํ์ฌ ๋ฐ์ดํฐ ํ์ง์ ๋ณด์ฅํ๋ Delta Lake์ ๋ณดํธ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์์ฝ๋ง ๋ฐ๋ ์ธ๊ธฐ ๋ ์คํ ๋์ ์ฌ์ฃผ์ธ์ฒ๋ผ ๊ทธ๋ ํ ์ด๋ธ์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ์ ๊ฐ ์ด์ด ํด๋น ์์ ์ด ๋ชฉ๋ก์ ์๋์ง ํ์ธํฉ๋๋ค(์ฆ, "์์ฝ"์ด ์๋ ๊ฒฝ์ฐ). ๊ฐ๊ฐ), ๋ชฉ๋ก์ ์๋ ์ด์ด ์๋ ํญ๋ชฉ์ ๋ชจ๋ ๊ฑฐ๋ถํฉ๋๋ค.
์คํค๋ง ์ ์ฉ์ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
Delta Lake๋ ์ฐ๊ธฐ ์ ์คํค๋ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฆ, ํ
์ด๋ธ์ ๋ํ ๋ชจ๋ ์ ์ฐ๊ธฐ๋ ์ฐ๊ธฐ ์๊ฐ์ ๋์ ํ
์ด๋ธ์ ์คํค๋ง์์ ํธํ์ฑ์ ํ์ธํฉ๋๋ค. ์คํค๋ง๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด Delta Lake๋ ํธ๋์ญ์
์ ์์ ํ ๋๋๋ฆฌ๊ณ (๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋์ง ์์) ์์ธ๋ฅผ ๋ฐ์์์ผ ์ฌ์ฉ์์๊ฒ ๋ถ์ผ์น๋ฅผ ์๋ฆฝ๋๋ค.
Delta Lake๋ ๋ค์ ๊ท์น์ ์ฌ์ฉํ์ฌ ๋ ์ฝ๋๊ฐ ํ
์ด๋ธ๊ณผ ํธํ๋๋์ง ํ์ธํฉ๋๋ค. ์์ฑ๋ DataFrame:
- ๋์ ํ ์ด๋ธ์ ์คํค๋ง์ ์๋ ์ถ๊ฐ ์ด์ ํฌํจํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก ๋ค์ด์ค๋ ๋ฐ์ดํฐ์ ํ ์ด๋ธ์ ๋ชจ๋ ์ด์ด ํฌํจ๋์ด ์์ง ์์ผ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค. ์ด๋ฌํ ์ด์๋ ๋จ์ํ XNUMX ๊ฐ์ด ํ ๋น๋ฉ๋๋ค.
- ๋์ ํ ์ด๋ธ์ ์ด ๋ฐ์ดํฐ ์ ํ๊ณผ ๋ค๋ฅธ ์ด ๋ฐ์ดํฐ ์ ํ์ ๊ฐ์ง ์ ์์ต๋๋ค. ๋์ ํ ์ด๋ธ์ ์ด์ 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๋ฅผ ์ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ํฌํ๋ก์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ๋ฌด์จ ์ผ์ด ์์ด๋ DataFrame์ ์์ฑํ ์ ์๋๋ก ํ์์ ๋ฐ๋ผ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ด๋ป์ต๋๊น?
์ ์๋ด์ "XNUMX ์จ์ค์ ์๋ฐฉ์ XNUMX ํ์ด๋์ ์น๋ฃ ๊ฐ์น๊ฐ ์์ต๋๋ค." ์ด๋ ์์ ์์ ์คํค๋ง๋ฅผ ์ ์ฉํ๋ ๋ฐ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ์ ํ ํธํ์ฑ ๋ฌธ์ ๊ฐ ์ถ์ ํ ๋จธ๋ฆฌ๋ฅผ ๋๋ฌ๋ผ ๊ฒ์ ๋๋ค. ๊ฒ๋ณด๊ธฐ์ ๋์ง์ ์ธ ์์ ๋ฐ์ดํฐ ์์ค์๋ ์ฃ์ง ์ผ์ด์ค, ๊นจ์ง ์ด, ์๋ชป๋ ํ์์ ๋งคํ ๋๋ ๊ฟ๊พธ๋ ๋ค๋ฅธ ๋๋ ค์ด ๊ฒ๋ค์ด ํฌํจ๋ ์ ์์ต๋๋ค. .์ ๋ชฝ ์์์. ๊ฐ์ฅ ์ข์ ์ ๊ทผ ๋ฐฉ์์ ์คํค๋ง ์ ์ฉ์ ํตํด ๊ฒ์ดํธ์์ ์ด๋ฌํ ์ ๋ค์ ๋ง๊ณ ๋์ค์ ํ๋ก๋์ ์ฝ๋์ ์ด๋์ด ๊น์ด๋ฅผ ๋ฐฐํํ๊ธฐ ์์ํ๋ ์์ ์ด ์๋๋ผ ๋น ์์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ค.
์คํค๋ง ์ ์ฉ์ ์ฌ์ฉ์๊ฐ ์ง์ ๋ณ๊ฒฝ์ ํ์ธํ์ง ์๋ ํ ํ ์ด๋ธ์ ์คํค๋ง๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ํ์ ์ ์ค๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ ์ด์ด ๋๋ฌด ์์ฃผ ์ถ๊ฐ๋์ด ์ด์ ์ ์ค์ํ๊ณ ์์ถ๋ ํ ์ด๋ธ์ด ๋ฐ์ดํฐ ๋ฒ๋์ผ๋ก ์ธํด ๊ฐ์น์ ์ ์ฉ์ฑ์ ์์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฐ์ดํฐ ํฌ์์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์๋์ ์ผ๋ก ๋์ ํ์ค์ ์ค์ ํ๊ณ ๋์ ํ์ง์ ๊ธฐ๋ํ๋๋ก ์ฅ๋ คํจ์ผ๋ก์จ ์คํค๋ง ์ ์ฉ์ ์ค๊ณ๋ ๋๋ก ์ ํํ๊ฒ ์๋ํ์ฌ ์ฑ์คํจ์ ์ ์งํ๊ณ ์คํ๋ ๋์ํธ๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ ์ ์๋๋ก ๋์์ค๋๋ค.
๋ ๊ณ ๋ คํ ํ์ ๊ทํ๊ฐ ์ ๋ง๋ก ํ์ํ ์ ์ด ์ถ๊ฐ - ๋ฌธ์ ์์ต๋๋ค. ์๋๋ ํ ์ค ์์ ์ ๋๋ค. ํด๊ฒฐ์ฑ ์ ํ๋ก ์งํ์ ๋๋ค!
์คํค๋ง ์งํ๋ ๋ฌด์์ ๋๊น?
์คํค๋ง ์งํ๋ ์ฌ์ฉ์๊ฐ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ ๋ฐ์ดํฐ์ ์ผ์นํ๋๋ก ํ ์ด๋ธ์ ํ์ฌ ์คํค๋ง๋ฅผ ์ฝ๊ฒ ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ํ๋ ์ด์์ ์ ์ด์ ํฌํจํ๋๋ก ์คํค๋ง๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ๊ธฐ ์ํด ์ถ๊ฐ ๋๋ ๋ฎ์ด์ฐ๊ธฐ ์์ ์ ์ํํ ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
์คํค๋ง ์งํ๋ ์ด๋ป๊ฒ ์๋ํฉ๋๊น?
์ด์ ์น์
์ ์์ ๋ฐ๋ผ ๊ฐ๋ฐ์๋ ์คํค๋ง ์งํ๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ์ฌ ์คํค๋ง ๋ถ์ผ์น๋ก ์ธํด ์ด์ ์ ๊ฑฐ๋ถ๋ ์ ์ด์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ์ถ๊ฐํ์ฌ ํ๋ก ์งํ๊ฐ ํ์ฑํ๋ฉ๋๋ค. .option('mergeSchema', 'true')
์คํํฌ ํ์๊ฒ .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
๋๋ ๋ค์์ ์ถ๊ฐํ์ฌ ์ ์ฒด Spark ์ธ์
์ ๋ํด ์ด ์ต์
์ ์ค์ ํ ์ ์์ต๋๋ค. spark.databricks.delta.schema.autoMerge = True
Spark ๊ตฌ์ฑ์. ๊ทธ๋ฌ๋ ์คํค๋ง ์ ์ฉ์ ๋ ์ด์ ์๋ํ์ง ์์ ์คํค๋ง ๋ถ์ผ์น์ ๋ํด ๊ฒฝ๊ณ ํ์ง ์์ผ๋ฏ๋ก ์ฃผ์ํด์ ์ฌ์ฉํ์ญ์์ค.
์์ฒญ์ ๋งค๊ฐ๋ณ์ ํฌํจ mergeSchema
, DataFrame์๋ ์์ง๋ง ๋์ ํ
์ด๋ธ์๋ ์๋ ๋ชจ๋ ์ด์ด ์ฐ๊ธฐ ํธ๋์ญ์
์ ์ผ๋ถ๋ก ์คํค๋ง ๋์ ์๋์ผ๋ก ์ถ๊ฐ๋ฉ๋๋ค. ์ค์ฒฉ ํ๋๋ ์ถ๊ฐํ ์ ์์ผ๋ฉฐ ํด๋น ๊ตฌ์กฐ ์ด์ ๋์ ์ถ๊ฐ๋ฉ๋๋ค.
๋ ์ง ์์ง๋์ด์ ๋ฐ์ดํฐ ๊ณผํ์๋ ์ด ์ต์ ์ ์ฌ์ฉํ์ฌ ์ด์ ์ด์ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ์กด ๋ชจ๋ธ์ ์ค๋จํ์ง ์๊ณ ๊ธฐ์กด ๊ธฐ๊ณ ํ์ต ์์ฐ ํ ์ด๋ธ์ ์ ์ด(์๋ง๋ ์ต๊ทผ ์ถ์ ๋ ๋ฉํธ๋ฆญ ๋๋ ์ด๋ฒ ๋ฌ ํ๋งค ์์น ์ด)์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
๋ค์ ์ ํ์ ์คํค๋ง ๋ณ๊ฒฝ์ ํ ์ด๋ธ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฎ์ด์ฐ๋ ๋์ ์คํค๋ง ์งํ์ ์ผ๋ถ๋ก ํ์ฉ๋ฉ๋๋ค.
- ์ ์ด ์ถ๊ฐ(๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์๋๋ฆฌ์ค)
- NullType -> ๋ค๋ฅธ ์ ํ์์ ๋ฐ์ดํฐ ์ ํ ๋ณ๊ฒฝ ๋๋ ByteType -> ShortType -> IntegerType์์ ์น๊ฒฉ
์คํค๋ง ์งํ์ ์ผ๋ถ๋ก ํ์ฉ๋์ง ์๋ ๊ธฐํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์์ ์ถ๊ฐํ์ฌ ์คํค๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์จ์ผ ํฉ๋๋ค. .option("overwriteSchema", "true")
. ์๋ฅผ ๋ค์ด "Foo" ์ด์ด ์๋ ์ ์์ด๊ณ ์ ์คํค๋ง๊ฐ ๋ฌธ์์ด ๋ฐ์ดํฐ ์ ํ์ธ ๊ฒฝ์ฐ ๋ชจ๋ Parquet(data) ํ์ผ์ ๋ฎ์ด์จ์ผ ํฉ๋๋ค. ์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ด ์ญ์
- ๊ธฐ์กด ์ด์ ๋ฐ์ดํฐ ์ ํ ๋ณ๊ฒฝ(์ ์๋ฆฌ์์)
- ๋์๋ฌธ์๋ง ๋ค๋ฅธ ์ด ์ด๋ฆ ๋ฐ๊พธ๊ธฐ(์: "Foo" ๋ฐ "foo")
๋ง์ง๋ง์ผ๋ก Spark 3.0์ ๋ค์ ๋ฆด๋ฆฌ์ค์์๋ ๋ช ์์ DDL(ALTER TABLE ์ฌ์ฉ)์ด ์์ ํ ์ง์๋์ด ์ฌ์ฉ์๊ฐ ํ ์ด๋ธ ์คํค๋ง์์ ๋ค์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- ์ด ์ถ๊ฐ
- ์ด ์ฃผ์ ๋ณ๊ฒฝ
- ํธ๋์ญ์ ๋ก๊ทธ ๋ณด๊ด ๊ธฐ๊ฐ ์ค์ ๊ณผ ๊ฐ์ด ํ ์ด๋ธ ๋์ ๋ฐฉ์์ ๊ฒฐ์ ํ๋ ํ ์ด๋ธ ์์ฑ ์ค์
์คํค๋ง ์งํ์ ์ด์ ์ ๋ฌด์์ ๋๊น?
๋์์ ์งํ๋ ์ธ์ ๋ ์ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ํ๋ค ํ ์ด๋ธ์ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค(์ค์๋ก DataFrame์ ์์ผ๋ฉด ์ ๋๋ ์ด์ ์ถ๊ฐํ ๊ฒฝ์ฐ์ ๋ฐ๋) ์ด๋ ๋ช ์์ ์ผ๋ก ์ ์ธํ์ง ์๊ณ ๋ ์ฌ๋ฐ๋ฅธ ์ด ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ์ ํ์ ์๋์ผ๋ก ์ถ๊ฐํ๋ฏ๋ก ์คํค๋ง๋ฅผ ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋๋ค.
๊ฒฐ๋ก
์คํค๋ง ์ ์ฉ์ ํ ์ด๋ธ๊ณผ ํธํ๋์ง ์๋ ์ ์ด ๋๋ ๊ธฐํ ์คํค๋ง ๋ณ๊ฒฝ์ ๊ฑฐ๋ถํฉ๋๋ค. ์ด๋ฌํ ๋์ ํ์ค์ ์ค์ ํ๊ณ ์ ์งํจ์ผ๋ก์จ ๋ถ์๊ฐ์ ์์ง๋์ด๋ ๋ฐ์ดํฐ์ ์์กดํ์ฌ ์ต๊ณ ์์ค์ ๋ฌด๊ฒฐ์ฑ์ ํ๋ณดํ๊ณ ๋ฐ์ดํฐ์ ๋ํด ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ๊ฒ ์ถ๋ก ํ์ฌ ๋ ๋์ ๋น์ฆ๋์ค ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์์ต๋๋ค.
๋ฐ๋ฉด์ ์คํค๋ง ์งํ๋ ๋จ์ํ๋ฅผ ํตํด ์ํ์ ๋ณด์ํฉ๋๋ค. ๊ฐ์ ์ ์๋ ์คํค๋ง ๋ณ๊ฒฝ. ๊ฒฐ๊ตญ ์ด์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค.
์คํค๋ง ์ ์ฉ์ ์์ด๊ณ ์คํค๋ง ์งํ๋ ์์ ๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ ธ์ด์ฆ ๊ฐ์ ๋ฐ ์ ํธ ํ๋์ด ๊ทธ ์ด๋ ๋๋ณด๋ค ์ฌ์์ง๋๋ค.
๋ํ ์ด ๊ธฐ์ฌ์ ๊ธฐ์ฌํ Mukul Murthy์ Pranav Anand์๊ฒ๋ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด ์๋ฆฌ์ฆ์ ๋ค๋ฅธ ๊ธฐ์ฌ:
๊ด๋ จ ๊ธฐ์ฌ
์ถ์ฒ : habr.com