์คํ์์ค!
์คํค๋ง ์งํ
์คํค๋ง ๊ฐ์
๐์๊ฐ ์ฌํ : ์๋์์ ์์ธํ ๋ค๋ฃธ
๋ฒ์ ๊ด๋ฆฌ, ์ต์ ํ, VACUUM ํต์ฌ ์ ๋ฆฌ
Databricks ์ค์ต ์ค ํท๊ฐ๋ ธ๋ ๊ฐ๋ ๋ค์ ์ง์ ์ง๋ฌธํ๋ฉฐ ์ ๋ฆฌํ ๋ ธํธ
DESCRIBE HISTORY beans
Delta Lake๋ ํ ์ด๋ธ์ ์์ ํ๋ ๋ชจ๋ ์์ ์ ๋ฒ์ ์ผ๋ก ๊ธฐ๋กํ๋ค.
| version | operation |
|---|---|
| 0 | CREATE TABLE |
| 1 | WRITE |
| 2 | WRITE |
| 3 | UPDATE |
| 4 | UPDATE |
| 5 | DELETE |
| 6 | MERGE |
operationParameters : WHERE ์กฐ๊ฑด ๋ฑ ์์ธ ํ๋ผ๋ฏธํฐ ํ์ธ ๊ฐ๋ฅoperationMetrics : ์ถ๊ฐ/์ญ์ ๋ ํ, ํ์ผ ์ ํ์ธ ๊ฐ๋ฅ-- ๋ฒ์ ์ผ๋ก ์กฐํ
SELECT * FROM beans VERSION AS OF 1
SELECT * FROM beans@v1 -- ๋จ์ถ ๋ฌธ๋ฒ
-- ํ์์คํฌํ๋ก ์กฐํ
SELECT * FROM beans TIMESTAMP AS OF '2024-01-01'
-- ์์ ๋ทฐ๋ก ๋ฑ๋ก
CREATE OR REPLACE TEMP VIEW pre_delete_vw AS
SELECT * FROM beans VERSION AS OF 4
-- ํน์ ๋ฒ์ ์ผ๋ก ๋ณต์
RESTORE TABLE beans TO VERSION AS OF 5
๐ ์ง๋ฌธํ๋ ๊ฒ: CREATE OR REPLACE TEMP VIEW๋ ์ ํธ๋์ญ์
๋ก๊ทธ์ ์ ๋จ์๊น?
VIEW๋ ์ค์ ๋ฐ์ดํฐ ํ์ผ์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค. "์ด๋ป๊ฒ ๋ณผ์ง"์ ๋ํ ์ ์๋ง ์ ์ฅํ๊ธฐ ๋๋ฌธ์ Delta ํธ๋์ญ์ ๋ก๊ทธ์ ๊ธฐ๋ก๋์ง ์๋๋ค. TEMP ์ฌ๋ถ์ ๋ฌด๊ดํ๊ฒ, ์ผ๋ฐ VIEW๋ ๋ง์ฐฌ๊ฐ์ง.
OPTIMIZE beans ZORDER BY (name)
์ด ๋ช ๋ น ํ๋๊ฐ ๋ ๊ฐ์ง๋ฅผ ๋์์ ํ๋ค:
โ Compaction (ํ์ผ ์์ถ)
์์ ํ์ผ ์๋ฐฑ ๊ฐ โ ํฐ ํ์ผ ๋ช ๊ฐ๋ก ๋ณํฉ
โก Z-Ordering (๋ฐ์ดํฐ ์ฌ๋ฐฐ์น)
name ๊ธฐ์ค์ผ๋ก ๋น์ทํ ๊ฐ์ ๊ฐ์ ํ์ผ์ ๋ชจ์๋
Before: ํ์ผ1 [Alice, Zoe, Bob] ํ์ผ2 [Carol, Alice, Zoe]
After: ํ์ผ1 [Alice, Alice] ํ์ผ2 [Bob, Bob] ํ์ผ3 [Carol, Carol]
โ WHERE name = 'Alice' ์ฟผ๋ฆฌ ์ ํ์ผ 1๊ฐ๋ง ์ฝ์ผ๋ฉด ๋จ (Data Skipping)
๐ ์ง๋ฌธํ๋ ๊ฒ: ํ์ผ ๊ฐ์๋ ์ด๋ป๊ฒ ํ์ธํด?
DESCRIBE DETAIL beans
-- numFiles, sizeInBytes ์ปฌ๋ผ ํ์ธ
OPTIMIZE ๊ฒฐ๊ณผ ์ถ๋ ฅ์์ numFilesAdded, numFilesRemoved๋ก ๋ณํ๋ฅผ ํ์ธํ ์ ์๋ค. ํ์ฌ ์ค์ต์ beans ํ
์ด๋ธ์ numFiles: 1, sizeInBytes: 1685 (~1.6KB)๋ก ๋งค์ฐ ์์์ Z-Order ํจ๊ณผ๊ฐ ๊ฑฐ์ ์๋ค. ๋ฐ์ดํฐ๊ฐ ํด์๋ก ํจ๊ณผ๊ฐ ๊ทน์ ์ผ๋ก ๋ํ๋จ.
-- ์ญ์ ๋ ํ์ผ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ (์ค์ ์ญ์ ์ ํจ)
VACUUM beans RETAIN 0 HOURS DRY RUN
-- ์ค์ ์ญ์
VACUUM beans RETAIN 0 HOURS
๐ ์ง๋ฌธํ๋ ๊ฒ: DRY RUN์ด ์ ํํ ๋ญ์ผ?
"์ค์ ๋ก ์คํํ์ง ๋ง๊ณ , ๋ญ ํ ์ง๋ง ๋ณด์ฌ์ค"๋ผ๋ ๋ป. ์ญ์ ๋์ ํ์ผ ๋ชฉ๋ก๋ง ์ถ๋ ฅํ๋ค. RETAIN 0 HOURS๋ ํ์ฌ ๋ฒ์ ์ธ ๋ชจ๋ ํ์ผ์ ์ญ์ ํ๋ ์ํํ ์ต์
์ด๋ผ DRY RUN์ผ๋ก ๋จผ์ ํ์ธํ๋ ๊ฒ์ด ์ค์ํ๋ค.
๊ธฐ๋ณธ ๋ณด์กด ๊ธฐ๊ฐ์ 7์ผ์ด๋ฉฐ, ์๋ ์ค์ ์ผ๋ก ์ฐํ ๊ฐ๋ฅ (ํ๋ก๋์ ์์๋ ์ฃผ์):
SET spark.databricks.delta.retentionDurationCheck.enabled = false;
SET spark.databricks.delta.vacuum.logging.enabled = true;
SELECT * FROM beans@v1
-- FileReadException: ํ์ผ ์์ โ ์๋ฌ ๋ฐ์
๐ ์ง๋ฌธํ๋ ๊ฒ: VACUUM ํด๋ DESCRIBE HISTORY๋ ๋ณด์ด๋ ์ด์ ?
VACUUM์ ํ์ผ์ ์ง์ฐ๋ ๊ฒ์ด์ง, ํธ๋์ญ์ ๋ก๊ทธ๋ฅผ ์ง์ฐ๋ ๊ฒ ์๋๋ค.
beans/
โโโ _delta_log/ โ ๋ก๊ทธ ํ์ผ (VACUUM์ด ๊ฑด๋๋ฆฌ์ง ์์)
โ โโโ 00000.json โ "v0: ํ
์ด๋ธ ์์ฑ"
โ โโโ 00001.json โ "v1: ๋ฐ์ดํฐ ์ถ๊ฐ"
โ
โโโ part-0001.parquet โ ์ค์ ๋ฐ์ดํฐ ํ์ผ (VACUUM์ด ์ญ์ )
DESCRIBE HISTORY โ ๋ก๊ทธ๋ฅผ ์ฝ๋ ๊ฒ โ VACUUM ํ์๋ ๋ณด์beans@v1 ์กฐํ โ ์ค์ ํ์ผ์ ์ฐพ๋ ๊ฒ โ VACUUM ํ FileReadException์ฆ, VACUUM ํ beans@v1์์ ์๋ฌ๊ฐ ๋๋ ๊ฒ์ด ์ ์์ด๋ค. ์๋ฌ๊ฐ ๋์ผ VACUUM์ด ์ ๋๋ก ๋ ๊ฒ.
| ๋ช ๋ น์ด | ์ญํ | ๋ก๊ทธ ๊ธฐ๋ก |
|---|---|---|
DESCRIBE HISTORY | ํธ๋์ญ์ ๊ธฐ๋ก ์กฐํ | - |
SELECT ... VERSION AS OF | ์ด์ ๋ฒ์ ์กฐํ | - |
RESTORE TABLE | ์ด์ ๋ฒ์ ์ผ๋ก ๋ณต์ | โ |
OPTIMIZE ZORDER BY | ํ์ผ ์์ถ + ๋ฐ์ดํฐ ์ฌ๋ฐฐ์น | โ |
VACUUM DRY RUN | ์ญ์ ๋์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | - |
VACUUM | ์ค๋๋ ํ์ผ ์๊ตฌ ์ญ์ | โ (์ค์ ์) |