Delta Lake Dive: αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸ αž“αž·αž„αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ

αžŸαž½αžŸαŸ’αžαžΈ αž αžΆαž”! αžαŸ’αž‰αž»αŸ†αžŸαžΌαž˜αž”αž„αŸ’αž αžΆαž‰αž‡αžΌαž“αž’αŸ’αž“αž€αž“αžΌαžœαž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚αž’αžαŸ’αžαž”αž‘ "αž€αžΆαžšαž‡αŸ’αžšαž˜αž»αž‡αž‘αžΉαž€αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αžΉαž„αžŠαžΈαžŸαžŽαŸ’αžαŸˆαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αž·αž„αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸ" αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’ Burak Yavuz, Brenner Heintz αž“αž·αž„ Denny Lee αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαŸ€αž”αž…αŸ†αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαŸ†αž–αžΉαž„αž‘αž»αž€αž“αŸƒαž€αžΆαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆ "αžœαž·αžŸαŸ’αžœαž€αžšαž‘αž·αž“αŸ’αž“αž“αŸαž™" αž–αžΈ OTUS αŸ”

Delta Lake Dive: αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸ αž“αž·αž„αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ

αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαžΌαž…αž‡αžΆαž”αž‘αž–αž·αžŸαŸ„αž’αž“αŸαžšαž”αžŸαŸ‹αž™αžΎαž„αž€αŸ†αž–αž»αž„αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ† αž“αž·αž„αžœαž·αžœαžŒαŸ’αžαž₯αžαžˆαž”αŸ‹αžˆαžšαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αž αž‚αŸ†αžšαžΌαž•αŸ’αž›αžΌαžœαž…αž·αžαŸ’αžαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸƒαž–αž·αž—αž–αž›αŸ„αž€αžαŸ’αžšαžΌαžœαžαŸ‚αžŸαž˜αŸ’αžšαž”αžαŸ’αž›αž½αž“αž‘αŸ…αž“αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αž˜αžΈ αžŠαŸ‚αž›αž˜αž½αž™αž…αŸ†αž“αž½αž“αž˜αžΆαž“αžœαž·αž˜αžΆαžαŸ’αžšαžαŸ’αž˜αžΈβ€”αžœαž·αž’αžΈαžαŸ’αž˜αžΈαž“αŸƒαž€αžΆαžšαžŸαž„αŸ’αž€αŸαžαž’αŸ’αžœαžΈαžŠαŸ‚αž›αž™αžΎαž„αž˜αž·αž“αžŠαžΉαž„αž–αžΈαž˜αž»αž“αŸ” αž‚αŸ†αžšαžΌαž•αŸ’αž›αžΌαžœαž…αž·αžαŸ’αžαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž˜αž·αž“αžαž»αžŸαž‚αŸ’αž“αžΆαž…αŸ’αžšαžΎαž“αž–αžΈαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž™αžΎαž„αž…αžΆαžαŸ‹αžαŸ’αž“αžΆαž€αŸ‹ αž“αž·αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αž˜αžΈαŸ”

αž“αŸαŸ‡αž“αžΆαŸ†αž™αžΎαž„αž‘αŸ…αž”αž‰αŸ’αž αžΆαž“αŸƒαž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαŸ” αžŠαŸ„αž™αžŸαžΆαžšαž”αž‰αŸ’αž αžΆαž”αŸ’αžšαžˆαž˜ αž“αž·αž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆ αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž€αŸαžŠαžΌαž…αž‚αŸ’αž“αžΆαžŠαŸ‚αžšαŸ” Delta Lake αž’αŸ’αžœαžΎαž±αŸ’αž™αžœαžΆαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αž€αžΆαžšαžœαžΆαžŸαŸ‹αžœαŸ‚αž„αžαŸ’αž˜αžΈαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαžΎβ€‹αž˜αžΆαž“β€‹αžŸαž·αž‘αŸ’αž’αž·β€‹αž…αžΌαž›β€‹αž”αŸ’αžšαžΎβ€‹αž–αžΆαž€αŸ’αž™β€‹αžŸαžΆαž˜αž‰αŸ’αž‰β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„β€‹αžαžΆαžšαžΆαž„β€‹αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸβ€‹αžšαž”αžŸαŸ‹β€‹αž–αž½αž€αž‚αŸαŸ” αž§αž”αž€αžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αžšαž½αž˜αž˜αžΆαž“ Schema Enforcement αžŠαŸ‚αž›αž€αžΆαžšαž–αžΆαžšαž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž–αžΈαž€αžΆαžšαž”αŸ†αž–αž»αž›αžαžΆαžšαžΆαž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαŸ„αž™αž’αž…αŸαžαž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αž αž»αžŸ αž¬αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž“αž·αž„ Schema Evolution αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈαž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž‘αžΈαžαžΆαŸ†αž„αžŸαž˜αžŸαŸ’αžšαž”αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž€αžΆαž“αŸ‹αžαŸ‚αžŸαŸŠαžΈαž‡αž˜αŸ’αžšαŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž§αž”αž€αžšαžŽαŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αŸ”

αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„

DataFrame αž“αžΈαž˜αž½αž™αŸ—αž“αŸ…αž€αŸ’αž“αž»αž„ Apache Spark αž˜αžΆαž“αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž‘αž˜αŸ’αžšαž„αŸ‹αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαžΌαž…αž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž‡αž½αžšαžˆαžš αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸαžαžΆαŸ” αž‡αžΆαž˜αž½αž™ Delta Lake αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αž‡αžΆαž‘αž˜αŸ’αžšαž„αŸ‹ JSON αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”

αžαžΎαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈ?

Schema Enforcement αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαžŸαŸ’αž‚αžΆαž›αŸ‹αž•αž„αžŠαŸ‚αžšαžαžΆαž‡αžΆ Schema Validation αž‚αžΊαž‡αžΆαž™αž“αŸ’αžαž€αžΆαžšαžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„ Delta Lake αžŠαŸ‚αž›αž’αžΆαž“αžΆαž“αžΌαžœαž‚αž»αžŽαž—αžΆαž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ„αž™αž”αžŠαž·αžŸαŸαž’αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž˜αž·αž“αž•αŸ’αž‚αžΌαž•αŸ’αž‚αž„αž“αžΉαž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžšαž”αžŸαŸ‹αžαžΆαžšαžΆαž„αŸ” αžŠαžΌαž…αž‡αžΆαž˜αŸ’αž…αžΆαžŸαŸ‹αž•αŸ’αž‘αŸ‡αž“αŸ…αžαž»αžαžΆαž„αž˜αž»αžαž“αŸƒαž—αŸ„αž‡αž“αžΈαž™αžŠαŸ’αž‹αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αžαŸ‚αž€αžΆαžšαž€αž€αŸ‹αžŠαŸαž–αŸαž‰αž“αž·αž™αž˜αž˜αž½αž™ αž“αžΆαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžαžΆαžαžΎαž‡αž½αžšαžˆαžšαž“αžΈαž˜αž½αž™αŸ—αž“αŸƒαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‚αžΊαž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸƒαž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€ (αž“αž·αž™αžΆαž™αž˜αŸ’αž™αŸ‰αžΆαž„αž‘αŸ€αžαžαžΆαžαžΎαž˜αžΆαž“ "αž€αžΆαžšαž€αž€αŸ‹" αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž–αž½αž€αž‚αŸαž˜αŸ’αž“αžΆαž€αŸ‹αŸ—αž¬αž’αžαŸ‹αŸ” ) αž“αž·αž„αž”αžŠαž·αžŸαŸαž’αžšαžΆαž›αŸ‹αž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžŠαŸ‚αž›αž˜αžΆαž“αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαŸ”

αžαžΎαž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž™αŸ‰αžΆαž„αžŠαžΌαž…αž˜αŸ’αžαŸαž…?

Delta Lake αž”αŸ’αžšαžΎ schema-on-write checking αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸαž™αžαžΆαž€αžΆαžšαžŸαžšαžŸαŸαžšαžαŸ’αž˜αžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ…αž€αžΆαž“αŸ‹αžαžΆαžšαžΆαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž–αž·αž“αž·αžαŸ’αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸƒαžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αž“αŸ…αž–αŸαž›αžŸαžšαžŸαŸαžšαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αž·αž“αžŸαŸ’αžšαž”αž‚αŸ’αž“αžΆαž“αŸ„αŸ‡ Delta Lake αž”αŸ„αŸ‡αž”αž„αŸ‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„ (αž˜αž·αž“αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžš) αž αžΎαž™αž›αžΎαž€αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž˜αž½αž™αžŠαžΎαž˜αŸ’αž”αžΈαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžŠαž›αŸ‹αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αŸ†αž–αžΈαž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαžŸαž„αŸ’αžœαžΆαž€αŸ‹αž‚αŸ’αž“αžΆαŸ”
Delta Lake αž”αŸ’αžšαžΎαž…αŸ’αž”αžΆαž”αŸ‹αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αžαžΆαžαžΎαž€αŸ†αžŽαžαŸ‹αžαŸ’αžšαžΆαžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αžαžΆαžšαžΆαž„αž¬αž’αžαŸ‹αŸ” αžŸαŸŠαž»αž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αžŸαžšαžŸαŸαžšαž”αžΆαž“αŸ–

  • αž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αž‡αž½αžšαžˆαžšαž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ‚αž›αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸƒαžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αŸ” αž•αŸ’αž‘αž»αž™αž‘αŸ…αžœαž·αž‰ αž’αŸ’αžœαžΈαž‚αŸ’αžšαž”αŸ‹αž™αŸ‰αžΆαž„αž‚αžΊαž›αŸ’αž’αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αžΌαž›αž˜αž·αž“αž˜αžΆαž“αž‡αž½αžšαžˆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž–αžΈαžαžΆαžšαžΆαž„ - αž‡αž½αžšαžˆαžšαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αžαž›αŸ‹αžαž˜αŸ’αž›αŸƒαž‘αž‘αŸαŸ”
  • αž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αžαž»αžŸαž–αžΈαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαž‡αž½αžšαžˆαžšαž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αž‘αŸαŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‡αž½αžšαžˆαžšαžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ StringType αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„ DataFrame αž˜αžΆαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™ IntegerType αž“αŸ„αŸ‡αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αžΉαž„αž”αŸ„αŸ‡αž€αžšαžŽαžΈαž›αžΎαž€αž›αŸ‚αž„αž˜αž½αž™ αž“αž·αž„αž€αžΆαžšαž–αžΆαžšαž€αžΆαžšαžŸαžšαžŸαŸαžšαž–αžΈαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαŸ”
  • αž˜αž·αž“β€‹αž’αžΆαž…β€‹αž˜αžΆαž“β€‹αžˆαŸ’αž˜αŸ„αŸ‡β€‹αž‡αž½αžšβ€‹αžˆαžšβ€‹αžŠαŸ‚αž›β€‹αžαž»αžŸβ€‹αž‚αŸ’αž“αžΆβ€‹αžαŸ‚β€‹αž€αŸ’αž“αž»αž„β€‹αž€αžšαžŽαžΈβ€‹αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ” αž“αŸαŸ‡αž˜αžΆαž“αž“αŸαž™αžαžΆαž’αŸ’αž“αž€αž˜αž·αž“αž’αžΆαž…αž˜αžΆαž“αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžˆαŸ’αž˜αŸ„αŸ‡αžαžΆ 'Foo' αž“αž·αž„ 'foo' αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžαŸ‚αž˜αž½αž™αŸ” αžαžŽαŸˆαž–αŸαž›αžŠαŸ‚αž› Spark αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αŸ’αž“αž»αž„αž˜αž»αžαž„αžΆαžš case-sensitive ឬ case-insensitive (default) mode, Delta Lake αž‚αžΊβ€‹αž‡αžΆβ€‹ case-preserving αž”αŸ‰αž»αž“αŸ’αžαŸ‚β€‹αž‚αžΊ insensitive αž“αŸ…αž€αŸ’αž“αž»αž„β€‹ schema storageαŸ” 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
  • αž§αž”αž€αžšαžŽαŸαžœαž·αž—αžΆαž‚αž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αžšαžΌαž”αž—αžΆαž–
  • αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž•αž›αž·αžαž€αž˜αŸ’αž˜αžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™αž˜αžΆαž“αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžαŸ’αž–αžŸαŸ‹ αž“αž·αž„αžœαžΆαž™αž”αž‰αŸ’αž…αžΌαž›αž™αŸ‰αžΆαž„αžαŸ’αž›αžΆαŸ†αž„αž“αžΌαžœαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ semantic αŸ”

αžŠαžΎαž˜αŸ’αž”αžΈαžšαŸ€αž”αž…αŸ†αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αžŸαž‚αŸ’αž‚αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸαŸ‡ αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž…αŸ’αžšαžΎαž“αž”αŸ’αžšαžΎαžŸαŸ’αžαžΆαž”αžαŸ’αž™αž€αž˜αŸ’αž˜ "αž–αž αž»αž αž”" αžŸαžΆαž˜αž‰αŸ’αž‰αžŠαŸ‚αž›αžŽαŸ‚αž“αžΆαŸ†αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž”αž“αŸ’αžαž·αž…αž˜αŸ’αžαž„αŸ—αž‘αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ” αžŠαžΎαž˜αŸ’αž”αžΈαžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžšαžΏαž„αž“αŸαŸ‡ αž’αŸ’αž“αž€αž’αžΆαž…αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž’αžαŸ’αžαž”αž‘ αž€αžΆαžšαžšαŸ€αž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž˜αŸ’αžšαž·αžαž•αž›αž·αžαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™ Delta Lake αŸ”

αž‡αžΆαž€αžΆαžšαž–αž·αžαžŽαžΆαžŸαŸ‹ αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž€αž“αŸ’αž›αŸ‚αž„αžŽαžΆαž˜αž½αž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αžαŸ’αžšαžΌαžœαž…αžΆαŸ†αžαžΆαž€αžΆαžšαž•αŸ’αžŸαžΆαž™αž‘αŸ…αž€αžΆαž“αŸ‹αžαžΆαžšαžΆαž„αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž’αžΆαž…αž‡αžΆαž€αžΆαžšαžαž€αž…αž·αžαŸ’αž αž–αŸ’αžšαŸ„αŸ‡αž‡αžΆαž§αž‘αžΆαž αžšαžŽαŸ αž’αŸ’αž“αž€αž—αŸ’αž›αŸαž…αžαžΆαž’αŸ’αž“αž€αž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž˜αž½αž™αž‘αŸ€αžαž‘αŸ…αž‘αž·αž“αŸ’αž“αž“αŸαž™αž…αžΌαž›αŸ”

αž€αžΆαžšαž–αžΆαžšαž€αžΆαžšαžšαŸ†αž›αžΆαž™αž‘αž·αž“αŸ’αž“αž“αŸαž™

αž˜αž€β€‹αžŠαž›αŸ‹β€‹αž–αŸαž›β€‹αž“αŸαŸ‡ αž’αŸ’αž“αž€β€‹αž”αŸ’αžšαž αŸ‚αž›β€‹αž‡αžΆβ€‹αž†αŸ’αž„αž›αŸ‹β€‹αž αžΎαž™ αžαžΎβ€‹αž˜αžΆαž“β€‹αžšαžΏαž„β€‹αž’αžΈβ€‹αžαŸ’αž›αŸ‡? αž™αŸ‰αžΆαž„αžŽαžΆαž˜αž·αž‰ αž–αŸαž›αžαŸ’αž›αŸ‡αž€αŸ†αž αž»αžŸ "αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž˜αž·αž“αžŸαŸŠαžΈαž‚αŸ’αž“αžΆ" αžŠαŸ‚αž›αž˜αž·αž“αž“αžΉαž€αžŸαŸ’αž˜αžΆαž“αžŠαž›αŸ‹αž’αžΆαž…αž’αŸ’αžœαžΎαž’αŸ„αž™αž’αŸ’αž“αž€αž‘αžΎαž„αž€αŸ’αž“αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž‡αžΆαž–αž·αžŸαŸαžŸαž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž‘αžΎαž”αž“αžΉαž„αž€αžΎαž Delta Lake αŸ” αž αŸαžαž»αž’αŸ’αžœαžΈαž”αžΆαž“αž‡αžΆαž˜αž·αž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™ schema αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžš αžŠαžΌαž…αŸ’αž“αŸαŸ‡αžαŸ’αž‰αž»αŸ†αž’αžΆαž…αžŸαžšαžŸαŸαžš DataFrame αžšαž”αžŸαŸ‹αžαŸ’αž‰αž»αŸ†αž˜αž·αž“αžαžΆαž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž’αŸ’αžœαžΈ?

αžŠαžΌαž…β€‹αž–αžΆαž€αŸ’αž™β€‹αž…αžΆαžŸαŸ‹β€‹αž–αŸ„αž›β€‹αžαžΆ β€œαž€αžΆαžšβ€‹αž€αžΆαžšαž–αžΆαžšβ€‹αž˜αž½αž™β€‹αž’αŸ„αž“β€‹αž‚αžΊβ€‹αž˜αžΆαž“β€‹αžαž˜αŸ’αž›αŸƒβ€‹αž€αŸ’αž“αž»αž„β€‹αž€αžΆαžšβ€‹αž–αŸ’αž™αžΆαž”αžΆαž›β€‹αž˜αž½αž™β€‹αž•αŸ„αž“β€αŸ” αž“αŸ…αž…αŸ†αžŽαž»αž…αžαŸ’αž›αŸ‡ αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž™αž€αž…αž·αžαŸ’αžαž‘αž»αž€αžŠαžΆαž€αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ αž”αž‰αŸ’αž αžΆαž—αžΆαž–αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸƒαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αžΉαž„αž“αŸ…αž–αžΈαž€αŸ’αžšαŸ„αž™αž€αŸ’αž”αžΆαž›αžŠαŸαž’αžΆαž€αŸ’αžšαž€αŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸ - αž”αŸ’αžšαž—αž–αž‘αž·αž“αŸ’αž“αž“αŸαž™αž†αŸ…αžŠαŸ‚αž›αž αžΆαž€αŸ‹αžŠαžΌαž…αž‡αžΆαžŠαžΌαž…αž‚αŸ’αž“αžΆαž’αžΆαž…αž˜αžΆαž“αž€αžšαžŽαžΈαž‚αŸ‚αž˜ αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αžαžΌαž… αž€αžΆαžšαž’αŸ’αžœαžΎαž•αŸ‚αž“αž‘αžΈαžαž»αžŸ αž¬αžšαžΏαž„αž‚αž½αžšαž±αŸ’αž™αžαŸ’αž›αžΆαž…αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αžŸαž»αž”αž·αž“αž’αŸ†αž–αžΈαž“αŸ…αž€αŸ’αž“αž»αž„ αžŸαž»αž”αž·αž“αŸ’αžαž’αžΆαž€αŸ’αžšαž€αŸ‹αŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαžŠαŸαž›αŸ’αž’αž”αŸ†αž•αž»αžαž‚αžΊαž”αž‰αŸ’αžˆαž”αŸ‹αžŸαžαŸ’αžšαžΌαžœαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž“αŸ…αž…αŸ’αžšαž€αž‘αŸ’αžœαžΆαžš - αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ - αž“αž·αž„αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‡αžΆαž˜αž½αž™αž–αž½αž€αž‚αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž“αŸ’αž›αžΊ αž‡αžΆαž‡αžΆαž„αž“αŸ…αž–αŸαž›αž€αŸ’αžšαŸ„αž™αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž›αžΆαž€αŸ‹αžαŸ’αž›αž½αž“αž“αŸ…αž€αŸ’αž“αž»αž„αž‡αž˜αŸ’αžšαŸ…αž„αž„αžΉαžαž“αŸƒαž€αžΌαžŠαž•αž›αž·αžαž€αž˜αŸ’αž˜αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž€αžΆαžšαž–αž„αŸ’αžšαžΉαž„αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž•αŸ’αžαž›αŸ‹αž±αŸ’αž™αž’αŸ’αž“αž€αž“αžΌαžœαž€αžΆαžšαž’αžΆαž“αžΆαžαžΆαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž“αžΉαž„αž˜αž·αž“αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‘αŸαž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž’αŸ’αž“αž€αž™αž›αŸ‹αž–αŸ’αžšαž˜αž›αžΎαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαŸ” αžœαžΆαž€αžΆαžšαž–αžΆαžšαž€αžΆαžšαžšαŸ†αž›αžΆαž™αž‘αž·αž“αŸ’αž“αž“αŸαž™ αžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž‘αžΎαž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αž‡αžΆαž‰αžΉαž€αž‰αžΆαž”αŸ‹ αžŠαŸ‚αž›αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž αžΆαž”αŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž–αžΈαž˜αž»αž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αž’αžαŸ’αžαž“αŸαž™ αž“αž·αž„αž˜αžΆαž“αž”αŸ’αžšαž™αŸ„αž‡αž“αŸαžŠαŸ„αž™αžŸαžΆαžšαž€αžΆαžšαž‡αž“αŸ‹αž›αž·αž…αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ” αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž›αžΎαž€αž‘αžΉαž€αž…αž·αžαŸ’αžαž±αŸ’αž™αž’αŸ’αž“αž€αž˜αžΆαž“αž…αŸαžαž“αžΆ αž€αŸ†αžŽαžαŸ‹αžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαŸ’αž–αžŸαŸ‹ αž“αž·αž„αžšαŸ†αž–αžΉαž„αžαžΆαž“αžΉαž„αž˜αžΆαž“αž‚αž»αžŽαž—αžΆαž–αžαŸ’αž–αžŸαŸ‹ αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž–αž·αžαž‡αžΆαž’αŸ’αžœαžΎαž“αžΌαžœαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž…αž“αžΆαž‘αžΎαž„αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎ - αž‡αž½αž™αž’αŸ’αž“αž€αž±αŸ’αž™αžšαž€αŸ’αžŸαžΆαžŸαžαž·αžŸαž˜αŸ’αž”αž‡αž‰αŸ’αž‰αŸˆ αž“αž·αž„αžŸαž˜αŸ’αž’αžΆαžαžŸαŸ€αžœαž—αŸ…αž”αž‰αŸ’αž‡αžΈαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž–αž·αž…αžΆαžšαžŽαžΆαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž’αŸ’αž“αž€αžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαžαžΆαž’αŸ’αž“αž€αž–αž·αžαž‡αžΆ αžαŸ’αžšαžΌαžœαž€αžΆαžš αž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈ - αž‚αŸ’αž˜αžΆαž“αž”αž‰αŸ’αž αžΆαž‘αŸ αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž‚αžΊαž‡αžΆαž€αžΆαžšαž‡αž½αžŸαž‡αž»αž›αž˜αž½αž™αž‡αž½αžšαŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž‚αžΊαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒαžŸαŸ€αž‚αŸ’αžœαžΈ!

αžαžΎαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‚αžΊαž‡αžΆαž’αŸ’αžœαžΈ?

Schema evolution αž‚αžΊαž‡αžΆαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž”αžΆαž“αž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž™αŸ„αž„αž‘αŸ…αžαžΆαž˜αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαžαžΆαž˜αž–αŸαž›αžœαŸαž›αžΆαŸ” αžœαžΆβ€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αŸ’αžšαžΎβ€‹αž‰αžΉαž€αž‰αžΆαž”αŸ‹β€‹αž”αŸ†αž•αž»αžβ€‹αž“αŸ…β€‹αž–αŸαž›β€‹αž’αŸ’αžœαžΎβ€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšβ€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž¬β€‹αžŸαžšαžŸαŸαžšβ€‹αž‘αžΎαž„β€‹αžœαž·αž‰β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αžŸαž˜αŸ’αžšαž”β€‹αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸβ€‹αžŠαŸ„αž™β€‹αžŸαŸ’αžœαŸαž™β€‹αž”αŸ’αžšαžœαžαŸ’αžαž·β€‹αžŠαžΎαž˜αŸ’αž”αžΈβ€‹αžšαž½αž˜β€‹αž”αž‰αŸ’αž…αžΌαž›β€‹αž‡αž½αžšβ€‹αžˆαžšβ€‹αžαŸ’αž˜αžΈβ€‹αž˜αž½αž™β€‹αž¬β€‹αž…αŸ’αžšαžΎαž“αŸ”

αžαžΎβ€‹αž€αžΆαžšβ€‹αžœαž·αžœαžαŸ’αžαž“αŸβ€‹αž“αŸƒβ€‹αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸβ€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αžŠαŸ„αž™β€‹αžšαž”αŸ€αž”β€‹αžŽαžΆ?

αžαžΆαž˜αž§αž‘αžΆαž αžšαžŽαŸαž–αžΈαž•αŸ’αž“αŸ‚αž€αž˜αž»αž“ αž’αŸ’αž“αž€αž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž’αžΆαž…αž”αŸ’αžšαžΎαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž™αŸ‰αžΆαž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈαžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžŠαž·αžŸαŸαž’αž–αžΈαž˜αž»αž“αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαž‚αŸ’αž“αžΆαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαŸ” αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸƒαžŸαŸ€αž‚αŸ’αžœαžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαž€αž˜αŸ’αž˜αžŠαŸ„αž™αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜ .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 Dive: αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž“αŸ αž“αž·αž„αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ
αž‡αžΆαž‡αž˜αŸ’αžšαžΎαžŸ αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸαŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαž‚αŸ’αž‚ Spark αž‘αžΆαŸ†αž„αž˜αžΌαž›αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ spark.databricks.delta.schema.autoMerge = True αž‘αŸ…αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Spark αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸ’αžšαžΎαžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαž»αž„αž”αŸ’αžšαž™αŸαžαŸ’αž“ αž–αŸ’αžšαŸ„αŸ‡αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αžΉαž„αž›αŸ‚αž„αž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αž’αŸ’αž“αž€αž…αŸ†αž–αŸ„αŸ‡αž—αžΆαž–αž˜αž·αž“αžŸαŸŠαžΈαž‚αŸ’αž“αžΆαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ„αž™αž’αž…αŸαžαž“αžΆαŸ”

αžŠαŸ„αž™αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž”αŸ‰αžΆαžšαŸ‰αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸ†αžŽαžΎ mergeSchemaαž‡αž½αžšαžˆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ DataFrame αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαžΆαžšαžΆαž„αž‚αŸ„αž›αžŠαŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž“αŸ’αžαŸ‚αž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž‘αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ‚αž›αž‡αžΆαž•αŸ’αž“αŸ‚αž€αž˜αž½αž™αž“αŸƒαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžŸαžšαžŸαŸαžšαŸ” αžœαžΆαž›β€‹αžŠαŸ‚αž›β€‹αž”αžΆαž“β€‹αž”αž„αŸ’αž€αž”αŸ‹β€‹αž€αŸβ€‹αž’αžΆαž…β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αžŠαŸ‚αžš αž αžΎαž™β€‹αž‘αžΆαŸ†αž„β€‹αž“αŸαŸ‡β€‹αž€αŸβ€‹αž“αžΉαž„β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž”αž“αŸ’αžαŸ‚αž˜β€‹αž‘αŸ…β€‹αž…αž»αž„β€‹αž‡αž½αžšβ€‹αžˆαžšβ€‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž‚αŸ’αž“αžΆβ€‹αžŠαŸ‚αžšαŸ”

αžœαž·αžŸαŸ’αžœαž€αžšαž€αžΆαž›αž”αžšαž·αž…αŸ’αž†αŸαž‘ αž“αž·αž„αž’αŸ’αž“αž€αžœαž·αž‘αŸ’αž™αžΆαžŸαžΆαžŸαŸ’αžαŸ’αžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αž’αžΆαž…αž”αŸ’αžšαžΎαž‡αž˜αŸ’αžšαžΎαžŸαž“αŸαŸ‡αžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈ (αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αŸ‰αŸ‚αžαŸ’αžšαžŠαŸ‚αž›αž”αžΆαž“αžαžΆαž˜αžŠαžΆαž“αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αž¬αž‡αž½αžšαž“αŸƒαž€αžΆαžšαž›αž€αŸ‹αž€αŸ’αž“αž»αž„αžαŸ‚αž“αŸαŸ‡) αž‘αŸ…αžαžΆαžšαžΆαž„αž•αž›αž·αžαž€αžΆαžšαžšαŸ€αž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαžŠαŸ„αž™αž˜αž·αž“αž”αŸ†αž”αŸ‚αž€αž˜αŸ‰αžΌαžŠαŸ‚αž›αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαž‡αž½αžšαžˆαžšαž…αžΆαžŸαŸ‹αŸ”

αž”αŸ’αžšαž—αŸαž‘αž“αŸƒαž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž‡αžΆαž•αŸ’αž“αŸ‚αž€αž“αŸƒαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž€αŸ’αž“αž»αž„αž’αŸ†αž‘αž»αž„αž–αŸαž›αž”αž“αŸ’αžαŸ‚αž˜αžαžΆαžšαžΆαž„ αž¬αžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αŸ–

  • αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈ (αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžŸαŸαžŽαžΆαžšαžΈαž™αŸ‰αžΌαž‘αžΌαž‘αŸ…αž”αŸ†αž•αž»αž)
  • αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈ NullType -> αž”αŸ’αžšαž—αŸαž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αž αž¬αž•αŸ’αžŸαž–αŸ’αžœαž•αŸ’αžŸαžΆαž™αž–αžΈ ByteType -> ShortType -> IntegerType

αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ αžαž˜αŸ’αžšαžΌαžœαž±αŸ’αž™ αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸ αž“αž·αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αžŠαŸ„αž™αž”αž“αŸ’αžαŸ‚αž˜ .option("overwriteSchema", "true"). αž§αž‘αžΆαž αžšαžŽαŸ αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαžŠαŸ‚αž›αž‡αž½αžšαžˆαžš "Foo" αžŠαžΎαž˜αžŠαŸ†αž”αžΌαž„αž‡αžΆαž…αŸ†αž“αž½αž“αž‚αžαŸ‹ αž αžΎαž™αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαŸ’αž˜αžΈαž‚αžΊαž‡αžΆαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžŸαŸ‚αž’αž€αŸ’αžŸαžš αž“αŸ„αŸ‡αž―αž€αžŸαžΆαžš Parquet (αž‘αž·αž“αŸ’αž“αž“αŸαž™) αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαžŸαžšαžŸαŸαžšαž‘αžΎαž„αžœαž·αž‰αŸ” αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ‚αž”αž“αŸαŸ‡αžšαž½αž˜αž˜αžΆαž“:

  • αž€αžΆαžšαž›αž»αž”αž‡αž½αžšαžˆαžš
  • αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αž“αŸƒαž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹ (αž“αŸ…αž“αžΉαž„αž€αž“αŸ’αž›αŸ‚αž„)
  • αž”αŸ’αžαžΌαžšαžˆαŸ’αž˜αŸ„αŸ‡αž‡αž½αžšαžˆαžšαžŠαŸ‚αž›αžαž»αžŸαž‚αŸ’αž“αžΆαžαŸ‚αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈ (αž§αž‘αžΆαž αžšαžŽαŸ "Foo" αž“αž·αž„ "foo")

αž‡αžΆαž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸƒ Spark 3.0 DDL αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αž“αžΉαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαž™αŸ‰αžΆαž„αž–αŸαž‰αž›αŸαž‰ (αžŠαŸ„αž™αž”αŸ’αžšαžΎ ALTER TABLE) αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž’αž“αž»αžœαžαŸ’αžαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αž›αžΎαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžαžΆαžšαžΆαž„αŸ–

  • αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžš
  • αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αžαž·αž™αŸ„αž”αž›αŸ‹αž‡αž½αžšαžˆαžš
  • αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž›αž€αŸ’αžαžŽαŸˆαžŸαž˜αŸ’αž”αžαŸ’αžαž·αžαžΆαžšαžΆαž„αžŠαŸ‚αž›αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž₯αžšαž·αž™αžΆαž”αžαžšαž”αžŸαŸ‹αžαžΆαžšαžΆαž„ αžŠαžΌαž…αž‡αžΆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž™αŸˆαž–αŸαž›αžŠαŸ‚αž›αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αŸ”

αžαžΎαž’αŸ’αžœαžΈαž‡αžΆαž’αžαŸ’αžαž”αŸ’αžšαž™αŸ„αž‡αž“αŸαž“αŸƒαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαžŸαŸ€αž‚αŸ’αžœαžΈ?

αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž“αŸ…αž–αŸαž›αžŽαžΆαž€αŸαž”αžΆαž“ αž˜αžΆαž“αž”αŸ†αžŽαž„ αž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž“αŸƒαžαžΆαžšαžΆαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ (αž•αŸ’αž‘αž»αž™αž–αžΈαž–αŸαž›αžŠαŸ‚αž›αž’αŸ’αž“αž€αž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαžŠαŸ„αž™αž…αŸƒαžŠαž“αŸ’αž™αž‘αŸ… DataFrame αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αžŠαŸ‚αž›αž˜αž·αž“αž‚αž½αžšαž“αŸ…αž‘αžΈαž“αŸ„αŸ‡)αŸ” αž“αŸαŸ‡αž‡αžΆαžœαž·αž’αžΈαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž–αŸ’αžšαŸ„αŸ‡αžœαžΆαž”αž“αŸ’αžαŸ‚αž˜αžˆαŸ’αž˜αŸ„αŸ‡αž‡αž½αžšαžˆαžš αž“αž·αž„αž”αŸ’αžšαž—αŸαž‘αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αŸ’αžšαž€αžΆαžŸαž–αž½αž€αžœαžΆαž±αŸ’αž™αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹αŸ”

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž”αžŠαž·αžŸαŸαž’αž‡αž½αžšαžˆαžšαžαŸ’αž˜αžΈ αž¬αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž˜αž·αž“αž†αž”αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™αžαžΆαžšαžΆαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αžαžΆαž˜αžšαž™αŸˆαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹ αž“αž·αž„αžšαž€αŸ’αžŸαžΆαž”αžΆαž“αž“αžΌαžœαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžαŸ’αž–αžŸαŸ‹αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž’αŸ’αž“αž€αžœαž·αž—αžΆαž‚ αž“αž·αž„αžœαž·αžŸαŸ’αžœαž€αžšαž’αžΆαž…αž‡αžΏαž‡αžΆαž€αŸ‹αž”αžΆαž“αžαžΆαž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž˜αžΆαž“αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž”αŸ†αž•αž»αžαž“αŸƒαž—αžΆαž–αžŸαž»αž…αžšαž·αž αžŠαŸ„αž™αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αžœαžΆαž±αŸ’αž™αž”αžΆαž“αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αž“αž·αž„αž…αŸ’αž”αžΆαžŸαŸ‹αž›αžΆαžŸαŸ‹ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž–αž½αž€αž‚αŸαž’αŸ’αžœαžΎαž€αžΆαžšαžŸαž˜αŸ’αžšαŸαž…αž…αž·αžαŸ’αžαž’αžΆαž‡αžΈαžœαž€αž˜αŸ’αž˜αž€αžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžŸαžΎαžšαž‘αžΎαž„αŸ”

αž˜αŸ‰αŸ’αž™αžΆαž„αžœαž·αž‰αž‘αŸ€αž αž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸαž”αŸ†αž–αŸαž‰αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž’αŸ’αžœαžΎαž±αŸ’αž™αžŸαžΆαž˜αž‰αŸ’αž‰ αž…αŸ„αž‘αž”αŸ’αžšαž€αžΆαž“αŸ‹ αž€αžΆαžšαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αŸ” αž™αŸ‰αžΆαž„αžŽαžΆαž˜αž·αž‰ αžœαžΆαž˜αž·αž“αž‚αž½αžšαž–αž·αž”αžΆαž€αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž‡αž½αžšαžˆαžšαž‘αŸαŸ”

αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžŠαŸ„αž™αž”αž„αŸ’αžαŸ†αž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‚αžΊ yang αžŠαŸ‚αž›αž€αžΆαžšαžœαž·αžœαžαŸ’αžαž“αŸƒαž‚αŸ’αžšαŸ„αž„αž€αžΆαžšαžŽαŸαž‚αžΊ yin αŸ” αž“αŸ…αž–αŸαž›αž”αŸ’αžšαžΎαž‡αžΆαž˜αž½αž™αž‚αŸ’αž“αžΆ αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž‘αžΆαŸ†αž„αž“αŸαŸ‡αž’αŸ’αžœαžΎαž±αŸ’αž™αž€αžΆαžšαž‘αž”αŸ‹αžŸαŸ’αž€αžΆαžαŸ‹αžŸαŸ†αž‘αŸαž„αžšαŸ†αžαžΆαž“ αž“αž·αž„αž€αžΆαžšαž›αŸƒαžαž˜αŸ’αžšαžΌαžœαžŸαž‰αŸ’αž‰αžΆαž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž‡αžΆαž„αž˜αž»αž“αŸ”

αž™αžΎαž„αž€αŸαžŸαžΌαž˜αžαŸ’αž›αŸ‚αž„αž’αŸ†αžŽαžšαž‚αž»αžŽαž…αŸ†αž–αŸ„αŸ‡ Mukul Murthy αž“αž·αž„ Pranav Anand αž…αŸ†αž–αŸ„αŸ‡αž€αžΆαžšαžšαž½αž˜αž…αŸ†αžŽαŸ‚αž€αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαž…αŸ†αž–αŸ„αŸ‡αž’αžαŸ’αžαž”αž‘αž“αŸαŸ‡αŸ”

αž’αžαŸ’αžαž”αž‘αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸ…αž€αŸ’αž“αž»αž„αžŸαŸŠαŸαžšαžΈαž“αŸαŸ‡αŸ–

αž…αžΌαž›β€‹αž‘αŸ…β€‹αž€αŸ’αž“αž»αž„β€‹αž”αžΉαž„β€‹αžŠαžΈαžŸαžŽαŸ’αžαŸˆ αž€αžΆαžšβ€‹αžŸαŸ’αžšαžΆαž™β€‹αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»β€‹αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžš

αž’αžαŸ’αžαž”αž‘β€‹αžŠαŸ‚αž›β€‹αž‘αžΆαž€αŸ‹αž‘αž„

αž€αžΆαžšαžšαŸ€αž“αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž€αž˜αŸ’αžšαž·αžαž•αž›αž·αžαž€αž˜αŸ’αž˜αž‡αžΆαž˜αž½αž™ Delta Lake

αžαžΎαž”αžΉαž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž’αŸ’αžœαžΈ?

αžŸαŸ’αžœαŸ‚αž„αž™αž›αŸ‹αž”αž“αŸ’αžαŸ‚αž˜αž’αŸ†αž–αžΈαžœαž‚αŸ’αž‚αžŸαž·αž€αŸ’αžŸαžΆ

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹