เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบฐเป€เบฅเบชเบฒเบš Delta: เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema เปเบฅเบฐเบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™

Hey Habr! เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เป„เบ”เป‰โ€‹ "เบเบฒเบ™เบ”เปเบฒเบ™เป‰เปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบฐเป€เบฅเบชเบฒเบš Delta: เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema & Evolution" เบœเบนเป‰เบ‚เบฝเบ™ Burak Yavuz, Brenner Heintz เปเบฅเบฐ Denny Lee, เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบเบฐเบเบฝเบกเปƒเบ™เบ„เบงเบฒเบกเบ„เบฒเบ”เบซเบงเบฑเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบซเบผเบฑเบเบชเบนเบ”. เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบ‚เปเป‰เบกเบนเบ™ เบˆเบฒเบ OTUS.

เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ—เบฐเป€เบฅเบชเบฒเบš Delta: เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema เปเบฅเบฐเบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™

เบ‚เปเป‰เบกเบนเบ™, เบ„เบทเบเบฑเบšเบ›เบฐเบชเบปเบšเบเบฒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบกเปˆเบ™เบชเบฐเบชเบปเบก เปเบฅเบฐเบžเบฑเบ”เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡. เป€เบžเบทเปˆเบญเบฎเบฑเบเบชเบฒ, เบฎเบนเบšเปเบšเบšเบˆเบดเบ”เปƒเบˆเบ‚เบญเบ‡เป‚เบฅเบเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบ›เบฑเบšเบ•เบปเบงเป€เบ‚เบปเป‰เบฒเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ, เบšเบฒเบ‡เบญเบฑเบ™เบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบกเปˆ - เบงเบดเบ—เบตเบเบฒเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡เบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป€เบ„เบตเบเบ„เบดเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฒเบเปˆเบญเบ™. เบฎเบนเบšเปเบšเบšเบ—เบฒเบ‡เบˆเบดเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบšเปเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบงเบดเบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบ›เบฐเป€เบžเบ”เปเบฅเบฐเบ›เบธเบ‡เปเบ•เปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบกเปˆ.

เบ™เบตเป‰เบ™เปเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ›เบซเบฒเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡ schema. เป€เบกเบทเปˆเบญเบ„เบงเบฒเบกเบ—เป‰เบฒเบ—เบฒเบเบ—เบฒเบ‡เบ—เบธเบฅเบฐเบเบดเบ” เปเบฅเบฐเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบฒเบกเป€เบงเบฅเบฒ, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบเปเปˆเบ„เบทเบเบฑเบ™. Delta Lake เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐเปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบงเบฑเบ”เปเบ—เบเปƒเบซเบกเปˆเบเป‰เบญเบ™เบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เปเป‰เบกเบนเบ™. เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡ semantics เบ‡เปˆเบฒเบเป†เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบเบฒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบฅเบงเบกเบกเบตเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema, เป€เบŠเบดเปˆเบ‡เบ›เบปเบเบ›เป‰เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบˆเบฒเบเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบกเบปเบ™เบฅเบฐเบžเบดเบ”เป‚เบ”เบเบšเปเปˆเป„เบ”เป‰เบ•เบฑเป‰เบ‡เปƒเบˆเบ”เป‰เบงเบเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบซเบผเบทเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™, เปเบฅเบฐ Schema Evolution, เป€เบŠเบดเปˆเบ‡เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ–เบฑเบ™เปƒเบซเบกเปˆเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบกเบตเบ„เบธเบ™เบ„เปˆเบฒเบ–เบทเบเป€เบžเบตเปˆเบกเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบฅเบดเบเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡

เปเบ•เปˆเบฅเบฐ DataFrame เปƒเบ™ Apache Spark เบกเบต schema เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เป€เบŠเบฑเปˆเบ™: เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™, เบ–เบฑเบ™, เปเบฅเบฐ metadata. เบ”เป‰เบงเบ Delta Lake, เปเบœเบ™เบœเบฑเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบฎเบนเบšเปเบšเบš JSON เบžเบฒเบเปƒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒ.

เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema, เป€เบŠเบดเปˆเบ‡เป€เบญเบตเป‰เบ™เบเบฑเบ™เบงเปˆเบฒ Schema Validation, เปเบกเปˆเบ™เบเบปเบ™เป„เบเบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเปƒเบ™ Delta Lake เบ—เบตเปˆเบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบšเบฑเบ™เบ—เบถเบเบ—เบตเปˆเบšเปเปˆเบเบปเบ‡เบเบฑเบš schema เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš hostess เบขเบนเปˆเบซเบ™เป‰เบฒเบฎเป‰เบฒเบ™เบ‚เบญเบ‡เบฎเป‰เบฒเบ™เบญเบฒเบซเบฒเบ™เบ—เบตเปˆเบˆเบญเบ‡เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เบ™เบฒเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เปเบฅเปเบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบ–เบฑเบ™เบ—เบตเปˆเบ„เบฒเบ”เป„เบงเป‰ (เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบšเปเปˆเบงเปˆเบฒเบˆเบฐเบกเบต "เบเบฒเบ™เบˆเบญเบ‡" เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ„เบปเบ™. ), เปเบฅเบฐเบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปƒเบ”เป†เบ—เบตเปˆเบกเบตเบ„เปเบฅเปเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ.

เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

Delta Lake เปƒเบŠเป‰เบเบฒเบ™เบเบงเบ”เบชเบญเบš schema-on-write, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เบ‚เบฝเบ™เปƒเบซเบกเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ–เบทเบเบเบงเบ”เบชเบญเบšเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš schema เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™. เบ–เป‰เบฒ schema เบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡, Delta Lake เบˆเบฐเบเบปเบเป€เบฅเบตเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ” (เบšเปเปˆเบกเบตเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰) เปเบฅเบฐเบเบปเบเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เป€เบžเบทเปˆเบญเปเบˆเป‰เบ‡เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบ„เบงเบฒเบกเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡.
Delta Lake เปƒเบŠเป‰เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡. เบเบญเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™เป„เบ”เป‰:

  • เบšเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบ–เบฑเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบ‚เบญเบ‡เบ•เบฒเบ•เบฒเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบ. เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบˆเบฐเบ”เบตเบ–เป‰เบฒเบ‚เปเป‰เบกเบนเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒเบšเปเปˆเบกเบตเบ„เปเบฅเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ - เบ–เบฑเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบ–เบทเบเบกเบญเบšเบซเบกเบฒเบเบ„เปˆเบฒ null.
  • เบšเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบ–เบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบˆเบฒเบเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ–เบฑเบ™เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเปเบฒเบ. เบ–เป‰เบฒเบ–เบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบกเบตเบ‚เปเป‰เบกเบนเบ™ StringType, เปเบ•เปˆเบ„เปเบฅเปเบฒเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เปƒเบ™ DataFrame เบกเบตเบ‚เปเป‰เบกเบนเบ™ IntegerType, เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เบˆเบฐเบ–เบดเป‰เบกเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เปเบฅเบฐเบ›เป‰เบญเบ‡เบเบฑเบ™เบšเปเปˆเปƒเบซเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ‚เบฝเบ™.
  • เบšเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบŠเบทเปˆเบ–เบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบต. เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบกเบตเบ„เปเบฅเปเบฒเบ—เบตเปˆเบกเบตเบŠเบทเปˆ 'Foo' เปเบฅเบฐ 'foo' เบเปเบฒเบ™เบปเบ”เบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฝเบงเบเบฑเบ™. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ Spark เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เป‚เบซเบกเบ”เบ—เบตเปˆเบฅเบฐเบญเบฝเบ”เบญเปˆเบญเบ™เบซเบผเบทเบ•เบปเบงเบžเบดเบกเบ™เป‰เบญเบ (เบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™), Delta Lake เปเบกเปˆเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบเปเบฅเบฐเบ™เบตเปเบ•เปˆเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบฎเบนเป‰เบชเบถเบเบžเบฒเบเปƒเบ™เบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒ schema. 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 เบงเบฒเบ‡ schema เปเบฅเบฐเบขเบธเบ”เบเบฒเบ™เบ‚เบฝเบ™. เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเบ–เบฑเบ™เปƒเบ” (เบซเบผเบทเบŠเบธเบ”เบ‚เบญเบ‡เบ„เปเบฅเปเบฒ) เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, Spark เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡ schemas เบˆเบฒเบ stack trace เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบš.

เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เปเบกเปˆเบ™เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เบตเปˆเป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ”เบตเป€เบฅเบตเบ”เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เป€เบ›เบฑเบ™เบœเบนเป‰เบฎเบฑเบเบชเบฒเบ›เบฐเบ•เบนเป„เบ›เบซเบฒเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเบฐเบญเบฒเบ”, เบ›เปˆเบฝเบ™เปเบ›เบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบซเบผเบทเบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบ. เป‚เบ”เบเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเปƒเบŠเป‰เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡:

  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ
  • BI dashboards
  • เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‚เปเป‰เบกเบนเบ™ เปเบฅเบฐเบเบฒเบ™เบชเป‰เบฒเบ‡เบžเบฒเบš
  • เบฅเบฐโ€‹เบšเบปเบšโ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบฎเบฝเบโ€‹เบฎเป‰เบญเบ‡โ€‹เปƒเบซเป‰โ€‹เบกเบตโ€‹เป‚เบ„เบ‡โ€‹เบชเป‰เบฒเบ‡โ€‹เบชเบนเบ‡โ€‹, เบเบฒเบ™โ€‹เบžเบดเบกโ€‹เบขเปˆเบฒเบ‡โ€‹เปเบ‚เบ‡โ€‹เปเบฎเบ‡ schemas semanticโ€‹.

เป€เบžเบทเปˆเบญเบเบฐเบเบฝเบกเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเปเบฒเบฅเบฑเบšเบญเบธเบ›เบฐเบชเบฑเบเบชเบธเบ”เบ—เป‰เบฒเบเบ™เบตเป‰, เบœเบนเป‰เปƒเบŠเป‰เบซเบผเบฒเบเบ„เบปเบ™เปƒเบŠเป‰เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ "multi-hop" เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบ„เปˆเบญเบเป†เปเบ™เบฐเบ™เปเบฒเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เป€เบžเบทเปˆเบญเบฎเบฝเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบšเบปเบ”เบ„เบงเบฒเบก เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบเบฑเบš Delta Lake.

เปเบ™เปˆเบ™เบญเบ™, เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เป„เบ”เป‰เบ—เบธเบเบšเปˆเบญเบ™เปƒเบ™เบ—เปเปˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เปเบ•เปˆเบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบเบฒเบ™เบ–เปˆเบฒเบเบ—เบญเบ”เป„เบ›เบซเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบญเบธเบเบญเบฑเปˆเบ‡เป€เบžเบฒเบฐเบงเปˆเบฒ, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบฅเบทเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบžเบตเปˆเบกเบ„เปเบฅเปเบฒเบญเบทเปˆเบ™เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบ‚เบฒเป€เบ‚เบปเป‰เบฒ.

เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป€เบˆเบทเบญเบˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™

เบ”เบฝเบงเบ™เบตเป‰เป€เบˆเบปเป‰เบฒเบญเบฒเบ”เบˆเบฐเบชเบปเบ‡เป„เบชเบงเปˆเบฒ, เปเบกเปˆเบ™เบซเบเบฑเบ‡เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™? เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ” "schema mismatch" เบ—เบตเปˆเบšเปเปˆเบ„เบฒเบ”เบ„เบดเบ”เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบซเบกเปˆเบเบฑเบš Delta Lake. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเปƒเบซเป‰ schema เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ•เบฒเบกเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ‚เบฝเบ™ DataFrame เบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”?

เบ”เบฑเปˆเบ‡เบ„เบณเป€เบเบปเปˆเบฒเปเบเปˆเบ—เบตเปˆเบเปˆเบฒเบงเป„เบงเป‰เบงเปˆเบฒ, "เบเบฒเบ™เบ›เป‰เบญเบ‡เบเบฑเบ™เปœเบถเปˆเบ‡เบญเบฑเบ™เปเบกเปˆเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบเบฑเบšเบเบฒเบ™เบ›เบดเปˆเบ™เบ›เบปเบง." เปƒเบ™เบšเบฒเบ‡เบˆเบธเบ”, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเปƒเบ™เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบšเบฑเบ™เบซเบฒเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบขเบนเปˆเบซเบฅเบฑเบ‡เบซเบปเบงเบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ - เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบงเบฑเบ”เบ–เบธเบ”เบดเบšเบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบเปเบฅเบฐเบ™เบตเปเบ‚เบš, เบ–เบฑเบ™เบ—เบตเปˆเป€เบชเบเบซเบฒเบ, เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบœเบ™เบ—เบตเปˆเบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบซเบผเบทเบชเบดเปˆเบ‡เบ—เบตเปˆเบซเบ™เป‰เบฒเบขเป‰เบฒเบ™เบเบปเบงเบญเบทเปˆเบ™เป†เบ—เบตเปˆเบˆเบฐเบเบฑเบ™เปƒเบ™. เบเบฑเบ™เบฎเป‰เบฒเบ. เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบขเบธเบ”เบชเบฑเบ”เบ•เบนเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบขเบนเปˆเบ—เบตเปˆเบ›เบฐเบ•เบนเบฎเบปเป‰เบง - เบ”เป‰เบงเบเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema - เปเบฅเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบžเบงเบเบกเบฑเบ™เปƒเบ™เบ„เบงเบฒเบกเบชเบฐเบซเบงเปˆเบฒเบ‡, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ•เปเปˆเบกเบฒเป€เบกเบทเปˆเบญเบžเบงเบเป€เบ‚เบปเบฒเป€เบฅเบตเปˆเบกเบฅเบตเป‰เบขเบนเปˆเปƒเบ™เบ„เบงเบฒเบกเป€เบฅเบดเบเบŠเป‰เปเบฒเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™.

เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบซเบกเบฑเป‰เบ™เปƒเบˆเบงเปˆเบฒ schema เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆเบงเปˆเบฒเบ—เปˆเบฒเบ™เบญเบฐเบ™เบธเบกเบฑเบ”เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡. เบ™เบตเป‰เบ›เป‰เบญเบ‡เบเบฑเบ™เบเบฒเบ™เป€เบˆเบทเบญเบˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เป€เบเบตเบ”เบ‚เบทเป‰เบ™เป„เบ”เป‰เป€เบกเบทเปˆเบญเบกเบตเบ–เบฑเบ™เปƒเบซเบกเปˆเบ–เบทเบเป€เบžเบตเปˆเบกเป€เบฅเบทเป‰เบญเบเป†เป€เบฅเบทเป‰เบญเบเป†, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบšเบตเบšเบญเบฑเบ”เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เบชเบนเบ™เป€เบชเบเบ„เบงเบฒเบกเบซเบกเบฒเบเปเบฅเบฐเบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบเป‰เบญเบ™เบเบฒเบ™เบ™เป‰เปเบฒเบ–เป‰เบงเบกเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™. เป‚เบ”เบเบเบฒเบ™เบŠเบธเบเบเบนเป‰เปƒเบซเป‰เบ—เปˆเบฒเบ™เบ•เบฑเป‰เบ‡เปƒเบˆ, เบ•เบฑเป‰เบ‡เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเบนเบ‡, เปเบฅเบฐเบ„เบฒเบ”เบซเบงเบฑเบ‡เบงเปˆเบฒเบกเบตเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบชเบนเบ‡, เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ—เบตเปˆเบกเบฑเบ™เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ” - เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบชเบฐเบ•เบดเปเบฅเบฐเบชเบฐเป€เบ›เบฃเบ”เบŠเบตเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบชเบฐเบญเบฒเบ”.

เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบ—เปˆเบฒเบ™โ€‹เบžเบดโ€‹เบˆเบฒโ€‹เบฅเบฐโ€‹เบ™เบฒโ€‹เป€เบžเบตเปˆเบกโ€‹เป€เบ•เบตเบกโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เบฑเบ”โ€‹เบชเบดเบ™โ€‹เปƒเบˆโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เปเบ—เป‰โ€‹ เบ•เป‰เบญเบ‡เบเบฒเบ™ เป€เบžเบตเปˆเบกเบ–เบฑเบ™เปƒเบซเบกเปˆ - เบšเปเปˆเบกเบตเบšเบฑเบ™เบซเบฒ, เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบเป‰เป„เบ‚เบซเบ™เบถเปˆเบ‡เปเบ–เบง. เบเบฒเบ™เปเบเป‰เป„เบ‚เปเบกเปˆเบ™เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™เบ‚เบญเบ‡เบงเบปเบ‡เบˆเบญเบ™!

เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™ schema เปเบกเปˆเบ™เบซเบเบฑเบ‡?

Schema evolution เปเบกเปˆเบ™เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบŠเปˆเบงเบเปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ›เบฐเบˆเบธเบšเบฑเบ™เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเบ•เบฒเบกเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เปƒเบ™เป„เบฅเบเบฐเป€เบงเบฅเบฒ. เบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบซเบผเบทเบเบฒเบ™เบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆเป€เบžเบทเปˆเบญเบ›เบฑเบšเบ•เบปเบงเปเบšเบšเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป€เบžเบทเปˆเบญเบ›เบฐเบเบญเบšเบกเบตเบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเบ–เบฑเบ™เปƒเบซเบกเปˆ.

เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™ schema เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”?

เบ›เบฐเบ•เบดเบšเบฑเบ”เบ•เบฒเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบเบžเบฒเบเบเปˆเบญเบ™, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ schema evolution เป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบเป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ„เปเบฅเปเบฒเปƒเบซเบกเปˆเบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเป€เบชเบ”เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡ schema. เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบงเบปเบ‡เบˆเบญเบ™เบ–เบทเบเป€เบ›เบตเบ”เปƒเบŠเป‰เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก .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: เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema เปเบฅเบฐเบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™
เบญเบตเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบเบญเบ‡เบ›เบฐเบŠเบธเบก Spark เบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเบเบฒเบ™เป€เบžเบตเปˆเบก spark.databricks.delta.schema.autoMerge = True เบเบฑเบšเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Spark. เปเบ•เปˆเปƒเบซเป‰เปƒเบŠเป‰เบกเบฑเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบกเบฑเบ”เบฅเบฐเบงเบฑเบ‡, เป€เบžเบฒเบฐเบงเปˆเบฒเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ schema เบˆเบฐเบšเปเปˆเปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบšเปเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡ schema เบญเบตเบเบ•เปเปˆเป„เบ›.

เป‚เบ”เบเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเปƒเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป mergeSchema, เบ„เปเบฅเปเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบขเบนเปˆเปƒเบ™ DataFrame เปเบ•เปˆเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เปƒเบชเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡ schema เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบเบฒเบ™เบ‚เบฝเบ™. เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบกเบŠเปˆเบญเบ‡เบ‚เปเป‰เบกเบนเบ™ Nested เป„เบ”เป‰ เปเบฅเบฐเบชเบดเปˆเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบ–เบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™.

เบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบงเบฑเบ™เบ—เบตเปเบฅเบฐเบ™เบฑเบเบงเบดเบ—เบฐเบเบฒเบชเบฒเบ”เบ‚เปเป‰เบกเบนเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ™เบตเป‰เป€เบžเบทเปˆเบญเป€เบžเบตเปˆเบกเบ„เปเบฅเปเบฒเปƒเบซเบกเปˆ (เบšเบฒเบ‡เบ—เบต metric เบ•เบดเบ”เบ•เบฒเบกเบšเปเปˆเบ”เบปเบ™เบกเบฒเบ™เบตเป‰เบซเบผเบทเบ„เปเบฅเปเบฒเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบ‚เบฒเบเบ‚เบญเบ‡เป€เบ”เบทเบญเบ™เบ™เบตเป‰) เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบเบฒเบ™เบœเบฐเบฅเบดเบ”เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เบ—เปเบฒเบฅเบฒเบเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบงเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปเบฅเปเบฒเป€เบเบปเปˆเบฒ.

เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ schema เบ•เปเปˆเป„เบ›เบ™เบตเป‰เปเบกเปˆเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ schema evolution เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบผเบทเบ‚เบฝเบ™เปƒเบซเบกเปˆ:

  • เบเบฒเบ™เป€เบžเบตเปˆเบกเบ–เบฑเบ™เปƒเปเปˆ (เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”)
  • เบเบฒเบ™เบ›เปˆเบฝเบ™เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ NullType -> เบ›เบฐเป€เบžเบ”เบญเบทเปˆเบ™เป† เบซเบผเบทเบเบฒเบ™เบชเบปเปˆเบ‡เป€เบชเบตเบกเบˆเบฒเบ ByteType -> ShortType -> IntegerType

เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบญเบทเปˆเบ™เป†โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เปƒเบซเป‰โ€‹เบžเบฒเบโ€‹เปƒเบ™ schema evolution เบฎเบฝเบโ€‹เบฎเป‰เบญเบ‡โ€‹เปƒเบซเป‰ schema เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ‚เบฝเบ™โ€‹เบ„เบทเบ™โ€‹เปƒเบซเบกเปˆโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เป€เบžเบตเปˆเบก .option("overwriteSchema", "true"). เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ–เบฑเบ™ "Foo" เปƒเบ™เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป€เบ›เบฑเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบกเปเบฅเบฐ schema เปƒเบซเบกเปˆเปเบกเปˆเบ™เบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ•เบฃเบดเบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป„เบŸเบฅเปŒ Parquet (เบ‚เปเป‰เบกเบนเบ™) เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบ–เบทเบเบ‚เบฝเบ™เบ„เบทเบ™เปƒเบซเบกเปˆ. เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบฅเบงเบกเบกเบต:

  • เบเบฒเบ™เบฅเบถเบšเบ–เบฑเบ™
  • เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ–เบฑเบ™โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบขเบนเปˆโ€‹เปเบฅเป‰เบง (เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹)
  • เบเบฒเบ™เบ›เปˆเบฝเบ™เบŠเบทเปˆเบ–เบฑเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบžเบฝเบ‡เปเบ•เปˆเปƒเบ™เบเปเบฅเบฐเบ™เบต (เบ•เบปเบงเบขเปˆเบฒเบ‡, "Foo" เปเบฅเบฐ "foo")

เบชเบธเบ”เบ—เป‰เบฒเบ, เบ”เป‰เบงเบเบเบฒเบ™เป€เบ›เบตเบ”เบ•เบปเบงเบ•เปเปˆเป„เบ›เบ‚เบญเบ‡ Spark 3.0, DDL เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เบขเปˆเบฒเบ‡เป€เบ•เบฑเบกเบ—เบตเปˆ (เปƒเบŠเป‰ ALTER TABLE), เปƒเบซเป‰เบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบเปˆเบฝเบงเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡:

  • เป€เบžเบตเปˆเบกเบ–เบฑเบ™
  • เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบ„เปเบฒโ€‹เบ„เบดเบ”โ€‹เป€เบซเบฑเบ™โ€‹เบ–เบฑเบ™โ€‹
  • เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบ„เบงเบšเบ„เบธเบกเบžเบถเบ”เบ•เบดเบเปเบฒเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เป€เบŠเบฑเปˆเบ™: เบเปเบฒเบ™เบปเบ”เป„เบฅเบเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰.

เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบงเบปเบ‡เบˆเบญเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบเบฒเบ™เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™ Schema เบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เป„เบ”เป‰เบ—เบธเบเบ„เบฑเป‰เบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™ เบ•เบฑเป‰เบ‡เปƒเบˆ เบ›เปˆเบฝเบ™ schema เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™ (เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบกเบเบฑเบšเป€เบงเบฅเบฒเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเป€เบžเบตเปˆเบกเบ–เบฑเบ™เปƒเบชเปˆ DataFrame เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป‚เบ”เบเบšเบฑเบ‡เป€เบญเบตเบ™เบ—เบตเปˆเบšเปเปˆเบ„เบงเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™). เบ™เบตเป‰เปเบกเปˆเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”เปƒเบ™เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เบเป‰เบฒเบ schema เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบžเบตเปˆเบกเบŠเบทเปˆเบ–เบฑเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เปเบฅเบฐเบ›เบฐเป€เบžเบ”เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เป‚เบ”เบเบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบ›เบฐเบเบฒเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™.

เบชเบฐเบซเบฅเบธเบš

เบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰ Schema เบ›เบฐเบ•เบดเป€เบชเบ”เบ„เปเบฅเปเบฒเปƒเบซเบกเปˆเบซเบผเบทเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ schema เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เป‚เบ”เบเบเบฒเบ™เบเปเบฒเบ™เบปเบ”เปเบฅเบฐเบฎเบฑเบเบชเบฒเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เบชเบนเบ‡เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเปเบฅเบฐเบงเบดเบชเบฐเบงเบฐเบเบญเบ™เบชเบฒเบกเบฒเบ”เป„เบงเป‰เบงเบฒเบ‡เปƒเบˆเป„เบ”เป‰เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒเบกเบตเบ„เบงเบฒเบกเบŠเบทเปˆเบชเบฑเบ”เบชเบนเบ‡เบชเบธเบ”, เบชเบทเปˆเบชเบฒเบ™เบกเบฑเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐเบŠเบฑเบ”เป€เบˆเบ™, เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบธเบฅเบฐเบเบดเบ”เบ—เบตเปˆเบ”เบตเบเบงเปˆเบฒ.

เปƒเบ™เบ—เบฒเบ‡เบเบปเบ‡เบเบฑเบ™เบ‚เป‰เบฒเบก, เบเบฒเบ™เบงเบดเบงเบฑเบ”เบ—เบฐเบ™เบฒเบเบฒเบ™ schema เป€เบชเบตเบกเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบŠเป‰เป‚เบ”เบเบเบฒเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เบ‡เปˆเบฒเบเบ”เบฒเบ เบ–เบทเบเบเปˆเบฒเบงเบซเบฒ เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡ schema เบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ—เบฑเบ‡เบซเบกเบปเบ”, เบกเบฑเบ™เบšเปเปˆเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ–เบฑเบ™.

เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบšเบฑเบ‡โ€‹เบ„เบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™ yangโ€‹, เบšเปˆเบญเบ™โ€‹เบ—เบตเปˆโ€‹เบงเบดโ€‹เบงเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เปเบกเปˆเบ™ yinโ€‹. เป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™, เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบฐเบเบฑเบ”เบเบฑเป‰เบ™เบชเบฝเบ‡เบฅเบปเบšเบเบงเบ™เปเบฅเบฐเบเบฒเบ™เบ›เบฑเบšเบชเบฑเบ™เบเบฒเบ™เบ‡เปˆเบฒเบเบเบงเปˆเบฒเบ—เบตเปˆเป€เบ„เบตเบ.

เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เบ‚เปเบ‚เบญเบšเปƒเบˆ Mukul Murthy เปเบฅเบฐ Pranav Anand เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฐเบเบญเบšเบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เบšเบปเบ”เบ„เบงเบฒเบกเบญเบทเปˆเบ™เป†เปƒเบ™เบŠเบธเบ”เบ™เบตเป‰:

เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ Delta Lake: Unpacking the Transaction Log

เบšเบปเบ”เบ‚เบฝเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡

เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปƒเบ™เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบœเบฐเบฅเบดเบ”เบเบฑเบš Delta Lake

เบ—เบฐเป€เบฅเบชเบฒเบšเบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เบŠเบญเบเบซเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบซเบผเบฑเบเบชเบนเบ”

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™